/*********************************************************************************************/
/* BlakeMedia Library
/*
/* DESC:    	BlakeMedia JavaScript library
/* AUTHOR:		Jared Williams (BlakeMedia)
/* VERSION:		2.1
/* CREATED: 	02 November 2012
/* MODIFIED:	29 November 2012
/*
/* (c) Copyright 2002-2012 BlakeMedia & MediaIQ Group PLC
/*********************************************************************************************/
var LOG_ERROR_FATAL=999,LOG_ERROR=888,LOG_WARNING=777,LOG_NOTICE=222,LOG_SYSTEM=111;var bm=function(_Options){var self=this;this.instantiated=false;this.debug=false;this.ajax=true;var _Framework="jQuery",_LocalDomain="",_LocalFile="",_CookieDomain="",_CookiePath="/",_CookiePrefix="",_Plugins=new Array(),_PluginAutoload=null;function loader(){if(typeof _Options!="undefined"){_fillVars()}self.logConsole("BlakeMedia library starting up (version "+self.about().version+")",LOG_SYSTEM,self);if(_Framework=="jQuery"){if(typeof jQuery=="undefined"){self.logConsole("jQuery failed to load!",LOG_ERROR_FATAL,self)}}if(!_LocalDomain){if("hostname" in window.location){_LocalDomain=window.location.hostname}else{_LocalDomain=/:\/\/([^\/]+)/.exec(window.location.href)[1];if(!_LocalDomain){self.logConsole("Failed to find domain!",LOG_ERROR_FATAL,self)}}}self.instantiated=true;_load()}function _fillVars(){if("domain" in _Options){_LocalDomain=_Options.domain;_CookieDomain="."+_LocalDomain}if("path" in _Options){_CookiePath=_Options.path}if("prefix" in _Options){_CookiePrefix=_Options.prefix}if("ajax" in _Options){self.ajax=_Options.ajax}if("debug" in _Options){self.debug=_Options.debug}}this.about=function(){return{name:"Library",version:"2.1",author:"Jared Williams (BlakeMedia)",datecreated:"02 Nov 2012",datemodified:"29 Nov 2012"}};function _load(){self.logConsole('"'+_LocalDomain+'" loaded',LOG_SYSTEM,self)}function _chkPluginLibReq(Version){var library=parseFloat(self.about().version);if(Version==library){return true}else{return false}}function _chkPluginBrowserReq(Browsers){if(Browsers){var browser=self.getBrowserInfo();for(i=0;i<Browsers.length;i++){var req=Browsers[i];if("name" in req){if(browser.name!=req.name){return false}}if("vendor" in req){if(browser.vendor!=req.vendor){return false}}if("version" in req){if(parseFloat(browser.version)<parseFloat(req.version)){return false}}}}return true}this.loadPlugin=function(Name,Params,Refname){var newparams=self.convertObjToStr(Params);if(Refname){var varname=Refname;var as=' as "'+varname+'"'}else{var varname=Name;var as=""}if(self.isPluginLoaded(varname)==false){eval("self."+varname+" = new "+Name+"("+newparams+");");var plugin=eval("self."+varname+""),pluginabout=plugin.about(),pluginvers=parseFloat(pluginabout.library).toFixed(1),pluginbrows=pluginabout.browser;_Plugins[Name]=plugin;self.logConsole('Loaded plugin "'+Name+'"'+as,LOG_SYSTEM,self);if(!_chkPluginLibReq(pluginvers)){self.logConsole("Plugin may be incompatible with this library! (requires: "+pluginvers+")",LOG_WARNING,self)}if(!_chkPluginBrowserReq(pluginbrows)){self.logConsole("Plugin may be incompatible with this browser!",LOG_WARNING,self)}return true}else{self.logConsole('Plugin "'+Name+'" already loaded as "'+varname+'"!',LOG_ERROR,self)}return false};this.unloadPlugin=function(Name){if(self.isPluginLoaded(Name)==false){eval("self."+Name+" = null;");for(var key in _Plugins){if(key==Name){_Plugins.splice(key,1)}}self.logConsole('Unloaded plugin "'+Name+'"',LOG_SYSTEM,self);return true}else{self.logConsole('Cannot unload plugin "'+Name+'" (not loaded)!',LOG_ERROR,self)}return false};this.isPluginLoaded=function(Name){var pluginvar=eval("self."+Name+"");if(typeof pluginvar=="undefined"){return false}else{return true}};this.outputPluginInfo=function(Name){var plugins=new Array();if(Name){plugins[plugins.length]=Name}else{for(var key in _Plugins){plugins[plugins.length]=key}}for(i=0;i<plugins.length;i++){eval("var plugin = self."+plugins[i]+";");if(plugin){plugin=plugin.about();self.logConsole('"'+plugin.description+'" (vers '+plugin.version+" for lib "+plugin.library+") by "+plugin.author+"",LOG_NOTICE,plugin.name)}else{self.logConsole('Plugin "'+Name+'" not found!',LOG_ERROR,self)}}};this.fireEvent=function(Name,Data,Catcher){if(self.ajax){var query={},extra="";if(typeof Name=="string"&&Name!=""){if(typeof Catcher=="undefined"){Catcher=self.catchEventResponse}if(typeof Data=="string"){query=$('FORM[name="'+Data+'"]').find("INPUT, TEXTAREA, SELECT").serializeJSON();extra=" (with form)";if(!query){query=$(Data).find("INPUT, TEXTAREA, SELECT").serializeJSON();extra=" (with form inputs)"}if(!query){query=Data;extra=" (with a string)"}}else{if(typeof Data=="object"){query=Data;extra=" (with data)"}}$.ajax({type:"POST",url:document.URL,data:{ajax:{name:Name,data:query}},success:Catcher,error:function(Response,Reason){self.logConsole('Failed to respond to event "'+Name+'"! Reason: '+Reason,LOG_ERROR,"AJAX")}});self.logConsole('Fired event "'+Name+'"'+extra,LOG_NOTICE,"AJAX");return true}else{self.logConsole("Tried to fire event with no event name!",LOG_ERROR,"AJAX");return false}}else{self.logConsole("Tried to fire event with AJAX disabled",LOG_NOTICE,"AJAX")}};this.catchEventResponse=function(Response,Status){if(Response&&Status=="success"){if(typeof Response.error=="undefined"){if("actions" in Response){var actionscount=Response.actions.length}else{var actionscount=0}self.logConsole('Received response for "'+Response.name+'" ('+actionscount+" action(s))",LOG_NOTICE,"AJAX");if("actions" in Response){$.each(Response.actions,function(key,action){var badaction=false;if(action.data){if(action.element){var elem=$("#"+action.element);if(elem.length){switch(action.property){case"HTML":case"innerHTML":switch(action.action){case"assign":elem.html(action.data);break;case"append":elem.append(action.data);break;default:badaction=true}break;case"class":switch(action.action){case"assign":elem.attr("class",action.data);break;case"add":elem.addClass(action.data);break;case"remove":elem.removeClass(action.data);break;default:badaction=true}break;case"style":switch(action.action){case"assign":elem.attr("style",action.data);break;default:badaction=true}break;default:switch(action.action){case"assign":elem.attr(action.property,action.data);break;default:badaction=true}break}}else{self.logConsole('Element "'+action.element+'" does not exist!',LOG_ERROR,"AJAX")}}else{switch(action.action){case"eval":eval(action.data);break;case"redirect":self.redirectPage(action.data);break;case"call":eval(action.data);break;case"notify":self.outputMessage(action.data.message,action.data.title,action.data.type,action.data.method);break;default:badaction=true}}if(badaction){self.logConsole('Invalid action "'+action.action+'" to perform!',LOG_ERROR,"AJAX")}}else{self.logConsole('No data to use for action "'+action.action+'"!',LOG_ERROR,"AJAX")}})}else{self.logConsole("No actions to perform",LOG_NOTICE,"AJAX")}}else{self.logConsole("Server error: "+Response.error,LOG_ERROR,"AJAX")}}else{self.logConsole("Received blank response",LOG_ERROR,"AJAX")}};this.closePage=function(){window.close();return true};this.bookmarkPage=function(){url=document.URL;title=document.title;if(window.sidebar){window.sidebar.addPanel(title,url,"")}else{if(window.external){window.external.AddFavorite(url,title)}else{if(window.opera&&window.print){return true}}}};this.printPage=function(){window.print();return true};this.scrollTop=function(){window.scroll(0,0);return true};this.redirectPage=function(URL){if(URL){window.location.replace(URL)}else{location.reload()}};this.formatCurrency=function(Value,Currency){var val=parseFloat(Value);if(!val){val=0}if(Currency){Currency=Currency.toUpperCase()}switch(Currency){case"USD":break;case"AUD":default:var formatted="$"+val.toFixed(2)}return formatted};this.convertObjToStr=function(Rawobj){var parse=function(obj){var a=[],t,objstr,returnstr,thisa,keyvalue;for(var prop in obj){if(obj.hasOwnProperty(prop)){t=obj[prop];newa=prop+": ";if(t&&typeof t=="object"){newa+="{ "+arguments.callee(t).join(", ")+" }"}else{if(typeof t=="string"){newa+='"'+t.toString()+'"'}else{newa+=""+t.toString()}}a.push(newa)}}return a};var str=parse(Rawobj);return"{ "+str.join(", ")+"}"};this.randNum=function(From,To){var number=From+Math.floor(Math.random()*To);return number};this.decodeRot13=function(Str){var b=[],c,i=Str.length;function rot(t,u,v){return String.fromCharCode(((t-u+v)%(v*2))+u)}a="a".charCodeAt(),z=a+26,A="A".charCodeAt(),Z=A+26;while(i--){c=Str.charCodeAt(i);if(c>=a&&c<z){b[i]=rot(c,a,13)}else{if(c>=A&&c<Z){b[i]=rot(c,A,13)}else{b[i]=Str.charAt(i)}}}return b.join("")};this.getBrowserInfo=function(){var userAgent=navigator.userAgent.toLowerCase(),browser={};$.browser.chrome=/chrome/.test(navigator.userAgent.toLowerCase());if($.browser.msie){userAgent=$.browser.version;userAgent=userAgent.substring(0,userAgent.indexOf("."));browser.version=userAgent;browser.name="Internet Explorer";browser.vendor="Trident"}if($.browser.chrome){userAgent=userAgent.substring(userAgent.indexOf("chrome/")+7);userAgent=userAgent.substring(0,userAgent.indexOf("."));browser.version=userAgent;$.browser.safari=false;browser.name="Chrome";browser.vendor="Webkit"}if($.browser.safari){userAgent=userAgent.substring(userAgent.indexOf("safari/")+7);userAgent=userAgent.substring(0,userAgent.indexOf("."));browser.version=userAgent;browser.name="Safari";browser.vendor="Webkit"}if($.browser.mozilla){if(navigator.userAgent.toLowerCase().indexOf("firefox")!=-1){userAgent=userAgent.substring(userAgent.indexOf("firefox/")+8);userAgent=userAgent.substring(0,userAgent.indexOf("."));browser.version=userAgent;browser.name="Firefox";browser.vendor="Gecko"}else{browser.name="Mozilla (not Firefox)"}}if($.browser.opera){userAgent=userAgent.substring(userAgent.indexOf("version/")+8);userAgent=userAgent.substring(0,userAgent.indexOf("."));browser.version=userAgent;browser.name="Opera"}return browser};this.browser=function(){return self.getBrowserInfo()};this.outputMessage=function(Message,Title,Type,Method){if(Message){if(!Method){Method="stacker"}switch(Method){case"stacker":if(self.isPluginLoaded("stacker")){return self.stacker.push(Title,Message)}case"modal":case"ui":if(self.isPluginLoaded("ui")){return self.ui.showModal({content:Message})}case"alert":default:if(Title){title=Title+": "}return alert(title+Message)}}else{self.logConsole("No message to output!",LOG_WARNING)}};this.logConsole=function(Message,Priority,Caller,OutputMsg){if(!Message){Message="No message was provided"}switch(Priority){case LOG_ERROR_FATAL:Message="### FATAL ERROR: "+Message+" ###";break;case LOG_ERROR:Message="## ERROR: "+Message+" ##";break;case LOG_WARNING:Message="# WARNING: "+Message+" #";break;case LOG_NOTICE:case LOG_SYSTEM:Message=""+Message+"";break}if(OutputMsg!=false){switch(Priority){case LOG_ERROR_FATAL:self.outputMessage("A fatal error occurred! Please report this immediately.","Fatal Error","error");break}}if(Caller){if(typeof Caller=="string"){var caller=Caller}else{if(typeof Caller=="object"){var caller=Caller.about().name}}}else{var caller="Page"}caller="["+caller+"]";while(caller.length<20){caller+=" "}Message=caller+Message;if(!window.console){var newconsole=function(){this.log=function(Msg){}};window.console=new newconsole()}if(self.debug==true){console.log(""+Message+"")}};loader()};$.fn.serializeJSON=function(){var b={};$.map($(this).serializeArray(),function(d,c){b[d.name]=d.value});return b};$.fn.pwidth=function(){return parseFloat((parseFloat($(this).outerWidth())/parseFloat($(this).parent().outerWidth())*100).toFixed(2))};