var MANDRAKE=window.MANDRAKE||{};(function(MANDRAKE){document.body.className+=" js-enabled";var queue=[];MANDRAKE.queue=function(){for(var i=-1,func;func=arguments[++i];){queue[queue.length]=func;}};MANDRAKE.unqueue=function(){var func;while(queue!=null&&(func=queue.shift())){func();}
for(var i=(queue!=null)?queue.length-1:-1;i>=0;i--){queue[i]=null;}
queue=null;};}(MANDRAKE));;(function(global){var sSTRING="string",sHEAD="head",sBODY="body",sSCRIPT="script",sREADYSTATE="readyState",sPRELOADDONE="preloaddone",sLOADTRIGGER="loadtrigger",sSRCURI="srcuri",sPRELOAD="preload",sCOMPLETE="complete",sDONE="done",sWHICH="which",sONREADYSTATECHANGE="onreadystatechange",sONLOAD="onload",sHASOWNPROPERTY="hasOwnProperty",nNULL=null,bTRUE=true,bFALSE=false,oDOC=global.document,oDOCLOC=oDOC.location,oACTIVEX=global.ActiveXObject,fSETTIMEOUT=global.setTimeout,fCLEARTIMEOUT=global.clearTimeout,fGETELEMENTSBYTAGNAME=function(tn){return oDOC.getElementsByTagName(tn);},fOBJTOSTRING=Object.prototype.toString,fNOOP=function(){},append_to={},all_scripts={},PAGEROOT=/^[^?#]*\//.exec(oDOCLOC.href)[0],DOCROOT=/^\w+\:\/\/\/?[^\/]+/.exec(PAGEROOT)[0],docScripts=fGETELEMENTSBYTAGNAME(sSCRIPT),is_opera=global.opera&&fOBJTOSTRING.call(global.opera)=="[object Opera]",is_gecko=(function(o){o[o]=o+"";return o[o]!=o+"";})(new String("__count__")),global_defs={cache:!(is_gecko||is_opera),order:is_gecko||is_opera,xhr:bTRUE,dupe:bTRUE,preserve:bFALSE,base:"",which:sHEAD};global_defs[sPRELOAD]=bTRUE;append_to[sHEAD]=fGETELEMENTSBYTAGNAME(sHEAD);append_to[sBODY]=fGETELEMENTSBYTAGNAME(sBODY);function isFunc(func){return fOBJTOSTRING.call(func)==="[object Function]";}
function canonicalScriptURI(src,base_path){var regex=/^\w+\:\/\//,ret;if(typeof src!==sSTRING)src="";if(typeof base_path!==sSTRING)base_path="";ret=(regex.test(src)?"":base_path)+src;return((regex.test(ret)?"":(ret.charAt(0)==="/"?DOCROOT:PAGEROOT))+ret);}
function sameDomain(src){return(canonicalScriptURI(src).indexOf(DOCROOT)===0);}
function scriptTagExists(uri){var i=0,script;while(script=docScripts[i++]){if(typeof script.src===sSTRING&&uri===canonicalScriptURI(script.src)&&script.getAttribute("rel")!==sPRELOAD)return bTRUE;}
return bFALSE;}
function engine(queueExec,opts){queueExec=!(!queueExec);if(opts==nNULL)opts=global_defs;var ready=bFALSE,_use_preload=queueExec&&opts[sPRELOAD],_use_cache_preload=_use_preload&&opts.cache,_use_script_order=_use_preload&&opts.order,_use_xhr_preload=_use_preload&&opts.xhr,_auto_wait=opts.preserve,_which=opts.which,_base_path=opts.base,waitFunc=fNOOP,scripts_loading=bFALSE,publicAPI,first_pass=bTRUE,scripts={},exec=[],end_of_chain_check_interval=null;_use_preload=_use_cache_preload||_use_xhr_preload||_use_script_order;function isScriptLoaded(elem,scriptentry){if((elem[sREADYSTATE]&&elem[sREADYSTATE]!==sCOMPLETE&&elem[sREADYSTATE]!=="loaded")||scriptentry[sDONE]){return bFALSE;}
elem[sONLOAD]=elem[sONREADYSTATECHANGE]=nNULL;return bTRUE;}
function handleScriptLoad(elem,scriptentry,skipReadyCheck){skipReadyCheck=!(!skipReadyCheck);if(!skipReadyCheck&&!(isScriptLoaded(elem,scriptentry)))return;scriptentry[sDONE]=bTRUE;for(var key in scripts){if(scripts[sHASOWNPROPERTY](key)&&!(scripts[key][sDONE]))return;}
ready=bTRUE;waitFunc();}
function loadTriggerExecute(scriptentry){if(isFunc(scriptentry[sLOADTRIGGER])){scriptentry[sLOADTRIGGER]();scriptentry[sLOADTRIGGER]=nNULL;}}
function handleScriptPreload(elem,scriptentry){if(!isScriptLoaded(elem,scriptentry))return;scriptentry[sPRELOADDONE]=bTRUE;fSETTIMEOUT(function(){append_to[scriptentry[sWHICH]][0].removeChild(elem);loadTriggerExecute(scriptentry);},0);}
function handleXHRPreload(xhr,scriptentry){if(xhr[sREADYSTATE]===4){xhr[sONREADYSTATECHANGE]=fNOOP;scriptentry[sPRELOADDONE]=bTRUE;fSETTIMEOUT(function(){loadTriggerExecute(scriptentry);},0);}}
function createScriptTag(scriptentry,src,type,charset,rel,onload,scriptText){fSETTIMEOUT(function(){if(append_to[scriptentry[sWHICH]][0]===nNULL){fSETTIMEOUT(arguments.callee,25);return;}
var scriptElem=oDOC.createElement(sSCRIPT),fSETATTRIBUTE=function(attr,val){scriptElem.setAttribute(attr,val);};fSETATTRIBUTE("type",type);fSETATTRIBUTE("rel",rel);if(typeof charset===sSTRING)fSETATTRIBUTE("charset",charset);if(isFunc(onload)){scriptElem[sONLOAD]=scriptElem[sONREADYSTATECHANGE]=function(){onload(scriptElem,scriptentry);};fSETATTRIBUTE("src",src);}
append_to[scriptentry[sWHICH]][0].appendChild(scriptElem);if(typeof scriptText===sSTRING){scriptElem.text=scriptText;handleScriptLoad(scriptElem,scriptentry,bTRUE);}},0);}
function loadScriptElem(scriptentry,src,type,charset){all_scripts[scriptentry[sSRCURI]]=bTRUE;createScriptTag(scriptentry,src,type,charset,"",handleScriptLoad);}
function loadScriptCache(scriptentry,src,type,charset){var args=arguments;if(first_pass&&scriptentry[sPRELOADDONE]==nNULL){scriptentry[sPRELOADDONE]=bFALSE;createScriptTag(scriptentry,src,"text/html",charset,sPRELOAD,handleScriptPreload);}
else if(!first_pass&&scriptentry[sPRELOADDONE]!=nNULL&&!scriptentry[sPRELOADDONE]){scriptentry[sLOADTRIGGER]=function(){loadScriptCache.apply(nNULL,args);};}
else if(!first_pass){loadScriptElem.apply(nNULL,args);}}
function loadScriptXHR(scriptentry,src,type,charset){var args=arguments,xhr;if(first_pass&&scriptentry[sPRELOADDONE]==nNULL){scriptentry[sPRELOADDONE]=bFALSE;xhr=scriptentry.xhr=(oACTIVEX?new oACTIVEX("Microsoft.XMLHTTP"):new global.XMLHttpRequest());xhr[sONREADYSTATECHANGE]=function(){handleXHRPreload(xhr,scriptentry);};xhr.open("GET",src);xhr.send("");}
else if(!first_pass&&scriptentry[sPRELOADDONE]!=nNULL&&!scriptentry[sPRELOADDONE]){scriptentry[sLOADTRIGGER]=function(){loadScriptXHR.apply(nNULL,args);};}
else if(!first_pass){all_scripts[scriptentry[sSRCURI]]=bTRUE;createScriptTag(scriptentry,src,type,charset,"",nNULL,scriptentry.xhr.responseText);scriptentry.xhr=nNULL;}}
function loadScript(o){if(o.allowDup==nNULL)o.allowDup=opts.dupe;var src=o.src,type=o.type,charset=o.charset,allowDup=o.allowDup,src_uri=canonicalScriptURI(src,_base_path),scriptentry,same_domain=sameDomain(src_uri);if(typeof type!==sSTRING)type="text/javascript";if(typeof charset!==sSTRING)charset=nNULL;allowDup=!(!allowDup);if(!allowDup&&((all_scripts[src_uri]!=nNULL)||(first_pass&&scripts[src_uri])||scriptTagExists(src_uri))){if(scripts[src_uri]!=nNULL&&scripts[src_uri][sPRELOADDONE]&&!scripts[src_uri][sDONE]&&same_domain){handleScriptLoad(nNULL,scripts[src_uri],bTRUE);}
return;}
if(scripts[src_uri]==nNULL)scripts[src_uri]={};scriptentry=scripts[src_uri];if(scriptentry[sWHICH]==nNULL)scriptentry[sWHICH]=_which;scriptentry[sDONE]=bFALSE;scriptentry[sSRCURI]=src_uri;scripts_loading=bTRUE;if(!_use_script_order&&_use_xhr_preload&&same_domain)loadScriptXHR(scriptentry,src_uri,type,charset);else if(!_use_script_order&&_use_cache_preload)loadScriptCache(scriptentry,src_uri,type,charset);else loadScriptElem(scriptentry,src_uri,type,charset);}
function onlyQueue(execBody){exec.push(execBody);}
function queueAndExecute(execBody){if(queueExec&&!_use_script_order)onlyQueue(execBody);if(!queueExec||_use_preload)execBody();}
function serializeArgs(args){var sargs=[],i;for(i=0;i<args.length;i++){if(fOBJTOSTRING.call(args[i])==="[object Array]")sargs=sargs.concat(serializeArgs(args[i]));else sargs[sargs.length]=args[i];}
return sargs;}
publicAPI={script:function(){fCLEARTIMEOUT(end_of_chain_check_interval);var args=serializeArgs(arguments),use_engine=publicAPI;if(_auto_wait){for(var i=0;i<args.length;i++){if(i===0){queueAndExecute(function(){loadScript((typeof args[0]===sSTRING)?{src:args[0]}:args[0]);});}
else use_engine=use_engine.script(args[i]);use_engine=use_engine.wait();}}
else{queueAndExecute(function(){for(var i=0;i<args.length;i++){loadScript((typeof args[i]===sSTRING)?{src:args[i]}:args[i]);}});}
end_of_chain_check_interval=fSETTIMEOUT(function(){first_pass=bFALSE;},5);return use_engine;},wait:function(func){fCLEARTIMEOUT(end_of_chain_check_interval);first_pass=bFALSE;if(!isFunc(func))func=fNOOP;var e=engine(bTRUE,opts),triggerNextChain=e.trigger,wfunc=function(){try{func();}catch(err){}triggerNextChain();};delete e.trigger;var fn=function(){if(scripts_loading&&!ready)waitFunc=wfunc;else fSETTIMEOUT(wfunc,0);};if(queueExec&&!scripts_loading)onlyQueue(fn);else queueAndExecute(fn);return e;}};publicAPI.block=publicAPI.wait;if(queueExec){publicAPI.trigger=function(){var i=0,fn;while(fn=exec[i++])fn();exec=[];};}
return publicAPI;}
function processOpts(opts){var k,newOpts={},boolOpts={"UseCachePreload":"cache","UseLocalXHR":"xhr","UsePreloading":sPRELOAD,"AlwaysPreserveOrder":"preserve","AllowDuplicates":"dupe"},allOpts={"AppendTo":"which","BasePath":"base"};for(k in boolOpts)allOpts[k]=boolOpts[k];newOpts.order=!(!global_defs.order);for(k in allOpts){if(allOpts[sHASOWNPROPERTY](k)&&global_defs[allOpts[k]]!=nNULL)newOpts[allOpts[k]]=(opts[k]!=nNULL)?opts[k]:global_defs[allOpts[k]];}
for(k in boolOpts){if(boolOpts[sHASOWNPROPERTY](k))newOpts[boolOpts[k]]=!(!newOpts[boolOpts[k]]);}
if(!newOpts[sPRELOAD])newOpts.cache=newOpts.order=newOpts.xhr=bFALSE;newOpts.which=(newOpts.which===sHEAD||newOpts.which===sBODY)?newOpts.which:sHEAD;return newOpts;}
global.$LAB={setGlobalDefaults:function(gdefs){global_defs=processOpts(gdefs);},setOptions:function(opts){return engine(bFALSE,processOpts(opts));},script:function(){return engine().script.apply(nNULL,arguments);},wait:function(){return engine().wait.apply(nNULL,arguments);}};global.$LAB.block=global.$LAB.wait;(function(addEvent,domLoaded,handler){if(oDOC[sREADYSTATE]==nNULL&&oDOC[addEvent]){oDOC[sREADYSTATE]="loading";oDOC[addEvent](domLoaded,handler=function(){oDOC.removeEventListener(domLoaded,handler,bFALSE);oDOC[sREADYSTATE]=sCOMPLETE;},bFALSE);}})("addEventListener","DOMContentLoaded");})(window);
