var mojo={Version:"0.1b"};dojo.provide("mojo.command.Behavior");dojo.declare("mojo.command.Behavior",null,{_requestObj:null,getRequest:function(){if(!this._requestObj){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Behavior - requestObj not set")}}return this._requestObj},_execute:function(B){this._requestObj=B;if(typeof (B.update)=="function"){B.update()}if(!this._requestObj){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Behavior - requestObj not set")}}else{if(!this._requestObj.callerObj){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Behavior - callerObj not set")}}}if(djConfig&&djConfig.isDebug){try{return this.execute(B)}catch(A){console.debug("EXCEPTION: "+A.message+" in mojo.command.Behavior.execute() for command: "+B.commandName+", controller: "+B.controllerName)}}else{return this.execute(B)}},execute:function(A){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Behavior - execute() not implemented")}}});dojo.provide("mojo.command.Command");dojo.declare("mojo.command.Command",null,{_requestObj:null,getRequest:function(){if(!this._requestObj){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Command - requestObj not set")}}return this._requestObj},_execute:function(B){this._requestObj=B;if(typeof (B.update)=="function"){B.update()}if(djConfig&&djConfig.isDebug){try{return this.execute(B)}catch(A){console.debug("EXCEPTION: "+A.message+" in mojo.command.Command.execute() for command: "+B.commandName+", controller: "+B.controllerName)}}else{return this.execute(B)}},execute:function(A){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Command - execute() not implemented")}},onResponse:function(A){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Command - onResponse() not implemented")}},onError:function(A){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Command - onError() not implemented")}}});dojo.provide("mojo.command.Rule");dojo.declare("mojo.command.Rule",null,{_requestObj:null,getRequest:function(){if(!this._requestObj){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Rule - requestObj not set")}}return this._requestObj},_execute:function(B){this._requestObj=B;if(typeof (B.update)=="function"){B.update()}if(!this._requestObj){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Rule - requestObj not set")}}else{if(!this._requestObj.callerObj){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Rule - callerObj not set")}}else{if(!this._requestObj.invocation){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Rule - invocation not set")}}}}if(djConfig&&djConfig.isDebug){try{return this.execute(B)}catch(A){console.debug("EXCEPTION: "+A.message+" in mojo.command.Rule.execute() for command: "+B.commandName+", controller: "+B.controllerName)}}else{return this.execute(B)}},execute:function(A){if(this.condition(A)){return A.invocation.proceed()}},condition:function(A){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.command.Rule - condition() not implemented")}}});if(!dojo._hasResource["mojo.component.Template"]){dojo._hasResource["mojo.component.Template"]=true;dojo.provide("mojo.component.Template");dojo.require("dijit.dijit");dojo.require("dijit._Widget");dojo.require("dijit._Templated");dojo.require("dijit._Container");dojo.declare("mojo.component.Template",[dijit._Widget,dijit._Templated,dijit._Container],{initWithData:false,iterate:true,escapeHtml:false,escapeQuotes:false,modelSource:"",modelDependency:"",templateObj:[],templateConditions:[],_controllers:null,getModelSource:function(){return this.modelSource},getModelDependency:function(){return this.modelDependency},_modelSourceHandle:null,_modelDependencyHandle:null,setModelSource:function(A){if(this.getModelSource().length>0){if(this._modelSourceHandle){mojo.Model.removeObserver(this._modelSourceHandle)}this.modelSource=A;this._modelSourceHandle=mojo.Model.addObserver(this.modelSource,this,"onModelUpdate");this.onModelUpdate()}},setModelDependency:function(A){if(this.getModelDependency().length>0){if(this._modelDependencyHandle){mojo.Model.removeObserver(this._modelDependencyHandle)}this.modelDependency=A;this._modelDependencyHandle=mojo.Model.addObserver(this.modelDependency,this,"onModelDependencyUpdate");this.onModelDependencyUpdate()}},_getTemplateControllers:function(){var A=this.srcNodeRef.parentNode;var B=mojo.controller.Map.getInstance();while(A!=null){if(A.id&&B.getSiteMap()["#"+A.id]){return B.getSiteMap()["#"+A.id];break}A=A.parentNode}return null},buildRendering:function(){var C=mojo.query("*[dojoType=mojo.component.Template]",this.srcNodeRef);var D=C.length;for(var F=0;F<D;F++){var A=document.createTextNode("{cdata}");var E=document.createTextNode("{/cdata}");dojo.place(A,C[F],"before");dojo.place(E,C[F],"after")}var J=[];this.templateConditions=[];var I=mojo.query("> [prototype]",this.srcNodeRef);for(var F=0,B,G;F<I.length;F++){this.templateConditions[F]=I[F].getAttribute("prototype");J[F]=I[F].innerHTML;I[F].style.display="none"}if(J.length==0){J[0]=this.srcNodeRef.innerHTML}for(var F=0;F<J.length;F++){J[F]=J[F].replace(/&lt;/g,"<").replace(/&gt;/g,">");J[F]=J[F].replace(/\%21/g,"!").replace(/\%7B/g,"{").replace(/\%7D/g,"}");J[F]=this._normalize(J[F]);J[F]=TrimPath.parseTemplate(J[F],this.srcNodeRef.id+":"+F)}this.templateObj=J;var H=this.srcNodeRef.childNodes;this.initWithData=((H.length>I.length)&&I.length>0);this.hide();this.setModelDependency(this.getModelDependency());this.setModelSource(this.getModelSource())},_bindToModel:function(){var modifiers={escapeQuotes:function(str){str=str.toString();str=str.replace(/\"/g,"&#34;");str=str.replace(/\'/g,"&#39;");return str}};var sModel=this.getModelSource();if(sModel.length>0&&mojo.Model.contains(sModel)&&this.srcNodeRef){var modelData=mojo.Model.get(sModel);var result=new Array();if(!dojo.isArray(modelData)){modelData=[modelData]}var modelDataLength=modelData.length;if(!this.iterate&&modelDataLength>0){modelDataLength=1}var iActiveTemplate=0;if(modelDataLength>0&&modelData[0]!=null){with(modelData[0]){for(var i=0,len=this.templateConditions.length;i<len;i++){try{if(this.templateConditions[i].toLowerCase()=="true"||eval(this.templateConditions[i])){iActiveTemplate=i;break}}catch(e){}}}}for(var i=0;i<modelDataLength;i++){if(modelData[i]){if(typeof (modelData[i])!="object"){var tmpModelData=modelData[i].toString();modelData[i]=new Object();modelData[i].data=tmpModelData}modelData[i].currentIndex=i;if(this.escapeQuotes){}result.push(this.templateObj[iActiveTemplate].process(modelData[i]))}}if(!this._controllers){this._controllers=this._getTemplateControllers()}var templateNode=this.srcNodeRef;templateNode.innerHTML="";templateNode.innerHTML=result.join("");var inlineDijits=mojo.query("*[dojoType='mojo.component.Template']",this.srcNodeRef);var inlineDijitsLength=inlineDijits.length;var allowedAttributes=["escapeHtml","escapeQuotes","modelSource","modelDependency"];var attributeCount=allowedAttributes.length;for(var i=0;i<inlineDijitsLength;i++){var dijitParams={};var attributeAsTemplate;for(var j=0;j<attributeCount;j++){if(inlineDijits[i].getAttribute(allowedAttributes[j])){attributeValue=inlineDijits[i].getAttribute(allowedAttributes[j]);if(/[\!|\$]\{[^\}]*\}/.test(attributeValue)){attributeAsTemplate=this._normalize(attributeValue);attributeAsTemplate=TrimPath.parseTemplate(attributeAsTemplate);attributeValue=attributeAsTemplate.process(modelData[i])}dijitParams[allowedAttributes[j]]=attributeValue}}var newDijit=new mojo.component.Template(dijitParams,inlineDijits[i])}var parent=this.srcNodeRef.parentNode;while(parent!=null){if(parent.id&&dijit.byId(parent.id)){var widget=dijit.byId(parent.id);if(widget["sync"]&&typeof (widget["sync"])=="function"){widget.sync()}}parent=parent.parentNode}if(!this._controllers){this._controllers=this._getTemplateControllers()}if(this._controllers){var controllersLength=this._controllers.length;for(var i=0;i<controllersLength;i++){var controllerName=this._controllers[i].controller;mojo.Model.get("__mojoTemplateControllers")[controllerName]=true}}this.show()}else{if(!this.initWithData){this.initWithData=false;this.hide()}}},hide:function(){if(this.srcNodeRef){dojo.style(this.srcNodeRef,"display","none")}},show:function(){if(this.srcNodeRef){dojo.style(this.srcNodeRef,"display","block")}},_replacedNode:null,_normalize:function(E){var D=/[\!|\$]\{[^\}]*\}/g;var B=E.match(D);var F=E.split(D);var I=new Array();var A=0;if(B){A=B.length}for(var C=0;C<A;C++){I.push(F[C]);var H="$"+B[C].substring(1);var G="";if(this.escapeHtml){G+="|escape"}if(this.escapeQuotes){G+="|escapeQuotes"}H=H.substring(0,H.length-1)+G+"}";I.push(H)}I.push(F[A]);return I.join("")},onModelUpdate:function(){if(this.getModelDependency().length==0||this._dependencyMet){this._bindToModel()}},_dependencyMet:false,onModelDependencyUpdate:function(){if(this.getModelDependency().length>0&&mojo.Model.contains(this.getModelDependency())){this._dependencyMet=true;this.onModelUpdate()}else{this._dependencyMet=false}}})}dojo.provide("mojo.controller.Controller");dojo.declare("mojo.controller.Controller",null,{constructor:function(A){this._commands=new Array();this._tags=new Array();this._contextElementObj=A;this.addCommands();this._addObservers();this.addIntercepts();this.onInit();mojo.Messaging.subscribe("/mojo/controller/"+this.declaredClass+"/addObservers",this,"_addObservers");mojo.Messaging.subscribe("/mojo/controller/addObservers",this,"_addObservers")},_contextElementObj:null,_commands:new Array(),_queryCache:new Object(),_observers:new Object(),_tags:new Array(),getContextElement:function(){return this._contextElementObj},onInit:function(){},_addObservers:function(){this._queryCache=new Object();this._observers=new Object();this.addObservers();for(var B in this._queryCache){if(this._queryCache[B]["length"]){for(var C in this._observers[B]){if(this._observers[B][C]["length"]){for(var A=0;A<this._queryCache[B].length;A++){this._addObserver(this._queryCache[B][A],C,this._observers[B][C])}}}}}this._queryCache=new Object();this._observers=new Object()},addObservers:function(){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.controller.Controller - addObservers() not implemented")}},addObserver:function(I,E,H,F){var A=function(K){if(!dojo.isArray(K)){return false}for(var L=0,J=K.length;L<J;L++){if(typeof (K[L])!="string"){return false}}return true};if(!I){return }if(typeof (I)=="string"||A(I)){if(!dojo.isArray(I)){I=[I]}for(var D=0,G=I.length;D<G;D++){var C=I[D];if(!this._queryCache[C]){this._queryCache[C]=mojo.query(C,this.getContextElement())}if(!this._observers[C]){this._observers[C]=new Object()}if(!this._observers[C][E]){this._observers[C][E]=new Array()}var B=this._observers[C][E].length;this._observers[C][E][B]={cmdName:H,paramsObj:F}}}else{if(!dojo.isArray(I)){I=[I]}for(var D=0;D<I.length;D++){this._addObserver(I[D],E,[{cmdName:H,paramsObj:F}])}}},_addObserver:function(I,D,A){var E=this._setRequest;var H=this.getContextElement();var F=this.declaredClass;var B=new Array();for(var C=0;C<A.length;C++){if(!this._observerIsTagged(I,D,A[C])){B.push(A[C]);this._tagObserver(I,D,A[C])}}if(!I.mojoObservers){I.mojoObservers=new Object()}if(!I.mojoObservers[D]){I.mojoObservers[D.toLowerCase()]=new Array()}if(B.length>0){var G=function(K){for(var J=0;J<B.length;J++){if(typeof mojo!="undefined"){var L=E(B[J].paramsObj,I,H,K,B[J].cmdName,F);mojo.Messaging.publish("/mojo/command/"+F+"."+B[J].cmdName,[L])}}};if(["onmouseleave","onmouseenter"].indexOf(D.toLowerCase())!=-1&&MooTools&&Element.Events.mouseleave&&Element.Events.mouseenter){$(I).addEvent(D.replace("on",""),G)}else{dojo.connect(I,D,G)}I.mojoObservers[D.toLowerCase()].push(G)}},_tagObserver:function(A,E,D){if(!A.mojoObserve){A.mojoObserve=new Object()}if(!A.mojoObserve[this.declaredClass]){var F=this._tags.length;A.mojoObserve[this.declaredClass]=F;this._tags[F]=new Object()}var C=A.mojoObserve[this.declaredClass];var B=this._generateTagKey(E,D);if(this._tags[C]&&!this._tags[C][B]){this._tags[C][B]=true}},_generateTagKey:function(D,C){var B=D+"_"+C.cmdName;if(C.paramsObj){var E;if(typeof (C.paramsObj)=="function"){E=C.paramsObj.toString()}else{if(typeof (C.paramsObj)=="object"){for(var A in C.paramsObj){if(C.paramsObj[A]){E+=A+":"+C.paramsObj[A].toString()+","}}}}B+="_"+E}return B},_observerIsTagged:function(A,D,C){if(!A.mojoObserve){A.mojoObserve=new Object()}var E=false;var B=this._generateTagKey(D,C);if(A.mojoObserve[this.declaredClass]&&this._tags[A.mojoObserve[this.declaredClass]]&&this._tags[A.mojoObserve[this.declaredClass]][B]){E=true}return E},addCommands:function(){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.controller.Controller - addCommands() not implemented")}},addCommand:function(cmdName,cmdObjPath){if(!this._commands[cmdName]){this._commands[cmdName]=new Array()}var addFunc=function(cmdName,cmdObjPath,thisObj){dojo.require(cmdObjPath);var cmdObj=eval("new "+cmdObjPath+"()");thisObj._commands[cmdName].push(cmdObj);mojo.Messaging.subscribe("/mojo/command/"+thisObj.declaredClass+"."+cmdName,cmdObj,"_execute")};if(djConfig&&djConfig.isDebug){try{addFunc(cmdName,cmdObjPath,this)}catch(ex){console.debug("EXCEPTION: "+ex.message+" in mojo.controller.Controller.addCommand() for command: "+cmdName)}}else{addFunc(cmdName,cmdObjPath,this)}},getCommand:function(A){if(this._commands[A]){return this._commands[A][0]}return null},getCommandChain:function(A){if(this._commands[A]){return this._commands[A]}return null},addIntercepts:function(){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.controller.Controller - addIntercepts() not implemented")}},addIntercept:function(F,B,H,E){if(B==H){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.controller.Controller - a command cannot add advice to itself")}}else{var C=this._setRequest;var I=this.getContextElement();var D=this.declaredClass;var G=this._commands[B][0]["_execute"];var A=function(J){if(typeof mojo!="undefined"){requestObj=C(E,J.args[0].callerObj,I,J.args[0].eventObj,H,D,J);mojo.Messaging.publish("/mojo/command/"+D+"."+H,[requestObj])}};switch(F){case"before":this._commands[B][0]["_execute"]=function(){var J={args:arguments,calleeObj:this};A.apply(this,[J]);return G.apply(this,arguments)};break;case"after":this._commands[B][0]["_execute"]=function(){var J={args:arguments,calleeObj:this};G.apply(this,arguments);return A.apply(this,[J])};break;case"around":this._commands[B][0]["_execute"]=function(){var J={args:arguments,calleeObj:this};J.proceed=function(){return G.apply(this.calleeObj,this.args)};return A.apply(this,[J])};break}}},_setRequest:function(G,A,F,D,C,B,E){var H=new mojo.controller.Request(G,A,F,D,C,B,E);return H}});mojo.controller.Controller.updateObservers=function(A){if(A){mojo.Messaging.publish("/mojo/controller/"+A+"/addObservers")}else{mojo.Messaging.publish("/mojo/controller/addObservers")}};dojo.declare("mojo.controller.Request",null,{constructor:function(G,A,F,D,B,C,E){if(typeof (G)=="function"){this.paramsObj={};this._paramsFunc=G}else{if(typeof (G)=="object"){this.paramsObj=G}}this.callerObj=A;this.contextObj=F;this.eventObj=D;this.commandName=B;this.controllerName=C;this.invocation=E},_paramsFunc:null,paramsObj:null,callerObj:null,contextObj:null,eventObj:null,commandName:null,controllerName:null,invocation:null,update:function(){if(this._paramsFunc&&typeof (this._paramsFunc)=="function"){var A=this._paramsFunc(this.contextObj,this.callerObj);for(var B in A){this.paramsObj[B]=A[B]}}},getParams:function(){if(!this.paramsObj){this.update()}return this.paramsObj},getCaller:function(){return this.callerObj},getContextElement:function(){return this.contextObj},getEvent:function(){return this.eventObj},getCommandName:function(){return this.commandName},getControllerName:function(){return this.controllerName},getInvocation:function(){return this.invocation}});dojo.provide("mojo.controller.Map");var __mojoControllerMap=null;dojo.declare("mojo.controller.Map",null,{constructor:function(){mojo.Messaging.subscribe("/mojo/controller/mapControllers",this,"mapControllers")},_controllers:new Array(),_siteMap:null,getSiteMap:function(){if(!this._siteMap){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.controller.Map - siteMap not set")}}return this._siteMap},setSiteMap:function(A){this._siteMap=A},mapControllers:function(C){var B=this.getSiteMap();for(pattern in B){if(pattern.indexOf("#")==0){var A;if(C&&typeof (C)=="object"){A=mojo.queryFirst(pattern,C)}else{A=mojo.queryFirst(pattern)}if(A){if(C&&typeof (C)=="object"){this._mapControllers(B[pattern],A)}else{var F=false;var D=A.parentNode;while(D){if(dojo.hasClass(D,"dojoDialog")){F=true;break}D=D.parentNode}if(!F){this._mapControllers(B[pattern],A)}}}}else{if(C&&typeof (C)=="string"){var E=new RegExp(pattern);if(E.test(C)){this._mapControllers(B[pattern])}}}}this.onComplete()},_mapControllers:function(E,A){var B=E.length;for(var C=0;C<B;C++){var D=E[C].controller;this.mapController(D,A)}},mapController:function(controllerName,contextElementObj){if(!this._controllers[controllerName]){var mapFunc=function(controllerName,contextElementObj,thisObj){dojo.require(controllerName);if(contextElementObj){thisObj._controllers[controllerName]=eval("new "+controllerName+"(contextElementObj)")}else{thisObj._controllers[controllerName]=eval("new "+controllerName+"(null)")}};if(djConfig&&djConfig.isDebug){try{mapFunc(controllerName,contextElementObj,this)}catch(ex){console.debug("EXCEPTION: "+ex.message+" in mojo.controller.Map.mapController() for controller: "+controllerName)}}else{mapFunc(controllerName,contextElementObj,this)}}},onComplete:function(){}});mojo.controller.Map.mapControllers=function(A){mojo.Messaging.publish("/mojo/controller/mapControllers",[A])};mojo.controller.Map.getInstance=function(){if(__mojoControllerMap==null){__mojoControllerMap=new mojo.controller.Map()}return __mojoControllerMap};dojo.provide("mojo.helper.Events");mojo.fireEvent=function(B,A){var C=B.mojoObservers[A.toLowerCase()];if(C){C.forEach(function(D){D()})}};dojo.provide("mojo.helper.ObjectQuery");mojo.helper.ObjectQuery.select=function(A,C){var E=mojo.helper.ObjectQuery._createSchema(A);var B=TrimPath.makeQueryLang(E);var D=B.parseSQL(C);return D.filter(A)};mojo.helper.ObjectQuery._createSchema=function(B){var D={};if(B){if(dojo.isArray(B)){B=B[0]}for(var E in B){D[E]={};var A=B[E];if(dojo.isArray(A)){A=A[0]}for(var C in A){if(typeof (A[C]).toString().toLowerCase().indexOf("number")>-1){D[E][C]={type:"Number"}}else{D[E][C]={type:"String"}}}}}return D};dojo.provide("mojo.helper.String");mojo.toSentenceCase=function(A){return A.charAt(0).toUpperCase()+A.replace(/ \w/g,function(B){return B.toUpperCase()}).substring(1)};dojo.provide("mojo.History");var __mojoHistory=null;dojo.declare("mojo.History",null,{constructor:function(){var A=this;if(rsh.dhtmlHistory._isIE){rsh.dhtmlHistory.init();dojo.connect(rsh.dhtmlHistory,"_fireHistoryEvent",function(B){A.setHash(B);A._execute()})}else{this._interval=window.setInterval(function(){A._execute()},100);A._execute()}},_interval:null,_defaultHash:"",_savedHash:"",_paramsObj:null,_topic:null,getHash:function(){var A=window.location.hash;if(A.length>0){A=A.substring(1)}if(A.toLowerCase()=="null"||A.toLowerCase()=="undefined"){A=""}return A},setHash:function(A){window.location.hash=A},setDefault:function(A){if(typeof (A)=="string"){this._defaultHash=A}else{if(typeof (A)=="object"){this._defaultHash=this._parseObj(A)}}this._execute()},_execute:function(){var A=this.getHash();if(A.length==0&&this._defaultHash.length>0){A=this._defaultHash}if(this._savedHash!=A){document.title=document.title.replace(window.location.hash,"");this._savedHash=A;this._paramsObj=this._parseHash(this._savedHash);this._topic=this._paramsObj["topic"];this.onChange();if(this._topic){mojo.Messaging.publish(this._topic,this._paramsObj)}}},_parseHash:function(D){var C=new Object();var B=D.split("&");for(var A=0;A<B.length;A++){var E=B[A].split("=");if(E.length==2){C[E[0]]=unescape(E[1])}}return C},_parseObj:function(C){var B="";for(var A in C){B+=A+"="+escape(C[A].toString())+"&"}return B},onChange:function(){},getParams:function(){return this._paramsObj},getTopic:function(){return this._topic}});mojo.History.getInstance=function(){if(__mojoHistory==null){__mojoHistory=new mojo.History()}return __mojoHistory};dojo.provide("mojo.*");dojo.provide("mojo.Messaging");var __mojoMessagingTopics=new Array();mojo.Messaging.publish=function(B,C){var A=mojo.Messaging.getTopic(B);A.setMessage(C);A.onPublish(C);dojo.publish(B,C);A.setMessage(null)};mojo.Messaging.subscribe=function(A,B,C){mojo.Messaging.getTopic(A);return dojo.subscribe(A,B,C)};mojo.Messaging.unsubscribe=function(A){dojo.unsubscribe(A)};mojo.Messaging.getTopic=function(A){if(!__mojoMessagingTopics[A]){__mojoMessagingTopics[A]=new mojo.MessagingTopic(A)}return __mojoMessagingTopics[A]};dojo.declare("mojo.MessagingTopic",null,{constructor:function(A){this._topic=A},_topic:null,_messageObj:null,getTopic:function(){return this._topic},getMessage:function(){return this._messageObj},setMessage:function(A){this._messageObj=A},onPublish:function(){}});dojo.provide("mojo.Model");var __mojoModel=new Array();var __mojoModelReferences=new Array();mojo.Model.set=function(A,B){__mojoModel[A]=B;mojo.Model.notify(A)};mojo.Model.add=function(B,D){if(mojo.Model.contains(B)){if(!dojo.isArray(__mojoModel[B])){var C=__mojoModel[B];__mojoModel[B]=new Array();__mojoModel[B].push(C)}if(dojo.isArray(D)){for(var A=0;A<D.length;A++){__mojoModel[B].push(D[A])}}else{__mojoModel[B].push(D)}mojo.Model.notify(B)}else{mojo.Model.set(B,D)}};mojo.Model.get=function(B){var A=__mojoModel[B];if(A){return A}else{if(djConfig&&djConfig.isDebug){console.debug('WARNING mojo.Model - No entry found for "'+B+'" key')}}};mojo.Model.getReference=function(A){if(!__mojoModelReferences[A]){__mojoModelReferences[A]=new mojo.ModelReference(A)}return __mojoModelReferences[A]};mojo.Model.remove=function(A){__mojoModel[A]=null;mojo.Model.notify(A)};mojo.Model.contains=function(B){var A=__mojoModel[B];if(A){return true}return false};mojo.Model.notify=function(A){__mojoModel["__mojoTemplateControllers"]={};var B=mojo.Model.getReference(A);B.onNotify();mojo.Messaging.publish("/mojo/model/"+A);for(var C in __mojoModel["__mojoTemplateControllers"]){mojo.controller.Controller.updateObservers(C)}};mojo.Model.addObserver=function(B,A,C){return mojo.Messaging.subscribe("/mojo/model/"+B,A,C)};mojo.Model.removeObserver=function(A){mojo.Messaging.unsubscribe(A)};dojo.declare("mojo.ModelReference",null,{constructor:function(A){this._key=A},_key:null,getKey:function(){return this._key},getValue:function(){return mojo.Model.get(this._key)},setValue:function(A){mojo.Model.set(this._key,A)},onNotify:function(){}});dojo.provide("mojo.query");mojo.query=function(D,B){if(B&&(typeof B=="string"||typeof B=="object")){var C=dojo.query(D,B)}else{if((new RegExp(/^\#[a-zA-Z0-9\-\_]*$/)).test(D)){var A=document.getElementById(D.substring(1));if(A){var C=[A]}else{var C=[]}}else{var C=dojo.query(D)}}return C};mojo.queryFirst=function(C,A){var B=mojo.query(C,A);if(B.length>0){return B[0]}return null};mojo.distinct=function(E){if(E.length==0){return E}var C=[],F;for(var B=0,A=E.length;B<A;B++){if(!(F=E[B])._counted){F._counted=true;C.push(F)}}for(var B=0,D;D=C[B];B++){D._counted=undefined}return C};dojo.provide("mojo.service.Delegate");dojo.declare("mojo.service.Delegate",null,{constructor:function(A){this._callerObj=A},_callerObj:null,getCaller:function(){return this._callerObj},setCaller:function(A){this._callerObj=A}});dojo.provide("mojo.service.Locator");var __mojoServiceRegistry=new Array();dojo.declare("mojo.service.Locator",null,{constructor:function(){if(__mojoServiceRegistry.length==0){this.addServices()}},addServices:function(){if(djConfig&&djConfig.isDebug){console.debug("ERROR mojo.service.Locator - addServices() not implemented")}},addService:function(A){__mojoServiceRegistry[A.getName()]=A},getService:function(A){return __mojoServiceRegistry[A]}});dojo.provide("mojo.service.Service");dojo.declare("mojo.service.Service",null,{constructor:function(A,B,C){this.setName(A);this.setUri(B);this.setParams(C)},_name:"",_uri:"",_params:new Object(),getName:function(){return this._name},setName:function(A){this._name=A},getUri:function(){return this._uri},setUri:function(A){this._uri=A},getParams:function(){return this._paramsObj},setParams:function(A){if(A){this._paramsObj=A}},invoke:function(L,E){var A=TrimPath.parseTemplate(this.getUri()).process(L);if(L&&L["_MODIFIERS"]&&L["defined"]){delete L["_MODIFIERS"];delete L["defined"]}var M=false;if(this.getParams()&&this.getParams().json!=null){M=this.getParams().json}var D="GET";if(this.getParams()&&this.getParams().method){D=this.getParams().method}else{if(this.getName().toLowerCase().indexOf("add")==0){D="POST"}else{if(this.getName().toLowerCase().indexOf("update")==0){D="PUT"}else{if(this.getName().toLowerCase().indexOf("delete")==0){D="DELETE"}}}}var B=false;if(this.getParams()&&this.getParams().cache!=null){B=this.getParams().cache}else{if(D.toUpperCase()=="GET"){B=true}}var I=0;if(this.getParams()&&this.getParams().cacheExpiry!=null){I=this.getParams().cacheExpiry}var C=0;if(this.getParams()&&this.getParams().retry){C=this.getParams().retry}else{if(D.toUpperCase()=="GET"){C=1}}var N=false;if(this.getParams()&&this.getParams().hijax){N=this.getParams().hijax}if(N&&E.getRequest()&&E.getRequest().callerObj&&E.getRequest().callerObj.tagName=="A"){A=E.getRequest().callerObj.href}var K=0;var H=this.getName();for(var Q in L){if(typeof (L[Q])!="function"){H+=L[Q]}}var J=function(S,R){var U=new Array();if(R){S.code=R.status;U.push(S)}if(typeof (S)=="string"){var T=S;S=new Object();S.message=T}if(S.name){S.code=S.name;U.push(S)}if(S.errors){U=S.errors}if(S.error){U.push(S.error)}if(U[0]["redirectUrl"]){window.location.replace(U[0]["redirectUrl"])}if(R&&C>=K){P()}else{E.onError(U)}};var G=this;var P=function(){return dojo["xhr"+mojo.toSentenceCase(D.toLowerCase())]({url:A,preventCache:(!B&&D=="GET"),handleAs:M?"json":"text",content:L,load:function(S,R){K++;if(R.handleAs=="json"){try{if(S.error||S.errors){J(S)}else{if(B){G._setCache(H,S,I)}E.onResponse(S,R.args.content)}}catch(T){J(T)}}else{if(B){G._setCache(H,S,I)}E.onResponse(S,R.args.content)}},error:function(S,R){K++;J(S,R.xhr)}})};var F;if(B){F=this._getCache(H)}if(F){E.onResponse(F.data,L)}else{var O=P()}return O},_setCache:function(A,D,C){var B=0;if(C>0){B=(new Date()).getTime()+(C*1000)}mojo.Model.set(A,{data:D,expiryTime:B})},_getCache:function(C){var A=null;if(mojo.Model.contains(C)){A=mojo.Model.get(C);var B=(new Date()).getTime();if(A.expiryTime>0&&B>A.expiryTime){mojo.Model.remove(C);A=null}}return A}});dojo.provide("extLib.trimpath.query");if(typeof (TrimPath)=="undefined"){TrimPath={}}(function(){var theEval=eval;var theString=String;var theArray=Array;if(TrimPath==null){TrimPath=new Object()}if(TrimPath.TEST==null){TrimPath.TEST=new Object()}var arrayUniq=function(arr){var result=[];for(var i=0;i<arr.length;i++){if(arrayInclude(result,arr[i])==false){result.push(arr[i])}}return result};var arrayInclude=function(arr,val){for(var j=0;j<arr.length;j++){if(arr[j]==val){return true}}return false};var arrayCompact=function(arr){var result=[];for(var i=0;i<arr.length;i++){if(arr[i]!=null){result.push(arr[i])}}return result};var simpleJson=function(fields,values){var json=["{"];for(var i=0;i<fields.length;i++){if(i>0){json.push(",")}json.push(fields[i]);json.push(":");if(values[i]){json.push('"');json.push(values[i].replace(/(["\\])/g,"\\$1").replace(/\r/g,"").replace(/\n/g,"\\n"));json.push('"')}else{json.push(null)}}json.push("}");return json.join("")};var hashKeys=function(object){var keys=[];for(var property in object){keys.push(property)}return keys};var hashValues=function(object){var values=[];for(var property in object){values.push(object[property])}return values};var strip=function(str){return str.replace(/^\s+/,"").replace(/\s+$/,"")};TrimPath.makeQueryLang_etc={};TrimPath.makeQueryLang_etc.Error=function(message,stmt){this.message=message;this.stmt=stmt};TrimPath.makeQueryLang_etc.Error.prototype.toString=function(){return("TrimPath query Error in "+(this.stmt!=null?this.stmt:"[unknown]")+": "+this.message)};var TODO=function(){throw"currently unsupported"};var USAGE=function(){throw"incorrect keyword usage"};var QueryLang=function(){};TrimPath.makeQueryLang=function(tableInfos,etc){if(etc==null){etc=TrimPath.makeQueryLang_etc}var aliasArr=[];var aliasReg=function(aliasKey,scope,obj){if(scope[aliasKey]!=null){throw new etc.Error("alias redefinition: "+aliasKey)}aliasArr.push({aliasKey:aliasKey,scope:scope,orig:scope[aliasKey]});scope[aliasKey]=obj;return obj};var queryLang=new QueryLang();var checkArgs=function(args,minLength,maxLength,name,typeCheck){args=cleanArray(args);if(minLength==null){minLength=1}if(args==null||args.length<minLength){throw new etc.Error("not enough arguments for "+name)}if(maxLength!=null&&args.length>maxLength){throw new etc.Error("too many arguments for "+name)}if(typeCheck!=null){for(var k in args){if(typeof (args[k])!="function"&&args[k] instanceof typeCheck==false){throw new etc.Error("wrong type for "+args[k]+" to "+name)}}}return args};var sql_date_to_js_date=function(data){if(typeof data=="string"&&data.match(/\d{4}-\d{1,2}-\d{1,2}/)){var dateArr=data.match(/\d{4}-\d{1,2}-\d{1,2}/)[0].split("-");var date=new Date(parseInt(dateArr[0],10),(parseInt(dateArr[1],10)-1),parseInt(dateArr[2],10));return date}return data};var data_insertion=function(table_info,field_name,data,column_ref){if(table_info[field_name]){var data=eval(data);if(table_info[field_name].type&&table_info[field_name].type=="Number"){data=Number(data,10)}else{if(table_info[field_name].type&&table_info[field_name].type=="Date"){data=sql_date_to_js_date(data)}}column_ref[field_name]=data}};var NodeType={select:function(args){var columns=[];var nodes={from:null,where:null,groupBy:null,having:null,orderBy:null,limit:null};for(var i=0;i<args.length;i++){var arg=args[i];var argIsNode=false;for(var nodeTypeName in nodes){if(arg instanceof NodeType[nodeTypeName]){if(nodes[nodeTypeName]!=null){throw new etc.Error("too many "+nodeTypeName.toUpperCase()+" clauses")}nodes[nodeTypeName]=arg;argIsNode=true;break}}if(argIsNode==false){columns.push(arg)}}columns=checkArgs(columns,1,null,"COLUMNS");if(nodes.from==null){throw new etc.Error("missing FROM clause")}var joinDriver=null;var joinFilter=null;var whereFilter=null;var columnConvertor=null;var orderByComparator=null;var groupByCalcValues=null;var havingFilter=null;var typeConverter=function(results){for(var i=0;i<results.length;i++){var result=results[i];for(var attr in result){var value=result[attr];if(value instanceof Date){results[i][attr]=dateToString(value)}}}};this.prepareFilter=function(){if(joinDriver==null){joinDriver=compileJoinDriver(nodes.from.tables)}if(joinFilter==null){joinFilter=compileFilter(compileFilterForJoin,nodes.from.tables)}if(whereFilter==null){whereFilter=compileFilter(compileFilterForWhere,nodes.from.tables,nodes.where!=null?nodes.where.exprs:null)}if(groupByCalcValues==null&&nodes.groupBy!=null){groupByCalcValues=compileGroupByCalcValues(nodes.from.tables,nodes.groupBy.exprs)}if(havingFilter==null&&nodes.having!=null){havingFilter=compileFilter(compileFilterForWhere,[],nodes.having.exprs,{aliasOnly:true})}if(columnConvertor==null){columnConvertor=compileColumnConvertor(nodes.from.tables,columns)}if(orderByComparator==null&&nodes.orderBy!=null){orderByComparator=compileOrderByComparator(nodes.orderBy.exprs)}};this.filter=function(dataTables,bindings,params){this.prepareFilter();if(bindings==null){bindings={}}if(params==null){params={}}var resultOfFromWhere=joinDriver(dataTables,joinFilter,whereFilter,bindings);if(groupByCalcValues!=null){for(var i=0;i<resultOfFromWhere.length;i++){resultOfFromWhere[i].groupByValues=groupByCalcValues.apply(null,resultOfFromWhere[i])}resultOfFromWhere.sort(groupByComparator)}if(params.return_reference){return resultOfFromWhere}var groupByAccum={};var groupByFuncs={SUM:function(key,val){groupByAccum[key]=zeroDefault(groupByAccum[key])+zeroDefault(val);return groupByAccum[key]},COUNT:function(key){groupByAccum[key]=zeroDefault(groupByAccum[key])+1;return groupByAccum[key]},AVG:function(key,val){return groupByFuncs.SUM(key,val)/groupByFuncs.COUNT("_COUNT"+key)}};var result=[],prevItem=null,currItem;for(var i=0;i<resultOfFromWhere.length;i++){currItem=resultOfFromWhere[i];currItem[0]=groupByFuncs;if(prevItem!=null&&groupByComparator(prevItem,currItem)!=0){if(havingFilter==null||havingFilter(prevItem.record)==true){result.push(prevItem.record)}groupByAccum={}}currItem.record=columnConvertor.apply(null,currItem.concat([params.with_table]));prevItem=currItem}if(prevItem!=null&&(havingFilter==null||havingFilter(prevItem.record)==true)){result.push(prevItem.record)}if(orderByComparator!=null){result.sort(orderByComparator)}if(nodes.limit!=null){if(nodes.limit.total==0){return[]}var start=(nodes.limit.offset!=null?nodes.limit.offset:0);result=result.slice(start,start+(nodes.limit.total>0?nodes.limit.total:result.length))}typeConverter(result);return result};setSSFunc(this,function(){var sqlArr=["SELECT",map(columns,toSqlWithAlias).join(", "),nodes.from.toSql()];if(nodes.where!=null){sqlArr.push(nodes.where.toSql())}if(nodes.groupBy!=null){sqlArr.push(nodes.groupBy.toSql())}if(nodes.having!=null){sqlArr.push(nodes.having.toSql())}if(nodes.orderBy!=null){sqlArr.push(nodes.orderBy.toSql())}if(nodes.limit!=null){sqlArr.push(nodes.limit.toSql())}return sqlArr.join(" ")});for(var i=0;i<aliasArr.length;i++){var aliasItem=aliasArr[i];aliasItem.scope[aliasItem.aliasKey]=aliasItem.orig}aliasArr=[]},insert:function(args){var table_info=args[0];var object=args[1];this.filter=function(dataTables,bindings){var table_name=table_info[".name"];if(!dataTables[table_name]){dataTables[table_name]=[]}dataTables[table_name].push({});for(var field_name in object){data_insertion(table_info,field_name,object[field_name],dataTables[table_name][dataTables[table_name].length-1])}return true};setSSFunc(this,function(){var sqlArr=["INSERT INTO",table_info.toSql(),"("+hashKeys(object).join(", ")+")","VALUES","("+hashValues(object).join(", ")+")"];return sqlArr.join(" ")})},update:function(args){var from_node=args[0];var assignments=args[1];var where_node=args[2];this.filter=function(dataTables,bindings){var table_info=from_node.tables[0];var resultOfFromWhere=queryLang.SELECT(from_node,where_node,1).filter(dataTables,null,{return_reference:true});for(var i=0;i<resultOfFromWhere.length;i++){var object=resultOfFromWhere[i][1];for(var field in assignments){var fieldSplit=field.split(".");var field_name=field;if(fieldSplit.length==2){field_name=fieldSplit[1]}data_insertion(table_info,field_name,assignments[field],object)}}return true};setSSFunc(this,function(){var sqlArr=["UPDATE",from_node.toSql()];var assignmentsArr=[];for(var attr in assignments){assignmentsArr.push(attr+"="+assignments[attr])}sqlArr.push(assignmentsArr.join(", "));if(where_node!=null){sqlArr.push(where_node.toSql())}return sqlArr.join(" ")})},destroy:function(args){var select_node=args[0];this.filter=function(dataTables,bindings){var resultOfFromWhere=select_node.filter(dataTables,null,{return_reference:true});for(var i=0;i<resultOfFromWhere.length;i++){var record=resultOfFromWhere[i];for(var j=1;j<record.length;j++){var object=record[j];for(var attr in object){delete object[attr]}}}for(var table_name in dataTables){var table=dataTables[table_name];for(var i=0;i<table.length;i++){if(hashKeys(table[i]).length==0){delete table[i]}}}for(var table_name in dataTables){dataTables[table_name]=arrayCompact(dataTables[table_name])}return true};setSSFunc(this,function(){var sqlArr=["DELETE",select_node.toSql()];return sqlArr.join(" ").replace(/SELECT\s/,"")})},from:function(tables){this.tables=checkArgs(tables,1,null,"FROM",NodeType.tableDef)},where:function(exprs){this.exprs=checkArgs(exprs,1,null,"WHERE",NodeType.expression)},groupBy:function(exprs){this.exprs=checkArgs(exprs,1,null,"GROUP_BY")},having:function(exprs){this.exprs=checkArgs(exprs,1,null,"HAVING",NodeType.expression)},orderBy:function(exprs){this.exprs=checkArgs(exprs,1,null,"ORDER_BY")},expression:function(args,name,opFix,sqlText,minArgs,maxArgs,jsText,alias){var theExpr=this;this.args=checkArgs(args,minArgs,maxArgs,name);this[".name"]=name;this[".alias"]=alias!=null?alias:name;this.opFix=opFix;this.sqlText=sqlText!=null?sqlText:this[".name"];this.jsText=jsText!=null?jsText:this.sqlText;this.AS=function(aliasArg){this[".alias"]=this.ASC[".alias"]=this.DESC[".alias"]=aliasArg;return aliasReg(aliasArg,queryLang,this)};this.ASC=setSSFunc({".name":name,".alias":theExpr[".alias"],order:"ASC"},function(){return theExpr[".alias"]+" ASC"});this.DESC=setSSFunc({".name":name,".alias":theExpr[".alias"],order:"DESC"},function(){return theExpr[".alias"]+" DESC"});this.COLLATE=TODO},aggregate:function(){NodeType.expression.apply(this,arguments)},limit:function(offset,total){if(total==null){this.total=cleanString(offset)}else{this.total=cleanString(total);this.offset=cleanString(offset)}},tableDef:function(name,columnInfos,alias){this[".name"]=name;this[".alias"]=alias!=null?alias:name;this[".allColumns"]=[];for(var columnName in columnInfos){this[columnName]=new NodeType.columnDef(columnName,columnInfos[columnName],this);this[".allColumns"].push(this[columnName])}setSSFunc(this,function(){return name});this.AS=function(alias){return aliasReg(alias,queryLang,new NodeType.tableDef(name,columnInfos,alias))};this.ALL=new NodeType.columnDef("*",null,this);this.ALL.AS=null},columnDef:function(name,columnInfo,tableDef,alias){var theColumnDef=this;this[".name"]=name;this[".alias"]=alias!=null?alias:name;this.tableDef=tableDef;setSSFunc(this,function(flags){if(flags!=null&&flags.aliasOnly==true){return this[".alias"]}return tableDef!=null?((tableDef[".alias"])+"."+name):name});this.AS=function(aliasArg){return aliasReg(aliasArg,queryLang,new NodeType.columnDef(name,columnInfo,tableDef,aliasArg))};if(columnInfo&&columnInfo.type){this.type=columnInfo.type}else{this.type="String"}this.ASC=setSSFunc({".name":name,".alias":theColumnDef[".alias"],tableDef:tableDef,order:"ASC"},function(){return theColumnDef.toSql()+" ASC"});this.DESC=setSSFunc({".name":name,".alias":theColumnDef[".alias"],tableDef:tableDef,order:"DESC"},function(){return theColumnDef.toSql()+" DESC"});this.COLLATE=TODO},join:function(joinType,tableDef){var theJoin=this;this.joinType=joinType;this.fromSeparator=" "+joinType+" JOIN ";for(var k in tableDef){this[k]=tableDef[k]}this.ON=function(){theJoin.ON_exprs=checkArgs(arguments,1,null,"ON");return theJoin};this.USING=function(){theJoin.USING_exprs=cleanArray(arguments,false);return theJoin};this.fromSuffix=function(){if(theJoin.ON_exprs!=null){return(" ON "+map(theJoin.ON_exprs,toSql).join(" AND "))}if(theJoin.USING_exprs!=null){return(" USING ("+theJoin.USING_exprs.join(", ")+")")}return""}}};var setSSFunc=function(obj,func){obj.toSql=obj.toJs=obj.toString=func;return obj};setSSFunc(NodeType.from.prototype,function(){var sqlArr=["FROM "];for(var i=0;i<this.tables.length;i++){if(i>0){var sep=this.tables[i].fromSeparator;if(sep==null){sep=", "}sqlArr.push(sep)}sqlArr.push(toSqlWithAlias(this.tables[i]));if(this.tables[i].fromSuffix!=null){sqlArr.push(this.tables[i].fromSuffix())}}return sqlArr.join("")});setSSFunc(NodeType.where.prototype,function(){return"WHERE "+map(this.exprs,toSql).join(" AND ")});setSSFunc(NodeType.orderBy.prototype,function(){return"ORDER BY "+map(this.exprs,toSql).join(", ")});setSSFunc(NodeType.groupBy.prototype,function(){return"GROUP BY "+map(this.exprs,toSql).join(", ")});setSSFunc(NodeType.having.prototype,function(){return"HAVING "+map(this.exprs,toSql,{aliasOnly:true}).join(" AND ")});setSSFunc(NodeType.limit.prototype,function(){return"LIMIT "+(this.total<0?"ALL":this.total)+(this.offset!=null?(" OFFSET "+this.offset):"")});var makeToFunc=function(toFunc,opText){return function(flags){if(flags!=null&&flags.aliasOnly==true&&this[".alias"]!=this[".name"]){return this[".alias"]}if(this.opFix<0){return this[opText]+" ("+map(this.args,toFunc,flags).join(") "+this[opText]+" (")+")"}if(this.opFix>0){return"("+map(this.args,toFunc,flags).join(") "+this[opText]+" (")+") "+this[opText]}return"("+map(this.args,toFunc,flags).join(") "+this[opText]+" (")+")"}};NodeType.expression.prototype.toSql=makeToFunc(toSql,"sqlText");NodeType.expression.prototype.toJs=makeToFunc(toJs,"jsText");NodeType.aggregate.prototype=new NodeType.expression([],null,null,null,0);NodeType.aggregate.prototype.toJs=function(flags){if(flags!=null&&flags.aliasOnly==true&&this[".alias"]!=this[".name"]){return this[".alias"]}return this.jsText+" ('"+this[".alias"]+"', ("+map(this.args,toJs).join("), (")+"))"};NodeType.join.prototype=new NodeType.tableDef();NodeType.whereSql=function(sql){this.exprs=[new NodeType.rawSql(sql)]};NodeType.whereSql.prototype=new NodeType.where([new NodeType.expression([0],null,0,null,0,null,null,null)]);NodeType.havingSql=function(sql){this.exprs=[new NodeType.rawSql(sql)]};NodeType.havingSql.prototype=new NodeType.having([new NodeType.expression([0],null,0,null,0,null,null,null)]);NodeType.rawSql=function(sql){this.sql=sql};NodeType.rawSql.prototype.toSql=function(flags){return this.sql};NodeType.rawSql.prototype.toJs=function(flags){var js=this.sql;js=js.replace(/ AND /g," && ");js=js.replace(/ OR /g," || ");js=js.replace(/ = /g," == ");js=js.replace(/ IS NULL/g," == null");js=js.replace(/ IS NOT NULL/g," != null");js=js.replace(/ NOT /g," ! ");var LIKE_regex=/(\S+)\sLIKE\s'(\S+)'/g;var matchArr;while(matchArr=LIKE_regex.exec(js)){matchArr[2]=matchArr[2].replace(/%/,".*");js=js.replace(LIKE_regex,"$1.match(/"+matchArr[2]+"/)")}var DATE_regex=/'(\d{4})-(\d{1,2})-(\d{1,2})'/g;while(matchArr=DATE_regex.exec(js)){var dateArr=[parseInt(matchArr[1],10).toString(),(parseInt(matchArr[2],10)-1).toString(),parseInt(matchArr[3],10).toString()];var replacement="(new Date("+dateArr.join(", ")+").valueOf())";js=js.replace(matchArr[0],replacement)}return js};var keywords={INSERT:function(){return new NodeType.insert(arguments)},UPDATE:function(){return new NodeType.update(arguments)},DESTROY:function(){return new NodeType.destroy(arguments)},SELECT_ALL:function(){return new NodeType.select(arguments)},SELECT_DISTINCT:TODO,ALL:USAGE,FROM:function(){return new NodeType.from(arguments)},WHERE:function(){return new NodeType.where(arguments)},AND:function(){return new NodeType.expression(arguments,"AND",0,null,1,null,"&&")},OR:function(){return new NodeType.expression(arguments,"OR",0,null,1,null,"||")},NOT:function(){return new NodeType.expression(arguments,"NOT",-1,null,1,1,"!")},EQ:function(){return new NodeType.expression(arguments,"EQ",0,"=",2,2,"==")},NEQ:function(){return new NodeType.expression(arguments,"NEQ",0,"!=",2,2)},LT:function(){return new NodeType.expression(arguments,"LT",0,"<",2,2)},GT:function(){return new NodeType.expression(arguments,"GT",0,">",2,2)},LTE:function(){return new NodeType.expression(arguments,"LTE",0,"<=",2,2)},GTE:function(){return new NodeType.expression(arguments,"GTE",0,">=",2,2)},IS_NULL:function(){return new NodeType.expression(arguments,"IS_NULL",1,"IS NULL",1,1,"== null")},IS_NOT_NULL:function(){return new NodeType.expression(arguments,"IS_NOT_NULL",1,"IS NOT NULL",1,1,"!= null")},ADD:function(){return new NodeType.expression(arguments,"ADD",0,"+",2,null)},SUBTRACT:function(){return new NodeType.expression(arguments,"SUBTRACT",0,"-",2,null)},NEGATE:function(){return new NodeType.expression(arguments,"NEGATE",-1,"-",1,1)},MULTIPLY:function(){return new NodeType.expression(arguments,"MULTIPLY",0,"*",2,null)},DIVIDE:function(){return new NodeType.expression(arguments,"DIVIDE",0,"/",2,null)},PAREN:function(){return new NodeType.expression(arguments,"PAREN",0,"",1,1)},LIKE:function(){return new NodeType.expression(arguments,"LIKE",0,"LIKE",2,2,"match")},BETWEEN:TODO,AVG:function(){return new NodeType.aggregate(arguments,"AVG",-1,null,1,1)},AVG_ALL:TODO,AVG_DISTINCT:TODO,SUM:function(){return new NodeType.aggregate(arguments,"SUM",-1,null,1,1)},SUM_ALL:TODO,SUM_DISTINCT:TODO,COUNT:function(){return new NodeType.aggregate(arguments,"COUNT",-1,null,1,1)},COUNT_ALL:TODO,COUNT_DISTINCT:TODO,AS:USAGE,IN:TODO,UNION:TODO,UNION_ALL:TODO,EXCEPT:TODO,EXCEPT_ALL:TODO,INTERSECT:TODO,INTERSECT_ALL:TODO,CROSS_JOIN:function(tableDef){return tableDef},INNER_JOIN:function(tableDef){return new NodeType.join("INNER",tableDef)},LEFT_OUTER_JOIN:function(tableDef){return new NodeType.join("LEFT OUTER",tableDef)},RIGHT_OUTER_JOIN:TODO,FULL_OUTER_JOIN:TODO,ON:USAGE,USING:USAGE,GROUP_BY:function(){return new NodeType.groupBy(arguments)},HAVING:function(){return new NodeType.having(arguments)},ORDER_BY:function(){return new NodeType.orderBy(arguments)},LIMIT:function(offset,total){return new NodeType.limit(offset,total)},LIMIT_ALL:function(offset){return queryLang.LIMIT(-1,offset)},OFFSET:USAGE,ANY_SELECT:TODO,ALL_SELECT:TODO,EXISTS:TODO,WHERE_SQL:function(sql){return new NodeType.whereSql(sql)},HAVING_SQL:function(sql){return new NodeType.havingSql(sql)}};keywords.SELECT=keywords.SELECT_ALL;for(var k in keywords){queryLang[k]=keywords[k]}for(var tableName in tableInfos){queryLang[tableName]=new NodeType.tableDef(tableName,tableInfos[tableName])}return queryLang};var compileJoinDriver=function(tables){var funcText=["var TrimPath_query_tmpJD = function(dataTables, joinFilter, whereFilter, bindings) {","var result = [], filterArgs = [ bindings ];"];for(var i=0;i<tables.length;i++){funcText.push("var T"+i+" = dataTables['"+tables[i][".name"]+"'] || [];")}for(var i=0;i<tables.length;i++){funcText.push("for (var t"+i+" = 0; t"+i+" < T"+i+".length; t"+i+"++) {");funcText.push("var resultLength"+i+" = result.length;");funcText.push("filterArgs["+(i+1)+"] = T"+i+"[t"+i+"];")}funcText.push("if ((joinFilter == null || joinFilter.apply(null, filterArgs) == true) && ");funcText.push("    (whereFilter == null || whereFilter.apply(null, filterArgs) == true))");funcText.push("result.push(filterArgs.slice(0));");for(var i=tables.length-1;i>=0;i--){funcText.push("}");if(i>=1&&tables[i].joinType=="LEFT OUTER"){funcText.push("if (resultLength"+(i-1)+" == result.length) {");for(var j=i;j<tables.length;j++){funcText.push("filterArgs["+(j+1)+"] = ")}funcText.push("{}; if (whereFilter == null || whereFilter.apply(null, filterArgs) == true) result.push(filterArgs.slice(0)); }")}}funcText.push("return result; }; TrimPath_query_tmpJD");return theEval(funcText.join(""))};var compileFilter=function(bodyFunc,tables,whereExpressions,flags){var funcText=["var TrimPath_query_tmpWF = function(_BINDINGS"];for(var i=0;i<tables.length;i++){funcText.push(", "+tables[i][".alias"])}funcText.push("){ with(_BINDINGS) {");bodyFunc(funcText,tables,whereExpressions,flags);funcText.push("return true; }}; TrimPath_query_tmpWF");return theEval(funcText.join(""))};var compileFilterForJoin=function(funcText,tables,whereExpressions,flags){for(var i=0;i<tables.length;i++){if(tables[i].joinType!=null){if(tables[i].ON_exprs!=null||tables[i].USING_exprs!=null){funcText.push("if (!(");if(tables[i].ON_exprs!=null&&tables[i].ON_exprs[0].exprs!=null){funcText.push(tables[i].ON_exprs[0].exprs[0].toJs())}else{if(tables[i].ON_exprs!=null){funcText.push(map(tables[i].ON_exprs,toJs).join(" && "))}}if(tables[i].USING_exprs!=null){funcText.push(map(tables[i].USING_exprs,function(col){return"("+tables[i-1][".alias"]+"."+col+" == "+tables[i][".alias"]+"."+col+")"}).join(" && "))}funcText.push(")) return false;")}}}};var compileFilterForWhere=function(funcText,tables,whereExpressions,flags){if(whereExpressions!=null){funcText.push("if (!((");for(var i=0;i<whereExpressions.length;i++){if(i>0){funcText.push(") && (")}funcText.push(toJs(whereExpressions[i],flags))}funcText.push("))) return false;")}};var compileColumnConvertor=function(tables,columnExpressions){var funcText=["var TrimPath_query_tmpCC = function(_BINDINGS, "];var table_aliases=[];for(var i=0;i<tables.length;i++){table_aliases.push(tables[i][".alias"])}funcText.push(arrayUniq(table_aliases).join(", "));funcText.push(", with_table){ with(_BINDINGS) {");funcText.push("var _RESULT = {};");funcText.push("if(with_table) {");compileColumnConvertorHelper(funcText,columnExpressions,true);funcText.push("} else {");compileColumnConvertorHelper(funcText,columnExpressions,false);funcText.push("}");funcText.push("return _RESULT; }}; TrimPath_query_tmpCC");return theEval(funcText.join(""))};var test=function(stuff){var i};var compileColumnConvertorHelper=function(funcText,columnExpressions,with_table){for(var i=0;i<columnExpressions.length;i++){var columnExpression=columnExpressions[i];if(columnExpression[".name"]=="*"){compileColumnConvertorHelper(funcText,columnExpression.tableDef[".allColumns"],with_table)}else{funcText.push("_RESULT['");if(with_table==true){funcText.push(columnExpression.toString())}else{funcText.push(columnExpression[".alias"])}funcText.push("'] = (");funcText.push(toJs(columnExpression));funcText.push(");")}}};var dateToString=function(date){if(typeof date=="object"){return[date.getFullYear(),"-",(date.getMonth()+1),"-",date.getDate()].join("")}if(date==null){return null}};var compileOrderByComparator=function(orderByExpressions){var funcText=["var TrimPath_query_tmpOC = function(A, B) { var a, b; "];for(var i=0;i<orderByExpressions.length;i++){var orderByExpression=orderByExpressions[i];if(orderByExpression.tableDef){funcText.push("a = A['"+orderByExpression[".alias"]+"'] || A['"+orderByExpression.tableDef[".alias"]+"."+orderByExpression[".alias"]+"'] || '';");funcText.push("b = B['"+orderByExpression[".alias"]+"'] || B['"+orderByExpression.tableDef[".alias"]+"."+orderByExpression[".alias"]+"'] || '';")}else{funcText.push("a = A['"+orderByExpression[".alias"]+"'] || '';");funcText.push("b = B['"+orderByExpression[".alias"]+"'] || '';")}var sign=(orderByExpression.order=="DESC"?-1:1);funcText.push("if (a.valueOf() < b.valueOf()) return "+(sign*-1)+";");funcText.push("if (a.valueOf() > b.valueOf()) return "+(sign*1)+";")}funcText.push("return 0; }; TrimPath_query_tmpOC");return theEval(funcText.join(""))};var compileGroupByCalcValues=function(tables,groupByExpressions){var funcText=["var TrimPath_query_tmpGC = function(_BINDINGS"];for(var i=0;i<tables.length;i++){funcText.push(", "+tables[i][".alias"])}funcText.push("){ var _RESULT = [];");for(var i=0;i<groupByExpressions.length;i++){funcText.push("_RESULT.push(");funcText.push(toJs(groupByExpressions[i]));funcText.push(");")}funcText.push("return _RESULT; }; TrimPath_query_tmpGC");return theEval(funcText.join(""))};var groupByComparator=function(a,b){return arrayCompare(a.groupByValues,b.groupByValues)};var arrayCompare=function(x,y){if(x==null||y==null){return -1}for(var i=0;i<x.length&&i<y.length;i++){if(x[i]<y[i]){return -1}if(x[i]>y[i]){return 1}}return 0};var toSqlWithAlias=function(obj,flags){var res=toSql(obj,flags);if(obj[".alias"]!=null&&obj[".alias"]!=obj[".name"]){return res+" AS "+obj[".alias"]}return res};var toSql=function(obj,flags){return toX(obj,"toSql",flags)};var toJs=function(obj,flags){return toX(obj,"toJs",flags)};var toX=function(obj,funcName,flags){if(typeof (obj)=="object"&&obj[funcName]!=null){return obj[funcName].call(obj,flags)}return theString(obj)};var zeroDefault=function(x){return(x!=null?x:0)};var map=function(arr,func,arg2){for(var result=[],i=0;i<arr.length;i++){result.push(func(arr[i],arg2))}return result};var cleanArray=function(src,quotes){for(var result=[],i=0;i<src.length;i++){result.push(cleanString(src[i],quotes))}return result};var cleanString=TrimPath.TEST.cleanString=function(src,quotes){if(src instanceof theString||typeof (src)=="string"){src=theString(src).replace(/\\/g,"\\\\").replace(/'/g,"\\'");if(quotes!=false){src="'"+src+"'"}}return src};var findClause=function(str,regexp){var clauseEnd=str.search(regexp);if(clauseEnd<0){clauseEnd=str.length}return str.substring(0,clauseEnd)};QueryLang.prototype.parseSQL=function(sqlQueryIn,paramsArr){var sqlQuery=sqlQueryIn.replace(/\n/g," ").replace(/\r/g,"");if(paramsArr!=null){if(paramsArr instanceof theArray==false){paramsArr=[paramsArr]}var sqlParts=sqlQuery.split(" ?");for(var i=0;i<sqlParts.length-1;i++){sqlParts[i]=sqlParts[i]+" "+cleanString(paramsArr[i],true)}sqlQuery=sqlParts.join("")}sqlQuery=sqlQuery.replace(/ AS ([_a-zA-z0-9]+)/g,".AS('$1')");var err=function(errMsg){throw ("[ERROR: "+errMsg+" in query: "+sqlQueryIn+"]")};var query_type=sqlQuery.split(/\s+/)[0];if(query_type=="DELETE"){query_type="DESTROY"}if(!arrayInclude(["SELECT","DESTROY","UPDATE","INSERT"],query_type)){err("not a valid query type")}var strip_whitespace=function(str){return str.replace(/\s+/g,"")};if(query_type=="SELECT"||query_type=="DESTROY"){var fromSplit=sqlQuery.substring(7).split(" FROM ");if(fromSplit.length!=2){err("missing a FROM clause")}var columnsClause=fromSplit[0].replace(/\.\*/g,".ALL");var remaining=fromSplit[1];var fromClause=findClause(remaining,/\sWHERE\s|\sGROUP BY\s|\sHAVING\s|\sORDER BY\s|\sLIMIT/);var fromTableClause=findClause(fromClause,/\sLEFT OUTER JOIN\s/);var fromTables=strip_whitespace(fromTableClause).split(",");remaining=remaining.substring(fromClause.length);var fromClauseSplit=fromClause.split(" LEFT OUTER JOIN ");var fromClauseParts=[fromClauseSplit[0]];var leftJoinComponents;for(var i=1;i<fromClauseSplit.length;i++){leftJoinComponents=/(\w+)\sON\s(.+)/.exec(fromClauseSplit[i]);fromTables.push(leftJoinComponents[1]);fromClauseParts.push("("+leftJoinComponents[1]+').ON(WHERE_SQL("'+leftJoinComponents[2]+'"))')}fromClause=fromClauseParts.join(", LEFT_OUTER_JOIN");if(strip_whitespace(columnsClause)=="*"){var new_columns=[];for(var i=0;i<fromTables.length;i++){new_columns.push(fromTables[i]+".ALL")}columnsClause=columnsClause.replace(/\*/,new_columns.join(", "))}var whereClause=findClause(remaining,/\sGROUP BY\s|\sHAVING\s|\sORDER BY\s|\sLIMIT/);remaining=remaining.substring(whereClause.length);var groupByClause=findClause(remaining,/\sHAVING\s|\sORDER BY\s|\sLIMIT /);remaining=remaining.substring(groupByClause.length);var havingClause=findClause(remaining,/\sORDER BY\s|\sLIMIT /);remaining=remaining.substring(havingClause.length);var orderByClause=findClause(remaining,/\sLIMIT /).replace(/\sASC/g,".ASC").replace(/\sDESC/g,".DESC");remaining=remaining.substring(orderByClause.length);var limitClause=remaining;var tql=["SELECT(FROM(",fromClause,"), ",columnsClause];if(whereClause.length>0){tql.push(', WHERE_SQL("'+whereClause.substring(7)+'")')}if(groupByClause.length>0){tql.push(", GROUP_BY("+groupByClause.substring(10)+")")}if(havingClause.length>0){tql.push(', HAVING_SQL("'+havingClause.substring(8)+'")')}if(orderByClause.length>0){tql.push(", ORDER_BY("+orderByClause.substring(10)+")")}if(limitClause.length>0){tql.push(", LIMIT("+limitClause.substring(7)+")")}tql.push(")")}else{if(query_type=="INSERT"){var intoSplit=sqlQuery.substring(6).split(" INTO ");if(intoSplit.length!=2){err("missing an INTO clause")}var insertion_regex=/^\s*(\w+)\s*\((.+)\)\s+VALUES\s+\((.+)\)/;var parsed_sql=intoSplit[1].match(insertion_regex);var table_name=parsed_sql[1];var fields=strip_whitespace(parsed_sql[2]).split(",");var values=parsed_sql[3].split(",");if(fields.length!=values.length){err("values and fields must have same number of elements")}tql=["INSERT(",table_name,",",simpleJson(fields,values),")"]}else{if(query_type=="UPDATE"){var setSplit=sqlQuery.substring(7).split(" SET ");if(setSplit.length!=2){err("missing a SET clause")}var fromClause=setSplit[0];var remaining=setSplit[1];var assignmentClause=findClause(remaining,/\sWHERE\s/);remaining=remaining.substring(assignmentClause.length);var whereClause=remaining;var assignmentArray=assignmentClause.split(",");var fields=[];var values=[];for(var i=0;i<assignmentArray.length;i++){var components=assignmentArray[i].split("=");fields.push(strip(components[0]));values.push(strip(components[1]))}var update_regex=/^UPDATE\s+(\w+)\s+SET\s+(\w+\s*=\s*\w+)/;var parsed_sql=sqlQuery.match(update_regex);var tql=["UPDATE(FROM(",fromClause,"), ",simpleJson(fields,values)];tql.push(', WHERE_SQL("'+whereClause.substring(7)+'")');tql.push(")")}}}if(query_type=="DESTROY"){tql.unshift("DESTROY(");tql.push(")")}with(this){return eval(tql.join(""))}}})();dojo.provide("extLib.trimpath.template");if(typeof (TrimPath)=="undefined"){TrimPath={}}(function(){if(TrimPath==null){TrimPath=new Object()}if(TrimPath.evalEx==null){TrimPath.evalEx=function(src){return eval(src)}}var UNDEFINED;if(Array.prototype.pop==null){Array.prototype.pop=function(){if(this.length===0){return UNDEFINED}return this[--this.length]}}if(Array.prototype.push==null){Array.prototype.push=function(){for(var i=0;i<arguments.length;++i){this[this.length]=arguments[i]}return this.length}}TrimPath.parseTemplate=function(tmplContent,optTmplName,optEtc){if(optEtc==null){optEtc=TrimPath.parseTemplate_etc}var funcSrc=parse(tmplContent,optTmplName,optEtc);var func=TrimPath.evalEx(funcSrc,optTmplName,1);if(func!=null){return new optEtc.Template(optTmplName,tmplContent,funcSrc,func,optEtc)}return null};try{String.prototype.process=function(context,optFlags){var template=TrimPath.parseTemplate(this,null);if(template!=null){return template.process(context,optFlags)}return this}}catch(e){}TrimPath.parseTemplate_etc={};TrimPath.parseTemplate_etc.statementTag="forelse|for|if|elseif|else|var|macro";TrimPath.parseTemplate_etc.statementDef={"if":{delta:1,prefix:"if (",suffix:") {",paramMin:1},"else":{delta:0,prefix:"} else {"},"elseif":{delta:0,prefix:"} else if (",suffix:") {",paramDefault:"true"},"/if":{delta:-1,prefix:"}"},"for":{delta:1,paramMin:3,prefixFunc:function(stmtParts,state,tmplName,etc){if(stmtParts[2]!="in"){throw new etc.ParseError(tmplName,state.line,"bad for loop statement: "+stmtParts.join(" "))}var iterVar=stmtParts[1];var listVar="__LIST__"+iterVar;return["var ",listVar," = ",stmtParts[3],";","var __LENGTH_STACK__;","if (typeof(__LENGTH_STACK__) == 'undefined' || !__LENGTH_STACK__.length) __LENGTH_STACK__ = new Array();","__LENGTH_STACK__[__LENGTH_STACK__.length] = 0;","if ((",listVar,") != null) { ","var ",iterVar,"_ct = 0;","for (var ",iterVar,"_index in ",listVar,") { ",iterVar,"_ct++;","if (typeof(",listVar,"[",iterVar,"_index]) == 'function') {continue;}","__LENGTH_STACK__[__LENGTH_STACK__.length - 1]++;","var ",iterVar," = ",listVar,"[",iterVar,"_index];"].join("")}},"forelse":{delta:0,prefix:"} } if (__LENGTH_STACK__[__LENGTH_STACK__.length - 1] == 0) { if (",suffix:") {",paramDefault:"true"},"/for":{delta:-1,prefix:"} }; delete __LENGTH_STACK__[__LENGTH_STACK__.length - 1];"},"var":{delta:0,prefix:"var ",suffix:";"},"macro":{delta:1,prefixFunc:function(stmtParts,state,tmplName,etc){var macroName=stmtParts[1].split("(")[0];return["var ",macroName," = function",stmtParts.slice(1).join(" ").substring(macroName.length),"{ var _OUT_arr = []; var _OUT = { write: function(m) { if (m) _OUT_arr.push(m); } }; "].join("")}},"/macro":{delta:-1,prefix:" return _OUT_arr.join(''); };"}};TrimPath.parseTemplate_etc.modifierDef={"eat":function(v){return""},"escape":function(s){return String(s).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},"capitalize":function(s){return String(s).toUpperCase()},"default":function(s,d){return s!=null?s:d}};TrimPath.parseTemplate_etc.modifierDef.h=TrimPath.parseTemplate_etc.modifierDef.escape;TrimPath.parseTemplate_etc.Template=function(tmplName,tmplContent,funcSrc,func,etc){this.process=function(context,flags){if(context==null){context={}}if(context._MODIFIERS==null){context._MODIFIERS={}}if(context.defined==null){context.defined=function(str){return(context[str]!=undefined)}}for(var k in etc.modifierDef){if(context._MODIFIERS[k]==null){context._MODIFIERS[k]=etc.modifierDef[k]}}if(flags==null){flags={}}var resultArr=[];var resultOut={write:function(m){resultArr.push(m)}};try{func(resultOut,context,flags)}catch(e){if(flags.throwExceptions==true){throw e}var result=new String(resultArr.join("")+"[ERROR: "+e.toString()+(e.message?"; "+e.message:"")+"]");result["exception"]=e;return result}return resultArr.join("")};this.name=tmplName;this.source=tmplContent;this.sourceFunc=funcSrc;this.toString=function(){return"TrimPath.Template ["+tmplName+"]"}};TrimPath.parseTemplate_etc.ParseError=function(name,line,message){this.name=name;this.line=line;this.message=message};TrimPath.parseTemplate_etc.ParseError.prototype.toString=function(){return("TrimPath template ParseError in "+this.name+": line "+this.line+", "+this.message)};var parse=function(body,tmplName,etc){body=cleanWhiteSpace(body);var funcText=["var TrimPath_Template_TEMP = function(_OUT, _CONTEXT, _FLAGS) { with (_CONTEXT) {"];var state={stack:[],line:1};var endStmtPrev=-1;while(endStmtPrev+1<body.length){var begStmt=endStmtPrev;begStmt=body.indexOf("{",begStmt+1);while(begStmt>=0){var endStmt=body.indexOf("}",begStmt+1);var stmt=body.substring(begStmt,endStmt);var blockrx=stmt.match(/^\{(cdata|minify|eval)/);if(blockrx){var blockType=blockrx[1];var blockMarkerBeg=begStmt+blockType.length+1;var blockMarkerEnd=body.indexOf("}",blockMarkerBeg);if(blockMarkerEnd>=0){var blockMarker;if(blockMarkerEnd-blockMarkerBeg<=0){blockMarker="{/"+blockType+"}"}else{blockMarker=body.substring(blockMarkerBeg+1,blockMarkerEnd)}var blockEnd=body.indexOf(blockMarker,blockMarkerEnd+1);if(blockEnd>=0){emitSectionText(body.substring(endStmtPrev+1,begStmt),funcText);var blockText=body.substring(blockMarkerEnd+1,blockEnd);if(blockType=="cdata"){emitText(blockText,funcText)}else{if(blockType=="minify"){emitText(scrubWhiteSpace(blockText),funcText)}else{if(blockType=="eval"){if(blockText!=null&&blockText.length>0){funcText.push("_OUT.write( (function() { "+blockText+" })() );")}}}}begStmt=endStmtPrev=blockEnd+blockMarker.length-1}}}else{if(body.charAt(begStmt-1)!="$"&&body.charAt(begStmt-1)!="\\"){var offset=(body.charAt(begStmt+1)=="/"?2:1);if(body.substring(begStmt+offset,begStmt+10+offset).search(TrimPath.parseTemplate_etc.statementTag)==0){break}}}begStmt=body.indexOf("{",begStmt+1)}if(begStmt<0){break}var endStmt=body.indexOf("}",begStmt+1);if(endStmt<0){break}emitSectionText(body.substring(endStmtPrev+1,begStmt),funcText);emitStatement(body.substring(begStmt,endStmt+1),state,funcText,tmplName,etc);endStmtPrev=endStmt}emitSectionText(body.substring(endStmtPrev+1),funcText);if(state.stack.length!=0){throw new etc.ParseError(tmplName,state.line,"unclosed, unmatched statement(s): "+state.stack.join(","))}funcText.push("}}; TrimPath_Template_TEMP");return funcText.join("")};var emitStatement=function(stmtStr,state,funcText,tmplName,etc){var parts=stmtStr.slice(1,-1).split(" ");var stmt=etc.statementDef[parts[0]];if(stmt==null){emitSectionText(stmtStr,funcText);return }if(stmt.delta<0){if(state.stack.length<=0){throw new etc.ParseError(tmplName,state.line,"close tag does not match any previous statement: "+stmtStr)}state.stack.pop()}if(stmt.delta>0){state.stack.push(stmtStr)}if(stmt.paramMin!=null&&stmt.paramMin>=parts.length){throw new etc.ParseError(tmplName,state.line,"statement needs more parameters: "+stmtStr)}if(stmt.prefixFunc!=null){funcText.push(stmt.prefixFunc(parts,state,tmplName,etc))}else{funcText.push(stmt.prefix)}if(stmt.suffix!=null){if(parts.length<=1){if(stmt.paramDefault!=null){funcText.push(stmt.paramDefault)}}else{for(var i=1;i<parts.length;i++){if(i>1){funcText.push(" ")}funcText.push(parts[i])}}funcText.push(stmt.suffix)}};var emitSectionText=function(text,funcText){if(text.length<=0){return }var nlPrefix=0;var nlSuffix=text.length-1;while(nlPrefix<text.length&&(text.charAt(nlPrefix)=="\n")){nlPrefix++}while(nlSuffix>=0&&(text.charAt(nlSuffix)==" "||text.charAt(nlSuffix)=="\t")){nlSuffix--}if(nlSuffix<nlPrefix){nlSuffix=nlPrefix}if(nlPrefix>0){funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');var s=text.substring(0,nlPrefix).replace("\n","\\n");if(s.charAt(s.length-1)=="\n"){s=s.substring(0,s.length-1)}funcText.push(s);funcText.push('");')}var lines=text.substring(nlPrefix,nlSuffix+1).split("\n");for(var i=0;i<lines.length;i++){emitSectionTextLine(lines[i],funcText);if(i<lines.length-1){funcText.push('_OUT.write("\\n");\n')}}if(nlSuffix+1<text.length){funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');var s=text.substring(nlSuffix+1).replace("\n","\\n");if(s.charAt(s.length-1)=="\n"){s=s.substring(0,s.length-1)}funcText.push(s);funcText.push('");')}};var emitSectionTextLine=function(line,funcText){var endMarkPrev="}";var endExprPrev=-1;while(endExprPrev+endMarkPrev.length<line.length){var begMark="${",endMark="}";var begExpr=line.indexOf(begMark,endExprPrev+endMarkPrev.length);if(begExpr<0){break}if(line.charAt(begExpr+2)=="%"){begMark="${%";endMark="%}"}var endExpr=line.indexOf(endMark,begExpr+begMark.length);if(endExpr<0){break}emitText(line.substring(endExprPrev+endMarkPrev.length,begExpr),funcText);var exprArr=line.substring(begExpr+begMark.length,endExpr).replace(/\|\|/g,"#@@#").split("|");for(var k in exprArr){if(exprArr[k].replace){exprArr[k]=exprArr[k].replace(/#@@#/g,"||")}}funcText.push("_OUT.write(");emitExpression(exprArr,exprArr.length-1,funcText);funcText.push(");");endExprPrev=endExpr;endMarkPrev=endMark}emitText(line.substring(endExprPrev+endMarkPrev.length),funcText)};var emitText=function(text,funcText){if(text==null||text.length<=0){return }text=text.replace(/\\/g,"\\\\");text=text.replace(/\n/g,"\\n");text=text.replace(/"/g,'\\"');funcText.push('_OUT.write("');funcText.push(text);funcText.push('");')};var emitExpression=function(exprArr,index,funcText){var expr=exprArr[index];if(index<=0){funcText.push(expr);return }var parts=expr.split(":");funcText.push('_MODIFIERS["');funcText.push(parts[0]);funcText.push('"](');emitExpression(exprArr,index-1,funcText);if(parts.length>1){funcText.push(",");funcText.push(parts[1])}funcText.push(")")};var cleanWhiteSpace=function(result){result=result.replace(/\t/g,"    ");result=result.replace(/\r\n/g,"\n");result=result.replace(/\r/g,"\n");result=result.replace(/^(\s*\S*(\s+\S+)*)\s*$/,"$1");return result};var scrubWhiteSpace=function(result){result=result.replace(/^\s+/g,"");result=result.replace(/\s+$/g,"");result=result.replace(/\s+/g," ");result=result.replace(/^(\s*\S*(\s+\S+)*)\s*$/,"$1");return result};TrimPath.parseDOMTemplate=function(elementId,optDocument,optEtc){if(optDocument==null){optDocument=document}var element=optDocument.getElementById(elementId);var content=element.value;if(content==null){content=element.innerHTML}content=content.replace(/&lt;/g,"<").replace(/&gt;/g,">");return TrimPath.parseTemplate(content,elementId,optEtc)};TrimPath.processDOMTemplate=function(elementId,context,optFlags,optDocument,optEtc){return TrimPath.parseDOMTemplate(elementId,optDocument,optEtc).process(context,optFlags)}})()

//MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006-2007 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

var MooTools={version:"1.11"};function $defined(A){return(A!=undefined);}function $type(B){if(!$defined(B)){return false;}if(B.htmlElement){return"element";
}var A=typeof B;if(A=="object"&&B.nodeName){switch(B.nodeType){case 1:return"element";case 3:return(/\S/).test(B.nodeValue)?"textnode":"whitespace";}}if(A=="object"||A=="function"){switch(B.constructor){case Array:return"array";
case RegExp:return"regexp";case Class:return"class";}if(typeof B.length=="number"){if(B.item){return"collection";}if(B.callee){return"arguments";}}}return A;
}function $merge(){var C={};for(var B=0;B<arguments.length;B++){for(var E in arguments[B]){var A=arguments[B][E];var D=C[E];if(D&&$type(A)=="object"&&$type(D)=="object"){C[E]=$merge(D,A);
}else{C[E]=A;}}}return C;}var $extend=function(){var A=arguments;if(!A[1]){A=[this,A[0]];}for(var B in A[1]){A[0][B]=A[1][B];}return A[0];};var $native=function(){for(var B=0,A=arguments.length;
B<A;B++){arguments[B].extend=function(C){for(var D in C){if(!this.prototype[D]){this.prototype[D]=C[D];}if(!this[D]){this[D]=$native.generic(D);}}};}};
$native.generic=function(A){return function(B){return this.prototype[A].apply(B,Array.prototype.slice.call(arguments,1));};};$native(Function,Array,String,Number);
function $chk(A){return !!(A||A===0);}function $pick(B,A){return $defined(B)?B:A;}function $random(B,A){return Math.floor(Math.random()*(A-B+1)+B);}function $time(){return new Date().getTime();
}function $clear(A){clearTimeout(A);clearInterval(A);return null;}var Abstract=function(A){A=A||{};A.extend=$extend;return A;};var Window=new Abstract(window);
var Document=new Abstract(document);document.head=document.getElementsByTagName("head")[0];window.xpath=!!(document.evaluate);if(window.ActiveXObject){window.ie=window[window.XMLHttpRequest?"ie7":"ie6"]=true;
}else{if(document.childNodes&&!document.all&&!navigator.taintEnabled){window.webkit=window[window.xpath?"webkit420":"webkit419"]=true;}else{if(document.getBoxObjectFor!=null){window.gecko=true;
}}}window.khtml=window.webkit;Object.extend=$extend;if(typeof HTMLElement=="undefined"){var HTMLElement=function(){};if(window.webkit){document.createElement("iframe");
}HTMLElement.prototype=(window.webkit)?window["[[DOMElement.prototype]]"]:{};}HTMLElement.prototype.htmlElement=function(){};if(window.ie6){try{document.execCommand("BackgroundImageCache",false,true);
}catch(e){}}var Class=function(B){var A=function(){return(arguments[0]!==null&&this.initialize&&$type(this.initialize)=="function")?this.initialize.apply(this,arguments):this;
};$extend(A,this);A.prototype=B;A.constructor=Class;return A;};Class.empty=function(){};Class.prototype={extend:function(B){var C=new this(null);for(var D in B){var A=C[D];
C[D]=Class.Merge(A,B[D]);}return new Class(C);},implement:function(){for(var B=0,A=arguments.length;B<A;B++){$extend(this.prototype,arguments[B]);}}};Class.Merge=function(C,D){if(C&&C!=D){var B=$type(D);
if(B!=$type(C)){return D;}switch(B){case"function":var A=function(){this.parent=arguments.callee.parent;return D.apply(this,arguments);};A.parent=C;return A;
case"object":return $merge(C,D);}}return D;};var Chain=new Class({chain:function(A){this.chains=this.chains||[];this.chains.push(A);return this;},callChain:function(){if(this.chains&&this.chains.length){this.chains.shift().delay(10,this);
}},clearChain:function(){this.chains=[];}});var Events=new Class({addEvent:function(B,A){if(A!=Class.empty){this.$events=this.$events||{};this.$events[B]=this.$events[B]||[];
this.$events[B].include(A);}return this;},fireEvent:function(C,B,A){if(this.$events&&this.$events[C]){this.$events[C].each(function(D){D.create({"bind":this,"delay":A,"arguments":B})();
},this);}return this;},removeEvent:function(B,A){if(this.$events&&this.$events[B]){this.$events[B].remove(A);}return this;}});var Options=new Class({setOptions:function(){this.options=$merge.apply(null,[this.options].extend(arguments));
if(this.addEvent){for(var A in this.options){if($type(this.options[A]=="function")&&(/^on[A-Z]/).test(A)){this.addEvent(A,this.options[A]);}}}return this;
}});Array.extend({forEach:function(C,D){for(var B=0,A=this.length;B<A;B++){C.call(D,this[B],B,this);}},filter:function(D,E){var C=[];for(var B=0,A=this.length;
B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B]);}}return C;},map:function(D,E){var C=[];for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,this[B],B,this);
}return C;},every:function(C,D){for(var B=0,A=this.length;B<A;B++){if(!C.call(D,this[B],B,this)){return false;}}return true;},some:function(C,D){for(var B=0,A=this.length;
B<A;B++){if(C.call(D,this[B],B,this)){return true;}}return false;},indexOf:function(C,D){var A=this.length;for(var B=(D<0)?Math.max(0,A+D):D||0;B<A;B++){if(this[B]===C){return B;
}}return -1;},copy:function(D,C){D=D||0;if(D<0){D=this.length+D;}C=C||(this.length-D);var A=[];for(var B=0;B<C;B++){A[B]=this[D++];}return A;},remove:function(C){var B=0;
var A=this.length;while(B<A){if(this[B]===C){this.splice(B,1);A--;}else{B++;}}return this;},contains:function(A,B){return this.indexOf(A,B)!=-1;},associate:function(C){var D={},B=Math.min(this.length,C.length);
for(var A=0;A<B;A++){D[C[A]]=this[A];}return D;},extend:function(C){for(var B=0,A=C.length;B<A;B++){this.push(C[B]);}return this;},merge:function(C){for(var B=0,A=C.length;
B<A;B++){this.include(C[B]);}return this;},include:function(A){if(!this.contains(A)){this.push(A);}return this;},getRandom:function(){return this[$random(0,this.length-1)]||null;
},getLast:function(){return this[this.length-1]||null;}});Array.prototype.each=Array.prototype.forEach;Array.each=Array.forEach;function $A(A){return Array.copy(A);
}function $each(C,B,D){if(C&&typeof C.length=="number"&&$type(C)!="object"){Array.forEach(C,B,D);}else{for(var A in C){B.call(D||C,C[A],A);}}}Array.prototype.test=Array.prototype.contains;
String.extend({test:function(A,B){return(($type(A)=="string")?new RegExp(A,B):A).test(this);},toInt:function(){return parseInt(this,10);},toFloat:function(){return parseFloat(this);
},camelCase:function(){return this.replace(/-\D/g,function(A){return A.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/\w[A-Z]/g,function(A){return(A.charAt(0)+"-"+A.charAt(1).toLowerCase());
});},capitalize:function(){return this.replace(/\b[a-z]/g,function(A){return A.toUpperCase();});},trim:function(){return this.replace(/^\s+|\s+$/g,"");
},clean:function(){return this.replace(/\s{2,}/g," ").trim();},rgbToHex:function(B){var A=this.match(/\d{1,3}/g);return(A)?A.rgbToHex(B):false;},hexToRgb:function(B){var A=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
return(A)?A.slice(1).hexToRgb(B):false;},contains:function(A,B){return(B)?(B+this+B).indexOf(B+A+B)>-1:this.indexOf(A)>-1;},escapeRegExp:function(){return this.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");
}});Array.extend({rgbToHex:function(D){if(this.length<3){return false;}if(this.length==4&&this[3]==0&&!D){return"transparent";}var B=[];for(var A=0;A<3;
A++){var C=(this[A]-0).toString(16);B.push((C.length==1)?"0"+C:C);}return D?B:"#"+B.join("");},hexToRgb:function(C){if(this.length!=3){return false;}var A=[];
for(var B=0;B<3;B++){A.push(parseInt((this[B].length==1)?this[B]+this[B]:this[B],16));}return C?A:"rgb("+A.join(",")+")";}});Function.extend({create:function(A){var B=this;
A=$merge({"bind":B,"event":false,"arguments":null,"delay":false,"periodical":false,"attempt":false},A);if($chk(A.arguments)&&$type(A.arguments)!="array"){A.arguments=[A.arguments];
}return function(E){var C;if(A.event){E=E||window.event;C=[(A.event===true)?E:new A.event(E)];if(A.arguments){C.extend(A.arguments);}}else{C=A.arguments||arguments;
}var F=function(){return B.apply($pick(A.bind,B),C);};if(A.delay){return setTimeout(F,A.delay);}if(A.periodical){return setInterval(F,A.periodical);}if(A.attempt){try{return F();
}catch(D){return false;}}return F();};},pass:function(A,B){return this.create({"arguments":A,"bind":B});},attempt:function(A,B){return this.create({"arguments":A,"bind":B,"attempt":true})();
},bind:function(B,A){return this.create({"bind":B,"arguments":A});},bindAsEventListener:function(B,A){return this.create({"bind":B,"event":true,"arguments":A});
},delay:function(B,C,A){return this.create({"delay":B,"bind":C,"arguments":A})();},periodical:function(A,C,B){return this.create({"periodical":A,"bind":C,"arguments":B})();
}});Number.extend({toInt:function(){return parseInt(this);},toFloat:function(){return parseFloat(this);},limit:function(B,A){return Math.min(A,Math.max(B,this));
},round:function(A){A=Math.pow(10,A||0);return Math.round(this*A)/A;},times:function(B){for(var A=0;A<this;A++){B(A);}}});var Element=new Class({initialize:function(D,C){if($type(D)=="string"){if(window.ie&&C&&(C.name||C.type)){var A=(C.name)?' name="'+C.name+'"':"";
var B=(C.type)?' type="'+C.type+'"':"";delete C.name;delete C.type;D="<"+D+A+B+">";}D=document.createElement(D);}D=$(D);return(!C||!D)?D:D.set(C);}});var Elements=new Class({initialize:function(A){return(A)?$extend(A,this):this;
}});Elements.extend=function(A){for(var B in A){this.prototype[B]=A[B];this[B]=$native.generic(B);}};function $(B){if(!B){return null;}if(B.htmlElement){return Garbage.collect(B);
}if([window,document].contains(B)){return B;}var A=$type(B);if(A=="string"){B=document.getElementById(B);A=(B)?"element":false;}if(A!="element"){return null;
}if(B.htmlElement){return Garbage.collect(B);}if(["object","embed"].contains(B.tagName.toLowerCase())){return B;}$extend(B,Element.prototype);B.htmlElement=function(){};
return Garbage.collect(B);}document.getElementsBySelector=document.getElementsByTagName;function $$(){var D=[];for(var C=0,B=arguments.length;C<B;C++){var A=arguments[C];
switch($type(A)){case"element":D.push(A);case"boolean":break;case false:break;case"string":A=document.getElementsBySelector(A,true);default:D.extend(A);
}}return $$.unique(D);}$$.unique=function(G){var D=[];for(var C=0,A=G.length;C<A;C++){if(G[C].$included){continue;}var B=$(G[C]);if(B&&!B.$included){B.$included=true;
D.push(B);}}for(var F=0,E=D.length;F<E;F++){D[F].$included=null;}return new Elements(D);};Elements.Multi=function(A){return function(){var D=arguments;
var B=[];var G=true;for(var E=0,C=this.length,F;E<C;E++){F=this[E][A].apply(this[E],D);if($type(F)!="element"){G=false;}B.push(F);}return(G)?$$.unique(B):B;
};};Element.extend=function(A){for(var B in A){HTMLElement.prototype[B]=A[B];Element.prototype[B]=A[B];Element[B]=$native.generic(B);var C=(Array.prototype[B])?B+"Elements":B;
Elements.prototype[C]=Elements.Multi(B);}};Element.extend({set:function(A){for(var C in A){var B=A[C];switch(C){case"styles":this.setStyles(B);break;case"events":if(this.addEvents){this.addEvents(B);
}break;case"properties":this.setProperties(B);break;default:this.setProperty(C,B);}}return this;},inject:function(C,A){C=$(C);switch(A){case"before":C.parentNode.insertBefore(this,C);
break;case"after":var B=C.getNext();if(!B){C.parentNode.appendChild(this);}else{C.parentNode.insertBefore(this,B);}break;case"top":var D=C.firstChild;if(D){C.insertBefore(this,D);
break;}default:C.appendChild(this);}return this;},injectBefore:function(A){return this.inject(A,"before");},injectAfter:function(A){return this.inject(A,"after");
},injectInside:function(A){return this.inject(A,"bottom");},injectTop:function(A){return this.inject(A,"top");},adopt:function(){var A=[];$each(arguments,function(B){A=A.concat(B);
});$$(A).inject(this);return this;},remove:function(){return this.parentNode.removeChild(this);},clone:function(C){var B=$(this.cloneNode(C!==false));if(!B.$events){return B;
}B.$events={};for(var A in this.$events){B.$events[A]={"keys":$A(this.$events[A].keys),"values":$A(this.$events[A].values)};}return B.removeEvents();},replaceWith:function(A){A=$(A);
this.parentNode.replaceChild(A,this);return A;},appendText:function(A){this.appendChild(document.createTextNode(A));return this;},hasClass:function(A){return this.className.contains(A," ");
},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean();}return this;},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();
return this;},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A);},setStyle:function(B,A){switch(B){case"opacity":return this.setOpacity(parseFloat(A));
case"float":B=(window.ie)?"styleFloat":"cssFloat";}B=B.camelCase();switch($type(A)){case"number":if(!["zIndex","zoom"].contains(B)){A+="px";}break;case"array":A="rgb("+A.join(",")+")";
}this.style[B]=A;return this;},setStyles:function(A){switch($type(A)){case"object":Element.setMany(this,"setStyle",A);break;case"string":this.style.cssText=A;
}return this;},setOpacity:function(A){if(A==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden";}}else{if(this.style.visibility!="visible"){this.style.visibility="visible";
}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(window.ie){this.style.filter=(A==1)?"":"alpha(opacity="+A*100+")";}this.style.opacity=this.$tmp.opacity=A;
return this;},getStyle:function(C){C=C.camelCase();var A=this.style[C];if(!$chk(A)){if(C=="opacity"){return this.$tmp.opacity;}A=[];for(var B in Element.Styles){if(C==B){Element.Styles[B].each(function(F){var E=this.getStyle(F);
A.push(parseInt(E)?E:"0px");},this);if(C=="border"){var D=A.every(function(E){return(E==A[0]);});return(D)?A[0]:false;}return A.join(" ");}}if(C.contains("border")){if(Element.Styles.border.contains(C)){return["Width","Style","Color"].map(function(E){return this.getStyle(C+E);
},this).join(" ");}else{if(Element.borderShort.contains(C)){return["Top","Right","Bottom","Left"].map(function(E){return this.getStyle("border"+E+C.replace("border",""));
},this).join(" ");}}}if(document.defaultView){A=document.defaultView.getComputedStyle(this,null).getPropertyValue(C.hyphenate());}else{if(this.currentStyle){A=this.currentStyle[C];
}}}if(window.ie){A=Element.fixStyle(C,A,this);}if(A&&C.test(/color/i)&&A.contains("rgb")){return A.split("rgb").splice(1,4).map(function(E){return E.rgbToHex();
}).join(" ");}return A;},getStyles:function(){return Element.getMany(this,"getStyle",arguments);},walk:function(A,C){A+="Sibling";var B=(C)?this[C]:this[A];
while(B&&$type(B)!="element"){B=B[A];}return $(B);},getPrevious:function(){return this.walk("previous");},getNext:function(){return this.walk("next");},getFirst:function(){return this.walk("next","firstChild");
},getLast:function(){return this.walk("previous","lastChild");},getParent:function(){return $(this.parentNode);},getChildren:function(){return $$(this.childNodes);
},hasChild:function(A){return !!$A(this.getElementsByTagName("*")).contains(A);},getProperty:function(D){var B=Element.Properties[D];if(B){return this[B];
}var A=Element.PropertiesIFlag[D]||0;if(!window.ie||A){return this.getAttribute(D,A);}var C=this.attributes[D];return(C)?C.nodeValue:null;},removeProperty:function(B){var A=Element.Properties[B];
if(A){this[A]="";}else{this.removeAttribute(B);}return this;},getProperties:function(){return Element.getMany(this,"getProperty",arguments);},setProperty:function(C,B){var A=Element.Properties[C];
if(A){this[A]=B;}else{this.setAttribute(C,B);}return this;},setProperties:function(A){return Element.setMany(this,"setProperty",A);},setHTML:function(){this.innerHTML=$A(arguments).join("");
return this;},setText:function(B){var A=this.getTag();if(["style","script"].contains(A)){if(window.ie){if(A=="style"){this.styleSheet.cssText=B;}else{if(A=="script"){this.setProperty("text",B);
}}return this;}else{this.removeChild(this.firstChild);return this.appendText(B);}}this[$defined(this.innerText)?"innerText":"textContent"]=B;return this;
},getText:function(){var A=this.getTag();if(["style","script"].contains(A)){if(window.ie){if(A=="style"){return this.styleSheet.cssText;}else{if(A=="script"){return this.getProperty("text");
}}}else{return this.innerHTML;}}return($pick(this.innerText,this.textContent));},getTag:function(){return this.tagName.toLowerCase();},empty:function(){Garbage.trash(this.getElementsByTagName("*"));
return this.setHTML("");}});Element.fixStyle=function(E,A,D){if($chk(parseInt(A))){return A;}if(["height","width"].contains(E)){var B=(E=="width")?["left","right"]:["top","bottom"];
var C=0;B.each(function(F){C+=D.getStyle("border-"+F+"-width").toInt()+D.getStyle("padding-"+F).toInt();});return D["offset"+E.capitalize()]-C+"px";}else{if(E.test(/border(.+)Width|margin|padding/)){return"0px";
}}return A;};Element.Styles={"border":[],"padding":[],"margin":[]};["Top","Right","Bottom","Left"].each(function(B){for(var A in Element.Styles){Element.Styles[A].push(A+B);
}});Element.borderShort=["borderWidth","borderStyle","borderColor"];Element.getMany=function(B,D,C){var A={};$each(C,function(E){A[E]=B[D](E);});return A;
};Element.setMany=function(B,D,C){for(var A in C){B[D](A,C[A]);}return B;};Element.Properties=new Abstract({"class":"className","for":"htmlFor","colspan":"colSpan","rowspan":"rowSpan","accesskey":"accessKey","tabindex":"tabIndex","maxlength":"maxLength","readonly":"readOnly","frameborder":"frameBorder","value":"value","disabled":"disabled","checked":"checked","multiple":"multiple","selected":"selected"});
Element.PropertiesIFlag={"href":2,"src":2};Element.Methods={Listeners:{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false);
}else{this.attachEvent("on"+B,A);}return this;},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false);}else{this.detachEvent("on"+B,A);
}return this;}}};window.extend(Element.Methods.Listeners);document.extend(Element.Methods.Listeners);Element.extend(Element.Methods.Listeners);var Garbage={elements:[],collect:function(A){if(!A.$tmp){Garbage.elements.push(A);
A.$tmp={"opacity":1};}return A;},trash:function(D){for(var B=0,A=D.length,C;B<A;B++){if(!(C=D[B])||!C.$tmp){continue;}if(C.$events){C.fireEvent("trash").removeEvents();
}for(var E in C.$tmp){C.$tmp[E]=null;}for(var F in Element.prototype){C[F]=null;}Garbage.elements[Garbage.elements.indexOf(C)]=null;C.htmlElement=C.$tmp=C=null;
}Garbage.elements.remove(null);},empty:function(){Garbage.collect(window);Garbage.collect(document);Garbage.trash(Garbage.elements);}};window.addListener("beforeunload",function(){window.addListener("unload",Garbage.empty);
if(window.ie){window.addListener("unload",CollectGarbage);}});var Event=new Class({initialize:function(C){if(C&&C.$extended){return C;}this.$extended=true;
C=C||window.event;this.event=C;this.type=C.type;this.target=C.target||C.srcElement;if(this.target.nodeType==3){this.target=this.target.parentNode;}this.shift=C.shiftKey;
this.control=C.ctrlKey;this.alt=C.altKey;this.meta=C.metaKey;if(["DOMMouseScroll","mousewheel"].contains(this.type)){this.wheel=(C.wheelDelta)?C.wheelDelta/120:-(C.detail||0)/3;
}else{if(this.type.contains("key")){this.code=C.which||C.keyCode;for(var B in Event.keys){if(Event.keys[B]==this.code){this.key=B;break;}}if(this.type=="keydown"){var A=this.code-111;
if(A>0&&A<13){this.key="f"+A;}}this.key=this.key||String.fromCharCode(this.code).toLowerCase();}else{if(this.type.test(/(click|mouse|menu)/)){this.page={"x":C.pageX||C.clientX+document.documentElement.scrollLeft,"y":C.pageY||C.clientY+document.documentElement.scrollTop};
this.client={"x":C.pageX?C.pageX-window.pageXOffset:C.clientX,"y":C.pageY?C.pageY-window.pageYOffset:C.clientY};this.rightClick=(C.which==3)||(C.button==2);
switch(this.type){case"mouseover":this.relatedTarget=C.relatedTarget||C.fromElement;break;case"mouseout":this.relatedTarget=C.relatedTarget||C.toElement;
}this.fixRelatedTarget();}}}return this;},stop:function(){return this.stopPropagation().preventDefault();},stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();
}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault();}else{this.event.returnValue=false;
}return this;}});Event.fix={relatedTarget:function(){if(this.relatedTarget&&this.relatedTarget.nodeType==3){this.relatedTarget=this.relatedTarget.parentNode;
}},relatedTargetGecko:function(){try{Event.fix.relatedTarget.call(this);}catch(A){this.relatedTarget=this.target;}}};Event.prototype.fixRelatedTarget=(window.gecko)?Event.fix.relatedTargetGecko:Event.fix.relatedTarget;
Event.keys=new Abstract({"enter":13,"up":38,"down":40,"left":37,"right":39,"esc":27,"space":32,"backspace":8,"tab":9,"delete":46});Element.Methods.Events={addEvent:function(C,B){this.$events=this.$events||{};
this.$events[C]=this.$events[C]||{"keys":[],"values":[]};if(this.$events[C].keys.contains(B)){return this;}this.$events[C].keys.push(B);var A=C;var D=Element.Events[C];
if(D){if(D.add){D.add.call(this,B);}if(D.map){B=D.map;}if(D.type){A=D.type;}}if(!this.addEventListener){B=B.create({"bind":this,"event":true});}this.$events[C].values.push(B);
return(Element.NativeEvents.contains(A))?this.addListener(A,B):this;},removeEvent:function(C,B){if(!this.$events||!this.$events[C]){return this;}var F=this.$events[C].keys.indexOf(B);
if(F==-1){return this;}var A=this.$events[C].keys.splice(F,1)[0];var E=this.$events[C].values.splice(F,1)[0];var D=Element.Events[C];if(D){if(D.remove){D.remove.call(this,B);
}if(D.type){C=D.type;}}return(Element.NativeEvents.contains(C))?this.removeListener(C,E):this;},addEvents:function(A){return Element.setMany(this,"addEvent",A);
},removeEvents:function(A){if(!this.$events){return this;}if(!A){for(var B in this.$events){this.removeEvents(B);}this.$events=null;}else{if(this.$events[A]){this.$events[A].keys.each(function(C){this.removeEvent(A,C);
},this);this.$events[A]=null;}}return this;},fireEvent:function(C,B,A){if(this.$events&&this.$events[C]){this.$events[C].keys.each(function(D){D.create({"bind":this,"delay":A,"arguments":B})();
},this);}return this;},cloneEvents:function(C,A){if(!C.$events){return this;}if(!A){for(var B in C.$events){this.cloneEvents(C,B);}}else{if(C.$events[A]){C.$events[A].keys.each(function(D){this.addEvent(A,D);
},this);}}return this;}};window.extend(Element.Methods.Events);document.extend(Element.Methods.Events);Element.extend(Element.Methods.Events);Element.Events=new Abstract({"mouseenter":{type:"mouseover",map:function(A){A=new Event(A);
if(A.relatedTarget!=this&&!this.hasChild(A.relatedTarget)){this.fireEvent("mouseenter",A);}}},"mouseleave":{type:"mouseout",map:function(A){A=new Event(A);
if(A.relatedTarget!=this&&!this.hasChild(A.relatedTarget)){this.fireEvent("mouseleave",A);}}},"mousewheel":{type:(window.gecko)?"DOMMouseScroll":"mousewheel"}});
Element.NativeEvents=["click","dblclick","mouseup","mousedown","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","keydown","keypress","keyup","load","unload","beforeunload","resize","move","focus","blur","change","submit","reset","select","error","abort","contextmenu","scroll"];
Function.extend({bindWithEvent:function(B,A){return this.create({"bind":B,"arguments":A,"event":Event});}});Elements.extend({filterByTag:function(A){return new Elements(this.filter(function(B){return(Element.getTag(B)==A);
}));},filterByClass:function(A,C){var B=this.filter(function(D){return(D.className&&D.className.contains(A," "));});return(C)?B:new Elements(B);},filterById:function(C,B){var A=this.filter(function(D){return(D.id==C);
});return(B)?A:new Elements(A);},filterByAttribute:function(B,A,D,E){var C=this.filter(function(F){var G=Element.getProperty(F,B);if(!G){return false;}if(!A){return true;
}switch(A){case"=":return(G==D);case"*=":return(G.contains(D));case"^=":return(G.substr(0,D.length)==D);case"$=":return(G.substr(G.length-D.length)==D);
case"!=":return(G!=D);case"~=":return G.contains(D," ");}return false;});return(E)?C:new Elements(C);}});function $E(A,B){return($(B)||document).getElement(A);
}function $ES(A,B){return($(B)||document).getElementsBySelector(A);}$$.shared={"regexp":/^(\w*|\*)(?:#([\w-]+)|\.([\w-]+))?(?:\[(\w+)(?:([!*^$]?=)["']?([^"'\]]*)["']?)?])?$/,"xpath":{getParam:function(B,D,E,C){var A=[D.namespaceURI?"xhtml:":"",E[1]];
if(E[2]){A.push('[@id="',E[2],'"]');}if(E[3]){A.push('[contains(concat(" ", @class, " "), " ',E[3],' ")]');}if(E[4]){if(E[5]&&E[6]){switch(E[5]){case"*=":A.push("[contains(@",E[4],', "',E[6],'")]');
break;case"^=":A.push("[starts-with(@",E[4],', "',E[6],'")]');break;case"$=":A.push("[substring(@",E[4],", string-length(@",E[4],") - ",E[6].length,' + 1) = "',E[6],'"]');
break;case"=":A.push("[@",E[4],'="',E[6],'"]');break;case"!=":A.push("[@",E[4],'!="',E[6],'"]');}}else{A.push("[@",E[4],"]");}}B.push(A.join(""));return B;
},getItems:function(B,E,G){var F=[];var A=document.evaluate(".//"+B.join("//"),E,$$.shared.resolver,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);for(var D=0,C=A.snapshotLength;
D<C;D++){F.push(A.snapshotItem(D));}return(G)?F:new Elements(F.map($));}},"normal":{getParam:function(A,C,E,B){if(B==0){if(E[2]){var D=C.getElementById(E[2]);
if(!D||((E[1]!="*")&&(Element.getTag(D)!=E[1]))){return false;}A=[D];}else{A=$A(C.getElementsByTagName(E[1]));}}else{A=$$.shared.getElementsByTagName(A,E[1]);
if(E[2]){A=Elements.filterById(A,E[2],true);}}if(E[3]){A=Elements.filterByClass(A,E[3],true);}if(E[4]){A=Elements.filterByAttribute(A,E[4],E[5],E[6],true);
}return A;},getItems:function(A,B,C){return(C)?A:$$.unique(A);}},resolver:function(A){return(A=="xhtml")?"http://www.w3.org/1999/xhtml":false;},getElementsByTagName:function(D,C){var E=[];
for(var B=0,A=D.length;B<A;B++){E.extend(D[B].getElementsByTagName(C));}return E;}};$$.shared.method=(window.xpath)?"xpath":"normal";Element.Methods.Dom={getElements:function(A,H){var C=[];
A=A.trim().split(" ");for(var E=0,D=A.length;E<D;E++){var F=A[E];var G=F.match($$.shared.regexp);if(!G){break;}G[1]=G[1]||"*";var B=$$.shared[$$.shared.method].getParam(C,this,G,E);
if(!B){break;}C=B;}return $$.shared[$$.shared.method].getItems(C,this,H);},getElement:function(A){return $(this.getElements(A,true)[0]||false);},getElementsBySelector:function(A,E){var D=[];
A=A.split(",");for(var C=0,B=A.length;C<B;C++){D=D.concat(this.getElements(A[C],true));}return(E)?D:$$.unique(D);}};Element.extend({getElementById:function(C){var B=document.getElementById(C);
if(!B){return false;}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return false;}}return B;},getElementsByClassName:function(A){return this.getElements("."+A);
}});document.extend(Element.Methods.Dom);Element.extend(Element.Methods.Dom);Element.extend({getValue:function(){switch(this.getTag()){case"select":var A=[];
$each(this.options,function(B){if(B.selected){A.push($pick(B.value,B.text));}});return(this.multiple)?A:A[0];case"input":if(!(this.checked&&["checkbox","radio"].contains(this.type))&&!["hidden","text","password"].contains(this.type)){break;
}case"textarea":return this.value;}return false;},getFormElements:function(){return $$(this.getElementsByTagName("input"),this.getElementsByTagName("select"),this.getElementsByTagName("textarea"));
},toQueryString:function(){var A=[];this.getFormElements().each(function(D){var C=D.name;var E=D.getValue();if(E===false||!C||D.disabled){return ;}var B=function(F){A.push(C+"="+encodeURIComponent(F));
};if($type(E)=="array"){E.each(B);}else{B(E);}});return A.join("&");}});Element.extend({scrollTo:function(A,B){this.scrollLeft=A;this.scrollTop=B;},getSize:function(){return{"scroll":{"x":this.scrollLeft,"y":this.scrollTop},"size":{"x":this.offsetWidth,"y":this.offsetHeight},"scrollSize":{"x":this.scrollWidth,"y":this.scrollHeight}};
},getPosition:function(A){A=A||[];var B=this,D=0,C=0;do{D+=B.offsetLeft||0;C+=B.offsetTop||0;B=B.offsetParent;}while(B);A.each(function(E){D-=E.scrollLeft||0;
C-=E.scrollTop||0;});return{"x":D,"y":C};},getTop:function(A){return this.getPosition(A).y;},getLeft:function(A){return this.getPosition(A).x;},getCoordinates:function(B){var A=this.getPosition(B);
var C={"width":this.offsetWidth,"height":this.offsetHeight,"left":A.x,"top":A.y};C.right=C.left+C.width;C.bottom=C.top+C.height;return C;}});Element.Events.domready={add:function(B){if(window.loaded){B.call(this);
return ;}var A=function(){if(window.loaded){return ;}window.loaded=true;window.timer=$clear(window.timer);this.fireEvent("domready");}.bind(this);if(document.readyState&&window.webkit){window.timer=function(){if(["loaded","complete"].contains(document.readyState)){A();
}}.periodical(50);}else{if(document.readyState&&window.ie){if(!$("ie_ready")){var C=(window.location.protocol=="https:")?"://0":"javascript:void(0)";document.write('<script id="ie_ready" defer src="'+C+'"><\/script>');
$("ie_ready").onreadystatechange=function(){if(this.readyState=="complete"){A();}};}}else{window.addListener("load",A);document.addListener("DOMContentLoaded",A);
}}}};window.onDomReady=function(A){return this.addEvent("domready",A);};window.extend({getWidth:function(){if(this.webkit419){return this.innerWidth;}if(this.opera){return document.body.clientWidth;
}return document.documentElement.clientWidth;},getHeight:function(){if(this.webkit419){return this.innerHeight;}if(this.opera){return document.body.clientHeight;
}return document.documentElement.clientHeight;},getScrollWidth:function(){if(this.ie){return Math.max(document.documentElement.offsetWidth,document.documentElement.scrollWidth);
}if(this.webkit){return document.body.scrollWidth;}return document.documentElement.scrollWidth;},getScrollHeight:function(){if(this.ie){return Math.max(document.documentElement.offsetHeight,document.documentElement.scrollHeight);
}if(this.webkit){return document.body.scrollHeight;}return document.documentElement.scrollHeight;},getScrollLeft:function(){return this.pageXOffset||document.documentElement.scrollLeft;
},getScrollTop:function(){return this.pageYOffset||document.documentElement.scrollTop;},getSize:function(){return{"size":{"x":this.getWidth(),"y":this.getHeight()},"scrollSize":{"x":this.getScrollWidth(),"y":this.getScrollHeight()},"scroll":{"x":this.getScrollLeft(),"y":this.getScrollTop()}};
},getPosition:function(){return{"x":0,"y":0};}});var Fx={};Fx.Base=new Class({options:{onStart:Class.empty,onComplete:Class.empty,onCancel:Class.empty,transition:function(A){return -(Math.cos(Math.PI*A)-1)/2;
},duration:500,unit:"px",wait:true,fps:50},initialize:function(A){this.element=this.element||null;this.setOptions(A);if(this.options.initialize){this.options.initialize.call(this);
}},step:function(){var A=$time();if(A<this.time+this.options.duration){this.delta=this.options.transition((A-this.time)/this.options.duration);this.setNow();
this.increase();}else{this.stop(true);this.set(this.to);this.fireEvent("onComplete",this.element,10);this.callChain();}},set:function(A){this.now=A;this.increase();
return this;},setNow:function(){this.now=this.compute(this.from,this.to);},compute:function(B,A){return(A-B)*this.delta+B;},start:function(B,A){if(!this.options.wait){this.stop();
}else{if(this.timer){return this;}}this.from=B;this.to=A;this.change=this.to-this.from;this.time=$time();this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);
this.fireEvent("onStart",this.element);return this;},stop:function(A){if(!this.timer){return this;}this.timer=$clear(this.timer);if(!A){this.fireEvent("onCancel",this.element);
}return this;},custom:function(B,A){return this.start(B,A);},clearTimer:function(A){return this.stop(A);}});Fx.Base.implement(new Chain,new Events,new Options);
Fx.CSS={select:function(B,C){if(B.test(/color/i)){return this.Color;}var A=$type(C);if((A=="array")||(A=="string"&&C.contains(" "))){return this.Multi;
}return this.Single;},parse:function(C,D,A){if(!A.push){A=[A];}var F=A[0],E=A[1];if(!$chk(E)){E=F;F=C.getStyle(D);}var B=this.select(D,E);return{"from":B.parse(F),"to":B.parse(E),"css":B};
}};Fx.CSS.Single={parse:function(A){return parseFloat(A);},getNow:function(C,B,A){return A.compute(C,B);},getValue:function(C,A,B){if(A=="px"&&B!="opacity"){C=Math.round(C);
}return C+A;}};Fx.CSS.Multi={parse:function(A){return A.push?A:A.split(" ").map(function(B){return parseFloat(B);});},getNow:function(E,D,C){var A=[];for(var B=0;
B<E.length;B++){A[B]=C.compute(E[B],D[B]);}return A;},getValue:function(C,A,B){if(A=="px"&&B!="opacity"){C=C.map(Math.round);}return C.join(A+" ")+A;}};
Fx.CSS.Color={parse:function(A){return A.push?A:A.hexToRgb(true);},getNow:function(E,D,C){var A=[];for(var B=0;B<E.length;B++){A[B]=Math.round(C.compute(E[B],D[B]));
}return A;},getValue:function(A){return"rgb("+A.join(",")+")";}};Fx.Style=Fx.Base.extend({initialize:function(B,C,A){this.element=$(B);this.property=C;
this.parent(A);},hide:function(){return this.set(0);},setNow:function(){this.now=this.css.getNow(this.from,this.to,this);},set:function(A){this.css=Fx.CSS.select(this.property,A);
return this.parent(this.css.parse(A));},start:function(C,B){if(this.timer&&this.options.wait){return this;}var A=Fx.CSS.parse(this.element,this.property,[C,B]);
this.css=A.css;return this.parent(A.from,A.to);},increase:function(){this.element.setStyle(this.property,this.css.getValue(this.now,this.options.unit,this.property));
}});Element.extend({effect:function(B,A){return new Fx.Style(this,B,A);}});Fx.Styles=Fx.Base.extend({initialize:function(B,A){this.element=$(B);this.parent(A);
},setNow:function(){for(var A in this.from){this.now[A]=this.css[A].getNow(this.from[A],this.to[A],this);}},set:function(C){var A={};this.css={};for(var B in C){this.css[B]=Fx.CSS.select(B,C[B]);
A[B]=this.css[B].parse(C[B]);}return this.parent(A);},start:function(C){if(this.timer&&this.options.wait){return this;}this.now={};this.css={};var E={},D={};
for(var B in C){var A=Fx.CSS.parse(this.element,B,C[B]);E[B]=A.from;D[B]=A.to;this.css[B]=A.css;}return this.parent(E,D);},increase:function(){for(var A in this.now){this.element.setStyle(A,this.css[A].getValue(this.now[A],this.options.unit,A));
}}});Element.extend({effects:function(A){return new Fx.Styles(this,A);}});Fx.Elements=Fx.Base.extend({initialize:function(B,A){this.elements=$$(B);this.parent(A);
},setNow:function(){for(var C in this.from){var F=this.from[C],E=this.to[C],B=this.css[C],A=this.now[C]={};for(var D in F){A[D]=B[D].getNow(F[D],E[D],this);
}}},set:function(G){var B={};this.css={};for(var D in G){var F=G[D],C=this.css[D]={},A=B[D]={};for(var E in F){C[E]=Fx.CSS.select(E,F[E]);A[E]=C[E].parse(F[E]);
}}return this.parent(B);},start:function(D){if(this.timer&&this.options.wait){return this;}this.now={};this.css={};var I={},J={};for(var E in D){var G=D[E],A=I[E]={},H=J[E]={},C=this.css[E]={};
for(var B in G){var F=Fx.CSS.parse(this.elements[E],B,G[B]);A[B]=F.from;H[B]=F.to;C[B]=F.css;}}return this.parent(I,J);},increase:function(){for(var C in this.now){var A=this.now[C],B=this.css[C];
for(var D in A){this.elements[C].setStyle(D,B[D].getValue(A[D],this.options.unit,D));}}}});Fx.Scroll=Fx.Base.extend({options:{overflown:[],offset:{"x":0,"y":0},wheelStops:true},initialize:function(B,A){this.now=[];
this.element=$(B);this.bound={"stop":this.stop.bind(this,false)};this.parent(A);if(this.options.wheelStops){this.addEvent("onStart",function(){document.addEvent("mousewheel",this.bound.stop);
}.bind(this));this.addEvent("onComplete",function(){document.removeEvent("mousewheel",this.bound.stop);}.bind(this));}},setNow:function(){for(var A=0;A<2;
A++){this.now[A]=this.compute(this.from[A],this.to[A]);}},scrollTo:function(B,F){if(this.timer&&this.options.wait){return this;}var D=this.element.getSize();
var C={"x":B,"y":F};for(var E in D.size){var A=D.scrollSize[E]-D.size[E];if($chk(C[E])){C[E]=($type(C[E])=="number")?C[E].limit(0,A):A;}else{C[E]=D.scroll[E];
}C[E]+=this.options.offset[E];}return this.start([D.scroll.x,D.scroll.y],[C.x,C.y]);},toTop:function(){return this.scrollTo(false,0);},toBottom:function(){return this.scrollTo(false,"full");
},toLeft:function(){return this.scrollTo(0,false);},toRight:function(){return this.scrollTo("full",false);},toElement:function(B){var A=this.element.getPosition(this.options.overflown);
var C=$(B).getPosition(this.options.overflown);return this.scrollTo(C.x-A.x,C.y-A.y);},increase:function(){this.element.scrollTo(this.now[0],this.now[1]);
}});Fx.Slide=Fx.Base.extend({options:{mode:"vertical"},initialize:function(B,A){this.element=$(B);this.wrapper=new Element("div",{"styles":$extend(this.element.getStyles("margin"),{"overflow":"hidden"})}).injectAfter(this.element).adopt(this.element);
this.element.setStyle("margin",0);this.setOptions(A);this.now=[];this.parent(this.options);this.open=true;this.addEvent("onComplete",function(){this.open=(this.now[0]===0);
});if(window.webkit419){this.addEvent("onComplete",function(){if(this.open){this.element.remove().inject(this.wrapper);}});}},setNow:function(){for(var A=0;
A<2;A++){this.now[A]=this.compute(this.from[A],this.to[A]);}},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight;
},horizontal:function(){this.margin="margin-left";this.layout="width";this.offset=this.element.offsetWidth;},slideIn:function(A){this[A||this.options.mode]();
return this.start([this.element.getStyle(this.margin).toInt(),this.wrapper.getStyle(this.layout).toInt()],[0,this.offset]);},slideOut:function(A){this[A||this.options.mode]();
return this.start([this.element.getStyle(this.margin).toInt(),this.wrapper.getStyle(this.layout).toInt()],[-this.offset,0]);},hide:function(A){this[A||this.options.mode]();
this.open=false;return this.set([-this.offset,0]);},show:function(A){this[A||this.options.mode]();this.open=true;return this.set([0,this.offset]);},toggle:function(A){if(this.wrapper.offsetHeight==0||this.wrapper.offsetWidth==0){return this.slideIn(A);
}return this.slideOut(A);},increase:function(){this.element.setStyle(this.margin,this.now[0]+this.options.unit);this.wrapper.setStyle(this.layout,this.now[1]+this.options.unit);
}});Fx.Transition=function(B,A){A=A||[];if($type(A)!="array"){A=[A];}return $extend(B,{easeIn:function(C){return B(C,A);},easeOut:function(C){return 1-B(1-C,A);
},easeInOut:function(C){return(C<=0.5)?B(2*C,A)/2:(2-B(2*(1-C),A))/2;}});};Fx.Transitions=new Abstract({linear:function(A){return A;}});Fx.Transitions.extend=function(A){for(var B in A){Fx.Transitions[B]=new Fx.Transition(A[B]);
Fx.Transitions.compat(B);}};Fx.Transitions.compat=function(A){["In","Out","InOut"].each(function(B){Fx.Transitions[A.toLowerCase()+B]=Fx.Transitions[A]["ease"+B];
});};Fx.Transitions.extend({Pow:function(B,A){return Math.pow(B,A[0]||6);},Expo:function(A){return Math.pow(2,8*(A-1));},Circ:function(A){return 1-Math.sin(Math.acos(A));
},Sine:function(A){return 1-Math.sin((1-A)*Math.PI/2);},Back:function(B,A){A=A[0]||1.618;return Math.pow(B,2)*((A+1)*B-A);},Bounce:function(D){var C;for(var B=0,A=1;
1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;break;}}return C;},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3);
}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2]);});Fx.Transitions.compat(B);
});var Drag={};Drag.Base=new Class({options:{handle:false,unit:"px",onStart:Class.empty,onBeforeStart:Class.empty,onComplete:Class.empty,onSnap:Class.empty,onDrag:Class.empty,limit:false,modifiers:{x:"left",y:"top"},grid:false,snap:6},initialize:function(B,A){this.setOptions(A);
this.element=$(B);this.handle=$(this.options.handle)||this.element;this.mouse={"now":{},"pos":{}};this.value={"start":{},"now":{}};this.bound={"start":this.start.bindWithEvent(this),"check":this.check.bindWithEvent(this),"drag":this.drag.bindWithEvent(this),"stop":this.stop.bind(this)};
this.attach();if(this.options.initialize){this.options.initialize.call(this);}},attach:function(){this.handle.addEvent("mousedown",this.bound.start);return this;
},detach:function(){this.handle.removeEvent("mousedown",this.bound.start);return this;},start:function(C){this.fireEvent("onBeforeStart",this.element);
this.mouse.start=C.page;var A=this.options.limit;this.limit={"x":[],"y":[]};for(var D in this.options.modifiers){if(!this.options.modifiers[D]){continue;
}this.value.now[D]=this.element.getStyle(this.options.modifiers[D]).toInt();this.mouse.pos[D]=C.page[D]-this.value.now[D];if(A&&A[D]){for(var B=0;B<2;B++){if($chk(A[D][B])){this.limit[D][B]=($type(A[D][B])=="function")?A[D][B]():A[D][B];
}}}}if($type(this.options.grid)=="number"){this.options.grid={"x":this.options.grid,"y":this.options.grid};}document.addListener("mousemove",this.bound.check);
document.addListener("mouseup",this.bound.stop);this.fireEvent("onStart",this.element);C.stop();},check:function(A){var B=Math.round(Math.sqrt(Math.pow(A.page.x-this.mouse.start.x,2)+Math.pow(A.page.y-this.mouse.start.y,2)));
if(B>this.options.snap){document.removeListener("mousemove",this.bound.check);document.addListener("mousemove",this.bound.drag);this.drag(A);this.fireEvent("onSnap",this.element);
}A.stop();},drag:function(A){this.out=false;this.mouse.now=A.page;for(var B in this.options.modifiers){if(!this.options.modifiers[B]){continue;}this.value.now[B]=this.mouse.now[B]-this.mouse.pos[B];
if(this.limit[B]){if($chk(this.limit[B][1])&&(this.value.now[B]>this.limit[B][1])){this.value.now[B]=this.limit[B][1];this.out=true;}else{if($chk(this.limit[B][0])&&(this.value.now[B]<this.limit[B][0])){this.value.now[B]=this.limit[B][0];
this.out=true;}}}if(this.options.grid[B]){this.value.now[B]-=(this.value.now[B]%this.options.grid[B]);}this.element.setStyle(this.options.modifiers[B],this.value.now[B]+this.options.unit);
}this.fireEvent("onDrag",this.element);A.stop();},stop:function(){document.removeListener("mousemove",this.bound.check);document.removeListener("mousemove",this.bound.drag);
document.removeListener("mouseup",this.bound.stop);this.fireEvent("onComplete",this.element);}});Drag.Base.implement(new Events,new Options);Element.extend({makeResizable:function(A){return new Drag.Base(this,$merge({modifiers:{x:"width",y:"height"}},A));
}});Drag.Move=Drag.Base.extend({options:{droppables:[],container:false,overflown:[]},initialize:function(B,A){this.setOptions(A);this.element=$(B);this.droppables=$$(this.options.droppables);
this.container=$(this.options.container);this.position={"element":this.element.getStyle("position"),"container":false};if(this.container){this.position.container=this.container.getStyle("position");
}if(!["relative","absolute","fixed"].contains(this.position.element)){this.position.element="absolute";}var D=this.element.getStyle("top").toInt();var C=this.element.getStyle("left").toInt();
if(this.position.element=="absolute"&&!["relative","absolute","fixed"].contains(this.position.container)){D=$chk(D)?D:this.element.getTop(this.options.overflown);
C=$chk(C)?C:this.element.getLeft(this.options.overflown);}else{D=$chk(D)?D:0;C=$chk(C)?C:0;}this.element.setStyles({"top":D,"left":C,"position":this.position.element});
this.parent(this.element);},start:function(C){this.overed=null;if(this.container){var A=this.container.getCoordinates();var B=this.element.getCoordinates();
if(this.position.element=="absolute"&&!["relative","absolute","fixed"].contains(this.position.container)){this.options.limit={"x":[A.left,A.right-B.width],"y":[A.top,A.bottom-B.height]};
}else{this.options.limit={"y":[0,A.height-B.height],"x":[0,A.width-B.width]};}}this.parent(C);},drag:function(A){this.parent(A);var B=this.out?false:this.droppables.filter(this.checkAgainst,this).getLast();
if(this.overed!=B){if(this.overed){this.overed.fireEvent("leave",[this.element,this]);}this.overed=B?B.fireEvent("over",[this.element,this]):null;}return this;
},checkAgainst:function(B){B=B.getCoordinates(this.options.overflown);var A=this.mouse.now;return(A.x>B.left&&A.x<B.right&&A.y<B.bottom&&A.y>B.top);},stop:function(){if(this.overed&&!this.out){this.overed.fireEvent("drop",[this.element,this]);
}else{this.element.fireEvent("emptydrop",this);}this.parent();return this;}});Element.extend({makeDraggable:function(A){return new Drag.Move(this,A);}});
var Cookie=new Abstract({options:{domain:false,path:false,duration:false,secure:false},set:function(C,D,B){B=$merge(this.options,B);D=encodeURIComponent(D);
if(B.domain){D+="; domain="+B.domain;}if(B.path){D+="; path="+B.path;}if(B.duration){var A=new Date();A.setTime(A.getTime()+B.duration*24*60*60*1000);D+="; expires="+A.toGMTString();
}if(B.secure){D+="; secure";}document.cookie=C+"="+D;return $extend(B,{"key":C,"value":D});},get:function(A){var B=document.cookie.match("(?:^|;)\\s*"+A.escapeRegExp()+"=([^;]*)");
return B?decodeURIComponent(B[1]):false;},remove:function(B,A){if($type(B)=="object"){this.set(B.key,"",$merge(B,{duration:-1}));}else{this.set(B,"",$merge(A,{duration:-1}));
}}});var Json={toString:function(C){switch($type(C)){case"string":return'"'+C.replace(/(["\\])/g,"\\$1")+'"';case"array":return"["+C.map(Json.toString).join(",")+"]";
case"object":var A=[];for(var B in C){A.push(Json.toString(B)+":"+Json.toString(C[B]));}return"{"+A.join(",")+"}";case"number":if(isFinite(C)){break;}case false:return"null";
}return String(C);},evaluate:function(str,secure){return(($type(str)!="string")||(secure&&!str.test(/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/)))?null:eval("("+str+")");
}};var Hash=new Class({length:0,initialize:function(A){this.obj=A||{};this.setLength();},get:function(A){return(this.hasKey(A))?this.obj[A]:null;},hasKey:function(A){return(A in this.obj);
},set:function(A,B){if(!this.hasKey(A)){this.length++;}this.obj[A]=B;return this;},setLength:function(){this.length=0;for(var A in this.obj){this.length++;
}return this;},remove:function(A){if(this.hasKey(A)){delete this.obj[A];this.length--;}return this;},each:function(A,B){$each(this.obj,A,B);},extend:function(A){$extend(this.obj,A);
return this.setLength();},merge:function(){this.obj=$merge.apply(null,[this.obj].extend(arguments));return this.setLength();},empty:function(){this.obj={};
this.length=0;return this;},keys:function(){var A=[];for(var B in this.obj){A.push(B);}return A;},values:function(){var A=[];for(var B in this.obj){A.push(this.obj[B]);
}return A;}});function $H(A){return new Hash(A);}Hash.Cookie=Hash.extend({initialize:function(B,A){this.name=B;this.options=$extend({"autoSave":true},A||{});
this.load();},save:function(){if(this.length==0){Cookie.remove(this.name,this.options);return true;}var A=Json.toString(this.obj);if(A.length>4096){return false;
}Cookie.set(this.name,A,this.options);return true;},load:function(){this.obj=Json.evaluate(Cookie.get(this.name),true)||{};this.setLength();}});Hash.Cookie.Methods={};
["extend","set","merge","empty","remove"].each(function(A){Hash.Cookie.Methods[A]=function(){Hash.prototype[A].apply(this,arguments);if(this.options.autoSave){this.save();
}return this;};});Hash.Cookie.implement(Hash.Cookie.Methods);



/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();

/** An object that provides DHTML history, history data, and bookmarking
	for AJAX applications. */
var rsh = {};
rsh.dhtmlHistory = {

	_currentLocation:	null,	/** Our current hash location, without the "#" symbol. */
	_listener:			null,	/** Our history change listener. */
	_iframe:			null,	/** A hidden IFrame we use in Internet Explorer to detect history changes. */
	_ignoreChange:		null,	/** Indicates to the browser whether to ignore location changes. */
	_WAIT_TIME:			200,	/** The amount of time in milliseconds that we should wait between add requests. Firefox is okay with 200 ms, but Internet Explorer needs 400. */
	_currentWaitTime:	0,		/** The amount of time in milliseconds an add request has to wait in line before being run on a window.setTimeout. */
	_fireOnNewListener:	null,	/* init state variable for !IE browsers */
	_firstLoad:			true,	/* variable to define first page load, vs history.back load */
	_ieAtomicChange:	null,	/* variable to distinguish between scripted and native url changes in IE */
	_isIE:				((document.all && navigator.userAgent.toLowerCase().indexOf('msie')!=-1)?true:false),

	init:			function()
						{
							if (this._isIE == false) {return;}

							// if this is the first time this page has loaded...
							if (this._firstLoad)
							{
								this._fireOnNewListener = false;
								this._firstLoad = false;
							}
							// else if this is a fake onload event
							else
							{
								this._fireOnNewListener = true;
							}
						},

	addListener:		function(callback)
						{
							this._listener = callback;

							// if the page was just loaded and we should not ignore it, fire an event to our new listener now
							if (this._fireOnNewListener == true)
							{
								this._fireHistoryEvent(this._currentLocation);
								this._fireOnNewListener = false;
							}
						},

	add:				function(newLocation, historyData)
						{
							var self = this;
							var addImpl =	function()
											{
												// indicate that the current wait time is now less
												if (self._currentWaitTime > 0)
												self._currentWaitTime = self._currentWaitTime - self._WAIT_TIME;

												// remove any leading hash symbols on newLocation
												newLocation = self._removeHash(newLocation);

												// IE bug disallows history + id conflict
												if (document.getElementById(newLocation))
												{
													throw ("Exception: history path conflicts with page element #" + newLocation);
												}

												// indicate to the browser to ignore this upcoming location change
												self._ignoreChange = true;

												// indicate to IE that this is an atomic location change block
												this._ieAtomicChange = true;

												// save this as our current location
												self._currentLocation = newLocation;

												// change the browser location
												window.location.hash = newLocation;

												// change the hidden iframe's location if on IE
												if (self._isIE) {self._iframe.src = "/blank.html?" + newLocation;}

												// end of atomic location change block for IE
												this._ieAtomicChange = false;
											};

							// now execute this add request after waiting a certain amount of time, so as to queue up requests
							window.setTimeout(addImpl, this._currentWaitTime);
							// indicate that the next request will have to wait for awhile
							this._currentWaitTime = this._currentWaitTime + this._WAIT_TIME;
						},

	/** Creates the DHTML history infrastructure. */
	create:				function()
						{
							// get our initial location
							var initialHash = this._getCurrentLocation();

							// save this as our current location
							this._currentLocation = initialHash;

							// add an unload listener for the page; this is
							// needed for Firefox 1.5+ because this browser caches all
							// dynamic updates to the page, which can break some of our
							// logic related to testing whether this is the first instance
							// a page has loaded or whether it is being pulled from the cache
							var self = this;
							window.onunload = function() {self._firstLoad = null;};

							// determine if this is our first page load;
							// for Internet Explorer, we do this in
							// this._iframeLoaded(), which is fired on
							// page load. We do it there because
							// we have no historyStorage at this point
							// in IE, which only exists after the page
							// is finished loading for that browser

							// write out a hidden iframe for IE and set the amount of time to wait between add() requests
							if (this._isIE)
							{
								document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='DhtmlHistoryFrame' id='DhtmlHistoryFrame' src='/blank.html?" + initialHash + "'></iframe>");
								this._WAIT_TIME = 400;
								// the iframe will get loaded on page load, and we want to ignore this fact
								this._ignoreChange = true;
								this._iframe = document.getElementById("DhtmlHistoryFrame");
							}
							else
							{
								if (this._firstLoad)
								{
									this._ignoreChange = true;
									this._firstLoad = false;
								}
								else
								{
									this._ignoreChange = false;
									this._fireOnNewListener = true;
								}
							}

							//run a blind interval as history change "detection"
							var self = this;
							var locationHandler = function() {self._checkLocation();};
							setInterval(locationHandler, 100);
						},

	_getCurrentLocation:function()
						{
							return this._removeHash(window.location.hash);
						},

	/** Notify the listener of new history changes. */
	_fireHistoryEvent:	function(newHash)
						{
							// call our listener
							//this._listener.call(null, newHash, historyData);
						},

	/** Sees if the browsers has changed location.  This is the primary^h _only_ history mechanism */
	_checkLocation:		function()
						{
							// ignore any location changes that we made ourselves for browsers other than Internet Explorer
							if (!this._isIE)
							{
								if (this._ignoreChange) {
									this._ignoreChange = false;
									return;
								}

								// if we are dealing with Internet Explorer and we are in the middle of making a location change from an iframe, ignore it
								if (this._ieAtomicChange) {return;}
							}

							if (document.title.indexOf("#") > 0) {
								document.title = document.title.substring(0, document.title.indexOf("#"));
							}
							// get hash location
							var hash = this._getCurrentLocation();

							// see if there has been a change
							if (hash == this._currentLocation) {return;}

							this._ieAtomicChange = true;

							if (this._isIE) {
								/* compare iframe and document locations to detect manual url changes */
								this._iframe.src = "/blank.html?" + hash;
							}

							// save this new location
							this._currentLocation = hash;

							this._ieAtomicChange = false;

							// notify listeners of the change
							this._fireHistoryEvent(hash);
						},

	/** Gets the current location of the hidden IFrames that is stored as history. For Internet Explorer. */
	_getIFrameHash:		function()
						{
							// get the new location
							var historyFrame = document.getElementById("DhtmlHistoryFrame");
							var doc = historyFrame.contentWindow.document;
							var hash = new String(doc.location.search);
							if (hash.length >0 && hash.charAt(0) == "?") {hash = hash.substring(1);}

							return hash;
						},

	/** Removes any leading hash that might be on a location. */
	_removeHash:		function(hashValue)
						{
							if (!hashValue) {return null;}
							else if (hashValue.length > 0 && hashValue.charAt(0) == "#") {return hashValue.substring(1);}
							else {return hashValue;}
						},

	/** For IE, says when the hidden iframe has finished loading - this is only actually called from blank.htm */
	_iframeLoaded:		function(newLocation)
						{
							// ignore any location changes that we made ourselves
							if (this._ignoreChange == true) {
								this._ignoreChange = false;
								return;
							}

							// get the new location
							var hash = new String(newLocation.search);
							if (hash.length >0 && hash.charAt(0) == "?") {hash = hash.substring(1);}

							// move to this location in the browser location bar if we are not dealing with a page load event
							if (this.pageLoadEvent != true) {window.location.hash = hash;}

							// notify listeners of the change
							this._fireHistoryEvent(hash);
						}
};

/** Initialize all of our objects now. */
rsh.dhtmlHistory.create();

dojo.registerModulePath("noa", "../noa");
dojo.require("mojo.component.Template");
dojo.require("mojo.controller.Map");
dojo.require("noa.SiteMap");

// Some configuration
window.monthNames = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];

noa.reformatPageTitle = function(title) {
  switch(title) {
    case 'Nintendo':
      return 'Nintendo :: Home';
      break;
    case 'DS at Nintendo':
      return 'Nintendo :: DS :: Home';
      break;
    case 'Wii at Nintendo':
      return 'Nintendo :: Wii :: Home';
      break;
  }
  
  var parts = title.split(' at ');
  return (parts[1] ? (parts[1] + ' :: ') : '') + parts[0];
};

// Start up the application
var init = function() {
	var ctrlIniter = mojo.controller.Map.getInstance();
	ctrlIniter.setSiteMap(noa.SiteMap);
	ctrlIniter.mapControllers(window.location.href);
};
dojo.addOnLoad(init);

//** Tab Content script v2.0- Copyright Dynamic Drive DHTML code library (http://www.dynamicdrive.com)
//** Updated Oct 7th, 07 to version 2.0. Contains numerous improvements:
//   -Added Auto Mode: Script auto rotates the tabs based on an interval, until a tab is explicitly selected
//   -Ability to expand/contract arbitrary DIVs on the page as the tabbed content is expanded/ contracted
//   -Ability to dynamically select a tab either based on its position within its peers, or its ID attribute (give the target tab one 1st)
//   -Ability to set where the CSS classname "selected" get assigned- either to the target tab's link ("A"), or its parent container
//** Updated Feb 18th, 08 to version 2.1: Adds a "tabinstance.cycleit(dir)" method to cycle forward or backward between tabs dynamically
//** Updated April 8th, 08 to version 2.2: Adds support for expanding a tab using a URL parameter (ie: http://mysite.com/tabcontent.htm?tabinterfaceid=0) 

////NO NEED TO EDIT BELOW////////////////////////

function ddtabcontent(tabinterfaceid){
	this.tabinterfaceid=tabinterfaceid //ID of Tab Menu main container
	this.tabs=document.getElementById(tabinterfaceid).getElementsByTagName("a") //Get all tab links within container
	this.enabletabpersistence=true
	this.hottabspositions=[] //Array to store position of tabs that have a "rel" attr defined, relative to all tab links, within container
	this.currentTabIndex=0 //Index of currently selected hot tab (tab with sub content) within hottabspositions[] array
	this.subcontentids=[] //Array to store ids of the sub contents ("rel" attr values)
	this.revcontentids=[] //Array to store ids of arbitrary contents to expand/contact as well ("rev" attr values)
	this.selectedClassTarget="link" //keyword to indicate which target element to assign "selected" CSS class ("linkparent" or "link")
}

ddtabcontent.getCookie=function(Name){ 
	var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
	if (document.cookie.match(re)) //if cookie found
		return document.cookie.match(re)[0].split("=")[1] //return its value
	return ""
}

ddtabcontent.setCookie=function(name, value){
	document.cookie = name+"="+value+";path=/" //cookie value is domain wide (path=/)
}

ddtabcontent.prototype={

	expandit:function(tabid_or_position){ //PUBLIC function to select a tab either by its ID or position(int) within its peers
		this.cancelautorun() //stop auto cycling of tabs (if running)
		var tabref=""
		try{
			if (typeof tabid_or_position=="string" && document.getElementById(tabid_or_position).getAttribute("rel")) //if specified tab contains "rel" attr
				tabref=document.getElementById(tabid_or_position)
			else if (parseInt(tabid_or_position)!=NaN && this.tabs[tabid_or_position].getAttribute("rel")) //if specified tab contains "rel" attr
				tabref=this.tabs[tabid_or_position]
		}
		catch(err){alert("Invalid Tab ID or position entered!")}
		if (tabref!="") //if a valid tab is found based on function parameter
			this.expandtab(tabref) //expand this tab
	},

	cycleit:function(dir, autorun){ //PUBLIC function to move foward or backwards through each hot tab (tabinstance.cycleit('foward/back') )
		if (dir=="next"){
			var currentTabIndex=(this.currentTabIndex<this.hottabspositions.length-1)? this.currentTabIndex+1 : 0
		}
		else if (dir=="prev"){
			var currentTabIndex=(this.currentTabIndex>0)? this.currentTabIndex-1 : this.hottabspositions.length-1
		}
		if (typeof autorun=="undefined") //if cycleit() is being called by user, versus autorun() function
			this.cancelautorun() //stop auto cycling of tabs (if running)
		this.expandtab(this.tabs[this.hottabspositions[currentTabIndex]])
	},

	setpersist:function(bool){ //PUBLIC function to toggle persistence feature
			this.enabletabpersistence=bool
	},

	setselectedClassTarget:function(objstr){ //PUBLIC function to set which target element to assign "selected" CSS class ("linkparent" or "link")
		this.selectedClassTarget=objstr || "link"
	},

	getselectedClassTarget:function(tabref){ //Returns target element to assign "selected" CSS class to
		return (this.selectedClassTarget==("linkparent".toLowerCase()))? tabref.parentNode : tabref
	},

	urlparamselect:function(tabinterfaceid){
		var result=window.location.search.match(new RegExp(tabinterfaceid+"=(\\d+)", "i")) //check for "?tabinterfaceid=2" in URL
		return (result==null)? null : parseInt(RegExp.$1) //returns null or index, where index (int) is the selected tab's index
	},

	expandtab:function(tabref){
		var subcontentid=tabref.getAttribute("rel") //Get id of subcontent to expand
		//Get "rev" attr as a string of IDs in the format ",john,george,trey,etc," to easily search through
		var associatedrevids=(tabref.getAttribute("rev"))? ","+tabref.getAttribute("rev").replace(/\s+/, "")+"," : ""
		this.expandsubcontent(subcontentid)
		this.expandrevcontent(associatedrevids)
		for (var i=0; i<this.tabs.length; i++){ //Loop through all tabs, and assign only the selected tab the CSS class "selected"
			this.getselectedClassTarget(this.tabs[i]).className=(this.tabs[i].getAttribute("rel")==subcontentid)? "selected" : ""
		}
		if (this.enabletabpersistence) //if persistence enabled, save selected tab position(int) relative to its peers
			ddtabcontent.setCookie(this.tabinterfaceid, tabref.tabposition)
		this.setcurrenttabindex(tabref.tabposition) //remember position of selected tab within hottabspositions[] array
	},

	expandsubcontent:function(subcontentid){
		for (var i=0; i<this.subcontentids.length; i++){
			var subcontent=document.getElementById(this.subcontentids[i]) //cache current subcontent obj (in for loop)
			subcontent.style.display=(subcontent.id==subcontentid)? "block" : "none" //"show" or hide sub content based on matching id attr value
		}
	},

	expandrevcontent:function(associatedrevids){
		var allrevids=this.revcontentids
		for (var i=0; i<allrevids.length; i++){ //Loop through rev attributes for all tabs in this tab interface
			//if any values stored within associatedrevids matches one within allrevids, expand that DIV, otherwise, contract it
			document.getElementById(allrevids[i]).style.display=(associatedrevids.indexOf(","+allrevids[i]+",")!=-1)? "block" : "none"
		}
	},

	setcurrenttabindex:function(tabposition){ //store current position of tab (within hottabspositions[] array)
		for (var i=0; i<this.hottabspositions.length; i++){
			if (tabposition==this.hottabspositions[i]){
				this.currentTabIndex=i
				break
			}
		}
	},

	autorun:function(){ //function to auto cycle through and select tabs based on a set interval
		this.cycleit('next', true)
	},

	cancelautorun:function(){
		if (typeof this.autoruntimer!="undefined")
			clearInterval(this.autoruntimer)
	},

	init:function(automodeperiod){
		var persistedtab=ddtabcontent.getCookie(this.tabinterfaceid) //get position of persisted tab (applicable if persistence is enabled)
		var selectedtab=-1 //Currently selected tab index (-1 meaning none)
		var selectedtabfromurl=this.urlparamselect(this.tabinterfaceid) //returns null or index from: tabcontent.htm?tabinterfaceid=index
		this.automodeperiod=automodeperiod || 0
		for (var i=0; i<this.tabs.length; i++){
			this.tabs[i].tabposition=i //remember position of tab relative to its peers
			if (this.tabs[i].getAttribute("rel")){
				var tabinstance=this
				this.hottabspositions[this.hottabspositions.length]=i //store position of "hot" tab ("rel" attr defined) relative to its peers
				this.subcontentids[this.subcontentids.length]=this.tabs[i].getAttribute("rel") //store id of sub content ("rel" attr value)
				this.tabs[i].onclick=function(){
					tabinstance.expandtab(this)
					tabinstance.cancelautorun() //stop auto cycling of tabs (if running)
					return false
				}
				if (this.tabs[i].getAttribute("rev")){ //if "rev" attr defined, store each value within "rev" as an array element
					this.revcontentids=this.revcontentids.concat(this.tabs[i].getAttribute("rev").split(/\s*,\s*/))
				}
				if (selectedtabfromurl==i || this.enabletabpersistence && selectedtab==-1 && parseInt(persistedtab)==i || !this.enabletabpersistence && selectedtab==-1 && this.getselectedClassTarget(this.tabs[i]).className=="selected"){
					selectedtab=i //Selected tab index, if found
				}
			}
		} //END for loop
		if (selectedtab!=-1) //if a valid default selected tab index is found
			this.expandtab(this.tabs[selectedtab]) //expand selected tab (either from URL parameter, persistent feature, or class="selected" class)
		else //if no valid default selected index found
			this.expandtab(this.tabs[this.hottabspositions[0]]) //Just select first tab that contains a "rel" attr
		if (parseInt(this.automodeperiod)>500 && this.hottabspositions.length>1){
			this.autoruntimer=setInterval(function(){tabinstance.autorun()}, this.automodeperiod)
		}
	} //END int() function

} //END Prototype assignment

/* SpryAccordion.js - Revision: Spry Preview Release 1.4 */

// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//   * Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of Adobe Systems Incorporated nor the names of its
//     contributors may be used to endorse or promote products derived from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

var Spry;
if (!Spry) Spry = {};
if (!Spry.Widget) Spry.Widget = {};

Spry.Widget.Accordion = function(element, opts)
{
	this.element = this.getElement(element);
	this.defaultPanel = 0;
	this.hoverClass = "AccordionPanelTabHover";
	this.openClass = "AccordionPanelOpen";
	this.closedClass = "AccordionPanelClosed";
	this.focusedClass = "AccordionFocused";
	this.enableAnimation = true;
	this.enableKeyboardNavigation = true;
	this.currentPanel = null;
	this.animator = null;
	this.hasFocus = null;
	this.duration = 200;

	this.previousPanelKeyCode = Spry.Widget.Accordion.KEY_UP;
	this.nextPanelKeyCode = Spry.Widget.Accordion.KEY_DOWN;

	this.useFixedPanelHeights = true;
	this.fixedPanelHeight = 0;

	Spry.Widget.Accordion.setOptions(this, opts, true);

	// Unfortunately in some browsers like Safari, the Stylesheets our
	// page depends on may not have been loaded at the time we are called.
	// This means we have to defer attaching our behaviors until after the
	// onload event fires, since some of our behaviors rely on dimensions
	// specified in the CSS.

	if (Spry.Widget.Accordion.onloadDidFire)
		this.attachBehaviors();
	else
		Spry.Widget.Accordion.loadQueue.push(this);
};

Spry.Widget.Accordion.onloadDidFire = false;
Spry.Widget.Accordion.loadQueue = [];

Spry.Widget.Accordion.addLoadListener = function(handler)
{
	if (typeof window.addEventListener != 'undefined')
		window.addEventListener('load', handler, false);
	else if (typeof document.addEventListener != 'undefined')
		document.addEventListener('load', handler, false);
	else if (typeof window.attachEvent != 'undefined')
		window.attachEvent('onload', handler);
};

Spry.Widget.Accordion.processLoadQueue = function(handler)
{
	Spry.Widget.Accordion.onloadDidFire = true;
	var q = Spry.Widget.Accordion.loadQueue;
	var qlen = q.length;
	for (var i = 0; i < qlen; i++)
		q[i].attachBehaviors();
};

Spry.Widget.Accordion.addLoadListener(Spry.Widget.Accordion.processLoadQueue);

Spry.Widget.Accordion.prototype.getElement = function(ele)
{
	if (ele && typeof ele == "string")
		return document.getElementById(ele);
	return ele;
};

Spry.Widget.Accordion.prototype.addClassName = function(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) != -1))
		return;
	ele.className += (ele.className ? " " : "") + className;
};

Spry.Widget.Accordion.prototype.removeClassName = function(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) == -1))
		return;
	ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
};

Spry.Widget.Accordion.setOptions = function(obj, optionsObj, ignoreUndefinedProps)
{
	if (!optionsObj)
		return;
	for (var optionName in optionsObj)
	{
		if (ignoreUndefinedProps && optionsObj[optionName] == undefined)
			continue;
		obj[optionName] = optionsObj[optionName];
	}
};

Spry.Widget.Accordion.prototype.onPanelTabMouseOver = function(panel)
{
	if (panel)
		this.addClassName(this.getPanelTab(panel), this.hoverClass);
};

Spry.Widget.Accordion.prototype.onPanelTabMouseOut = function(panel)
{
	if (panel)
		this.removeClassName(this.getPanelTab(panel), this.hoverClass);
};

Spry.Widget.Accordion.prototype.openPanel = function(panel)
{
	var panelA = this.currentPanel;
	var panelB = panel;
	
	if (!panelB || panelA == panelB)	
		return;

	var contentA; 
	if( panelA )
		contentA = this.getPanelContent(panelA);
	var contentB = this.getPanelContent(panelB);

	if (! contentB)
		return;

	if (this.useFixedPanelHeights && !this.fixedPanelHeight)
	{
		this.fixedPanelHeight = (contentA.offsetHeight) ? contentA.offsetHeight : contentA.scrollHeight;
	}

	if (this.enableAnimation)
	{
		if (this.animator)
			this.animator.stop();
		this.animator = new Spry.Widget.Accordion.PanelAnimator(this, panelB, { duration: this.duration });
		this.animator.start();
	}
	else
	{
		if(contentA)
			contentA.style.height = "0px";
		contentB.style.height = (this.useFixedPanelHeights ? this.fixedPanelHeight : contentB.scrollHeight) + "px";
	}

	if(panelA)
	{
		this.removeClassName(panelA, this.openClass);
		this.addClassName(panelA, this.closedClass);
	}

	this.removeClassName(panelB, this.closedClass);
	this.addClassName(panelB, this.openClass);

	this.currentPanel = panelB;
};

Spry.Widget.Accordion.prototype.openNextPanel = function()
{
	var panels = this.getPanels();
	var curPanelIndex = this.getCurrentPanelIndex();
	
	if( panels && curPanelIndex >= 0 && (curPanelIndex+1) < panels.length )
		this.openPanel(panels[curPanelIndex+1]);
};

Spry.Widget.Accordion.prototype.openPreviousPanel = function()
{
	var panels = this.getPanels();
	var curPanelIndex = this.getCurrentPanelIndex();
	
	if( panels && curPanelIndex > 0 && curPanelIndex < panels.length )
		this.openPanel(panels[curPanelIndex-1]);
};

Spry.Widget.Accordion.prototype.openFirstPanel = function()
{
	var panels = this.getPanels();
	if( panels )
		this.openPanel(panels[0]);
};

Spry.Widget.Accordion.prototype.openLastPanel = function()
{
	var panels = this.getPanels();
	if( panels )
		this.openPanel(panels[panels.length-1]);
};

Spry.Widget.Accordion.prototype.onPanelClick = function(panel)
{
	// if (this.enableKeyboardNavigation)
	// 	this.element.focus();
	if (panel != this.currentPanel)
		this.openPanel(panel);
	this.focus();
};

Spry.Widget.Accordion.prototype.onFocus = function(e)
{
	// this.element.focus();
	this.hasFocus = true;
	this.addClassName(this.element, this.focusedClass);
};

Spry.Widget.Accordion.prototype.onBlur = function(e)
{
	// this.element.blur();
	this.hasFocus = false;
	this.removeClassName(this.element, this.focusedClass);
};

Spry.Widget.Accordion.KEY_UP = 38;
Spry.Widget.Accordion.KEY_DOWN = 40;

Spry.Widget.Accordion.prototype.onKeyDown = function(e)
{
	var key = e.keyCode;
	if (!this.hasFocus || (key != this.previousPanelKeyCode && key != this.nextPanelKeyCode))
		return true;
	
	var panels = this.getPanels();
	if (!panels || panels.length < 1)
		return false;
	var currentPanel = this.currentPanel ? this.currentPanel : panels[0];
	var nextPanel = (key == this.nextPanelKeyCode) ? currentPanel.nextSibling : currentPanel.previousSibling;
	
	while (nextPanel)
	{
		if (nextPanel.nodeType == 1 /* Node.ELEMENT_NODE */)
			break;
		nextPanel = (key == this.nextPanelKeyCode) ? nextPanel.nextSibling : nextPanel.previousSibling;
	}
	
	if (nextPanel && currentPanel != nextPanel)
		this.openPanel(nextPanel);

	if (e.stopPropagation)
		e.stopPropagation();
	if (e.preventDefault)
		e.preventDefault();

	return false;
};

Spry.Widget.Accordion.prototype.attachPanelHandlers = function(panel)
{
	if (!panel)
		return;

	var tab = this.getPanelTab(panel);

	if (tab)
	{
		var self = this;
		Spry.Widget.Accordion.addEventListener(tab, "click", function(e) { return self.onPanelClick(panel); }, false);
		Spry.Widget.Accordion.addEventListener(tab, "mouseover", function(e) { return self.onPanelTabMouseOver(panel); }, false);
		Spry.Widget.Accordion.addEventListener(tab, "mouseout", function(e) { return self.onPanelTabMouseOut(panel); }, false);
	}
};

Spry.Widget.Accordion.addEventListener = function(element, eventType, handler, capture)
{
	try
	{
		if (element.addEventListener)
			element.addEventListener(eventType, handler, capture);
		else if (element.attachEvent)
			element.attachEvent("on" + eventType, handler);
	}
	catch (e) {}
};

Spry.Widget.Accordion.prototype.initPanel = function(panel, isDefault)
{
	var content = this.getPanelContent(panel);
	if (isDefault)
	{
		this.currentPanel = panel;
		this.removeClassName(panel, this.closedClass);
		this.addClassName(panel, this.openClass);
	}
	else
	{
		this.removeClassName(panel, this.openClass);
		this.addClassName(panel, this.closedClass);
		content.style.height = "0px";
	}
	
	this.attachPanelHandlers(panel);
};

Spry.Widget.Accordion.prototype.attachBehaviors = function()
{
	var panels = this.getPanels();
	for (var i = 0; i < panels.length; i++)
	{
		this.initPanel(panels[i], i == this.defaultPanel);
	}

	if (this.enableKeyboardNavigation)
	{
		// XXX: IE doesn't allow the setting of tabindex dynamically. This means we can't
		// rely on adding the tabindex attribute if it is missing to enable keyboard navigation
		// by default.

		var tabIndexAttr = this.element.attributes.getNamedItem("tabindex");
		// if (!tabIndexAttr) this.element.tabindex = 0;
		if (tabIndexAttr)
		{
			var self = this;
			Spry.Widget.Accordion.addEventListener(this.element, "focus", function(e) { return self.onFocus(e); }, false);
			Spry.Widget.Accordion.addEventListener(this.element, "blur", function(e) { return self.onBlur(e); }, false);
			Spry.Widget.Accordion.addEventListener(this.element, "keydown", function(e) { return self.onKeyDown(e); }, false);
		}
	}
};

Spry.Widget.Accordion.prototype.getPanels = function()
{
	return this.getElementChildren(this.element);
};

Spry.Widget.Accordion.prototype.getCurrentPanel = function()
{
	return this.currentPanel;
};

Spry.Widget.Accordion.prototype.getCurrentPanelIndex = function()
{
	var panels = this.getPanels();
	for( var i = 0 ; i < panels.length; i++ )
	{
		if( this.currentPanel == panels[i] )
			return i;
	}
	return 0;
};

Spry.Widget.Accordion.prototype.getPanelTab = function(panel)
{
	if (!panel)
		return null;
	return this.getElementChildren(panel)[0];
};

Spry.Widget.Accordion.prototype.getPanelContent = function(panel)
{
	if (!panel)
		return null;
	return this.getElementChildren(panel)[1];
};

Spry.Widget.Accordion.prototype.getElementChildren = function(element)
{
	var children = [];
	var child = element.firstChild;
	while (child)
	{
		if (child.nodeType == 1 /* Node.ELEMENT_NODE */)
			children.push(child);
		child = child.nextSibling;
	}
	return children;
};

Spry.Widget.Accordion.prototype.focus = function()
{
	if (this.element && this.element.focus)
		this.element.focus();
};

/////////////////////////////////////////////////////

Spry.Widget.Accordion.PanelAnimator = function(accordion, panel, opts)
{
	this.timer = null;
	this.interval = 0;
	this.stepCount = 0;

	this.fps = 0;
	this.steps = 10;
	this.duration = 500;
	this.onComplete = null;

	this.panel = panel;
	this.panelToOpen = accordion.getElement(panel);
	this.panelData = [];

	Spry.Widget.Accordion.setOptions(this, opts, true);


	// If caller specified speed in terms of frames per second,
	// convert them into steps.

	if (this.fps > 0)
	{
		this.interval = Math.floor(1000 / this.fps);
		this.steps = parseInt((this.duration + (this.interval - 1)) / this.interval);
	}
	else if (this.steps > 0)
		this.interval = this.duration / this.steps;

	// Set up the array of panels we want to animate.

	var panels = accordion.getPanels();
	for (var i = 0; i < panels.length; i++)
	{
		var p = panels[i];
		var c = accordion.getPanelContent(p);
		if (c)
		{
			var h = c.offsetHeight;
			if (h == undefined)
				h = 0;
			if (p == panel || h > 0)
			{
				var obj = new Object;
				obj.panel = p;
				obj.content = c;
				obj.fromHeight = h;
				obj.toHeight = (p == panel) ? (accordion.useFixedPanelHeights ? accordion.fixedPanelHeight : c.scrollHeight) : 0;
				obj.increment = (obj.toHeight - obj.fromHeight) / this.steps;
				obj.overflow = c.style.overflow;
				this.panelData.push(obj);

				c.style.overflow = "hidden";
				c.style.height = h + "px";
			}
		}
	}
};

Spry.Widget.Accordion.PanelAnimator.prototype.start = function()
{
	var self = this;
	this.timer = setTimeout(function() { self.stepAnimation(); }, this.interval);
};

Spry.Widget.Accordion.PanelAnimator.prototype.stop = function()
{
	if (this.timer)
	{
		clearTimeout(this.timer);

		// If we're killing the timer, restore the overflow
		// properties on the panels we were animating!

		if (this.stepCount < this.steps)
		{
			for (i = 0; i < this.panelData.length; i++)
			{
				obj = this.panelData[i];
				obj.content.style.overflow = obj.overflow;
			}
		}
	}

	this.timer = null;
};

Spry.Widget.Accordion.PanelAnimator.prototype.stepAnimation = function()
{
	++this.stepCount;

	this.animate();

	if (this.stepCount < this.steps)
		this.start();
	else if (this.onComplete)
		this.onComplete();
};

Spry.Widget.Accordion.PanelAnimator.prototype.animate = function()
{
	var i, obj;

	if (this.stepCount >= this.steps)
	{
		for (i = 0; i < this.panelData.length; i++)
		{
			obj = this.panelData[i];
			if (obj.panel != this.panel)
				obj.content.style.height = "0px";
			obj.content.style.overflow = obj.overflow;
			obj.content.style.height = obj.toHeight + "px";
		}
	}
	else
	{
		for (i = 0; i < this.panelData.length; i++)
		{
			obj = this.panelData[i];
			obj.fromHeight += obj.increment;
			obj.content.style.height = obj.fromHeight + "px";
		}
	}
};



// Initialize with options
var $$FSR = {
   'timestamp': 'January 30, 2012 @ 4:20 PM',
   'version': '11.0.0',
   'enabled': true,
   'sessionreplay': true,
   'auto' : true,
   'encode' : false,
   'files': '/js/foresee/',
   'id': '5EclwdUE9E9NZldQg91hVg==',
   'definition': 'foresee-surveydef.js',
   'replay_id': 'nintendo.com',
   'renderer':'W3C',	// or "ASRECORDED"
   'layout':'CENTERFIXED',	// or "LEFTFIXED" or "LEFTSTRETCH" or "CENTERSTRETCH"
   'sites': [
      {
	  	 name: 'nintendo_main',
         path: /\w+-?\w+\.(com|org|edu|gov|net|co\.uk)/
      },
      {
	  	 name: 'nintendo_main',
         path: '.',
         domain: 'default'
      }
   ],
   storageOption: 'cookie'
};
// -------------------------------- DO NOT MODIFY ANYTHING BELOW THIS LINE ---------------------------------------------
(function(config){var k=void 0,r=!0,s=null,v=!1;function x(){return function(){}}
(function(y){function P(a,c){g.controller.execute(g.controller.mb,{sp:a,when:c,qualifier:k,invite:v})}function Z(a,c){setTimeout(function(){a.Vc(c)},1)}function H(a){return y.orientation?0==y.orientation?a.sa?a.sa:a:a.Uc?a.Uc:a:a.sa?a.sa:a}function ga(a){return l("<iframe>").I({zoom:1,position:"absolute",top:0,left:0,height:a.h,width:H(a.w),zIndex:(j.rc||1E4)+2,border:"none",backgroundColor:"#fff",filter:"alpha(opacity=0)",opacity:0}).Bb({src:a.href+"shim.gif",frameborder:0,scrolling:"no",alt:"Survey Invitation Helper Window - Please Ignore",
width:H(a.w),height:a.h})}function ha(a){var a=b.A({bgcolor:"#333",opacity:0.8,hide:v},a),c=t.r,d=l("<div class='fsrmodal'>").I({display:"block",position:"fixed",top:0,left:0,width:"100%",height:"100%",zIndex:j.rc||1E4}),e=!q.compatMode||"CSS1Compat"==q.compatMode?q.getElementsByTagName("html")[0]:q.body,e=l("<div class='fsrscreen'>").I({display:"block",position:"absolute",left:0,top:0,width:"100%",height:Math.max(e.scrollHeight,e.clientHeight),backgroundColor:a.bgcolor,opacity:a.opacity,filter:"alpha(opacity="+
Math.floor(100*a.opacity)+")"});d.append(e);if("Explorer"==c.type)d.I({position:"absolute",left:0}),c=function(){arguments.callee.jb.I({top:arguments.callee.Pc.scrollTop})},c.jb=d,c.Pc=l(q.body)[0],$=setInterval(c,80);a.hideOnClick&&d.bind("click",function(){this.remove()});return d}function A(a,c){return(c?a.get(c):a)||""}function M(a){return[a||f.g.j(),(a||f.g.j()).get("cp")||{}]}function ia(a,c,b){var e=function(a,c){return function(b){c.call(a,b)}}(a,b);"beforeunload"==c?a.onbeforeunload=a.onbeforeunload?
function(a,c,b){return function(){a.apply(c,[]);b.apply(c,[])}}(a.onbeforeunload,a,b):b:"mouseenter"===c?a.attachEvent?a.attachEvent("on"+c,e):a.addEventListener("mouseover",i.uc.Rd(b),v):"mouseleave"===c?a.attachEvent?a.attachEvent("on"+c,e):a.addEventListener("mouseout",i.uc.Sd(b),v):(I[ja++]={bd:b,Bc:e},a.attachEvent?a.attachEvent("on"+c,e):a.addEventListener(c,e,v))}function aa(a,c){if(""===a&&c)return c;var d=a.split(" "),e=d.shift(),h;if("#"==e.charAt(0)){var f=b.Fc(e.substring(1));h=f?[f]:
[]}else{h="."!==e.charAt(0)?e.split(".")[0]:"*";var N=e.split("."),g=s;-1!=b.z("[",h)&&(g=h,h=h.substr(0,b.z("[",h)));for(var f=function(a){var c=arguments.callee,d;if(!(d=!c.$c))if(d=c.Kc,0==a.className.length)d=v;else{for(var e=a.className.split(" "),h=d.length,f=0;f<d.length;f++)b.Jb(d[f],e)&&h--;d=0==h}if(d&&(!c.Zc||ka(a,c.attributes)))return a},j=[],m=0;m<c.length;m++)for(var J=c[m].getElementsByTagName(h),Q=0;Q<J.length;Q++)j.push(J[Q]);N&&N.shift();h=[];f.Kc=N;if(g!=s)var K=b.z("[",g),K=g.substring(K+
1,g.lastIndexOf("]")).split("][");f.attributes=g!=s?K:s;f.$c=-1!=b.z(".",e)&&0<N.length;f.Zc=g!=s;for(e=0;e<j.length;e++)f(j[e])&&h.push(j[e])}return aa(d.join(" "),h)}function ka(a,c){function d(a){var c="";b.m("!,*,~,$,^".split(","),function(d,e){if(-1!=b.z(e,a))return c=e,v});return c}for(var e=r,h=0;h<c.length;h++){var f=c[h].split("="),g=f.shift(),f=2<f.length?f.join("="):f[0],z=d(g)+"=",j=function(a,c){var b=a.match(c);return b&&0<b.length},g="="!=z?g.substring(0,g.length-1):g,g=a.getAttribute(g);
switch(z){case "=":e&=g===f;break;case "!=":e&=g!==f;break;case "*=":e&=j(g,f);break;case "~=":e&=j(g,RegExp("\\b"+f+"\\b","g"));break;case "^=":e&=j(g,RegExp("^"+f));break;case "$=":e&=j(g,RegExp(f+"$"));break;default:e=v}}return e}function b(a){g=b.A(g,a)}var g={},j={},m=m=this,q=m.document;b.Ja=!m.opera&&!!q.attachEvent;b.ub=864E5;var L=Object.prototype.hasOwnProperty,R=Object.prototype.toString,ba=[],S=v,B=v,G;b.q=function(a){return s!==a&&k!==a};b.J=function(a){return"[object Function]"===R.call(a)};
b.C=function(a){return"[object Array]"===R.call(a)};b.N=function(a){return"string"===typeof a};b.Ka=function(a){return"number"===typeof a};b.ba=function(a){if(!a||"[object Object]"!==R.call(a)||a.nodeType||a.setInterval)return v;if(a.constructor&&!L.call(a,"constructor")&&!L.call(a.constructor.prototype,"isPrototypeOf"))return v;for(var c in a);return c===k||L.call(a,c)||!L.call(a,c)&&L.call(Object.prototype,c)};b.A=function(){var a=arguments[0]||{},c=1,d=arguments.length,e,h,f;"object"!==typeof a&&
!b.J(a)&&(a={});d===c&&(a=this,--c);for(;c<d;c++)if((e=arguments[c])!=s)for(h in e)f=e[h],a!==f&&f!==k&&(a[h]=f);return a};b.rb=function(a){var c;if(b.ba(a)){c={};for(var d in a)c[d]=b.rb(a[d])}else if(b.C(a)){c=[];d=0;for(var e=a.length;d<e;d++)c[d]=b.rb(a[d])}else c=a;return c};b.qa=function(){for(var a={},c=0,d=arguments.length;c<d;c++){var e=arguments[c];if(b.ba(e))for(var h in e){var f=e[h],g=a[h];a[h]=g&&b.ba(f)&&b.ba(g)?b.qa(g,f):b.rb(f)}}return a};b.Ma=x();b.now=function(){return+new Date};
b.z=function(a,c){if(b.C(c)||b.ba(c)){for(var d in c)if(c[d]===a)return d;return-1}return(""+c).indexOf(a)};b.Jb=function(a,c){return-1!=b.z(a,c)};b.m=function(a,c){var d,e=0,h=a.length;if(h===k||b.J(a))for(d in a){if(c.call(a[d],d,a[d])===v)break}else for(d=a[0];e<h&&c.call(d,e,d)!==v;d=a[++e]);return a};b.Fc=function(a){return q.getElementById(a)};b.trim=function(a){return a.toString().replace(/\s+/g," ").replace(/^\s+|\s+$/g,"")};b.Qc=function(a){return a.toString().replace(/([-.*+?^${}()|[\]\/\\])/g,
"\\$1")};b.aa=function(a,c,b){for(var e=a.split("."),c=c[e.shift()],h=b,f;c!=s&&0<e.length;)c=c[e.shift()];if(c){for(e=a.split(".");e.length&&(f=e.shift());)h=h[f]?h[f]:h[f]={};e=a.split(".");for(h=b;e.length&&(f=e.shift());)0<e.length?h=h[f]:h[f]=c}};b.Y=function(){return q.location.href};b.Ea=function(){return q.referrer};b.Da=function(){return q.location.protocol};b.Fa=function(a){return encodeURIComponent(a)};b.U=function(a){return decodeURIComponent(a)};b.$a=this;b.Z=function(a,c){a&&b.q(c)&&
(a=function(a,c,b){return function(){setTimeout(function(a,c){return function(){c.call(a)}}(a,c),b)}}(b.$a,a,c));if(!S&&b.J(a))ba.push(a);else if(S&&b.J(a))a.call(b.$a);else if(a===k){S=r;for(var d;d=ba.shift();)d.call(b.$a)}};b.vb=s;b.Z(function(){b.vb=q.getElementsByTagName("head")[0]||q.documentElement});b.hb=function(a,c,d){var d=d||b.Ma,e=q.createElement(c);if(!(c="script"===c))e.rel="stylesheet",e.media="screen";e.type=c?"text/javascript":"text/css";if(c)b.Ja?e.onreadystatechange=function(){("loaded"==
this.readyState||"complete"==this.readyState)&&d("ok")}:e.onload=function(){d("ok")},e.onerror=function(){d("error")};e[c?"src":"href"]=0==b.z("//",a)?b.Da()+a:a;b.vb.appendChild(e);if(!c){var h,f;"sheet"in e?(h="sheet",f="cssRules"):(h="styleSheet",f="rules");var g=setInterval(function(){try{e[h]&&e[h][f].length&&(clearInterval(g),clearTimeout(z),d(r,e))}catch(a){}finally{}},10),z=setTimeout(function(){clearInterval(g);clearTimeout(z);d(v,e)},2500)}};b.Zd=function(a){var c=b.now(),d;do d=b.now();
while(d-c<a)};q.addEventListener?G=function(){q.removeEventListener("DOMContentLoaded",G,v);b.Z()}:b.Ja&&(G=function(){"complete"===q.readyState&&(q.detachEvent("onreadystatechange",G),b.Z())});if(!B){B=r;if("complete"===q.readyState)return b.Z();q.addEventListener?(q.addEventListener("DOMContentLoaded",G,v),y.addEventListener("load",b.Z,v)):b.Ja&&(q.attachEvent("onreadystatechange",G),y.attachEvent("onload",b.Z))}b.startTime=b.now();m.FSR=b;m.FSR.opts=g;m.FSR.prop=j;b.g={};b.g.xc={};var n=b.g.xc;
b.g.tc={};var i=b.g.tc,E;E||(E={});(function(){function a(a){return a instanceof Date?isFinite(this.valueOf())?this.getUTCFullYear()+"-"+c(this.getUTCMonth()+1)+"-"+c(this.getUTCDate())+"T"+c(this.getUTCHours())+":"+c(this.getUTCMinutes())+":"+c(this.getUTCSeconds())+"Z":s:a.valueOf()}function c(a){return 10>a?"0"+a:a}function b(a){f.lastIndex=0;return f.test(a)?'"'+a.replace(f,function(a){var c=j[a];return"string"===typeof c?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}
function e(c,h){var f,u,j,p,n=g,i,l=h[c];l&&"object"===typeof l&&(l instanceof Date||l instanceof Date||l instanceof Boolean||l instanceof String||l instanceof Number)&&(l=a(l));"function"===typeof m&&(l=m.call(h,c,l));switch(typeof l){case "string":return b(l);case "number":return isFinite(l)?""+l:"null";case "boolean":case "null":return""+l;case "object":if(!l)return"null";g+=z;i=[];if("[object Array]"===Object.prototype.toString.apply(l)){p=l.length;for(f=0;f<p;f+=1)i[f]=e(f,l)||"null";j=0===i.length?
"[]":g?"[\n"+g+i.join(",\n"+g)+"\n"+n+"]":"["+i.join(",")+"]";g=n;return j}if(m&&"object"===typeof m){p=m.length;for(f=0;f<p;f+=1)"string"===typeof m[f]&&(u=m[f],(j=e(u,l))&&i.push(b(u)+(g?": ":":")+j))}else for(u in l)Object.prototype.hasOwnProperty.call(l,u)&&(j=e(u,l))&&i.push(b(u)+(g?": ":":")+j);j=0===i.length?"{}":g?"{\n"+g+i.join(",\n"+g)+"\n"+n+"}":"{"+i.join(",")+"}";g=n;return j}}var h=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
f=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,g,z,j={"\u0008":"\\b","\t":"\\t","\n":"\\n","\u000c":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},m;if("function"!==typeof E.stringify)E.stringify=function(a,c,b){var d;z=g="";if("number"===typeof b)for(d=0;d<b;d+=1)z+=" ";else"string"===typeof b&&(z=b);if((m=c)&&"function"!==typeof c&&("object"!==typeof c||"number"!==typeof c.length))throw Error("JSON.stringify");return e("",{"":a})};
if("function"!==typeof E.parse)E.parse=function(a,c){function b(a,d){var e,h,f=a[d];if(f&&"object"===typeof f)for(e in f)Object.prototype.hasOwnProperty.call(f,e)&&(h=b(f,e),h!==k?f[e]=h:delete f[e]);return c.call(a,d,f)}var d,a=""+a;h.lastIndex=0;h.test(a)&&(a=a.replace(h,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return d=(new Function("return "+a))(),"function"===typeof c?b({"":d},""):d;throw new SyntaxError("JSON.parse");}})();b.g.JSON=E;b.g.f={};var f=b.g.f,T=1,U=9,V=Array.prototype.slice;i.wc=function(a,c){c=c||q;if(a.nodeType&&a.nodeType===U&&(a=q.body,a===s))return[q];if(a.nodeType&&a.nodeType===T)return[a];if(a.ea&&b.N(a.ea))return V.call(a,0);c&&(c=i.l.Ya(c));if(b.C(a))return a;if(b.N(a)){for(var d=[],e=0;e<c.length;e++)d=d.concat(aa(a,[c[e]]));return d}return s};
n.F={};n.F.H=function(){this.wa=[];this.Oc=v};n.F.H.prototype.Fd=function(a){this.wa[this.wa.length]={ad:v,Hc:a}};n.F.H.prototype.M=function(){this.Oc=r;for(var a=0;a<this.wa.length;a++){var c=this.wa[a];c.Hc.apply(this,arguments);c.ad&&(this.wa.splice(a,1),a--)}};n.Ib=function(){for(var a=m.navigator.userAgent.replace(/[\s\\\/\.\(\);:]/gim,""),c="",d=b.now()+"",e=0;e<a.length-1;e+=a.length/7)c+=Number(a.charCodeAt(Math.round(e))%16).toString(16);7<c.length&&(c=c.substr(c.length-7));return c+"-"+
a.length+d.substr(d.length-6)+"-xxxx-xxxx-xxxxx".replace(/[xy]/g,function(a){var c=16*Math.random()|0;return("x"==a?c:c&3|8).toString(16)})};b.g.wb={};var p=b.g.wb;p.ka=[];p.Td=function(a,c,d){if(a.SR&&a.SR.updatedAt)for(var e=0;e<p.ka.length;e++){var h=p.ka[e];if(h.Rb.SR&&h.Rb.SR.updatedAt==a.SR.updatedAt){if(1500>b.now()-h.Nd)return h.Ed;p.ka.splice(e,1);break}}c=b.g.JSON.stringify(a,c,d);p.ka[p.ka.length]={Rb:a,Ed:c,Nd:b.now()};return c};i.l=function(a,c){return new i.l.prototype.Ia(a,c)};var ma=
y.document,ca=Array.prototype.push,V=Array.prototype.slice,T=1,U=9;i.l.qa=function(a,c){var d=a.length,e=0;if(b.Ka(c.length))for(var h=c.length;e<h;e++)a[d++]=c[e];else for(;c[e]!==k;)a[d++]=c[e++];a.length=d;return a};i.l.$d=function(a,c){var d=c||[];a!=s&&(a.length==s||b.N(a)||b.J(a)||!b.J(a)&&a.setInterval?ca.call(d,a):i.l.qa(d,a));return d};i.l.xb=function(a,c){var b={};b[a]=c;return b};i.l.Ac=function(a){a=b.trim(a).toLowerCase();return 0==b.z("<option",a)?"SELECT":0==b.z("<li",a)?"UL":0==b.z("<tr",
a)?"TBODY":0==b.z("<td",a)?"TR":"DIV"};i.l.Ya=function(a){a.setInterval||a.nodeType&&(a.nodeType===T||a.nodeType===U)?a=[a]:b.N(a)?a=i.l(a).qb():a.ea&&b.N(a.ea)&&(a=a.qb());return a};i.l.Yd=function(a,c){var b,e=[],h;b=!!r;for(var f=0,g=a.length;f<g;f++)h=!!c(a[f],f),b!==h&&e.push(a[f]);return e};i.l.prototype.Ia=function(a,c){this.de=a;this.Mc=c;this.length=0;this.ea="_4cCommonDom.Query";if(!a)return this;if(a.setInterval||a.nodeType)this.Mc=this[0]=a,this.length=1;else{var d=[];if(a.ea&&b.N(a.ea))d=
a.qb();else if(b.C(a))d=a;else if(b.N(a)&&0==b.z("<",b.trim(a))&&-1!=b.z(">",b.trim(a))){var e=i.l.Ac(a),e=q.createElement(e);e.innerHTML=a;b.Ja?d.push(e.firstChild):d.push(e.removeChild(e.firstChild))}else{if(-1!=b.z(",",a)){d=a.split(",");for(e=0;e<d.length;e++)d[e]=b.trim(d[e])}else d=[a];for(var e=[],f=0;f<d.length;f++)e=e.concat(i.wc(d[f],c));d=e}ca.apply(this,d)}return this};i.l.prototype.m=function(a){return b.m(this,a)};i.l.prototype.qb=function(){return V.call(this,0)};i.l.prototype.constructor=
i.l;i.l.prototype.Ia.prototype=i.l.prototype;m.FSR._query=function(a,c){return i.l(a,c)};p.n=function(a,c){a||(a=n.Ib());this.Ha=a.replace(/[- ]/g,"");p.n.T||p.n.fb();this.ra=c||{};this.data={};this.yc=new n.F.H;this.Va=0;this.Dd=4E3};p.n.prototype.set=function(a,c){this.Za();this.T[a]=c;this.ma()};p.n.prototype.get=function(a){this.Za();return a?this.T[a]:this.T};p.n.prototype.Fb=function(a){this.Za();delete this.T[a];this.ma()};p.n.prototype.La=function(){this.T={};var a=this.ra.duration;this.ra.duration=
-1;this.ma();a?this.ra.duration=a:delete this.ra.duration};p.n.prototype.Za=function(){this.Va=0;try{var a=p.n.R(this.Ha);this.Va=this.Ha.length+a.length+2;this.T=b.g.JSON.parse(a)}catch(c){this.Va=0,this.T={}}if(!this.T)this.T={}};p.n.prototype.ma=function(){var a=b.g.JSON.stringify(this.T);this.Ha.length+b.Fa(a).length>this.Dd&&this.yc.M(this);this.Va=p.n.write(this.Ha,a,this.ra)};p.n.R=function(a){return(a=m.document.cookie.match("(?:^|;)\\s*"+b.Qc(a)+"=([^;]*)"))?b.U(a[1]):s};p.n.write=function(a,
c,d){var e=!d||!b.q(d.encode)||d.encode?b.Fa(c):c,a=b.Fa(a);b.m(d,function(a,c){if(c!=s){var d;a:switch(a){case "duration":d="="+(new Date(b.now()+c*b.ub)).toGMTString();break a;case "secure":d="";break a;default:d="="+c}e+=";"+("duration"===a?"expires":a)+d}});m.document.cookie=a+"="+e;return a.length+e.length+2};p.n.La=function(a,c){p.n.write(a,"",b.A(c,{duration:-1}))};p.n.fb=function(a){a&&a.apply(p.n)};p.n.isSupported=function(){return r};var da={};f.za=function(a,c){function d(a){this.va=a()}
var e=da[a];if(e!=s)return e;d.prototype.set=function(a,c){if(b.ba(a))for(var d in a)this.va.set(d,a[d]);else this.va.set(a,c)};d.prototype.get=function(a){return this.va.get(a)};d.prototype.bb=function(a){this.va.Fb(a)};d.prototype.Fb=function(){this.va.La()};return e=da[a]=new d(c)};m.FSR._storage=function(a,c,d){a=b.je.wb(a);if(d===k&&b.N(c))return a.get(c);d!==k?a.set(c,d):c!==k&&a.set(c);return a.Wd()};f.K={};f.K.Gd={host:"survey.foreseeresults.com",path:"/survey",url:"/display"};f.K.B={host:"controller.4seeresults.com",
path:"/fsrSurvey",url:"/OTCImg",Wa:3};f.K.event={host:"events.foreseeresults.com",path:"/rec",url:"/process"};f.K.domain={host:"survey.foreseeresults.com",path:"/survey",url:"/FSRImg",Wa:3};f.K.wd={host:"replaycontroller.4seeresults.com",path:"/images",enabled:v};b.g.zc={};var t=b.g.zc;n.u={};n.u.ta=function(){return 0+100*Math.random()};n.u.ja=function(a,c,d){var e="";a&&b.m(a,function(a,f){e+=(0!=e.length?"&":"")+(c?c+"["+a+"]":a)+"="+(d?f:b.Fa(f))});return e};n.u.hash=function(a){a=a.split("_");
return 3*a[0]+1357+""+(9*a[1]+58)};n.u.Ub=function(a){a=a.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");a=RegExp("[\\?&]"+a+"=([^&#]*)").exec(b.Y());return a==s?v:a[1]};n.u.na=function(a,c){return a[c]||a.files};f.g={};f.g.oa=function(a){return a+(g.site.cookie?"."+g.site.cookie:"")};f.g.j=function(a,c){var d=f.g.oa("fsr.s"),d=f.za(d,f.g.Ga(d));return a?b.q(c)?d.set(a,c):d.get(a):d};f.g.Tc=function(a,c){var d=a.name;b.m([a.site,a.section,c,f.g.j("q"),f.g.j("l")],function(a,c){d+=c?"-"+c:""});return d};
f.g.Wc=function(a){b.hb(n.u.na(g.site,"js_files")+(g.definition||"foresee-surveydef.js"),"script",function(c){if("ok"===c)b.A(j,b.properties),g.xa=g.surveydefs=b.surveydefs,a()})};f.g.log=function(a,c){if(j.events.enabled){var d=f.g.j(),e=d.get("sd"),e=b.q(e)?g.xa[e]:g.sd,h=new Date;(new w.O(f.K.event,"logit")).send({cid:g.id,rid:d.get("rid")||"",cat:e.name,sec:e.section||"",type:d.get("q")||"",site:g.site.name||"",lang:d.get("l")||b.$S.locale||"",msg:a,param:c,tms:h.getTime(),tmz:6E4*h.getTimezoneOffset()})}};
f.g.Ga=function(a){var c;switch(g.storageOption){case "window":c=function(){var a=arguments.callee;return new p.Qd(a.Qb,a.Hb||{})};break;default:c=function(){var a=arguments.callee;return new p.n(a.Qb,b.A({path:"/",domain:a.kb.site.domain,secure:a.kb.site.secure,encode:a.kb.encode},a.Hb||{}))}}c.Qb=a;c.kb=g;c.Hb=k;return c};var F=navigator.userAgent,D=[{ia:F,ga:"Chrome",Q:"Chrome"},{ia:navigator.vendor,ga:"Apple",Q:"Safari",sb:"Version"},{sa:y.opera,Q:"Opera"},{ia:F,ga:"Firefox",Q:"Firefox"},{ia:F,
ga:"Netscape",Q:"Netscape"},{ia:F,ga:"MSIE",Q:"Explorer",sb:"MSIE"},{ia:F,ga:"Gecko",Q:"Mozilla",sb:"rv"}],W;t.r={ie:F};t.r.platform=(navigator.platform.match(/mac|win32|linux|iphone|ipad|ipod|blackberry|wince|android/i)||["other"])[0].toLowerCase();if(navigator.userAgent.match(/android/i))t.r.platform="android";if(navigator.userAgent.match(/windows phone/i))t.r.platform="winmobile";if("other"==t.r.platform&&m.orientation!=k)t.r.platform="mobile";t.r.type=function(){for(var a=0;a<D.length;a++){var c=
D[a].ia,d=D[a].sa;W=D[a].sb||D[a].Q;if(c&&-1!=b.z(D[a].ga,c))return D[a].Q;if(d)return D[a].Q}return"unknown"}();t.r.version=function(){var a="unknown";b.m([F,navigator.appVersion],function(c,d){var e=b.z(W,d);if(-1!=e)return a=parseFloat(d.substring(e+W.length+1)),v});return a}();t.r.Rc=function(){try{var a;a=navigator.plugins["Shockwave Flash"]?navigator.plugins["Shockwave Flash"].description:(new ActiveXObject("ShockwaveFlash.ShockwaveFlash")).GetVariable("$version")||"0 r0";a=a.match(/\d+/g);
return parseInt(a[0]||"0."+a[1]||0)}catch(c){return"0 r0"}}();t.r.name=t.r.type;t.r.Tb="Unknown";b.m([["win32","Windows"],["mac","Mac"],["linux","Linux"],["iphone","iOS"],["ipad","iOS"],["ipad","iOS"],["android","Android"],["blackberry","Blackberry"],["winmobile","Windows Phone"]],function(a,c){if(t.r.platform===c[0])t.r.Tb=c[1]});var ja=100,I={};i.l.prototype.bind=function(a,c){return this.m(function(){ia(this,a,c)})};i.l.prototype.Jd=function(a){this.m(function(){var c,b=s,e;for(e in I)if(I[e].bd===
a){c=I[e].Bc;b=e;break}b!=s&&(this.detachEvent?this.detachEvent("onkeyup",c):this.removeEventListener("keyup",c,v),delete I[b])})};i.l.prototype.G=function(a){return!a?this:this.m(function(){if(0!=this.className.length){var c=this.className.split(" ");b.m(a.split(" "),function(a,e){b.Jb(e,c)||c.push(e)});this.className=c.join(" ")}else this.className=a})};i.l.prototype.hc=function(a){!a||this.m(function(){if(0!=this.className.length){var c=this.className.split(" ");b.m(a.split(" "),function(a,e){var f=
b.z(e,c);-1!=f&&c.splice(f,1)});this.className=c.join(" ")}})};i.l.prototype.I=function(a,c){if(b.N(a)&&c==s)return this[0].style[a];a=b.N(a)?i.l.xb(a,c):a;return this.m(function(){var c=this,e={opacity:1,zIndex:1,zoom:1};b.q(c.style)&&b.m(a,function(a,b){b=""+b;isNaN(Number(b))||(b=!e[a]?b+"px":b);c.style[a]=b})})};i.l.prototype.height=function(a){if(a)return this.I("height",a+(-1==b.z("px",a)?"px":""));a="undefined"!=typeof this[0].currentStyle?this[0].currentStyle:ma.defaultView.getComputedStyle(this[0],
s);return"auto"==a.height?this[0].clientHeight:parseInt(a.height,10)};i.l.prototype.Bb=function(a,c){return b.N(a)&&c==s?this[0]?this[0].getAttribute(a):"":this.m(function(){a=b.N(a)?i.l.xb(a,c):a;for(var d in a)this.setAttribute(d,a[d])})};i.l.prototype.append=function(a){a=i.l.Ya(a);return this.m(function(){for(var c=0;c<a.length;c++)this.appendChild(a[c])})};i.l.prototype.Ec=function(a){a=i.l.Ya(a);this.m(function(){for(var c=this.parentNode,b=0;b<a.length;b++)c.insertBefore(a[b],this)})};i.l.prototype.remove=
function(a){return this.m(function(){a?l(a,this).remove():this.parentNode.removeChild(this)})};b.g.vc={};var w=b.g.vc,X={},ea=["onload","onerror","onabort"];b.m(ea,function(a,c){X[c]=function(){this.Na(0==arguments.callee.Q?1:0);this.Sa=v};X[c].Q=a});w.O=function(a,c){this.options=b.A({},a);this.Sa=v;this.event=c;this.tb=0;return this};w.O.prototype.Na=function(a,c){if(this.Sa)switch(this.Sa=v,this.status=a,a){case 1:(this.options.onSuccess||b.Ma)(c);break;case 0:this.event?this.Id():(this.options.onFailure||
b.Ma)(c);break;case -1:(this.options.onError||b.Ma)(c)}};w.O.prototype.Id=function(){if(3>this.tb)this.yb();else this.onFailure()};w.O.prototype.zb=function(a,c){this.Sa=r;var d=this,e=n.u.ja(b.A(a,{uid:b.now()})),e=b.Da()+"//"+this.options.host+this.options.path+this.options.url+"?"+e,c=b.A({},X,c),f=new Image;b.m(ea,function(a,b){f[b]=function(){var a=arguments.callee;a.pa.onload=a.pa.onerror=a.pa.onabort=s;a.Sc.call(a.self,a.pa);a.pa=s};f[b].Sc=c[b];f[b].pa=f;f[b].self=d});f.src=e};w.O.prototype.send=
function(a){this.Md=a;this.yb()};w.O.prototype.Oa=function(){this.zb(b.A(this.options.Vb,{protocol:b.Da()}),{onload:function(a){!this.options.Wa||a.width==this.options.Wa?this.Na(1,a.width):this.Na(0,a.width)},onerror:function(){this.Na(-1)}})};w.O.prototype.yb=function(){var a;this.tb++;a=b.A({event:this.event,ver:this.tb},this.Md,a);this.zb(a)};f.Pd={};b.eb=function(){q.cookie="fsr.a"+(g.site.cookie?"."+g.site.cookie:"")+"="+b.now()+";path=/"+(g.site.domain?";domain="+g.site.domain+";":";")+(g.site.secure?
"secure":"")};for(var B=$$FSR.sites,C=0,na=B.length;C<na;C++){var O;b.C(B[C].path)||(B[C].path=[B[C].path]);for(var Y=0,oa=B[C].path.length;Y<oa;Y++)if(O=b.Y().match(B[C].path[Y])){g.siteid=C;g.site=$$FSR.sites[C];g.site.domain?"default"==g.site.domain&&(g.site.domain=s):g.site.domain=O[0];g.site.secure||(g.site.secure=s);g.site.name||(g.site.name=O[0]);b.m("files,js_files,image_files,html_files,css_files,swf_files".split(","),function(a,c){g.site[c]||$$FSR[c]&&(g.site[c]=$$FSR[c])});break}if(O)break}if(!m.fsr$timer)b.eb(),
m.fsr$timer=setInterval(b.eb,1E3);f.D={};f.D.set=function(a,c,b){b=M(b);b[1][a]=c;b[0].set("cp",b[1])};f.D.get=function(a,c){return M(c)[0][a]};f.D.bb=function(a,c){var b=M(c);delete b[1][a];b[0].set("cp",b[1])};f.D.append=function(a,c,b){b=M(b);b[1][a]=b[1][a]?b[1][a]+","+c:c;b[0].set("cp",b[1])};f.D.ja=function(a){var a=a||f.g.j(),c=a.get("sd"),c=b.q(c)?g.xa[c]:g.sd;a.get("browser");a={browser:t.r.name+" "+t.r.version,os:t.r.Tb,pv:a.get("pv"),url:A(a,"c"),ref_url:A(a,"ru"),locale:A(a,"l"),site:A(g.site.name),
section:A(c.section),referrer:A(a,"r"),terms:A(a,"st"),sessionid:A(a,"rid"),replay_id:A(a,"mid"),flash:t.r.Rc};if(j.meta.user_agent)a.user_agent=navigator.userAgent;if(j.analytics.google){var d=p.n.R("__utma"),c=p.n.R("__utmz");if(d&&""!=d)d=d.split("."),a.first=d[2],a.last=d[3],a.current=d[4],a.visits=d[5];if(c&&""!=c){var e=[];b.m(["utmgclid","utmcsr","utmccn","utmcmd","utmctr"],function(a,c){e.push(RegExp(c+"=([^\\|]*)"))});if(d=c.match(e[0]))a.source="Google",a.campaign="Google Adwords",a.medium=
"cpc";else{if(d=c.match(e[1]))a.source=d[1];if(d=c.match(e[2]))a.campaign=d[1];if(d=c.match(e[3]))a.medium=d[1]}if(d=c.match(e[4]))a.keyword=d[1]}}c=f.g.j("cp")||{};a=b.A({},c,a||{});return n.u.ja(a,"cpp")};m.FSR.CPPS=f.D;m.FSR.CPPS.set=f.D.set;m.FSR.CPPS.get=f.D.get;m.FSR.CPPS.erase=f.D.bb;m.FSR.CPPS.append=f.D.append;var l=i.l,$=s;f.ya=function(a){this.options=a;this.Ua=this.Ud=v;this.Ta=this.body=this.ua=this.Lc=s;this.Z=r};f.ya.prototype.xd=function(a){this.Lc=a};f.ya.prototype.show=function(){if(!this.Ua){var a=
this,c=this.options;this.ua=ha(c.jb);var d=c.content.replace(/{%baseHref%}/g,c.V.href);this.body=l("<div>").I({zoom:1,position:"absolute",width:H(c.V.w),zIndex:(j.rc||1E4)+5,"-webkit-text-size-adjust":H(c.V.t)}).G("fsrwin");var e=l("<div>").G("fsr_body");e[0].innerHTML=d;d=l("<div>").G("fsr_top_ur").append(l("<div>").G("fsr_closeSticky fsr_closeButton").bind("click",function(){a.X();c.V.close()}));this.body.append(l("<div>").G("fsr_top").append(l("<div>").G("fsr_top_ul")).append(d)).append(l("<div>").G("fsr_middle").append(e));
if(0<c.V.btn.length){var f=l("<div>").G("fsr_closeButtons");b.m(c.V.btn,function(c,b){b.bind("click",function(){a.X()});f.append(b)});this.body.append(l("<div>").G("fsr_closeBody").append(f))}e=l("<div>").G("fsr_body");e[0].innerHTML=c.footer.replace(/{%baseHref%}/g,c.V.href);this.body.append(l("<div>").G("fsr_bottom").append(e));d=!q.compatMode||"CSS1Compat"==q.compatMode?q.getElementsByTagName("html")[0]:q.body;e=b.Ka(m.innerHeight)?m.innerHeight:d.clientHeight;d=b.Ka(m.innerWidth)?m.innerWidth:
d.clientWidth;this.Ta=ga({w:d,h:e,href:c.V.href});this.ua.append(this.Ta);this.body.I({left:-5E3});this.ua.append(this.body);l(q.body.firstChild).Ec(this.ua);var g=this.body.height();this.body.I({left:(d-H(c.V.w))/2,top:(e-g)/2});this.Sb=function(){a.X();a.show()};y.addEventListener&&y.addEventListener("orientationchange",this.Sb,v);this.Ob=function(c){27==(c.keyCode?c.keyCode:c.which)&&a.X()};l(q).bind("keyup",this.Ob);this.Ua=r}};f.ya.prototype.X=function(){if(this.Ua)y.removeEventListener&&y.removeEventListener("orientationchange",
this.Sb,v),l(q).Jd(this.Ob),this.body.remove(),this.Ta&&(this.Ta.remove(),m.clearInterval($)),this.ua.remove(),this.Ua=v};f.$={};f.$.yd=function(){b.q(b.Xa)&&b.q(b.Ra)&&(b.Ra.ge(),f.g.j("mid",b.Ra.ee.Xd))};f.$.Aa=function(){if(b.q(b.Xa))var a=setInterval(function(){b.q(b.Ra)&&(clearInterval(a),b.Ra.fe())},250)};var fa={Explorer:5.5,Safari:2,Firefox:1.4},l=i.l,o={invite:k,qualifier:k,locale:k,canceled:v};b.f=function(a){b.A(this,{options:b.A({},a),Nb:v,Pb:v,ob:s,L:k,Ab:v,pc:v,Vd:k,Gb:[],k:s,P:s,Qa:s,
ab:s,ca:s});g.controller=this;this.Od()};b.f.loaded=new n.F.H;b.f.Kb=new n.F.H;b.f.mc=new n.F.H;b.f.gb=new n.F.H;b.f.Lb=new n.F.H;b.f.Mb=new n.F.H;b.f.oc=new n.F.H;b.f.nc=new n.F.H;b.f.gc=new n.F.H;b.f.kc=new n.F.H;b.f.prototype.Od=function(){b.f.S.cb&&b.m([["loaded",b.f.loaded],["initialized",b.f.Kb],["surveyDefChanged",b.f.mc],["inviteShown",b.f.gb],["inviteAccepted",b.f.Lb],["inviteDeclined",b.f.Mb],["trackerShown",b.f.oc],["trackerCanceled",b.f.nc],["qualifierShown",b.f.gc],["surveyShown",b.f.kc]],
function(a,c){b.J(b.f.S.cb[c[0]])&&c[1].Fd(b.f.S.cb[c[0]])})};b.f.prototype.B=function(a){switch(a){case 3:return b.q(f.g.j("t"));case 2:return b.q(f.g.j("i"));case 1:return 1===f.g.j("i");case 4:return b.q(f.g.j("s"))}return v};b.f.prototype.load=function(){if(!(m.__$$FSRINIT$$__&&m.__$$FSRINIT$$__===r))m.__$$FSRINIT$$__=r,g.auto&&this.execute(this.ic,r)};b.f.prototype.execute=function(){if(g.enabled&&(j.ignoreWindowTopCheck||m==m.top)){for(var a=[],c=0;c<arguments.length;c++)a.push(arguments[c]);
var c=a.shift(),b=this;if(this.Nb)0!=this.L&&c.apply(b,a);else if(this.Gb.push({fn:c,args:a}),!this.Pb)this.Pb=r,f.g.Wc(function(){b.fb()})}};b.f.prototype.fb=function(){b.f.loaded.M();var a=f.g.j("v");this.Ia();if(!b.q(a)&&b.q(b.Xa)&&(a=f.K.wd,a.enabled&&1==this.L)){a.url="/"+g.replay_id+".gif";(new w.O(b.A({onSuccess:function(a){return function(b){a.Cc(b);a.loaded()}}(this),onError:function(a){return function(){a.loaded()}}(this)},a))).Oa();return}this.loaded()};b.f.prototype.loaded=function(){this.Nb=
r;var a=this;setTimeout(function(){var b=a.Gb.shift();b&&(a.execute(b.fn,b.args),setTimeout(arguments.callee,100))},100)};b.f.prototype.Ia=function(){this.Ab=r;var a=p.n.R(f.g.oa("fsr.a"));this.B(3)||this.Gc();if(a){var c=this.lb();if(b.q(b.Xa)){if(200==c){b.g.sc.log("Exit: Pooling number has not been updated.");alert("Pooling number has not been updated.");return}if("site.com"==g.replay_id){b.g.sc.log("Exit: replay_id has not been updated.");alert("replay_id has not been updated.");return}}a=f.g.j("v");
if(!b.q(a)){a=1;if(!b.f.S.dd[t.r.platform])o.message="Exit: Platform not supported",a=0;if(fa[t.r.type]&&t.r.version<=fa[t.r.type])o.message="Exit: Browser not supported",a=0;if(this.W())o.message="Exit: Met exclude criteria",a=0;if(p.n.R("fsr.o"))o.message="Exit: Opt-out cookie found",a=0;var d,e=new p.n(f.g.oa("fsr.r"),{path:"/",domain:g.site.domain,secure:g.site.secure});if(d=e.get("d"))o.message="Exit: Persistent cookie found: "+d,a=-1;if(j.altcookie&&j.altcookie.name&&(d=p.n.R(j.altcookie.name))&&
(!j.altcookie.value||j.altcookie.value==d))o.message="Exit: Alternate persistent cookie found: "+d,a=-1;d=n.u.ta();if(1==a&&!(0<d&&d<=c))o.message="Exit: Not in pool: "+d,a=-2;f.g.j("v",a);if(c=e.get("i"))b.now()<e.get("e")&&(g.rid=c);g.rid||j.events.enabled&&j.events.id&&(g.rid=n.Ib());g.rid&&f.g.j("rid",g.rid);if(e=e.get("s"))f.g.j("sd",e),f.g.j("lk",1);if((e=b.Ea())&&""!=e){j.meta.ref_url&&f.g.j("ru",e);if(j.meta.referrer){var c=e.match(/^(\w+:\/\/)?((\w+-?\w+\.?)+)\//),h;c&&3<=c.length&&(h=c[2]);
f.g.j("r",h)}j.meta.terms&&f.g.j("st",this.Nc(e)||"")}this.od(f.g.j())}this.L=a;g.rid=f.g.j("rid");h=j.tracker.timeout;j.tracker.adjust&&b.q(f.g.j("f"))&&(h=f.g.j("to"),a=(b.now()-f.g.j("f"))/1E3,h=Math.round(10*(0.9*h+0.1*2*a))/10,h=2>h?2:5<h?5:h);j.tracker.adjust&&f.g.j("to",h);1>this.L&&f.$.Aa();b.f.Kb.M(this.L);p.n.La("fsr.paused",{path:"/",domain:g.site.domain})}else this.L=0};b.f.prototype.ic=function(a){a&&f.g.j().bb("pa");this.zd();var b,a=this.k=this.Qa;b=this.Hd=this.ca;g.sd=a;g.sdi=b;var d=
this.k?this.dc():v,a=this.k=this.P;b=this.Hd=this.ab;g.sd=a;g.sdi=b;this.k&&(this.nd(),d||this.dc(),this.ld(),this.qd());this.rd()};b.f.prototype.zd=function(){var a,c,d,e;g.sv=n.u.ta();this.ob=f.za("fsr.sp",f.g.Ga("fsr.sp"));var h;if(b.q(f.g.j("cd")))this.ca=f.g.j("cd");g.cs=b.U(b.Y());j.meta.url_params||(g.cs=g.cs.replace(/(.*?)(\?.*)/g,"$1"));j.meta.url&&f.g.j("c",g.cs);this.language();var u=f.g.j("pv")?f.g.j("pv")+1:1;f.g.j("pv",u);u=f.g.j("lc")||{};h=this.Yc();if(0!=h.length){for(a=0,d=h.length;a<
d;){d=g.xa[h[a]];d.idx=h[a];a="d"+d.idx;this.Eb(d.criteria);u[a]||(u[a]={v:0,s:v});d.lc=u[a].v+=1;d.ec=u[a].e||0;d.type="current";this.Cb(d);h=this.Jc(this.Xc(d),d.lc,d.ec);if(-1<h){d.ls=u[a].s=r;if(b.C(d.criteria.lf)&&(d.criteria.lf=d.criteria.lf[h],d.criteria.sp=d.criteria.sp[h],d.pop.when=d.pop.when[h],b.C(d.invite.content))){d.invite.content=d.invite.content[h];c=d.invite.locales||[];for(a=0,e=c.length;a<e;a++)c[a].content=c[a].content[h]}d.pin&&(a=f.g.j("pn"),(!b.q(a)||a>d.idx)&&f.g.j("pn",d.idx))}else if(d.ls=
u[a].s=v,b.C(d.criteria.lf)&&(d.criteria.lf=d.criteria.lf[0],d.criteria.sp=d.criteria.sp[0],d.pop.when=d.pop.when[0],b.C(d.invite.content))){d.invite.content=d.invite.content[0];c=d.invite.locales||[];for(a=0,e=c.length;a<e;a++)c[a].content=c[a].content[0]}this.Db(d);a=f.g.j("v");h=f.g.j("i");if(!b.q(h)&&1==a&&d.lb&&(a=n.u.ta(),!(0<a&&a<=d.lb)))a=-2,f.g.j("v",a),this.he=a,f.$.Aa();this.P=d;this.ab=d.idx;break}f.g.j("lc",u)}if(b.q(this.ca)&&this.ca!=this.ab)d=g.xa[this.ca],d.idx=this.ca,a="d"+d.idx,
this.Eb(d),d.lc=u[a].v||0,d.ls=u[a].s||v,d.type="previous",this.Cb(d),this.Db(d),this.Qa=d,this.ca=d.idx,b.f.mc.M(this.Qa,this.P)};b.f.prototype.dc=function(){return 0>this.L?v:this.ud()?r:this.fc()};b.f.prototype.nd=function(){if(!(0>this.L)&&(f.g.j("cd",this.k.idx),!f.g.j("lk"))){var a=f.g.j("pn");(!b.q(a)||a>=this.k.idx)&&f.g.j("sd",this.k.idx)}};b.f.prototype.ld=function(){0>this.L||(this.B(1)&&!this.B(4)&&(this.da("pop",this.Zb),this.da("cancel",this.Ba)),this.B(2)||this.da("attach",this.mb),
this.B(3)&&this.da("pause",this.pause))};b.f.prototype.ud=function(){if(!this.Bd())return v;if(!this.B(3))return v;Z(this,"tracker");return r};b.f.prototype.Bd=function(){var a=this.k;if(!a.ls)return v;if("previous"===a.type){if("later"!==a.pop.when||"leaving-section"!==a.pop.after)return v}else if("current"===a.type&&"now"!==a.pop.when)return v;return r};b.f.prototype.fc=function(){var a=r;this.Ad()||(a=v);a&&(this.md(),Z(this,"invite"));return a};b.f.prototype.Ad=function(){var a=this.k;if(!a.invite)return v;
var c=this.B(2);if(a.invite.type&&"static"===a.invite.type)return v;if(a.invite.type&&"dynamic"===a.invite.type&&c)return r;if(c)return v;c=b.U(b.Y());if(a.invite.include){var d=r;a.invite.include.local&&(d=this.ib(a.invite.include.local,c));if(!d)return this.qc(),v}if(a.invite.exclude&&(d=v,(d=this.ib(a.invite.exclude.local||[],c))||(d=this.ib(a.invite.exclude.referrer||[],b.U(b.Ea()))),d||(d=b.f.S.W&&b.J(b.f.S.W.ha)?b.f.S.W.ha():v),d))return this.qc(),v;c="previous"===a.type?"onexit":"onentry";
return a.invite&&a.invite.when!=c?v:!a.ls?v:0<a.sv&&a.sv<=a.criteria.sp};b.f.prototype.md=function(){var a=this.k,b=a.alt;if(b)for(var d=n.u.ta(),e=0,f=0,g=b.length;f<g;f++)if(e+=b[f].sp,d<=e){if(b[f].url)a.pop.what="url",a.pop.url=b[f].url;else if(b[f].script)a.pop.what="script",a.pop.script=b[f].script;delete a.invite;break}};b.f.prototype.Vc=function(a){switch(a){case "invite":this.Dc();break;case "tracker":this.Yb()}};b.f.prototype.ib=function(a,b){for(var d=0,e=a.length;d<e;d++)if(b.match(a[d]))return r;
return v};b.f.prototype.qc=function(){var a=this.k,b=f.g.j("lc");a.ec=b["d"+a.idx].e=(b["d"+a.idx].e||0)+1;f.g.j("lc",b)};b.f.prototype.Dc=function(){var a=this.ha,c=this;if("hybrid"===j.mode)a=this.Ic;(new w.O(b.A({onSuccess:function(){a.call(c)},onError:function(){a.call(c)}},f.K.B))).Oa()};b.f.prototype.Ic=function(){var a=this.ha,c=this;(new w.O(b.A({Vb:{"do":0},success:f.K.B.Wa,onSuccess:function(){a.call(c)}},f.K.domain))).Oa()};b.f.prototype.da=function(a,b){if(this.k.links)for(var d=0,e=this.k.links[a]||
[],f=0,g=e.length;f<g;f++)d+=this.link(e[f].tag,e[f].attribute,e[f].patterns||[],e[f].qualifier,b,{sp:e[f].sp,when:e[f].when,invite:e[f].invite,pu:e[f].pu,check:e[f].check})};b.f.prototype.link=function(a,c,d,e,f,g){var j=this,m=0;b.m(d,function(d,i){m+=l(a+"["+c+"*="+i+"]").bind("click",function(){e&&b._qualify(e);f.call(j,g)}).length});return m};b.f.prototype.Cb=function(a){var c=a.criteria.lf;b.Ka(c)&&(a.criteria.lf={v:c,o:">="})};b.f.prototype.Xc=function(a){var c=a.criteria.lf;b.ba(c)&&(c=[a.criteria.lf]);
return c};b.f.prototype.Jc=function(a,b,d){for(var e=-1,f=0,g=a.length;f<g;f++)">="==a[f].o&&b>=a[f].v?e=f:"="==a[f].o&&b-d==a[f].v?e=f:">"==a[f].o&&b>a[f].v&&(e=f);return e};b.f.prototype.W=function(){var a=j.exclude,c=b.f.S.W&&b.J(b.f.S.W.global)?b.f.S.W.global():v;return!a?c:this.match(a)||c};b.f.prototype.Db=function(a){a.sv=g.sv;b.C(a.criteria.sp)&&(a.criteria.sp=a.criteria.sp[(new Date).getDay()]);var c=a.name+(a.section?"-"+a.section:""),d=c+(o.locale?"-"+o.locale:"");a.criteria.sp=this.ob.get(c)||
this.ob.get(d)||a.criteria.sp;a.invite!==v&&(a.invite=b.qa(j.invite,a.invite||{}));b.m(["tracker","survey","qualifier","cancel","pop"],function(c,d){a[d]=b.qa(j[d],a[d]||{})});a.repeatdays=j.repeatdays||a.repeatdays;if(!b.C(a.repeatdays))c=a.repeatdays,a.repeatdays=[c,c]};b.f.prototype.Ld=function(){if(g.enabled&&!this.pc&&this.Ab)this.pc=r,this.Kd()};b.f.prototype.Kd=function(){0==o.invite&&f.g.log("103");j.previous&&f.g.j("p",g.cs);j.tracker.adjust&&f.g.j("f",b.now())};b.f.prototype.Yc=function(){for(var a=
[],b=g.xa,d=0,e=b.length,f=0;d<e;d++)if(!(b[d].site&&b[d].site!=g.site.name)&&this.match(b[d].include)){a[f++]=d;break}return a};b.f.prototype.match=function(a){function c(a,c){b.C(c)||(c=[c]);for(var d=0,e=c.length;d<e;d++)if((a+"").match(c[d]))return r;return v}var d=v;b.m([["urls",b.Y()],["referrers",b.Ea()],["userAgents",navigator.userAgent]],function(c,e){b.m(a[e[0]]||[],function(a,c){if(b.U(e[1]).match(c))return d=r,v});if(!d)return v});if(d)return r;b.m(a.cookies||[],function(a,b){var c;if(c=
p.n.R(b.name))if(c.match(b.value||"."))return d=r,v});if(d)return r;var e=f.za("fsr.ipo",f.g.Ga("fsr.ipo")),g=a.variables;if(g)for(var m=0,l=g.length;m<l;m++){var i=g[m].name,n=g[m].value;if(!(i==j.ipexclude&&1==e.get("value"))){b.C(i)||(i=[i],n=[n]);for(var o,J=r,q=0,K=i.length;q<K;q++){try{o=(new Function("return "+i[q]))()}catch(t){o=""}if((o||""===o)&&!c(o,n[q])){J=v;break}}if(J)return r}}return v};b.f.prototype.lb=function(){var a=(new Date).getHours(),c=100;b.q(j.pool)&&(c=j.pool);var d=f.za("fsr.pool",
f.g.Ga("fsr.pool")),c=d&&1==d.get("value")?100:c;b.C(c)||(c=[{h:0,p:c}]);for(var d=100,e=0,g=c.length;e<g;e++)a>=c[e].h&&(d=c[e].p);return d};b.f.prototype.Cc=function(a){var b=n.u.ta();if(!(0<b&&b<=a))this.L=-2,f.g.j("v",this.L),f.$.Aa()};b.f.prototype.ha=function(){var a=this.k,c=this;b.A(o,{invite:0,repeatoverride:j.repeatoverride||v});f.g.j("i",o.invite);o.repeatoverride||this.pb(1);o.locale&&f.g.j("l",o.locale);a.invite?(setTimeout(function(){b.f.gb.M(c.P,f.g.j());f.g.log("100",g.cs);"dhtml"==
a.invite.type?c.cc():"page"==a.invite.type?c.fd():c.cc()},1E3*(a.invite.delay||0)),a.invite.timeout&&setTimeout(function(){g.idhtml.X()},1E3*a.invite.timeout)):setTimeout(function(){c.la();c.closed()},0)};b.f.prototype.cc=function(){if(this.k.invite.css){var a=this;b.hb(n.u.na(g.site,"css_files")+this.k.invite.css,"link",function(){a.Cd()})}};b.f.prototype.Cd=function(){var a=this,c=this.k.invite,d=[];this.page(c);c.buttons&&b.m(j.ce?[["accept",this.la],["decline",this.Ca]]:[["decline",this.Ca],["accept",
this.la]],function(b,e){if(c.buttons[e[0]]){var f=l("<button>");d.push(f.Bb("id",e[0]).G("fsr_closeSticky fsr_button fsr_"+e[0]).bind("click",function(){e[1].call(a)}).bind("mouseover",function(){l(this).G("fsr_mouseover_"+e[0])}).bind("mouseout",function(){l(this).hc("fsr_mouseover_"+e[0])}).bind("focus",function(){l(this).G("fsr_mouseover_"+e[0])}).bind("blur",function(){l(this).hc("fsr_mouseover_"+e[0])}));f[0].innerHTML=c.buttons[e[0]]}});var e={ae:{x:c.x,y:c.y},V:{w:c.width||"500",t:c.text||
"100%",href:n.u.na(g.site,"image_files"),btn:d,close:function(){a.Ca()}},jb:{bgcolor:c.bgcolor,opacity:c.opacity,hide:c.hideOnClick}};o.type=0;var h;c.content?(e.content=c.content,e.footer=c.footer):e.url=n.u.na(g.site,"html_files")+(c.url.dhtml||c.url);h=new f.ya(e);e.closed&&h.xd(function(){a.closed()});e=this.k.invite?this.k.invite.hide:[];b.C(e)?b.m(e,function(a,b){l("#"+b).I("visibility","hidden")}):l(e).I("visibility","hidden");h.show();g.idhtml=h};b.f.prototype.la=function(){b.f.Lb.M(this.P,
f.g.j());o.invite=1;f.g.log("101");f.g.j("i",1);this.k.lock&&f.g.j("lk",1);this.pb(0);f.$.yd();this.kd();this.closed()};b.f.prototype.Ca=function(){b.f.Mb.M(this.P,f.g.j());o.invite=-1;f.g.log("102");f.g.j("i",-1);this.pb(1);f.$.Aa();this.closed()};b.f.prototype.closed=function(){var a=this.k.invite?this.k.invite.hide:[];b.C(a)?b.m(a,function(a,b){l("#"+b).I("visibility","visible")}):l(a).I("visibility","visible")};b.f.prototype.vd=function(){o.qualifier=1;f.g.log("301");this.td()};b.f.prototype.cd=
function(a){o.repeatoverride=1==a};b.f.prototype.kd=function(){var a=this.k;"later"==a.pop.when?(a.pop.tracker&&this.bc(),this.da("pop",this.Zb),this.da("cancel",this.Ba),this.da("pause",this.pause)):"now"==a.pop.when?this.ac():"both"==a.pop.when&&(this.bc(),this.nb())};b.f.prototype.ac=function(){f.g.j("s",1);switch(this.k.pop.what){case "survey":this.nb();break;case "qualifier":this.gd();break;case "url":this.jd();break;case "script":this.hd()}};b.f.prototype.td=function(){!o.canceled?this.nb():
this.Xb()};b.f.prototype.Yb=function(a){this.B(3)?this.jc(a):this.ac()};b.f.prototype.nb=function(){b.f.kc.M(this.P,f.g.j());var a=this.k,c=a.survey,d=a.pop;this.$b(f.g.Tc(a,d.now),c.width,c.height,d.pu,"400")};b.f.prototype.ed=function(){var a=j.survey,b="feedback",d=o.locale;d&&(b+="-"+d);this.$b(b,a.width,a.height,v,"600")};b.f.prototype.$b=function(a,c,d,e,h){var j=f.K.Gd,l=new Date-0+"_"+Math.round(1E13*Math.random()),i=n.u.hash(l),a=n.u.ja({sid:a,cid:g.id,pattern:g.cs,a:l,b:i,c:b.ub,version:g.version}),
l=f.D.ja();this.pop(h,b.Da()+"//"+j.host+j.path+j.url+"?"+a+"&"+l,(m.screen.width-c)/2,(m.screen.height-d)/2,c,d,e);f.g.log(h,g.cs)};b.f.prototype.bc=function(){if(!this.B(3))b.f.oc.M(this.P,f.g.j()),m.fsr$timer=setInterval(b.eb,1E3),this.Pa(this.k.tracker,r,"200")};b.f.prototype.gd=function(){b.f.gc.M(this.P,f.g.j());var a=this.k;this.Pa(a.qualifier,a.pop.pu,"300",a.pop.now)};b.f.prototype.fd=function(){b.f.gb.M(this.P,f.g.j());this.Pa(this.k.invite,v,"_self")};b.f.prototype.Xb=function(){this.Pa(this.k.cancel,
v,"500")};b.f.prototype.Zb=function(a){var c=r;this.B(4)||(b.J(a.B)&&(c=a.B()),c&&this.Yb(a))};b.f.prototype.Ba=function(){if(!f.g.j("lk")&&this.B(3)){var a=y.open("","fsr200");a&&(b.f.nc.M(this.P,f.g.j()),a.close())}};b.f.prototype.jc=function(a){var b=this,d=this.k;"Firefox"!=t.r.type||!d.qualifier.content?f.g.j("fo",a&&a.pu?2:1):(this.Ba(),setTimeout(function(){f.g.log("300",g.cs);b.be("qualifier")},1E3*(d.qualifier.delay||0)))};b.f.prototype.Pa=function(a,c,d,e){this.page(a);var h=(m.screen.width-
a.width)/2,j=(m.screen.height-a.height)/2,l=n.u.na(g.site,"html_files")+(a.url.pop||a.url),i={siteid:g.siteid,name:g.site.name,domain:g.site.domain};e&&(i.when=e);e=n.u.ja(i);l+="?"+e;e=d;if("window"===g.storageOption)e=b.g.JSON.parse(m.name),e.popOther=d,e=b.g.JSON.stringify(e);this.pop(e,l,h,j,a.width,a.height,c);f.g.log(d,g.cs)};b.f.prototype.mb=function(a){if(!this.B(2)){var b=this.k,d=this;a.sp&&(b.criteria.sp=a.sp);if(a.when||a.qualifier)b.pop.when=a.when;0<b.sv&&b.sv<=b.criteria.sp&&(o.locale&&
f.g.j("l",o.locale),a.invite?this.fc():setTimeout(function(){d.la();d.closed()},0))}};b.f.prototype.jd=function(){var a=j.survey.width,b=j.survey.height;this.pop("Other",this.k.pop.url,(m.screen.width-a)/2,(m.screen.height-b)/2,a,b)};b.f.prototype.hd=function(){b.hb(this.k.pop.script,"script")};b.f.prototype.pause=function(){f.g.j("pa","1")};b.f.prototype.pop=function(a,b,d,e,f,g,j){var l="",i=a;"_self"!=a&&(i="fsr"+a,l="location=0,status=0,scrollbars=1,resizable=1,width="+f+",height="+g+",left="+
d+",top="+e+",toolbar=0,menubar=0");if((a=m.open(b,i,l,v))&&j)a.blur(),m.focus()};b.f.prototype.language=function(){var a=j.language;if(a&&(o.locale=a.locale,a.src)){var c=o.locale,d,e;e=a.type;switch(a.src){case "location":d=b.U(b.Y());break;case "cookie":d=e&&"client"==e?p.n.R(a.name):f.g.j("lang");break;case "variable":d=new Function("return "+a.name);d=e&&"client"==e?d.call(m):g[a.name];break;case "meta":if(0!=(e=l("meta[name="+a.name+"]")).length)d=e[0].content;break;case "navigator":d=navigator.browserLanguage||
navigator.language;break;case "function":b.J(a.value)&&(d=a.value.call(m,a,this))}d=d||"";a=a.locales||[];e=0;for(var h=a.length;e<h;e++){b.C(a[e].match)||(a[e].match=[a[e].match]);for(var i,n=0,q=a[e].match.length;n<q;n++)if(i=d.match(a[e].match[n])){c=a[e].locale;break}if(i)break}o.locale=c}};b.f.prototype.page=function(a){var c=f.g.j("l");if(c)for(var d=a.locales||[],e=0,g=d.length;e<g;e++)d[e].locale==c&&(b.aa("url",d[e],a),b.aa("content",d[e],a),b.aa("footer",d[e],a),b.aa("buttons.accept",d[e],
a),b.aa("buttons.decline",d[e],a),b.aa("width",d[e],a),b.aa("height",d[e],a))};b.f.prototype.Eb=function(a){var b=o.locale;if(b)for(var d=a.locales||[],e=0,f=d.length;e<f;e++)if(d[e].locale==b){a.sp=d[e].sp;a.lf=d[e].lf;break}};b.f.prototype.Nc=function(a){var a=b.U(a||b.Ea()),c,d=s;b.m(["q","p","query"],function(b,c){if(d=a.match(RegExp("[?&]"+c+"=([^&]*)")))return v});if(!d)return c;(c=decodeURI(d[1]))&&(c=c.replace(/\+/g," "));return c};b.f.prototype.pb=function(a){if(!o.repeatoverride&&this.k.repeatdays&&
this.k.repeatdays[a]){var c=new p.n(f.g.oa("fsr.r"),{path:"/",domain:g.site.domain,secure:g.site.secure,duration:this.k.repeatdays[a]}),d=c.get();d.d=this.k.repeatdays[a];c.ma();j.altcookie.name&&p.n.write(j.altcookie.name,j.altcookie.value,{path:j.altcookie.path,domain:j.altcookie.domain,secure:g.site.secure,duration:j.altcookie.persistent?this.k.repeatdays[a]:s});var e=j.events;if(e.pd){d.i=g.rid;var h=new Date;h.setDate(h.getDate()+e.pd);d.e=h.getTime();this.k.lock&&(d.s=this.k.idx);c.ma()}"hybrid"==
j.mode&&(new w.O(b.A({Vb:{"do":1,rw:1440*this.k.repeatdays[a]}},f.K.domain))).Oa()}};b.f.prototype.qd=function(){var a=j.cpps;if(a)for(var c in a)if(a.hasOwnProperty(c)){var d=a[c],e="",h,i,q=d.mode,o=q&&"append"==q?f.D.append:f.D.set;if(d.Wb&&(e=FSR.D.get(c))){for(var q=v,t=0,la=d.Wb.length;t<la;t++)if(e===d.Wb[t]){q=r;break}if(q)continue}switch(d.source.toLowerCase()){case "url":i=function(){var a=c,e,f=d.patterns||[],g=o;return function(){for(var c=0,d=f.length;c<d;c++)if(b.U(b.Y()).match(f[c].regex)){e=
f[c].value;break}e&&""!=e&&g(a,e)}};break;case "parameter":i=function(){var a=c,b=d.name,e=o,f;return function(){(f=n.u.Ub(b))&&""!=f&&e(a,f)}};break;case "cookie":i=function(){var a=c,b=d.name,f=o;return function(){(e=p.n.R(b))&&""!=e&&f(a,e)}};break;case "variable":i=function(){var a=c,b=d.name,e=o,f;return function(){try{f=(new Function("return "+b)).call(m)}catch(c){f=v}f&&""!=f&&e(a,f)}};break;case "meta":i=function(){var a=c,b=d.name,e=o,f;return function(){if(0!=(h=l("meta[name="+b+"]")).length)f=
h[0].content;f&&""!=f&&e(a,f)}};break;case "function":i=function(){var a=c,e=o,f,h=d;return function(){b.J(h.value)&&(f=h.value.call(m,c,h,g.controller));f&&""!=f&&e(a,f)}};break;case "static":i=function(){var a=c,b=o,e=d.value;return function(){e&&""!=e&&b(a,e)}}}d.on&&"load"!=d.on&&d.query?l(d.query).bind(d.on,i()):i()()}};b.f.prototype.od=function(a){var b=j.cpps;if(b)for(var d in b)if(b.hasOwnProperty(d)){var e=b[d];e.init&&f.D.set(d,e.init,a)}};b.f.fa=function(a,b,d,e){var g=f.g.j("ev")||{};
if(e&&""!=e&&(!g["e"+b]||a.repeat))g["e"+b]=(g["e"+b]||0)+1,f.g.log(d,e),f.g.j("ev",g)};b.f.prototype.rd=function(){if(!Math.abs(1!=this.L)){var a=j.events;if(a.custom){var c=0,d;for(d in a.custom)if(a.custom.hasOwnProperty(d)){var e=a.custom[d],f=a.codes[d];if(e.enabled){var i;switch(e.source.toLowerCase()){case "url":i=function(){var a=e,d=c,g=f,i=e.patterns||[],j;return function(){for(var c=0,e=i.length;c<e;c++)if(b.U(b.Y()).match(i[c])){j=i[c];break}b.f.fa(a,d,g,j)}};break;case "parameter":i=
function(){var a=e,d=c,g=e.name,i=f,j;return function(){j=n.u.Ub(g);b.f.fa(a,d,i,j)}};break;case "cookie":i=function(){var a=e,d=c,g=e.name,i=f,j;return function(){j=p.n.R(g);b.f.fa(a,d,i,j)}};break;case "variable":i=function(){var a=e,d=c,g=e.name,i=f,j;return function(){try{j=(new Function("return "+g)).call(m)}catch(c){j=v}b.f.fa(a,d,i,j)}};break;case "function":i=function(){var a=e,d=c,i=e.value,j=f,l;return function(){b.J(i)&&(l=i.call(m,a,e,g.controller));b.f.fa(a,d,j,l)}};break;case "static":i=
function(){var a=e,d=c,g=e.value,i=f;return function(){b.f.fa(a,d,i,g)}}}e.on&&"load"!=e.on&&e.query?l(e.query).bind(e.on,i()):i()();c++}}}}};b.f.prototype.Gc=function(){clearInterval(m.fsr$timer);p.n.La(f.g.oa("fsr.a"),{path:"/",domain:g.site.domain,secure:g.site.secure})};b.popNow=function(a){P(a,"now")};b.popLater=function(a){P(a,"later")};b.popImmediate=function(){P(100,"now")};b.popFeedback=function(){var a=g.controller;a.execute(a.ed)};b.stopTracker=function(a){g.controller.jc({pu:a})};b.run=
function(){var a=g.controller;a.execute(a.ic)};b.invite=function(a,b,d){var e=g.controller;e.execute(e.mb,{sp:a,when:b,qualifier:d,invite:r})};b.popCancel=function(){g.controller.Xb()};b.showInvite=function(){g.controller.ha()};b.close=function(){g.controller.Ba()};b._sd=function(){return g.controller.k};b._pd=function(){return g.controller.Qa};b._cancel=function(){o.canceled=r};b._qualified=function(){g.controller.vd();g.idhtml.X()};b._accepted=function(a){b._language(a);g.controller.la();g.idhtml.X()};
b._declined=function(a){b._language(a);g.controller.Ca();g.idhtml.X()};b._override=function(a){g.controller.cd(a)};b._language=function(a){a&&(o[a]=a,f.g.j("l",a))};b._qualify=function(a){o.canceled=v;if(a)o.qid=a,f.g.j("q",a)};b.Cookie={};b.Cookie.read=function(a){return p.n.R(a)};b.$S=o;b.Z(function(){(new b.f).load();l(m).bind("beforeunload",function(){g.controller.Ld()})});b.f.S={cb:{loaded:x(),initialized:x(),surveydefChanged:x(),inviteShown:x(),inviteAccepted:x(),inviteDeclined:x(),trackerShown:x(),
trackerCanceled:x(),qualifierShown:x(),surveyShown:x()},W:{global:function(){return v},ha:function(){return v}},dd:{win32:r,mac:r,linux:r,iphone:v,ipad:v,ipod:v,android:v,blackberry:v,winmobile:v,wince:v,mobile:v,other:v}}})(window,{});})({});
FSR($$FSR);



// Custom scripts and Plugins for Nintendo.com

//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2007 Adobe Systems Incorporated.  All rights reserved.
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

var $ = jQuery.noConflict();

//LATO Font Loader - Google Fonts API
/*WebFontConfig = {
    google: { families: [ 'Lato::latin' ] }
  };
  (function() {
    var wf = document.createElement('script');
    wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
      '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
    wf.type = 'text/javascript';
    wf.async = 'true';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(wf, s);
  })();

*/
util = new Object;


//Image Preload Function
//util.preLoadImages("imgurl.jpg", "imgurl.jpg");
var cache = [];

// Arguments are image paths relative to the current page.
util.preLoadImages = function() {
    var el_list = arguments.length;
    for (var i = el_list; i--;) {
      var loadImg = document.createElement('img');
      loadImg.src = arguments[i];
      cache.push(loadImg);
    }
	//alert("UTIL!");
}

util.cutString = function(strText, strLength) {
	var tmpStr = strText;
	if(strText.length >= strLength) {
		tmpStr = strText.substring(0,(strLength-4));
		tmpStr = tmpStr + "...";
		return tmpStr;
	}
}

//Embed SWF
util.embedSWF = function(swfURL, swfWidth, swfHeight, divID, flashvarObj, paramObj) {
	
	if(flashvarObj != null || flashvarObj != undefined) {
		var flashvars = flashvarObj;
	} else {
		var flashvars = {};	
	}
	
	if(paramObj != null || paramObj != undefined) {
		var params = paramObj;
	} else {
		var params = {
			allowFullScreen:"true"
			//wmode: "window"		
		}
	}
	swfobject.embedSWF(swfURL, divID, swfWidth, swfHeight, "9.0.0", null, flashvars, params);
}


//Embed video
//util.embedVideo(vidURL, vidTitle, omnisection, omnipagename, divID, gamename, gamepub, gamegenre);
util.embedVideo = function(vidURL, vidTitle, omnisection, omnipagename, divID, gamenamet, gamepubt, gamegenret) {
	var pwidth = $("#"+divID).width();
	var pheight = $("#"+divID).height();
	
	//below args for games and are optional
	if(arguments[5] != undefined) {
		gname = gamenamet;
		gpub = gamepubt;
		ggenre = gamegenret;
	} else {
		gname = "";
		gpub = "";
		ggenre = "";
	}
	
	var flashvars = {
		url: vidURL, //*required
		title: vidTitle, //video title *required for omniture
		autoplay: "false", //defaults to false
		loop: "false", //defaults to false
		omniture:"live", //off, live, debug. Defaults to 'off'
		sectionname: omnisection, //for omniture. used for channel and pagename 
		pagename:omnipagename, //for omniture. used for channel and pagename
		gamename:gname, //game name. *required for omniture game videos
		gamepub:gpub, //game publisher. *required for omniture game videos
		gamegenre:ggenre, //game genre. *required for omniture game videos
		playerLocation:"", //where the video player is located (s.prop26). "in-promo", "pop-up", "product detail"
		color:"blue" //supports blue or red theme.
		
		/*
		FOR REFERENCE: OMNITURE BREAKDOWN
		
		chan:sectionname:pagename
			us:ncom: //chan (set automatically)
			games //sectionname
			pagename //Mario galaxy
				
				us:ncom:games:Mario Galaxy
				us:ncom:wii:netflix		
		*/		
	};
	var params = {
		allowFullScreen:"true",
		wmode: "window"		
	}
	
	swfobject.embedSWF("/video/globalplayer/player.swf", divID, pwidth, pheight, "9.0.0", "", flashvars, params);
}

//embed video but all flashvars and params must be provided in an object
util.embedVideoAdvance = function(divID, flashvarObj, paramObj) {
	var pwidth = $("#"+divID).width();
	var pheight = $("#"+divID).height();
	
	var flashvars = flashvarObj;
	var params = paramObj;
	
	swfobject.embedSWF("/video/globalplayer/player.swf", divID, pwidth, pheight, "9.0.0", "", flashvars, params);
}

//PointRoll tracking var
var prd=new Date(),pru=Date.UTC(prd.getUTCFullYear(),prd.getUTCMonth(),prd.getUTCDay(),prd.getUTCHours(),prd.getUTCMinutes(),prd.getUTCSeconds(),prd.getUTCMilliseconds());

util.addPointRollFrame = function(pointID) {
	var pr_eid=pru+Math.random();
	var pr_event='';
	var pr_item='';
	var pr_quantity='';
	var pr_value='';
	document.write("<iframe width='0' height='0' frameborder='0' src='http://container.pointroll.com/event/?ctid="+pointID+"&amp;av=777&eid="+pr_eid+"&amp;ev="+pr_event+"&amp;item="+pr_item+"&amp;q="+pr_quantity+"&amp;val="+pr_value+"&amp;r="+Math.random()+"'></iframe>");	
}
util.addPointRollImage = function(pointID) {
	var pr_eid=pru+Math.random();
	var pr_event='';
	var pr_item='';
	var pr_quantity='';
	var pr_value='';
	document.write("<img height='1' src='http://ev.ads.pointroll.com/event/?ss="+pointID+"&amp;av=777&amp;eid="+pr_eid+"&amp;ev="+pr_event+"&amp;item="+pr_item+"&amp;q="+pr_quantity+"&amp;val="+pr_value+"&amp;r="+Math.random()+"' width='1' />");
}
util.callPointRoll = function(pointID) {
	var pr_eid=pru+Math.random();
	var pr_event='';
	var pr_item='';
	var pr_quantity='';
	var pr_value='';
	var px=new Image(1,1);px.src="http://ev.ads.pointroll.com/event/?ss="+pointID+"&av=777&eid="+pr_eid+"&ev="+pr_event+"&item="+pr_item+"&q="+pr_quantity+"&val="+pr_value+"&r="+Math.random();
}



//Scrollable Nav
var $scrMarker = $('div#globalNavigation').outerHeight();
//alert($scrMarker);

$(window).scroll(function(){
if( $(window).scrollTop() > $scrMarker ){
	$("div#alwaysNav").fadeIn(400);
	$("div#alwaysNav").css("display", "block");
}else {
	$("div#alwaysNav").fadeOut(400);
	$("div#alwaysNav").css("display", "none");
}
});



$.fn.carousel = function(previous, next, options){
	var sliderList = $(this).children()[0];
	
	if (sliderList) {
		var increment = $(sliderList).children().outerWidth("true"),
		elmnts = $(sliderList).children(),
		numElmts = elmnts.length,
		sizeFirstElmnt = increment,
		shownInViewport = Math.round($(this).width() / sizeFirstElmnt),
		firstElementOnViewPort = 1,
		isAnimating = false;
		
		for (i = 0; i < shownInViewport; i++) {
			$(sliderList).css('width',(numElmts+shownInViewport)*increment + increment + "px");
			$(sliderList).append($(elmnts[i]).clone());
		}
		
		$(previous).click(function(event){
			if (!isAnimating) {
				if (firstElementOnViewPort == 1) {
					$(sliderList).css('left', "-" + numElmts * sizeFirstElmnt + "px");
					firstElementOnViewPort = numElmts;
				}
				else {
					firstElementOnViewPort--;
				}
				
				$(sliderList).animate({
					left: "+=" + increment,
					y: 0,
					queue: true
				}, "swing", function(){isAnimating = false;});
				isAnimating = true;
			}
			
		});
		
		$(next).click(function(event){
			if (!isAnimating) {
				if (firstElementOnViewPort > numElmts) {
					firstElementOnViewPort = 2;
					$(sliderList).css('left', "0px");
				}
				else {
					firstElementOnViewPort++;
				}
				$(sliderList).animate({
					left: "-=" + increment,
					y: 0,
					queue: true
				}, "swing", function(){isAnimating = false;});
				isAnimating = true;
			}
		});
	}
};



/*	
 *	jQuery carouFredSel 2.4.2
 *	Demo's and documentation:
 *	caroufredsel.frebsite.nl
 *	
 *	Copyright (c) 2010 Fred Heusschen
 *	www.frebsite.nl
 *
 *	Licensed under the MIT license.
 *	http://www.opensource.org/licenses/mit-license.php
 */

(function($) {
	$.fn.carouFredSel = function(o) {
		if (this.length > 1) {
			return this.each(function() {
				$(this).carouFredSel(o);
			});
		}

		this.init = function(o) {
			if (typeof(o) != 'object')					o = {};
			if (typeof(o.scroll) == 'number') {
				if (o.scroll <= 50)						o.scroll	= { items	: o.scroll 	};
				else									o.scroll	= { duration: o.scroll 	};
			} else {
				if (typeof(o.scroll) == 'string')		o.scroll	= { easing	: o.scroll 	};
			}
				 if (typeof(o.items)  == 'number') 		o.items		= { visible	: o.items 	};
			else if (typeof(o.items)  == 'string') 		o.items		= { width	: o.items, 
																		height	: o.items	};

			opts = $.extend(true, {}, $.fn.carouFredSel.defaults, o);
			opts.padding = getPadding(opts.padding);
			opts.usePadding = (
				opts.padding[0] == 0 && 
				opts.padding[1] == 0 && 
				opts.padding[2] == 0 && 
				opts.padding[3] == 0
			) ? false : true;

			direction = (opts.direction == 'up' || opts.direction == 'left') ? 'next' : 'prev';

			if (opts.direction == 'right' || opts.direction == 'left') {
				opts.dimentions = ['width', 'outerWidth', 'height', 'outerHeight', 'left', 'top', 'marginRight'];
			} else {
				opts.dimentions = ['height', 'outerHeight', 'width', 'outerWidth', 'top', 'left', 'marginBottom'];
				opts.padding = [opts.padding[3], opts.padding[2], opts.padding[1], opts.padding[0]];
			}
			
			if (	  !opts.items.width)					opts.items.width 		= getItems($cfs).outerWidth(true);
			if (	  !opts.items.height)					opts.items.height		= getItems($cfs).outerHeight(true);
			if (typeof(opts.items.minimum)	 != 'number')	opts.items.minimum		= opts.items.visible;
			if (typeof(opts.scroll.items)	 != 'number')	opts.scroll.items		= opts.items.visible;
			if (typeof(opts.scroll.duration) != 'number')	opts.scroll.duration	= 500;

			opts.auto		= getNaviObject(opts.auto, false, true);
			opts.prev		= getNaviObject(opts.prev);
			opts.next		= getNaviObject(opts.next);
			opts.pagination	= getNaviObject(opts.pagination, true);

			opts.auto		= $.extend({}, opts.scroll, opts.auto);
			opts.prev		= $.extend({}, opts.scroll, opts.prev);
			opts.next		= $.extend({}, opts.scroll, opts.next);
			opts.pagination	= $.extend({}, opts.scroll, opts.pagination);

			if (typeof(opts.pagination.keys)			!= 'boolean')	opts.pagination.keys 			= false;
			if (typeof(opts.pagination.anchorBuilder)	!= 'function')	opts.pagination.anchorBuilder	= $.fn.carouFredSel.pageAnchorBuilder;
			if (typeof(opts.auto.play)					!= 'boolean')	opts.auto.play					= true;
			if (typeof(opts.auto.nap)					!= 'boolean')	opts.auto.nap					= true;
			if (typeof(opts.auto.delay)					!= 'number')	opts.auto.delay					= 0;
			if (typeof(opts.auto.pauseDuration)			!= 'number')	opts.auto.pauseDuration			= (opts.auto.duration < 10) ? 2500 : opts.auto.duration * 5;
		};	//	/init

		this.build = function() {
			$wrp.css({
				position: 'relative',
				overflow: 'hidden'
			});
			$cfs.data('cfs_origCss', {
				width	: $cfs.css('width'),
				height	: $cfs.css('height'),
				position: $cfs.css('position'),
				top		: $cfs.css('top'),
				left	: $cfs.css('left')
			}).css({
				position: 'absolute'
			});
			if (opts.usePadding) {
				getItems($cfs).each(function() {
					var m = parseInt($(this).css(opts.dimentions[6]));
					if (isNaN(m)) m = 0;
					$(this).data('cfs_origCssMargin', m);
				});
			}
			if (opts.items.minimum >= totalItems) {
				log('Not enough items: not scrolling');
				if (opts.prev.button) opts.prev.button.hide();
				if (opts.next.button) opts.next.button.hide();
			}
		};	//	/build

		this.bind_events = function() {
			$cfs
				.bind('pause', function(){
					if (autoInterval != null) {
						clearTimeout(autoInterval);
					}
				})
				.bind('play', function(e, d, f) {
					$cfs.trigger('pause');
					if (opts.auto.play) {
						if (d != 'prev' && d != 'next')	d = direction;
						if (typeof(f) != 'number')		f = 0;

						autoInterval = setTimeout(function() {
							if ($cfs.is(':animated'))	$cfs.trigger('play', d);
							else 						$cfs.trigger(d, opts.auto);
						}, opts.auto.pauseDuration + f);
					}
				})
				.bind('prev', function(e, sO, nI) {
					if ($cfs.is(':animated')) return false;
					if (opts.items.minimum >= totalItems) {
						log('Not enough items: not scrolling');
						return false;
					}
					if (typeof(sO) == 'number') nI = sO;
					if (typeof(sO) != 'object') sO = opts.prev;
					if (typeof(nI) != 'number') nI = sO.items;
					if (typeof(nI) != 'number') {
						log('Not a valid number: not scrolling');
						return false;
					}

					if (!opts.circular) {
						var nulItem = totalItems - firstItem;
						if (nulItem - nI < 0) {
							nI = nulItem;
						}
						if (firstItem == 0) {
							nI = 0;
						}
					}

					firstItem += nI;
					if (firstItem >= totalItems) firstItem -= totalItems;

					if (!opts.circular && !opts.infinite) {
						if (firstItem == 0 && 
							opts.prev.button) opts.prev.button.addClass('disabled');
						if (opts.next.button) opts.next.button.removeClass('disabled');
					}
					if (nI == 0) {
						if (opts.infinite) $cfs.trigger('next', totalItems-opts.items.visible);
						return false;
					}

					getItems($cfs, ':gt('+(totalItems-nI-1)+')').prependTo($cfs);
					if (totalItems < opts.items.visible + nI) getItems($cfs, ':lt('+((opts.items.visible+nI)-totalItems)+')').clone(true).appendTo($cfs);

					var c_itm = getCurrentItems($cfs, opts, nI),
						l_cur = getItems($cfs, ':nth('+(nI-1)+')'),
						l_old = c_itm[1].filter(':last'),
						l_new = c_itm[0].filter(':last');

					if (opts.usePadding) l_old.css(opts.dimentions[6], l_old.data('cfs_origCssMargin'));

					var i_siz = getSizes(opts, getItems($cfs, ':lt('+nI+')')),
						w_siz = mapWrapperSizes(getSizes(opts, c_itm[0], true), opts);
	
					if (opts.usePadding) l_old.css(opts.dimentions[6], l_old.data('cfs_origCssMargin') + opts.padding[1]);

					var a_cfs = {},
						a_new = {},
						a_cur = {},
						a_dur = sO.duration;

						 if (a_dur == 'auto')	a_dur = opts.scroll.duration / opts.scroll.items * nI;
					else if (a_dur <= 0)		a_dur = 0;
					else if (a_dur < 10)		a_dur = i_siz[0] / a_dur;

					if (sO.onBefore) sO.onBefore(c_itm[1], c_itm[0], w_siz, a_dur);

					if (opts.usePadding) {
						var new_m = opts.padding[3];
						a_cur[opts.dimentions[6]] = l_cur.data('cfs_origCssMargin');
						a_new[opts.dimentions[6]] = l_new.data('cfs_origCssMargin') + opts.padding[1];

						l_cur.css(opts.dimentions[6], l_cur.data('cfs_origCssMargin') + opts.padding[3]);
						l_cur.stop().animate(a_cur, {
							duration: a_dur,
							easing	: sO.easing
						});
						l_new.stop().animate(a_new, {
							duration: a_dur,
							easing	: sO.easing
						});
					} else {
						var new_m = 0;
					}
					a_cfs[opts.dimentions[4]] = new_m;

					if (typeof(opts.items[opts.dimentions[0]]) != 'number' ||
						typeof(opts.items[opts.dimentions[2]]) != 'number'
					) {
						$wrp.stop().animate(w_siz, {
							duration: a_dur,
							easing	: sO.easing
						});
					}
					$cfs.data('cfs_numItems', nI)
						.data('cfs_slideObj', sO)
						.data('cfs_oldItems', c_itm[1])
						.data('cfs_newItems', c_itm[0])
						.data('cfs_wrapSize', w_siz)
						.css(opts.dimentions[4], -i_siz[0])
						.animate(a_cfs, {
							duration: a_dur,
							easing	: sO.easing,
							complete: function() {
								if ($cfs.data('cfs_slideObj').onAfter) {
									$cfs.data('cfs_slideObj').onAfter($cfs.data('cfs_oldItems'), $cfs.data('cfs_newItems'), $cfs.data('cfs_wrapSize'));
								}
								if (totalItems < opts.items.visible + $cfs.data('cfs_numItems')) {
									getItems($cfs, ':gt('+(totalItems-1)+')').remove();
								}
								var l_itm = getItems($cfs, ':nth('+(opts.items.visible+$cfs.data('cfs_numItems')-1)+')');
								if (opts.usePadding) {
									l_itm.css(opts.dimentions[6], l_itm.data('cfs_origCssMargin'));
								}
							}
						});
					$cfs.trigger('updatePageStatus').trigger('play', ['', a_dur]);
				})
				.bind('next', function(e, sO, nI) {
					if ($cfs.is(':animated')) return false;
					if (opts.items.minimum >= totalItems) {
						log('Not enough items: not scrolling');
						return false;
					}
					if (typeof(sO) == 'number') nI = sO;
					if (typeof(sO) != 'object') sO = opts.next;
					if (typeof(nI) != 'number') nI = sO.items;
					if (typeof(nI) != 'number') {
						log('Not a valid number: not scrolling');
						return false;
					}

					if (!opts.circular) {
						if (firstItem == 0) {
							if (nI > totalItems - opts.items.visible) {
								nI = totalItems - opts.items.visible;
							}
						} else {
							if (firstItem - nI < opts.items.visible) {
								nI = firstItem - opts.items.visible;
							}
						}
					}

					firstItem -= nI;
					if (firstItem < 0) firstItem += totalItems;

					if (!opts.circular && !opts.infinite) {
						if (firstItem == opts.items.visible &&
							opts.next.button) opts.next.button.addClass('disabled');
						if (opts.prev.button) opts.prev.button.removeClass('disabled');
					}
					if (nI == 0) {
						if (opts.infinite) $cfs.trigger('prev', totalItems-opts.items.visible);
						return false;
					}

					if (totalItems < opts.items.visible + nI) getItems($cfs, ':lt('+((opts.items.visible+nI)-totalItems)+')').clone(true).appendTo($cfs);

					var c_itm = getCurrentItems($cfs, opts, nI),
						l_cur = getItems($cfs, ':nth('+(nI-1)+')'),
						l_old = c_itm[0].filter(':last'),
						l_new = c_itm[1].filter(':last');

					if (opts.usePadding) {
						l_old.css(opts.dimentions[6], l_old.data('cfs_origCssMargin'));
						l_new.css(opts.dimentions[6], l_new.data('cfs_origCssMargin'));
					}

					var i_siz = getSizes(opts, getItems($cfs, ':lt('+nI+')')),
						w_siz = mapWrapperSizes(getSizes(opts, c_itm[1], true), opts);

					if (opts.usePadding) {
						l_old.css(opts.dimentions[6], l_old.data('cfs_origCssMargin') + opts.padding[1]);
						l_new.css(opts.dimentions[6], l_new.data('cfs_origCssMargin') + opts.padding[1]);
					}

					var a_cfs = {},
						a_old = {},
						a_cur = {},
						a_dur = sO.duration;

						 if (a_dur == 'auto')	a_dur = opts.scroll.duration / opts.scroll.items * nI;
					else if (a_dur <= 0)		a_dur = 0;
					else if (a_dur < 10)		a_dur = i_siz[0] / a_dur;

					if (sO.onBefore) sO.onBefore(c_itm[0], c_itm[1], w_siz, a_dur);

					a_cfs[opts.dimentions[4]] = -i_siz[0];
					
					if (opts.usePadding) {
						a_old[opts.dimentions[6]] = l_old.data('cfs_origCssMargin');
						a_cur[opts.dimentions[6]] = l_cur.data('cfs_origCssMargin') + opts.padding[3];
						l_new.css(opts.dimentions[6], l_new.data('cfs_origCssMargin') + opts.padding[1]);

						l_old.stop().animate(a_old, {
							duration: a_dur,
							easing	: sO.easing
						});
						l_cur.stop().animate(a_cur, {
							duration: a_dur,
							easing	: sO.easing
						});
					}

					if (typeof(opts.items[opts.dimentions[0]]) != 'number' ||
						typeof(opts.items[opts.dimentions[2]]) != 'number'
					) {
						$wrp.stop().animate(w_siz, {
							duration: a_dur,
							easing	: sO.easing
						});
					}
					$cfs.data('cfs_numItems', nI)
						.data('cfs_slideObj', sO)
						.data('cfs_oldItems', c_itm[0])
						.data('cfs_newItems', c_itm[1])
						.data('cfs_wrapSize', w_siz)
						.animate(a_cfs, {
							duration: a_dur,
							easing	: sO.easing,
							complete: function() {
								if ($cfs.data('cfs_slideObj').onAfter) {
									$cfs.data('cfs_slideObj').onAfter($cfs.data('cfs_oldItems'), $cfs.data('cfs_newItems'), $cfs.data('cfs_wrapSize'));
								}
								if (totalItems < opts.items.visible+$cfs.data('cfs_numItems')) {
									getItems($cfs, ':gt('+(totalItems-1)+')').remove();
								}
								var org_m = (opts.usePadding) ? opts.padding[3] : 0;
								$cfs.css(opts.dimentions[4], org_m);
								
								var l_itm = getItems($cfs, ':lt('+$cfs.data('cfs_numItems')+')').appendTo($cfs).filter(':last');
								if (opts.usePadding) {
									l_itm.css(opts.dimentions[6], l_itm.data('cfs_origCssMargin'));
								}
							}
						});
					$cfs.trigger('updatePageStatus').trigger('play', ['', a_dur]);
				})
				.bind('slideTo', function(e, num, dev, org, obj) {
					if ($cfs.is(':animated')) return false;

					num = getItemIndex(num, dev, org, firstItem, totalItems, $cfs);
					if (num == 0) return false;
					if (typeof(obj) != 'object') obj = false;

					if (opts.circular) {
						if (num < totalItems / 2) 	$cfs.trigger('next', [obj, num]);
						else 						$cfs.trigger('prev', [obj, totalItems-num]);
					} else {
						if (firstItem == 0 ||
							firstItem > num)		$cfs.trigger('next', [obj, num]);
						else						$cfs.trigger('prev', [obj, totalItems-num]);
					}
				})
				.bind('insertItem', function(e, itm, num, org, dev) {
					if (typeof(itm) == 'object' && typeof(itm.jquery) == 'undefined') itm = $(itm);
					if (typeof(itm) == 'string') itm = $(itm);
					if (typeof(itm) != 'object' || 
						typeof(itm.jquery) == 'undefined' || 
						itm.length == 0
					) {
						log('Not a valid object.');
						return false;
					}
					if (typeof(num) == 'undefined' || num == 'end') {
						$cfs.append(itm);
					} else {
							num = getItemIndex(num, dev, org, firstItem, totalItems, $cfs);
						var $cit = getItems($cfs, ':nth('+num+')');

						if ($cit.length) {
							if (num <= firstItem) firstItem += itm.length;
							$cit.before(itm);
						} else {
							$cfs.append(itm);
						}
					}
					totalItems = getItems($cfs).length;
					setSizes($cfs, opts);
					$cfs.trigger('updatePageStatus', true);
				})
				.bind('removeItem', function(e, num, org, dev) {
					if (typeof(num) == 'undefined' || num == 'end') {
						getItems($cfs, ':last').remove();
					} else {
							num = getItemIndex(num, dev, org, firstItem, totalItems, $cfs);
						var $cit = getItems($cfs, ':nth('+num+')');
						if ($cit.length){
							if (num < firstItem) firstItem -= $cit.length;
							$cit.remove();
						}
					}
					totalItems = getItems($cfs).length;
					setSizes($cfs, opts);
					$cfs.trigger('updatePageStatus', true);
				})
				.bind('updatePageStatus', function(e, bpa) {
					if (!opts.pagination.container) return false;
					if (typeof(bpa) == 'boolean' && bpa) {
						getItems(opts.pagination.container).remove();
						for (var a = 0; a < Math.ceil(totalItems/opts.items.visible); a++) {
							opts.pagination.container.append(opts.pagination.anchorBuilder(a+1));
						}
						getItems(opts.pagination.container).unbind('click').each(function(a) {
							$(this).click(function(e) {
								$cfs.trigger('slideTo', [a * opts.items.visible, 0, true, opts.pagination]);
								e.preventDefault();
							});
						});
					}
					var nr = (firstItem == 0) ? 0 : Math.round((totalItems-firstItem)/opts.items.visible);
					getItems(opts.pagination.container).removeClass('selected').filter(':nth('+nr+')').addClass('selected');
				});

			if (opts.useScrollTo) {
				$cfs.bind('scrollTo', function(e, a, b, c, d) {
					$cfs.trigger('slideTo', [a, b, c, d]);
				});
			}
		};	//	/bind_events

		this.bind_buttons = function() {
			if (opts.auto.pauseOnHover && opts.auto.play) {
				$wrp.hover(
					function() { $cfs.trigger('pause'); },
					function() { $cfs.trigger('play');	}
				);
			}
			if (opts.prev.button) {
				opts.prev.button.click(function(e) {
					$cfs.trigger('prev');
					e.preventDefault();
				});
				if (opts.prev.pauseOnHover && opts.auto.play) {
					opts.prev.button.hover(
						function() { $cfs.trigger('pause');	},
						function() { $cfs.trigger('play');	}
					);
				}
				if (!opts.circular && !opts.infinite) {
					opts.prev.button.addClass('disabled');
				}
			}
			if (opts.next.button) {
				opts.next.button.click(function(e) {
					$cfs.trigger('next');
					e.preventDefault();
				});
				if (opts.next.pauseOnHover && opts.auto.play) {
					opts.next.button.hover(
						function() { $cfs.trigger('pause');	},
						function() { $cfs.trigger('play');	}
					)
				}
			}
			if (opts.pagination.container) {
				$cfs.trigger('updatePageStatus', true);
				if (opts.pagination.pauseOnHover && opts.auto.play) {
					opts.pagination.container.hover(
						function() { $cfs.trigger('pause');	},
						function() { $cfs.trigger('play');	}
					);
				}
			}
			if (opts.next.key || opts.prev.key) {
				$(document).keyup(function(e) {
					var k = e.keyCode;
					if (k == opts.next.key)	$cfs.trigger('next');
					if (k == opts.prev.key)	$cfs.trigger('prev');
				});
			}
			if (opts.pagination.keys) {
				$(document).keyup(function(e) {
					var k = e.keyCode;
					if (k >= 49 && k < 58) {
						k = (k-49) * opts.items.visible;
						if (k <= totalItems) {
							$cfs.trigger('slideTo', [k, 0, true, opts.pagination]);
						}
					}
				});
			}
			if (opts.auto.play) {
				$cfs.trigger('play', [direction, opts.auto.delay]);
				if ($.fn.nap && opts.auto.nap) {
					$cfs.nap('pause','play');
				}
			}
			if (opts.items.start != 0) {
				$cfs.trigger('slideTo', [0, opts.items.start, true, { duration: 0 }]);
			}
		};	//	/bind_buttons

		this.destroy = function() {
			$cfs.css($cfs.data('cfs_origCss'))
				.unbind('pause')
				.unbind('play')
				.unbind('prev')
				.unbind('next')
				.unbind('scrollTo')
				.unbind('slideTo')
				.unbind('insertItem')
				.unbind('removeItem')
				.unbind('updatePageStatus');

			$wrp.replaceWith($cfs);
			return this;
		};	//	/destroy

		this.configuration = function(a, b) {
			if (typeof(a) == 'undefined')	return opts;
			if (typeof(b) == 'undefined') 	return eval('opts.'+a);

			eval('opts.'+a+' = b');
			this.init(opts);
			setSizes($cfs, opts);
			return this;
		};	//	/configuration

		var $cfs 			= $(this),
			$wrp			= $(this).wrap('<div class="caroufredsel_wrapper" />').parent(),
			opts 			= {},
			totalItems		= getItems($cfs).length,
			firstItem 		= 0,
			autoInterval	= null,
			direction		= 'next';

		this.init(o);
		this.build();
		this.bind_events();
		this.bind_buttons();
		setSizes($cfs, opts);

		return this;
	};

	//	public
	$.fn.carouFredSel.defaults = {
		infinite	: true,
		circular	: true,
		direction	: 'left',
		padding		: 0,
		useScrollTo	: true,
		items		: {
			visible		: 5,
			start		: 0
		},
		scroll		: {
			easing		: 'swing',
			pauseOnHover: false
		}
	};
	$.fn.carouFredSel.pageAnchorBuilder = function(nr) {
		return '<a href="#"><span>'+nr+'</span></a>';
	};

	//	private
	function getKeyCode(k) {
		if (k == 'right')	return 39;
		if (k == 'left')	return 37;
		if (k == 'up')		return 38;
		if (k == 'down')	return 40;
		return -1
	};
	function getNaviObject(obj, pagi, auto) {
		if (typeof(pagi) != 'boolean') pagi = false;
		if (typeof(auto) != 'boolean') auto = false;

		if (typeof(obj) == 'undefined')	obj = {};
		if (typeof(obj) == 'string') {
			var temp = getKeyCode(obj);
			if (temp == -1) 			obj = $(obj);
			else 						obj = temp;
		}
		if (pagi) {
			if (typeof(obj.jquery) 		!= 'undefined')	obj = { container: obj };
			if (typeof(obj) 			== 'boolean')	obj = { keys: obj };
			if (typeof(obj.container) 	== 'string')	obj.container = $(obj.container);

		} else if (auto) {
			if (typeof(obj) == 'boolean')				obj = { play: obj };
			if (typeof(obj) == 'number')				obj = { pauseDuration: obj };

		} else {
			if (typeof(obj.jquery)	!= 'undefined')		obj = { button: obj };
			if (typeof(obj) 		== 'number')		obj = { key: obj };
			if (typeof(obj.button)	== 'string')		obj.button = $(obj.button);
			if (typeof(obj.key)		== 'string')		obj.key = getKeyCode(obj.key);
		}
		return obj;
	};
	function getItems(a, f) {
		if (typeof(f) != 'string') f = '';
		return $('> *:not(.caroufredsel_spacer)'+f, a);
	};
	function getCurrentItems(c, o, n) {
		var oi = getItems(c, ':lt('+o.items.visible+')'),
			ni = getItems(c, ':lt('+(o.items.visible+n)+'):gt('+(n-1)+')');
		return[oi, ni];
	};
	function getItemIndex(num, dev, org, firstItem, totalItems, $cfs) {
		if (typeof(num) == 'string') {
			if (isNaN(num)) num = $(num);
			else 			num = parseInt(num);
		}
		if (typeof(num) == 'object') {
			if (typeof(num.jquery) == 'undefined') num = $(num);
			num = getItems($cfs).index(num);
			if (typeof(org) != 'boolean') org = false;
		} else {
			if (typeof(org) != 'boolean') org = true;
		}
		if (isNaN(num))	num = 0;
		else 			num = parseInt(num);
		if (isNaN(dev))	dev = 0;
		else 			dev = parseInt(dev);

		if (org) {
			num += firstItem;
			if (num >= totalItems)	num -= totalItems;
		}
		num += dev;
		if (num >= totalItems)		num -= totalItems;
		if (num < 0)				num += totalItems;
		return num;
	};
	function getSizes(o, $i, wrap) {
		if (typeof(wrap) != 'boolean') wrap = false;
		var di = o.dimentions,
			s1 = 0,
			s2 = 0;

			 if (wrap && typeof(o[di[0]]) 		== 'number') 	s1 += o[di[0]];
		else if (		 typeof(o.items[di[0]]) == 'number') 	s1 += o.items[di[0]] * $i.length;
		else {
			$i.each(function() { 
				s1 += $(this)[di[1]](true);
			});
		}

			 if (wrap && typeof(o[di[2]]) 		== 'number') 	s2 += o[di[2]];
		else if (		 typeof(o.items[di[2]]) == 'number') 	s2 += o.items[di[2]];
		else {
			$i.each(function() {
				var m = $(this)[di[3]](true);
				if (s2 < m) s2 = m;
			});
		}
		return [s1, s2];
	};
	function mapWrapperSizes(ws, o) {
		var pad = (o.usePadding) ? o.padding : [0, 0, 0, 0];
		var wra = {};
			wra[o.dimentions[0]] = ws[0] + pad[1] + pad[3];
			wra[o.dimentions[2]] = ws[1] + pad[0] + pad[2];
		return wra;
	};
	function setSizes($c, o) {
		var $w = $c.parent(),
			$i = getItems($c),
			$l = $i.filter(':nth('+(o.items.visible-1)+')'),
			is = getSizes(o, $i);

		$w.css(mapWrapperSizes(getSizes(o, $i.filter(':lt('+o.items.visible+')'), true), o));
		if (o.usePadding) {
			$l.css(o.dimentions[6], $l.data('cfs_origCssMargin') + o.padding[1]);
			$c.css(o.dimentions[5], o.padding[0]);
			$c.css(o.dimentions[4], o.padding[3]);
		}
		$c.css(o.dimentions[0], is[0]*2);
		$c.css(o.dimentions[2], is[1]);
	};
	function getPadding(p) {
			 if (typeof(p) == 'number')	p = [p];
		else if (typeof(p) == 'string')	p = p.split('px').join('').split(' ');

		if (typeof(p) != 'object') {
			log('Not a valid value for padding.');
			p = [0];
		}
		for (i in p) {
			p[i] = parseInt(p[i]);
		}
		switch (p.length) {
			case 0:
				return [0, 0, 0, 0];
			case 1:
				return [p[0], p[0], p[0], p[0]];
			case 2:
				return [p[0], p[1], p[0], p[1]];
			case 3:
				return [p[0], p[1], p[2], p[1]];
			default:
				return p;
		}
	};
	function log(m) {
		if (typeof(m) == 'string') m = 'carouFredSel: ' + m;
		if (window.console && window.console.log) window.console.log(m);
		else try { console.log(m); } catch(err) { }
	};

	$.fn.caroufredsel = function(o) {
		this.carouFredSel(o);
	};

})(jQuery);


/*!
 * jQuery Cycle Plugin (with Transition Definitions)
 * Examples and documentation at: http://jquery.malsup.com/cycle/
 * Copyright (c) 2007-2010 M. Alsup
 * Version: 2.9995 (09-AUG-2011)
 * Dual licensed under the MIT and GPL licenses.
 * http://jquery.malsup.com/license.html
 * Requires: jQuery v1.3.2 or later
 */
;(function($) {

var ver = '2.9995';

// if $.support is not defined (pre jQuery 1.3) add what I need
if ($.support == undefined) {
	$.support = {
		opacity: !($.browser.msie)
	};
}

function debug(s) {
	$.fn.cycle.debug && log(s);
}		
function log() {
	window.console && console.log && console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
}
$.expr[':'].paused = function(el) {
	return el.cyclePause;
}


// the options arg can be...
//   a number  - indicates an immediate transition should occur to the given slide index
//   a string  - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)
//   an object - properties to control the slideshow
//
// the arg2 arg can be...
//   the name of an fx (only used in conjunction with a numeric value for 'options')
//   the value true (only used in first arg == 'resume') and indicates
//	 that the resume should occur immediately (not wait for next timeout)

$.fn.cycle = function(options, arg2) {
	var o = { s: this.selector, c: this.context };

	// in 1.3+ we can fix mistakes with the ready state
	if (this.length === 0 && options != 'stop') {
		if (!$.isReady && o.s) {
			log('DOM not ready, queuing slideshow');
			$(function() {
				$(o.s,o.c).cycle(options,arg2);
			});
			return this;
		}
		// is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
		log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
		return this;
	}

	// iterate the matched nodeset
	return this.each(function() {
		var opts = handleArguments(this, options, arg2);
		if (opts === false)
			return;

		opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
		
		// stop existing slideshow for this container (if there is one)
		if (this.cycleTimeout)
			clearTimeout(this.cycleTimeout);
		this.cycleTimeout = this.cyclePause = 0;

		var $cont = $(this);
		var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
		var els = $slides.get();

		var opts2 = buildOptions($cont, $slides, els, opts, o);
		if (opts2 === false)
			return;

		if (els.length < 2) {
			log('terminating; too few slides: ' + els.length);
			return;
		}

		var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);

		// if it's an auto slideshow, kick it off
		if (startTime) {
			startTime += (opts2.delay || 0);
			if (startTime < 10)
				startTime = 10;
			debug('first timeout: ' + startTime);
			this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts.backwards)}, startTime);
		}
	});
};

function triggerPause(cont, byHover, onPager) {
	var opts = $(cont).data('cycle.opts');
	var paused = !!cont.cyclePause;
	if (paused && opts.paused)
		opts.paused(cont, opts, byHover, onPager);
	else if (!paused && opts.resumed)
		opts.resumed(cont, opts, byHover, onPager);
}

// process the args that were passed to the plugin fn
function handleArguments(cont, options, arg2) {
	if (cont.cycleStop == undefined)
		cont.cycleStop = 0;
	if (options === undefined || options === null)
		options = {};
	if (options.constructor == String) {
		switch(options) {
		case 'destroy':
		case 'stop':
			var opts = $(cont).data('cycle.opts');
			if (!opts)
				return false;
			cont.cycleStop++; // callbacks look for change
			if (cont.cycleTimeout)
				clearTimeout(cont.cycleTimeout);
			cont.cycleTimeout = 0;
			opts.elements && $(opts.elements).stop();
			$(cont).removeData('cycle.opts');
			if (options == 'destroy')
				destroy(opts);
			return false;
		case 'toggle':
			cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
			checkInstantResume(cont.cyclePause, arg2, cont);
			triggerPause(cont);
			return false;
		case 'pause':
			cont.cyclePause = 1;
			triggerPause(cont);
			return false;
		case 'resume':
			cont.cyclePause = 0;
			checkInstantResume(false, arg2, cont);
			triggerPause(cont);
			return false;
		case 'prev':
		case 'next':
			var opts = $(cont).data('cycle.opts');
			if (!opts) {
				log('options not found, "prev/next" ignored');
				return false;
			}
			$.fn.cycle[options](opts);
			return false;
		default:
			options = { fx: options };
		};
		return options;
	}
	else if (options.constructor == Number) {
		// go to the requested slide
		var num = options;
		options = $(cont).data('cycle.opts');
		if (!options) {
			log('options not found, can not advance slide');
			return false;
		}
		if (num < 0 || num >= options.elements.length) {
			log('invalid slide index: ' + num);
			return false;
		}
		options.nextSlide = num;
		if (cont.cycleTimeout) {
			clearTimeout(cont.cycleTimeout);
			cont.cycleTimeout = 0;
		}
		if (typeof arg2 == 'string')
			options.oneTimeFx = arg2;
		go(options.elements, options, 1, num >= options.currSlide);
		return false;
	}
	return options;
	
	function checkInstantResume(isPaused, arg2, cont) {
		if (!isPaused && arg2 === true) { // resume now!
			var options = $(cont).data('cycle.opts');
			if (!options) {
				log('options not found, can not resume');
				return false;
			}
			if (cont.cycleTimeout) {
				clearTimeout(cont.cycleTimeout);
				cont.cycleTimeout = 0;
			}
			go(options.elements, options, 1, !options.backwards);
		}
	}
};

function removeFilter(el, opts) {
	if (!$.support.opacity && opts.cleartype && el.style.filter) {
		try { el.style.removeAttribute('filter'); }
		catch(smother) {} // handle old opera versions
	}
};

// unbind event handlers
function destroy(opts) {
	if (opts.next)
		$(opts.next).unbind(opts.prevNextEvent);
	if (opts.prev)
		$(opts.prev).unbind(opts.prevNextEvent);
	
	if (opts.pager || opts.pagerAnchorBuilder)
		$.each(opts.pagerAnchors || [], function() {
			this.unbind().remove();
		});
	opts.pagerAnchors = null;
	if (opts.destroy) // callback
		opts.destroy(opts);
};

// one-time initialization
function buildOptions($cont, $slides, els, options, o) {
	// support metadata plugin (v1.0 and v2.0)
	var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
	var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
	if (meta)
		opts = $.extend(opts, meta);
	if (opts.autostop)
		opts.countdown = opts.autostopCount || els.length;

	var cont = $cont[0];
	$cont.data('cycle.opts', opts);
	opts.$cont = $cont;
	opts.stopCount = cont.cycleStop;
	opts.elements = els;
	opts.before = opts.before ? [opts.before] : [];
	opts.after = opts.after ? [opts.after] : [];

	// push some after callbacks
	if (!$.support.opacity && opts.cleartype)
		opts.after.push(function() { removeFilter(this, opts); });
	if (opts.continuous)
		opts.after.push(function() { go(els,opts,0,!opts.backwards); });

	saveOriginalOpts(opts);

	// clearType corrections
	if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
		clearTypeFix($slides);

	// container requires non-static position so that slides can be position within
	if ($cont.css('position') == 'static')
		$cont.css('position', 'relative');
	if (opts.width)
		$cont.width(opts.width);
	if (opts.height && opts.height != 'auto')
		$cont.height(opts.height);

	if (opts.startingSlide)
		opts.startingSlide = parseInt(opts.startingSlide,10);
	else if (opts.backwards)
		opts.startingSlide = els.length - 1;

	// if random, mix up the slide array
	if (opts.random) {
		opts.randomMap = [];
		for (var i = 0; i < els.length; i++)
			opts.randomMap.push(i);
		opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
		opts.randomIndex = 1;
		opts.startingSlide = opts.randomMap[1];
	}
	else if (opts.startingSlide >= els.length)
		opts.startingSlide = 0; // catch bogus input
	opts.currSlide = opts.startingSlide || 0;
	var first = opts.startingSlide;

	// set position and zIndex on all the slides
	$slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {
		var z;
		if (opts.backwards)
			z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i;
		else
			z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
		$(this).css('z-index', z)
	});

	// make sure first slide is visible
	$(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case
	removeFilter(els[first], opts);

	// stretch slides
	if (opts.fit) {
		if (!opts.aspect) {
	        if (opts.width)
	            $slides.width(opts.width);
	        if (opts.height && opts.height != 'auto')
	            $slides.height(opts.height);
		} else {
			$slides.each(function(){
				var $slide = $(this);
				var ratio = (opts.aspect === true) ? $slide.width()/$slide.height() : opts.aspect;
				if( opts.width && $slide.width() != opts.width ) {
					$slide.width( opts.width );
					$slide.height( opts.width / ratio );
				}

				if( opts.height && $slide.height() < opts.height ) {
					$slide.height( opts.height );
					$slide.width( opts.height * ratio );
				}
			});
		}
	}

	if (opts.center && ((!opts.fit) || opts.aspect)) {
		$slides.each(function(){
			var $slide = $(this);
			$slide.css({
				"margin-left": opts.width ?
					((opts.width - $slide.width()) / 2) + "px" :
					0,
				"margin-top": opts.height ?
					((opts.height - $slide.height()) / 2) + "px" :
					0
			});
		});
	}

	if (opts.center && !opts.fit && !opts.slideResize) {
	  	$slides.each(function(){
	    	var $slide = $(this);
	    	$slide.css({
	      		"margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
	      		"margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
	    	});
	  	});
	}
		
	// stretch container
	var reshape = opts.containerResize && !$cont.innerHeight();
	if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
		var maxw = 0, maxh = 0;
		for(var j=0; j < els.length; j++) {
			var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();
			if (!w) w = e.offsetWidth || e.width || $e.attr('width');
			if (!h) h = e.offsetHeight || e.height || $e.attr('height');
			maxw = w > maxw ? w : maxw;
			maxh = h > maxh ? h : maxh;
		}
		if (maxw > 0 && maxh > 0)
			$cont.css({width:maxw+'px',height:maxh+'px'});
	}

	var pauseFlag = false;  // https://github.com/malsup/cycle/issues/44
	if (opts.pause)
		$cont.hover(
			function(){
				pauseFlag = true;
				this.cyclePause++;
				triggerPause(cont, true);
			},
			function(){
				pauseFlag && this.cyclePause--;
				triggerPause(cont, true);
			}
		);

	if (supportMultiTransitions(opts) === false)
		return false;

	// apparently a lot of people use image slideshows without height/width attributes on the images.
	// Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
	var requeue = false;
	options.requeueAttempts = options.requeueAttempts || 0;
	$slides.each(function() {
		// try to get height/width of each slide
		var $el = $(this);
		this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);
		this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);

		if ( $el.is('img') ) {
			// sigh..  sniffing, hacking, shrugging...  this crappy hack tries to account for what browsers do when
			// an image is being downloaded and the markup did not include sizing info (height/width attributes);
			// there seems to be some "default" sizes used in this situation
			var loadingIE	= ($.browser.msie  && this.cycleW == 28 && this.cycleH == 30 && !this.complete);
			var loadingFF	= ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete);
			var loadingOp	= ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete);
			var loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete);
			// don't requeue for images that are still loading but have a valid size
			if (loadingIE || loadingFF || loadingOp || loadingOther) {
				if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever
					log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
					setTimeout(function() {$(o.s,o.c).cycle(options)}, opts.requeueTimeout);
					requeue = true;
					return false; // break each loop
				}
				else {
					log('could not determine size of image: '+this.src, this.cycleW, this.cycleH);
				}
			}
		}
		return true;
	});

	if (requeue)
		return false;

	opts.cssBefore = opts.cssBefore || {};
	opts.cssAfter = opts.cssAfter || {};
	opts.cssFirst = opts.cssFirst || {};
	opts.animIn = opts.animIn || {};
	opts.animOut = opts.animOut || {};

	$slides.not(':eq('+first+')').css(opts.cssBefore);
	$($slides[first]).css(opts.cssFirst);

	if (opts.timeout) {
		opts.timeout = parseInt(opts.timeout,10);
		// ensure that timeout and speed settings are sane
		if (opts.speed.constructor == String)
			opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed,10);
		if (!opts.sync)
			opts.speed = opts.speed / 2;
		
		var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250;
		while((opts.timeout - opts.speed) < buffer) // sanitize timeout
			opts.timeout += opts.speed;
	}
	if (opts.easing)
		opts.easeIn = opts.easeOut = opts.easing;
	if (!opts.speedIn)
		opts.speedIn = opts.speed;
	if (!opts.speedOut)
		opts.speedOut = opts.speed;

	opts.slideCount = els.length;
	opts.currSlide = opts.lastSlide = first;
	if (opts.random) {
		if (++opts.randomIndex == els.length)
			opts.randomIndex = 0;
		opts.nextSlide = opts.randomMap[opts.randomIndex];
	}
	else if (opts.backwards)
		opts.nextSlide = opts.startingSlide == 0 ? (els.length-1) : opts.startingSlide-1;
	else
		opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;

	// run transition init fn
	if (!opts.multiFx) {
		var init = $.fn.cycle.transitions[opts.fx];
		if ($.isFunction(init))
			init($cont, $slides, opts);
		else if (opts.fx != 'custom' && !opts.multiFx) {
			log('unknown transition: ' + opts.fx,'; slideshow terminating');
			return false;
		}
	}

	// fire artificial events
	var e0 = $slides[first];
	if (!opts.skipInitializationCallbacks) {
		if (opts.before.length)
			opts.before[0].apply(e0, [e0, e0, opts, true]);
		if (opts.after.length)
			opts.after[0].apply(e0, [e0, e0, opts, true]);
	}
	if (opts.next)
		$(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,1)});
	if (opts.prev)
		$(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,0)});
	if (opts.pager || opts.pagerAnchorBuilder)
		buildPager(els,opts);

	exposeAddSlide(opts, els);

	return opts;
};

// save off original opts so we can restore after clearing state
function saveOriginalOpts(opts) {
	opts.original = { before: [], after: [] };
	opts.original.cssBefore = $.extend({}, opts.cssBefore);
	opts.original.cssAfter  = $.extend({}, opts.cssAfter);
	opts.original.animIn	= $.extend({}, opts.animIn);
	opts.original.animOut   = $.extend({}, opts.animOut);
	$.each(opts.before, function() { opts.original.before.push(this); });
	$.each(opts.after,  function() { opts.original.after.push(this); });
};

function supportMultiTransitions(opts) {
	var i, tx, txs = $.fn.cycle.transitions;
	// look for multiple effects
	if (opts.fx.indexOf(',') > 0) {
		opts.multiFx = true;
		opts.fxs = opts.fx.replace(/\s*/g,'').split(',');
		// discard any bogus effect names
		for (i=0; i < opts.fxs.length; i++) {
			var fx = opts.fxs[i];
			tx = txs[fx];
			if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
				log('discarding unknown transition: ',fx);
				opts.fxs.splice(i,1);
				i--;
			}
		}
		// if we have an empty list then we threw everything away!
		if (!opts.fxs.length) {
			log('No valid transitions named; slideshow terminating.');
			return false;
		}
	}
	else if (opts.fx == 'all') {  // auto-gen the list of transitions
		opts.multiFx = true;
		opts.fxs = [];
		for (p in txs) {
			tx = txs[p];
			if (txs.hasOwnProperty(p) && $.isFunction(tx))
				opts.fxs.push(p);
		}
	}
	if (opts.multiFx && opts.randomizeEffects) {
		// munge the fxs array to make effect selection random
		var r1 = Math.floor(Math.random() * 20) + 30;
		for (i = 0; i < r1; i++) {
			var r2 = Math.floor(Math.random() * opts.fxs.length);
			opts.fxs.push(opts.fxs.splice(r2,1)[0]);
		}
		debug('randomized fx sequence: ',opts.fxs);
	}
	return true;
};

// provide a mechanism for adding slides after the slideshow has started
function exposeAddSlide(opts, els) {
	opts.addSlide = function(newSlide, prepend) {
		var $s = $(newSlide), s = $s[0];
		if (!opts.autostopCount)
			opts.countdown++;
		els[prepend?'unshift':'push'](s);
		if (opts.els)
			opts.els[prepend?'unshift':'push'](s); // shuffle needs this
		opts.slideCount = els.length;

		$s.css('position','absolute');
		$s[prepend?'prependTo':'appendTo'](opts.$cont);

		if (prepend) {
			opts.currSlide++;
			opts.nextSlide++;
		}

		if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
			clearTypeFix($s);

		if (opts.fit && opts.width)
			$s.width(opts.width);
		if (opts.fit && opts.height && opts.height != 'auto')
			$s.height(opts.height);
		s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
		s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();

		$s.css(opts.cssBefore);

		if (opts.pager || opts.pagerAnchorBuilder)
			$.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);

		if ($.isFunction(opts.onAddSlide))
			opts.onAddSlide($s);
		else
			$s.hide(); // default behavior
	};
}

// reset internal state; we do this on every pass in order to support multiple effects
$.fn.cycle.resetState = function(opts, fx) {
	fx = fx || opts.fx;
	opts.before = []; opts.after = [];
	opts.cssBefore = $.extend({}, opts.original.cssBefore);
	opts.cssAfter  = $.extend({}, opts.original.cssAfter);
	opts.animIn	= $.extend({}, opts.original.animIn);
	opts.animOut   = $.extend({}, opts.original.animOut);
	opts.fxFn = null;
	$.each(opts.original.before, function() { opts.before.push(this); });
	$.each(opts.original.after,  function() { opts.after.push(this); });

	// re-init
	var init = $.fn.cycle.transitions[fx];
	if ($.isFunction(init))
		init(opts.$cont, $(opts.elements), opts);
};

// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
function go(els, opts, manual, fwd) {
	// opts.busy is true if we're in the middle of an animation
	if (manual && opts.busy && opts.manualTrump) {
		// let manual transitions requests trump active ones
		debug('manualTrump in go(), stopping active transition');
		$(els).stop(true,true);
		opts.busy = 0;
	}
	// don't begin another timeout-based transition if there is one active
	if (opts.busy) {
		debug('transition active, ignoring new tx request');
		return;
	}

	var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];

	// stop cycling if we have an outstanding stop request
	if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual)
		return;

	// check to see if we should stop cycling based on autostop options
	if (!manual && !p.cyclePause && !opts.bounce &&
		((opts.autostop && (--opts.countdown <= 0)) ||
		(opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
		if (opts.end)
			opts.end(opts);
		return;
	}

	// if slideshow is paused, only transition on a manual trigger
	var changed = false;
	if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {
		changed = true;
		var fx = opts.fx;
		// keep trying to get the slide size if we don't have it yet
		curr.cycleH = curr.cycleH || $(curr).height();
		curr.cycleW = curr.cycleW || $(curr).width();
		next.cycleH = next.cycleH || $(next).height();
		next.cycleW = next.cycleW || $(next).width();

		// support multiple transition types
		if (opts.multiFx) {
			if (fwd && (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length))
				opts.lastFx = 0;
			else if (!fwd && (opts.lastFx == undefined || --opts.lastFx < 0))
				opts.lastFx = opts.fxs.length - 1;
			fx = opts.fxs[opts.lastFx];
		}

		// one-time fx overrides apply to:  $('div').cycle(3,'zoom');
		if (opts.oneTimeFx) {
			fx = opts.oneTimeFx;
			opts.oneTimeFx = null;
		}

		$.fn.cycle.resetState(opts, fx);

		// run the before callbacks
		if (opts.before.length)
			$.each(opts.before, function(i,o) {
				if (p.cycleStop != opts.stopCount) return;
				o.apply(next, [curr, next, opts, fwd]);
			});

		// stage the after callacks
		var after = function() {
			opts.busy = 0;
			$.each(opts.after, function(i,o) {
				if (p.cycleStop != opts.stopCount) return;
				o.apply(next, [curr, next, opts, fwd]);
			});
		};

		debug('tx firing('+fx+'); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);
		
		// get ready to perform the transition
		opts.busy = 1;
		if (opts.fxFn) // fx function provided?
			opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
		else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
			$.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);
		else
			$.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
	}

	if (changed || opts.nextSlide == opts.currSlide) {
		// calculate the next slide
		opts.lastSlide = opts.currSlide;
		if (opts.random) {
			opts.currSlide = opts.nextSlide;
			if (++opts.randomIndex == els.length)
				opts.randomIndex = 0;
			opts.nextSlide = opts.randomMap[opts.randomIndex];
			if (opts.nextSlide == opts.currSlide)
				opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
		}
		else if (opts.backwards) {
			var roll = (opts.nextSlide - 1) < 0;
			if (roll && opts.bounce) {
				opts.backwards = !opts.backwards;
				opts.nextSlide = 1;
				opts.currSlide = 0;
			}
			else {
				opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1;
				opts.currSlide = roll ? 0 : opts.nextSlide+1;
			}
		}
		else { // sequence
			var roll = (opts.nextSlide + 1) == els.length;
			if (roll && opts.bounce) {
				opts.backwards = !opts.backwards;
				opts.nextSlide = els.length-2;
				opts.currSlide = els.length-1;
			}
			else {
				opts.nextSlide = roll ? 0 : opts.nextSlide+1;
				opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
			}
		}
	}
	if (changed && opts.pager)
		opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
	
	// stage the next transition
	var ms = 0;
	if (opts.timeout && !opts.continuous)
		ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
	else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic
		ms = 10;
	if (ms > 0)
		p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.backwards) }, ms);
};

// invoked after transition
$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
   $(pager).each(function() {
       $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
   });
};

// calculate timeout value for current transition
function getTimeout(curr, next, opts, fwd) {
	if (opts.timeoutFn) {
		// call user provided calc fn
		var t = opts.timeoutFn.call(curr,curr,next,opts,fwd);
		while (opts.fx != 'none' && (t - opts.speed) < 250) // sanitize timeout
			t += opts.speed;
		debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
		if (t !== false)
			return t;
	}
	return opts.timeout;
};

// expose next/prev function, caller must pass in state
$.fn.cycle.next = function(opts) { advance(opts,1); };
$.fn.cycle.prev = function(opts) { advance(opts,0);};

// advance slide forward or back
function advance(opts, moveForward) {
	var val = moveForward ? 1 : -1;
	var els = opts.elements;
	var p = opts.$cont[0], timeout = p.cycleTimeout;
	if (timeout) {
		clearTimeout(timeout);
		p.cycleTimeout = 0;
	}
	if (opts.random && val < 0) {
		// move back to the previously display slide
		opts.randomIndex--;
		if (--opts.randomIndex == -2)
			opts.randomIndex = els.length-2;
		else if (opts.randomIndex == -1)
			opts.randomIndex = els.length-1;
		opts.nextSlide = opts.randomMap[opts.randomIndex];
	}
	else if (opts.random) {
		opts.nextSlide = opts.randomMap[opts.randomIndex];
	}
	else {
		opts.nextSlide = opts.currSlide + val;
		if (opts.nextSlide < 0) {
			if (opts.nowrap) return false;
			opts.nextSlide = els.length - 1;
		}
		else if (opts.nextSlide >= els.length) {
			if (opts.nowrap) return false;
			opts.nextSlide = 0;
		}
	}

	var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated
	if ($.isFunction(cb))
		cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
	go(els, opts, 1, moveForward);
	return false;
};

function buildPager(els, opts) {
	var $p = $(opts.pager);
	$.each(els, function(i,o) {
		$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
	});
	opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
};

$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
	var a;
	if ($.isFunction(opts.pagerAnchorBuilder)) {
		a = opts.pagerAnchorBuilder(i,el);
		debug('pagerAnchorBuilder('+i+', el) returned: ' + a);
	}
	else
		a = '<a href="#">'+(i+1)+'</a>';
		
	if (!a)
		return;
	var $a = $(a);
	// don't reparent if anchor is in the dom
	if ($a.parents('body').length === 0) {
		var arr = [];
		if ($p.length > 1) {
			$p.each(function() {
				var $clone = $a.clone(true);
				$(this).append($clone);
				arr.push($clone[0]);
			});
			$a = $(arr);
		}
		else {
			$a.appendTo($p);
		}
	}

	opts.pagerAnchors =  opts.pagerAnchors || [];
	opts.pagerAnchors.push($a);
	
	var pagerFn = function(e) {
		e.preventDefault();
		opts.nextSlide = i;
		var p = opts.$cont[0], timeout = p.cycleTimeout;
		if (timeout) {
			clearTimeout(timeout);
			p.cycleTimeout = 0;
		}
		var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated
		if ($.isFunction(cb))
			cb(opts.nextSlide, els[opts.nextSlide]);
		go(els,opts,1,opts.currSlide < i); // trigger the trans
//		return false; // <== allow bubble
	}
	
	if ( /mouseenter|mouseover/i.test(opts.pagerEvent) ) {
		$a.hover(pagerFn, function(){/* no-op */} );
	}
	else {
		$a.bind(opts.pagerEvent, pagerFn);
	}
	
	if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble)
		$a.bind('click.cycle', function(){return false;}); // suppress click
	
	var cont = opts.$cont[0];
	var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
	if (opts.pauseOnPagerHover) {
		$a.hover(
			function() { 
				pauseFlag = true;
				cont.cyclePause++; 
				triggerPause(cont,true,true);
			}, function() { 
				pauseFlag && cont.cyclePause--; 
				triggerPause(cont,true,true);
			} 
		);
	}
};

// helper fn to calculate the number of slides between the current and the next
$.fn.cycle.hopsFromLast = function(opts, fwd) {
	var hops, l = opts.lastSlide, c = opts.currSlide;
	if (fwd)
		hops = c > l ? c - l : opts.slideCount - l;
	else
		hops = c < l ? l - c : l + opts.slideCount - c;
	return hops;
};

// fix clearType problems in ie6 by setting an explicit bg color
// (otherwise text slides look horrible during a fade transition)
function clearTypeFix($slides) {
	debug('applying clearType background-color hack');
	function hex(s) {
		s = parseInt(s,10).toString(16);
		return s.length < 2 ? '0'+s : s;
	};
	function getBg(e) {
		for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
			var v = $.css(e,'background-color');
			if (v && v.indexOf('rgb') >= 0 ) {
				var rgb = v.match(/\d+/g);
				return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
			}
			if (v && v != 'transparent')
				return v;
		}
		return '#ffffff';
	};
	$slides.each(function() { $(this).css('background-color', getBg(this)); });
};

// reset common props before the next transition
$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
	$(opts.elements).not(curr).hide();
	if (typeof opts.cssBefore.opacity == 'undefined')
		opts.cssBefore.opacity = 1;
	opts.cssBefore.display = 'block';
	if (opts.slideResize && w !== false && next.cycleW > 0)
		opts.cssBefore.width = next.cycleW;
	if (opts.slideResize && h !== false && next.cycleH > 0)
		opts.cssBefore.height = next.cycleH;
	opts.cssAfter = opts.cssAfter || {};
	opts.cssAfter.display = 'none';
	$(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));
	$(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));
};

// the actual fn for effecting a transition
$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {
	var $l = $(curr), $n = $(next);
	var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;
	$n.css(opts.cssBefore);
	if (speedOverride) {
		if (typeof speedOverride == 'number')
			speedIn = speedOut = speedOverride;
		else
			speedIn = speedOut = 1;
		easeIn = easeOut = null;
	}
	var fn = function() {
		$n.animate(opts.animIn, speedIn, easeIn, function() {
			cb();
		});
	};
	$l.animate(opts.animOut, speedOut, easeOut, function() {
		$l.css(opts.cssAfter);
		if (!opts.sync) 
			fn();
	});
	if (opts.sync) fn();
};

// transition definitions - only fade is defined here, transition pack defines the rest
$.fn.cycle.transitions = {
	fade: function($cont, $slides, opts) {
		$slides.not(':eq('+opts.currSlide+')').css('opacity',0);
		opts.before.push(function(curr,next,opts) {
			$.fn.cycle.commonReset(curr,next,opts);
			opts.cssBefore.opacity = 0;
		});
		opts.animIn	   = { opacity: 1 };
		opts.animOut   = { opacity: 0 };
		opts.cssBefore = { top: 0, left: 0 };
	}
};

$.fn.cycle.ver = function() { return ver; };

// override these globally if you like (they are all optional)
$.fn.cycle.defaults = {
	activePagerClass: 'activeSlide', // class name used for the active pager link
	after:		   null,  // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)
	allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling
	animIn:		   null,  // properties that define how the slide animates in
	animOut:	   null,  // properties that define how the slide animates out
	aspect:		   false,  // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option)
	autostop:	   0,	  // true to end slideshow after X transitions (where X == slide count)
	autostopCount: 0,	  // number of transitions (optionally used with autostop to define X)
	backwards:     false, // true to start slideshow at last slide and move backwards through the stack
	before:		   null,  // transition callback (scope set to element to be shown):	 function(currSlideElement, nextSlideElement, options, forwardFlag)
	center: 	   null,  // set to true to have cycle add top/left margin to each slide (use with width and height options)
	cleartype:	   !$.support.opacity,  // true if clearType corrections should be applied (for IE)
	cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
	containerResize: 1,	  // resize container to fit largest slide
	continuous:	   0,	  // true to start next transition immediately after current one completes
	cssAfter:	   null,  // properties that defined the state of the slide after transitioning out
	cssBefore:	   null,  // properties that define the initial state of the slide before transitioning in
	delay:		   0,	  // additional delay (in ms) for first transition (hint: can be negative)
	easeIn:		   null,  // easing for "in" transition
	easeOut:	   null,  // easing for "out" transition
	easing:		   null,  // easing method for both in and out transitions
	end:		   null,  // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
	fastOnEvent:   0,	  // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
	fit:		   0,	  // force slides to fit container
	fx:			  'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')
	fxFn:		   null,  // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
	height:		  'auto', // container height (if the 'fit' option is true, the slides will be set to this height as well)
	manualTrump:   true,  // causes manual transition to stop an active transition instead of being ignored
	metaAttr:     'cycle',// data- attribute that holds the option data for the slideshow
	next:		   null,  // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide
	nowrap:		   0,	  // true to prevent slideshow from wrapping
	onPagerEvent:  null,  // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)
	onPrevNextEvent: null,// callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)
	pager:		   null,  // element, jQuery object, or jQuery selector string for the element to use as pager container
	pagerAnchorBuilder: null, // callback fn for building anchor links:  function(index, DOMelement)
	pagerEvent:	  'click.cycle', // name of event which drives the pager navigation
	pause:		   0,	  // true to enable "pause on hover"
	pauseOnPagerHover: 0, // true to pause when hovering over pager link
	prev:		   null,  // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide
	prevNextEvent:'click.cycle',// event which drives the manual transition to the previous or next slide
	random:		   0,	  // true for random, false for sequence (not applicable to shuffle fx)
	randomizeEffects: 1,  // valid when multiple effects are used; true to make the effect sequence random
	requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
	requeueTimeout: 250,  // ms delay for requeue
	rev:		   0,	  // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle)
	shuffle:	   null,  // coords for shuffle animation, ex: { top:15, left: 200 }
	skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition
	slideExpr:	   null,  // expression for selecting slides (if something other than all children is required)
	slideResize:   1,     // force slide width/height to fixed size before every transition
	speed:		   1000,  // speed of the transition (any valid fx speed value)
	speedIn:	   null,  // speed of the 'in' transition
	speedOut:	   null,  // speed of the 'out' transition
	startingSlide: 0,	  // zero-based index of the first slide to be displayed
	sync:		   1,	  // true if in/out transitions should occur simultaneously
	timeout:	   4000,  // milliseconds between slide transitions (0 to disable auto advance)
	timeoutFn:     null,  // callback for determining per-slide timeout value:  function(currSlideElement, nextSlideElement, options, forwardFlag)
	updateActivePagerLink: null, // callback fn invoked to update the active pager link (adds/removes activePagerClass style)
	width:         null   // container width (if the 'fit' option is true, the slides will be set to this width as well)
};

})(jQuery);


/*!
 * jQuery Cycle Plugin Transition Definitions
 * This script is a plugin for the jQuery Cycle Plugin
 * Examples and documentation at: http://malsup.com/jquery/cycle/
 * Copyright (c) 2007-2010 M. Alsup
 * Version:	 2.73
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */
(function($) {

//
// These functions define slide initialization and properties for the named
// transitions. To save file size feel free to remove any of these that you
// don't need.
//
$.fn.cycle.transitions.none = function($cont, $slides, opts) {
	opts.fxFn = function(curr,next,opts,after){
		$(next).show();
		$(curr).hide();
		after();
	};
};

// not a cross-fade, fadeout only fades out the top slide
$.fn.cycle.transitions.fadeout = function($cont, $slides, opts) {
	$slides.not(':eq('+opts.currSlide+')').css({ display: 'block', 'opacity': 1 });
	opts.before.push(function(curr,next,opts,w,h,rev) {
		$(curr).css('zIndex',opts.slideCount + (!rev === true ? 1 : 0));
		$(next).css('zIndex',opts.slideCount + (!rev === true ? 0 : 1));
	});
	opts.animIn.opacity = 1;
	opts.animOut.opacity = 0;
	opts.cssBefore.opacity = 1;
	opts.cssBefore.display = 'block';
	opts.cssAfter.zIndex = 0;
};

// scrollUp/Down/Left/Right
$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push($.fn.cycle.commonReset);
	var h = $cont.height();
	opts.cssBefore.top = h;
	opts.cssBefore.left = 0;
	opts.cssFirst.top = 0;
	opts.animIn.top = 0;
	opts.animOut.top = -h;
};
$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push($.fn.cycle.commonReset);
	var h = $cont.height();
	opts.cssFirst.top = 0;
	opts.cssBefore.top = -h;
	opts.cssBefore.left = 0;
	opts.animIn.top = 0;
	opts.animOut.top = h;
};
$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push($.fn.cycle.commonReset);
	var w = $cont.width();
	opts.cssFirst.left = 0;
	opts.cssBefore.left = w;
	opts.cssBefore.top = 0;
	opts.animIn.left = 0;
	opts.animOut.left = 0-w;
};
$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push($.fn.cycle.commonReset);
	var w = $cont.width();
	opts.cssFirst.left = 0;
	opts.cssBefore.left = -w;
	opts.cssBefore.top = 0;
	opts.animIn.left = 0;
	opts.animOut.left = w;
};
$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
	$cont.css('overflow','hidden').width();
	opts.before.push(function(curr, next, opts, fwd) {
		if (opts.rev)
			fwd = !fwd;
		$.fn.cycle.commonReset(curr,next,opts);
		opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);
		opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
	});
	opts.cssFirst.left = 0;
	opts.cssBefore.top = 0;
	opts.animIn.left = 0;
	opts.animOut.top = 0;
};
$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
	$cont.css('overflow','hidden');
	opts.before.push(function(curr, next, opts, fwd) {
		if (opts.rev)
			fwd = !fwd;
		$.fn.cycle.commonReset(curr,next,opts);
		opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);
		opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
	});
	opts.cssFirst.top = 0;
	opts.cssBefore.left = 0;
	opts.animIn.top = 0;
	opts.animOut.left = 0;
};

// slideX/slideY
$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(opts.elements).not(curr).hide();
		$.fn.cycle.commonReset(curr,next,opts,false,true);
		opts.animIn.width = next.cycleW;
	});
	opts.cssBefore.left = 0;
	opts.cssBefore.top = 0;
	opts.cssBefore.width = 0;
	opts.animIn.width = 'show';
	opts.animOut.width = 0;
};
$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$(opts.elements).not(curr).hide();
		$.fn.cycle.commonReset(curr,next,opts,true,false);
		opts.animIn.height = next.cycleH;
	});
	opts.cssBefore.left = 0;
	opts.cssBefore.top = 0;
	opts.cssBefore.height = 0;
	opts.animIn.height = 'show';
	opts.animOut.height = 0;
};

// shuffle
$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
	var i, w = $cont.css('overflow', 'visible').width();
	$slides.css({left: 0, top: 0});
	opts.before.push(function(curr,next,opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,true,true);
	});
	// only adjust speed once!
	if (!opts.speedAdjusted) {
		opts.speed = opts.speed / 2; // shuffle has 2 transitions
		opts.speedAdjusted = true;
	}
	opts.random = 0;
	opts.shuffle = opts.shuffle || {left:-w, top:15};
	opts.els = [];
	for (i=0; i < $slides.length; i++)
		opts.els.push($slides[i]);

	for (i=0; i < opts.currSlide; i++)
		opts.els.push(opts.els.shift());

	// custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
	opts.fxFn = function(curr, next, opts, cb, fwd) {
		if (opts.rev)
			fwd = !fwd;
		var $el = fwd ? $(curr) : $(next);
		$(next).css(opts.cssBefore);
		var count = opts.slideCount;
		$el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
			var hops = $.fn.cycle.hopsFromLast(opts, fwd);
			for (var k=0; k < hops; k++)
				fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop());
			if (fwd) {
				for (var i=0, len=opts.els.length; i < len; i++)
					$(opts.els[i]).css('z-index', len-i+count);
			}
			else {
				var z = $(curr).css('z-index');
				$el.css('z-index', parseInt(z,10)+1+count);
			}
			$el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
				$(fwd ? this : curr).hide();
				if (cb) cb();
			});
		});
	};
	$.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
};

// turnUp/Down/Left/Right
$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,false);
		opts.cssBefore.top = next.cycleH;
		opts.animIn.height = next.cycleH;
		opts.animOut.width = next.cycleW;
	});
	opts.cssFirst.top = 0;
	opts.cssBefore.left = 0;
	opts.cssBefore.height = 0;
	opts.animIn.top = 0;
	opts.animOut.height = 0;
};
$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,false);
		opts.animIn.height = next.cycleH;
		opts.animOut.top   = curr.cycleH;
	});
	opts.cssFirst.top = 0;
	opts.cssBefore.left = 0;
	opts.cssBefore.top = 0;
	opts.cssBefore.height = 0;
	opts.animOut.height = 0;
};
$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,true);
		opts.cssBefore.left = next.cycleW;
		opts.animIn.width = next.cycleW;
	});
	opts.cssBefore.top = 0;
	opts.cssBefore.width = 0;
	opts.animIn.left = 0;
	opts.animOut.width = 0;
};
$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,true);
		opts.animIn.width = next.cycleW;
		opts.animOut.left = curr.cycleW;
	});
	$.extend(opts.cssBefore, { top: 0, left: 0, width: 0 });
	opts.animIn.left = 0;
	opts.animOut.width = 0;
};

// zoom
$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,false,true);
		opts.cssBefore.top = next.cycleH/2;
		opts.cssBefore.left = next.cycleW/2;
		$.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
		$.extend(opts.animOut, { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 });
	});
	opts.cssFirst.top = 0;
	opts.cssFirst.left = 0;
	opts.cssBefore.width = 0;
	opts.cssBefore.height = 0;
};

// fadeZoom
$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,false);
		opts.cssBefore.left = next.cycleW/2;
		opts.cssBefore.top = next.cycleH/2;
		$.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
	});
	opts.cssBefore.width = 0;
	opts.cssBefore.height = 0;
	opts.animOut.opacity = 0;
};

// blindX
$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
	var w = $cont.css('overflow','hidden').width();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts);
		opts.animIn.width = next.cycleW;
		opts.animOut.left   = curr.cycleW;
	});
	opts.cssBefore.left = w;
	opts.cssBefore.top = 0;
	opts.animIn.left = 0;
	opts.animOut.left = w;
};
// blindY
$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
	var h = $cont.css('overflow','hidden').height();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts);
		opts.animIn.height = next.cycleH;
		opts.animOut.top   = curr.cycleH;
	});
	opts.cssBefore.top = h;
	opts.cssBefore.left = 0;
	opts.animIn.top = 0;
	opts.animOut.top = h;
};
// blindZ
$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
	var h = $cont.css('overflow','hidden').height();
	var w = $cont.width();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts);
		opts.animIn.height = next.cycleH;
		opts.animOut.top   = curr.cycleH;
	});
	opts.cssBefore.top = h;
	opts.cssBefore.left = w;
	opts.animIn.top = 0;
	opts.animIn.left = 0;
	opts.animOut.top = h;
	opts.animOut.left = w;
};

// growX - grow horizontally from centered 0 width
$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,true);
		opts.cssBefore.left = this.cycleW/2;
		opts.animIn.left = 0;
		opts.animIn.width = this.cycleW;
		opts.animOut.left = 0;
	});
	opts.cssBefore.top = 0;
	opts.cssBefore.width = 0;
};
// growY - grow vertically from centered 0 height
$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,false);
		opts.cssBefore.top = this.cycleH/2;
		opts.animIn.top = 0;
		opts.animIn.height = this.cycleH;
		opts.animOut.top = 0;
	});
	opts.cssBefore.height = 0;
	opts.cssBefore.left = 0;
};

// curtainX - squeeze in both edges horizontally
$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,false,true,true);
		opts.cssBefore.left = next.cycleW/2;
		opts.animIn.left = 0;
		opts.animIn.width = this.cycleW;
		opts.animOut.left = curr.cycleW/2;
		opts.animOut.width = 0;
	});
	opts.cssBefore.top = 0;
	opts.cssBefore.width = 0;
};
// curtainY - squeeze in both edges vertically
$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,false,true);
		opts.cssBefore.top = next.cycleH/2;
		opts.animIn.top = 0;
		opts.animIn.height = next.cycleH;
		opts.animOut.top = curr.cycleH/2;
		opts.animOut.height = 0;
	});
	opts.cssBefore.height = 0;
	opts.cssBefore.left = 0;
};

// cover - curr slide covered by next slide
$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
	var d = opts.direction || 'left';
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts);
		if (d == 'right')
			opts.cssBefore.left = -w;
		else if (d == 'up')
			opts.cssBefore.top = h;
		else if (d == 'down')
			opts.cssBefore.top = -h;
		else
			opts.cssBefore.left = w;
	});
	opts.animIn.left = 0;
	opts.animIn.top = 0;
	opts.cssBefore.top = 0;
	opts.cssBefore.left = 0;
};

// uncover - curr slide moves off next slide
$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
	var d = opts.direction || 'left';
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,true,true);
		if (d == 'right')
			opts.animOut.left = w;
		else if (d == 'up')
			opts.animOut.top = -h;
		else if (d == 'down')
			opts.animOut.top = h;
		else
			opts.animOut.left = -w;
	});
	opts.animIn.left = 0;
	opts.animIn.top = 0;
	opts.cssBefore.top = 0;
	opts.cssBefore.left = 0;
};

// toss - move top slide and fade away
$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
	var w = $cont.css('overflow','visible').width();
	var h = $cont.height();
	opts.before.push(function(curr, next, opts) {
		$.fn.cycle.commonReset(curr,next,opts,true,true,true);
		// provide default toss settings if animOut not provided
		if (!opts.animOut.left && !opts.animOut.top)
			$.extend(opts.animOut, { left: w*2, top: -h/2, opacity: 0 });
		else
			opts.animOut.opacity = 0;
	});
	opts.cssBefore.left = 0;
	opts.cssBefore.top = 0;
	opts.animIn.left = 0;
};

// wipe - clip animation
$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
	var w = $cont.css('overflow','hidden').width();
	var h = $cont.height();
	opts.cssBefore = opts.cssBefore || {};
	var clip;
	if (opts.clip) {
		if (/l2r/.test(opts.clip))
			clip = 'rect(0px 0px '+h+'px 0px)';
		else if (/r2l/.test(opts.clip))
			clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
		else if (/t2b/.test(opts.clip))
			clip = 'rect(0px '+w+'px 0px 0px)';
		else if (/b2t/.test(opts.clip))
			clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
		else if (/zoom/.test(opts.clip)) {
			var top = parseInt(h/2,10);
			var left = parseInt(w/2,10);
			clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';
		}
	}

	opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';

	var d = opts.cssBefore.clip.match(/(\d+)/g);
	var t = parseInt(d[0],10), r = parseInt(d[1],10), b = parseInt(d[2],10), l = parseInt(d[3],10);

	opts.before.push(function(curr, next, opts) {
		if (curr == next) return;
		var $curr = $(curr), $next = $(next);
		$.fn.cycle.commonReset(curr,next,opts,true,true,false);
		opts.cssAfter.display = 'block';

		var step = 1, count = parseInt((opts.speedIn / 13),10) - 1;
		(function f() {
			var tt = t ? t - parseInt(step * (t/count),10) : 0;
			var ll = l ? l - parseInt(step * (l/count),10) : 0;
			var bb = b < h ? b + parseInt(step * ((h-b)/count || 1),10) : h;
			var rr = r < w ? r + parseInt(step * ((w-r)/count || 1),10) : w;
			$next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
			(step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
		})();
	});
	$.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
	opts.animIn	   = { left: 0 };
	opts.animOut   = { left: 0 };
};

})(jQuery);



function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}

function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object ';
    for (var i in objAttrs)
    {
      str += i + '="' + objAttrs[i] + '" ';
    }
    str += '>';
    for (var i in params)
    {
      str += '<param name="' + i + '" value="' + params[i] + '" /> ';
    }
    str += '</object>';
  }
  else
  {
    str += '<embed ';
    for (var i in embedAttrs)
    {
      str += i + '="' + embedAttrs[i] + '" ';
    }
    str += '> </embed>';
  }

  document.write(str);
}

function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    

    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblclick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

function MM_preloadImages() { 
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i < a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { 
  var i,x,a=document.MM_sr; for(i=0;a&&i < a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { 
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i = 0;!x&&i < d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i < d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { 
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}



//random number generation 
var axel = Math.random() + "";  
var a = axel * 1000000000000000000;  
  
// 
//the spotlight image call functions (3) below 
// 
function dc_spotnetflix(href)  
{  
	document.url = href; 
	var doPing = new Image(); 
	// the URL below is a spotlight tag for page1 
	doPing.src = "http://fls.doubleclick.net/activityi;src=911828;type=ninte811;cat=ninte251;ord=1;num=" + a + "?"; 
	doPing.onLoad = passed; 
	return false; 
}
function passed() { 
	document.location = document.url; 
}  

function fbs_click(){
	u=location.href;
	window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&'+(new Date).valueOf(),'sharer','toolbar=0,status=0,width=626,height=436');
	return false;
}

//Countdown Clock used for 3ds
var endDate;
var countdownDiv;
var countdownState = 'normal'
function initCountdown(domObject, endDateTemp, cdState) {
	
	//endDate = endDateTemp; //this should be a date object: new Date(2011,2,27,0,0,0);
	countdownDiv = domObject;
	countdownState = (cdState != undefined) ? cdState : 'normal';
	updateCountdown();
}

function updateCountdown(){
	/*
	current_date = new Date();									//grab current date
	time_left = endDate.getTime() - current_date.getTime();		//calc milliseconds between dates
	if(time_left>0) {
		time_left = Math.floor(time_left/1000);					
		days=0;hours=0;mins=0;secs=0;out="";				

		days=Math.floor(time_left/86400);
		time_left=time_left%86400;

		hours=Math.floor(time_left/3600);
		time_left=time_left%3600;

		mins=Math.floor(time_left/60);
		time_left=time_left%60;

		secs=Math.floor(time_left);				
	
		var daysTxt = "<strong>"+days +"</strong>day"+((days!=1)?"s":"");						
		var hoursTxt  = "<strong>"+hours +"</strong>hour"+((hours!=1)?"s":"");
		var minTxt = "<strong>"+mins +"</strong>min"+((mins!=1)?"s":"");
		var secTxt = "<strong>"+secs +"</strong>sec";
		
		var finalTxt = daysTxt + " : " + hoursTxt+ " : " + minTxt + " : "+ secTxt;
		$(countdownDiv).html(finalTxt)
		
		setTimeout("updateCountdown()", 1000);
	} else { */
	
		//if timer is done
		if(countdownState == "3dshome") {
			$(countdownDiv).html("")
			$("#txt-date").html("<div align='center'>Now Only <strong>$169.99*</strong></div>");
			$("#txt-price").html('<img src="/images/3ds/home/img_arrowright.png" /> Order Yours Today');
		} else if(countdownState == "ncomhome") {
			$("#countdown-timer").html("<a href='http://www.nintendo.com/3ds'>Now Only $169.99</a>");	
			$("#countdown-preorder").html('<img src="/images/home/3ds_countdownclock/order.jpg" alt="Nintendo 3DS" border="0" />');	
		}else {
			$(countdownDiv).parent().children("p").text('Nintendo 3DS Released!');
			$("#countdown-txt").html("<a href='http://www.nintendo.com/3ds'>Now Only $169.99</a>");
			//$(countdownDiv).parent().children("p").text('Nintendo 3DS Released!');
			$("#countdown-preorder").css('background-image', 'url(/images/3ds/countdown_order.png)');
		}
		
	//}

}


//end countdown


//POP Code for DS Lite Flashy Navigation

if (typeof console === 'undefined') {
	console = {
		log: function(message) { },
		warn: function(message) { }
	};
}


/**
 * Asset Loader
 * Load images
 */
var AssetLoader = function () {
	this.successCount = 0;
	this.errorCount = 0;
	this.cache = {};
	this.downloadQueue = [];
};

AssetLoader.prototype = {
	
	// queue individual downloads
	queueDownload: function(path) {
		this.downloadQueue.push(path);
	},
	
	// queue multiple downloads (as an array)
	queueDownloads: function(paths) {
		for(var i = 0, l = paths.length; i < l; i++) {
			this.downloadQueue.push(paths[i]);
		}
	},
	
	// download queued element
	download: function(el, callback) {
		var path = el;
		var img = new Image();
		var self = this;
		$(img).bind("load", function() {
			console.log(this.src + " is loaded");
			self.successCount += 1;
			if (self.isDone()) {
			    callback();
			}
		});
		$(img).bind("error", function() {
			console.log("error: can't find " + this.src);
			self.errorCount += 1;
			if (self.isDone()) {
		    	callback();
			}
		});
		$(img).attr('src', path);
		this.cache[path] = img;
	},
	
	// download all queued elements
	downloadAll: function(callback) {
		if (this.downloadQueue.length === 0) {
		    callback();
		}
		for (var i = 0; i < this.downloadQueue.length; i++) {
			this.download(this.downloadQueue[i], callback);
		}
	},
	
	// get asset
	getAsset: function(path) {
		return this.cache[path];
	},
	
	// are we done loading queued elements?
	isDone: function() {
		return ((this.downloadQueue.length) === this.successCount + this.errorCount);
	}
};

var DS_LITE = window.DS_LITE || {};
DS_LITE = {
	
	// these are all the image assets used
	assets: {
		globals: {
			ds: [
				//'/images/ds/systems/lite/animation/bg/hotspots.png',
				'/images/ds/systems/lite/animation/bg/ds-lite.png'
			],
			pen: [
				//'/images/ds/systems/lite/animation/bg/hotspot-pen.png',
				'/images/ds/systems/lite/animation/bg/touch-pen.png'
			]
		},
		screens: [
			'/images/ds/systems/lite/animation/screens/about.png',
			'/images/ds/systems/lite/animation/screens/dual-screens.png',
			'/images/ds/systems/lite/animation/screens/play-with-friends.png',
			'/images/ds/systems/lite/animation/screens/game-boy-advance.png',
			'/images/ds/systems/lite/animation/screens/touch-screen.png',
			'/images/ds/systems/lite/animation/screens/microphone.png',
			'/images/ds/systems/lite/animation/screens/pictochat.png'
		],
		animatable: {
			diddy: {
				src: '/images/ds/systems/lite/animation/sections/about/diddykong.png',
				id: 'diddy'
			},
			colorDS: {
				src: '/images/ds/systems/lite/animation/sections/about/color-ds.png',
				id: 'color-ds'
			},
			patapata: {
				src: '/images/ds/systems/lite/animation/sections/about/patapata.png',
				id: 'patapata'
			},
			mario: {
				src: '/images/ds/systems/lite/animation/sections/dual-screens/mario.png',
				id: 'mario'
			},
			propellerheyho: {
				src: '/images/ds/systems/lite/animation/sections/dual-screens/propellerheyho.png',
				id: 'propellerheyho'
			},
			groupBubble: {
				src: '/images/ds/systems/lite/animation/sections/play-with-friends/group-bubble.png',
				id: 'group-bubble'
			},
			kk: {
				src: '/images/ds/systems/lite/animation/sections/play-with-friends/kk.png',
				id: 'kk'
			},
			wifiWaves: {
				src: '/images/ds/systems/lite/animation/sections/play-with-friends/wifi-waves.png',
				id: 'wifi-waves'
			},
			zoomSlot: {
				src: '/images/ds/systems/lite/animation/sections/game-boy-advance/zoom-slot.png',
				id: 'zoom-slot'
			},
			peach: {
				src: '/images/ds/systems/lite/animation/sections/game-boy-advance/peach.png',
				id: 'peach'
			},
			rings: {
				src: '/images/ds/systems/lite/animation/sections/touch-screen/rings.png',
				id: 'rings'
			},
			luigi: {
				src: '/images/ds/systems/lite/animation/sections/touch-screen/luigi.png',
				id: 'luigi'
			},
			zoomMic: {
				src: '/images/ds/systems/lite/animation/sections/microphone/zoom-mic.png',
				id: 'zoom-mic'
			},
			microphoneBubble: {
				src: '/images/ds/systems/lite/animation/sections/microphone/microphone-bubble.png',
				id: 'microphone-bubble'
			},
			koopa: {
				src: '/images/ds/systems/lite/animation/sections/microphone/koopa.png',
				id: 'koopa'
			},
			hammerbros: {
				src: '/images/ds/systems/lite/animation/sections/pictochat/hammerbros.png',
				id: 'hammerbros'
			},
			yoshi: {
				src: '/images/ds/systems/lite/animation/sections/pictochat/yoshi.png',
				id: 'yoshi'
			}
		}
	},
	
	init: function() {
		
		// remove no-js and dls, we don't need them
		$('#dl').remove();
		$('.no-js').removeClass('no-js');
		
		// hide hotspots
		$('#hotspots').hide();
		
		// hide copy wrapper
		$('#copy-wrapper').hide();
		
		// do fade animations if browser supports opacity, just show/hide things otherwise
		this.animate = (jQuery.support.opacity) ? true : false;

		// hide all sections
		if(this.animate) {
			$('#copy-wrapper .section').fadeTo(0, 0).hide(); 
		} else {
			$('#copy-wrapper .section').hide(); 
		}
		
		this.glow();
		
		// create tooltips
		var tooltip = new DS_LITE.Tooltip('area');
		
		this.controller();
	},
	
	glow: function() {
		// create glow effect on the DS when hovered
		var dsLite = $('#ds-lite'),
			hotspots = $('#hotspots, area');
		hotspots.live('mouseenter', function(e) {
			//dsLite.addClass('active');
		});
		hotspots.live('mouseleave', function(e) {
			//dsLite.removeClass('active');
		});
		
	},
	
	controller: function() {
		
		var self = this, // scope alias
			loader = $('#loader'),
			path;
			
		// display loader
		loader.show();
		
		// have we loaded and create the basic structure?
		this.loaded = false;
		this.animating = false; // animation flag
		this.currentSection = null; // this currently active section
		this.oldSection = null; // previously active
		
		// listen for nav and image map click events
		$('#about-nav a, area').bind('click', function(e) {
			e.preventDefault();
			if(!self.animating) {
				$.address.value($(this).attr('href').replace('#', ''));
			} else {
				return false;
			}
		});
		
		// bind to the jQuery address object (this is basically our router)
		$.address.change(function(event) {
			path = event.value.replace('/', '');
			if(event.value === '' || event.value === '/') {
				// if we're at root, use the about section
				self.currentSection = path = 'about';
			} else {
				self.oldSection = self.currentSection;
				self.currentSection = self.camelCase(path);
			}
			if(self.loaded && !self.animating) {
				self.updateNav(path); // set navigation state
				self.action('DS_LITE.Views.' + self.oldSection, window, 'outro', self.currentSection);
			}
        });
		
		// load all the assets...
		this.ASSET_LOADER = new AssetLoader();
		this.ASSET_LOADER.queueDownloads(this.assets.screens);
		this.ASSET_LOADER.queueDownloads(this.assets.globals.pen);
		this.ASSET_LOADER.queueDownloads(this.assets.globals.ds);
		
		// loop through each animatable object and queue up download for the src property
		for (var key in this.assets.animatable) {
			if (this.assets.animatable.hasOwnProperty(key)) {
				var obj = this.assets.animatable[key];
				for (var prop in obj) {
					if(prop === 'src') {
						this.ASSET_LOADER.queueDownload(obj[prop]);
					}
				}
			}
		}

		// all assets have been downloaded
		this.ASSET_LOADER.downloadAll(function() {
			// hide the loader, create the overall layout, and load in the appropriate screen
			setTimeout(function() {
				loader.addClass('fade').fadeTo(250, 0, function() {
					DS_LITE.Views._layout();
					self.loaded = true;
					self.updateNav(path); // set navigation state
					self.action('DS_LITE.Views.' + self.currentSection, window, 'intro');
				});
			}, 500);
		});
	},
	
	// turn a dashed string into camelCase
	camelCase: function(str) {
		return str.replace(/(\-[a-z])/g, function($1) {
			return $1.toUpperCase().replace('-','');
		});
	},
	
	// call a function from string (without having to use eval)
	action: function (functionName, context) {
		var args = Array.prototype.slice.call(arguments, 2),
			namespaces = functionName.split("."),
			func = namespaces.pop();
			
		for (var i = 0; i < namespaces.length; i++) {
		    context = context[namespaces[i]];
		}
		if(typeof context[func] === 'function') {
			return context[func].apply(context, args);
		} else {
			return false;
		}
	},
	
	fadeScreens: function(index) {
		var activeScreens = $('.screens li.active');
		if(activeScreens.length > 0 && $('.screens li').eq(index).hasClass('active') === false) {
			if(DS_LITE.animate) {
				$('.screens li.active').stop(true, true).fadeTo(500, 0, function() {
					$(this).removeClass('active');
				});
			} else {
				$('.screens li.active').hide().removeClass('active');
			}
		}
		if(DS_LITE.animate) {
			$('.screens li').eq(index).stop(true, true).fadeTo(800, 1, function() {
				$(this).addClass('active');
			});
		} else {
			$('.screens li').eq(index).show().addClass('active');
		}

	},
	
	updateNav: function(path) {
		$('#about-nav a').removeClass('active');
		$('#nav-' + path + ' a').addClass('active');
	}
	
};

DS_LITE.Views = {
	
	// create the layouts
	_layout: function() {
		var container = $('#ds-lite');
		
		// show copy wrapper
		$('#copy-wrapper').show();
		
		// create all the elements needed
		var screens = $('<div/>', {
			'class': 'screens'
		});
		var ul = $('<ul/>');
		screens.append(ul);
		
		var screenshots = DS_LITE.assets.screens;
		for(var i = 0, l = screenshots.length; i < l; i++) {
			var li = $('<li/>');
			if(DS_LITE.animate) {
				li.css({'opacity': 0, 'z-index': 1});
			} else {
				li.hide();
			}
			
			ul.append(li);
			$(DS_LITE.ASSET_LOADER.getAsset(screenshots[i])).appendTo(li);
		}
		
		container.append(screens);
		
		var touchPen = $('<div/>', {
			'id': 'touch-pen'
		});
		var penHotspots = $(DS_LITE.ASSET_LOADER.getAsset(DS_LITE.assets.globals.pen[0]));
		penHotspots.attr('id', 'hotspot-pen');
		var pen = $(DS_LITE.ASSET_LOADER.getAsset(DS_LITE.assets.globals.pen[1]));
		touchPen.append(penHotspots).append(pen);
		container.append(touchPen);
		
		var hotspots = $(DS_LITE.ASSET_LOADER.getAsset(DS_LITE.assets.globals.ds[0]));
		hotspots.attr('id', 'hotspots-ds');
		
		var ds = $(DS_LITE.ASSET_LOADER.getAsset(DS_LITE.assets.globals.ds[1]));
		ds.attr('id', 'ds');
		
		container.append(hotspots).append(ds);
		
		// get the animatable images and place them on the canvas (CSS will deal with positioning)
		for (var key in DS_LITE.assets.animatable) {
			if (DS_LITE.assets.animatable.hasOwnProperty(key)) {
				var obj = DS_LITE.assets.animatable[key];
				$(DS_LITE.ASSET_LOADER.getAsset(obj['src'])).attr('id', obj['id']).attr('class', 'animatable').appendTo('#animation-canvas');
			}
		}
		
		// show hotspots
		$('#hotspots').show();
		
	},
	
	// about view... handles all animations for the default screen
	about: function(state, next) {
		if(state === 'intro') {
			DS_LITE.animating = true;
			DS_LITE.fadeScreens(0);
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#about').stop().show().animate({
					'left': '70px',
					'opacity': 1
				}, 450);
			} else {
				$('#about').css({'left': '70px'}).show();
			}

			$('#diddy').stop().delay(200).show().animate({
				'right': '20px'
			}, 300);
			
			if(DS_LITE.animate) {
				$('#color-ds').stop().fadeTo(300, 1);
			} else {
				$('#color-ds').show();
			}
			
			$('#patapata').stop().delay(400).show().animate({
				'top': '30px'
			}, 300,
			   'easeOutBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
				}
			);
			
		} else {
			DS_LITE.animating = true;
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#color-ds').stop().fadeTo(200, 0);
			} else {
				$('#color-ds').hide();
			}
			
			if(DS_LITE.animate) {
				$('#about').stop().animate({
					'left': '20px',
					'opacity': 0
				}, 250, function() {
					$(this).hide();
				});
			} else {
				$('#about').hide();
			}
			$('#diddy').stop().delay(200).show().animate({
				'right': '-300px'
			}, 300);
			
			$('#patapata').stop().delay(100).show().animate({
				'top': '-200px'
			}, 300,
				'easeInBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
					DS_LITE.action('DS_LITE.Views.' + next, window, 'intro'); // call next section
				}
			);
		}
	},
	
	dualScreens: function(state, next) {
		if(state === 'intro') {
			DS_LITE.animating = true;
			DS_LITE.fadeScreens(1);
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#dual-screens').stop().show().animate({
					'left': '300px',
					'opacity': 1
				}, 450);
			} else {
				$('#dual-screens').css({'left': '300px'}).show();
			}
			
			$('#mario').stop().delay(200).show().animate({
				'left': '80px'
			}, 300,
			'easeOutBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
				} 
			); 
			
			$('#propellerheyho').stop(true, true).addClass('animating').show().animate({
				'right': '80px',
				'top': '0px'
			}, 2000, 
				'easeOutElastic' // requires easing plugin;
			);
			
		} else {
			DS_LITE.animating = true;
			// text & character animations
			if(DS_LITE.animate) {
				$('#dual-screens').stop().animate({
					'left': '320px',
					'opacity': 0
				}, 250, function() {
					$(this).hide();
				});
			} else {
				$('#dual-screens').hide();
			}
			$('#mario').stop().show().animate({
				'left': '-250px'
			}, 300);
			
			$('#propellerheyho').stop().delay(100).show().animate({
				'right': '-100px'
			}, 200, 
				'easeInBack', // requires easing plugin;
				function() {
					$(this).removeClass('animating');
					DS_LITE.animating = false;
					DS_LITE.action('DS_LITE.Views.' + next, window, 'intro'); // call next section
				}
			);
		}
	},
	
	playWithFriends: function(state, next) {
		if(state === 'intro') {
			DS_LITE.animating = true;
			DS_LITE.fadeScreens(2);
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#play-with-friends').stop().show().animate({
					'left': '10px',
					'opacity': 1
				}, 150);
			} else {
				$('#play-with-friends').css({'left': '10px'}).show();
			}
			
			if(DS_LITE.animate) {
				$('#group-bubble').stop().css({'right': '20px'}).addClass('animating').fadeTo(200, 1);
			} else {
				$('#group-bubble').css({'right': '20px'}).addClass('animating').show();
			}
			
			if(DS_LITE.animate) {
				$('#wifi-waves').fadeTo(200, 0.7, function(e) {
					$(this).addClass('animating');
				});
			} else {
				$('#wifi-waves').show();
			}
			
			$('#kk').stop().delay(400).show().animate({
				'left': '88px'
			}, 300,
			   'easeOutBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
				}
			);
			
		} else {
			DS_LITE.animating = true;
			// text & character animations
			if(DS_LITE.animate) {
				$('#play-with-friends').stop().animate({
					'left': '0px',
					'opacity': 0
				}, 100, function() {
					$(this).hide();
				});
			} else {
				$('#play-with-friends').hide();
			}
			
			if(DS_LITE.animate) {
				$('#wifi-waves').stop().removeClass('animating').fadeTo(200, 0, function(e) {
					$(this).hide();
				});
			} else {
				$('#wifi-waves').removeClass('animating').hide();
			}
			
			if(DS_LITE.animate) {
				$('#group-bubble').stop().removeClass('animating').fadeTo(200, 0, function() {
					$(this).css({'right': '-2000px'});
				});
			} else {
				$('#group-bubble').removeClass('animating').hide();
			}
			
			$('#kk').delay(100).stop().show().animate({
				'left': '-200px'
			}, 300,
			   'easeInBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
					DS_LITE.action('DS_LITE.Views.' + next, window, 'intro'); // call next section
				}
			);
			
		}
	},
	
	gameBoyAdvance: function(state, next) {
		if(state === 'intro') {
			DS_LITE.animating = true;
			DS_LITE.fadeScreens(3);
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#game-boy-advance').stop().show().animate({
					'left': '300px',
					'opacity': 1
				}, 150);
			} else {
				$('#game-boy-advance').css({'left': '300px'}).show();
			}
			
			if(DS_LITE.animate) {
				$('#zoom-slot').stop().fadeTo(200, 1);
			} else {
				$('#zoom-slot').show();
			}
			
			$('#peach').stop().delay(200).show().animate({
				'left': '63px'
			}, 300,
			'easeOutBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
				} 
			);
			
		} else {
			DS_LITE.animating = true;
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#game-boy-advance').stop().show().animate({
					'left': '320px',
					'opacity': 0
				}, 150, function() {
					$(this).hide();
				});
			} else {
				$('#game-boy-advance').hide();
			}
			
			if(DS_LITE.animate) {
				$('#zoom-slot').stop().fadeTo(200, 0);
			} else {
				$('#zoom-slot').hide();
			}
			
			$('#peach').stop().delay(100).show().animate({
				'left': '-250px'
			}, 200, 
				'easeInBack', // requires easing plugin;
				function() {
					$(this).removeClass('animating');
					DS_LITE.animating = false;
					DS_LITE.action('DS_LITE.Views.' + next, window, 'intro'); // call next section
				}
			);
			
		}
	},
	
	touchScreen: function(state, next) {
		if(state === 'intro') {
			DS_LITE.animating = true;
			DS_LITE.fadeScreens(4);
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#touch-screen').stop().show().animate({
					'left': '300px',
					'opacity': 1
				}, 150);
			} else {
				$('#touch-screen').css({'left': '300px'}).show();
			}
			
			if(DS_LITE.animate) {
				$('#rings').fadeTo(200, 0.7, function(e) {
					$(this).addClass('animating');
				});
			} else {
				$('#rings').show();
			}
			
			$('#luigi').stop().delay(200).show().animate({
				'left': '23px'
			}, 300,
			'easeOutBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
				} 
			);
			
		} else {
			DS_LITE.animating = true;
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#touch-screen').stop().show().animate({
					'left': '320px',
					'opacity': 0
				}, 150, 
				function() {
					$(this).hide();
				});
			} else {
				$('#touch-screen').hide();
			}
			
			if(DS_LITE.animate) {
				$('#rings').stop().removeClass('animating').fadeTo(200, 0, function(e) {
					$(this).hide();
				});
			} else {
				$('#rings').hide();
			}
			
			$('#luigi').stop().delay(100).show().animate({
				'left': '-300px'
			}, 200, 
				'easeInBack', // requires easing plugin;
				function() {
					$(this).removeClass('animating');
					DS_LITE.animating = false;
					DS_LITE.action('DS_LITE.Views.' + next, window, 'intro'); // call next section
				}
			);
			
		}
	},
	
	microphone: function(state, next) {
		if(state === 'intro') {
			DS_LITE.animating = true;
			DS_LITE.fadeScreens(5);
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#microphone').stop().show().animate({
					'left': '300px',
					'opacity': 1
				}, 150);
			} else {
				$('#microphone').css({'left': '300px'}).show();
			}
			
			if(DS_LITE.animate) {
				$('#microphone-bubble').stop().css({'left': '122px'}).addClass('animating').fadeTo(200, 1);
			} else {
				$('#microphone-bubble').css({'left': '122px'}).addClass('animating').show();
			}
			
			if(DS_LITE.animate) {
				$('#zoom-mic').fadeTo(200, 1);
			} else {
				$('#zoom-mic').show();
			}
			$('#koopa').stop().delay(400).show().animate({
				'left': '20px'
			}, 200,
			   'easeOutBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
				}
			);
			
		} else {
			DS_LITE.animating = true;
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#microphone').stop().animate({
					'left': '320px',
					'opacity': 0
				}, 100, function() {
					$(this).hide();
				});
			} else {
				$('#microphone').hide();
			}
			
			if(DS_LITE.animate) {
				$('#zoom-mic').stop().fadeTo(200, 0, function(e) {
					$(this).hide();
				});
			} else {
				$('#zoom-mic').hide();
			}
			
			if(DS_LITE.animate) {
				$('#microphone-bubble').stop().removeClass('animating').fadeTo(200, 0, function() {
					$(this).css({'left': '-2000px'});
				});
			} else {
				$('#microphone-bubble').removeClass('animating').hide();
			}
			
			$('#koopa').delay(100).stop().show().animate({
				'left': '-300px'
			}, 300,
			   'easeInBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
					DS_LITE.action('DS_LITE.Views.' + next, window, 'intro'); // call next section
				}
			);
			
		}
	},
	pictochat: function(state, next) {
		if(state === 'intro') {
			DS_LITE.animating = true;
			DS_LITE.fadeScreens(6);
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#pictochat').stop().show().animate({
					'left': '10px',
					'opacity': 1
				}, 150);
			} else {
				$('#pictochat').css({'left': '10px'}).show();
			}
			
			$('#hammerbros').stop().show().animate({
				'left': '80px'
			}, 350,
			   'easeOutBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
				}
			);
			
			$('#yoshi').stop().delay(400).show().animate({
				'right': '20px'
			}, 200,
			   'easeOutBack', // requires easing plugin
				function() {
					DS_LITE.animating = false;
				}
			);
			
		} else {
			DS_LITE.animating = true;
			
			// text & character animations
			if(DS_LITE.animate) {
				$('#pictochat').stop().animate({
					'left': '-10px',
					'opacity': 0
				}, 100, function() {
					$(this).hide();
				});
			} else {
				$('#pictochat').hide();
			}
			
			$('#hammerbros').stop().animate({
				'left': '-300px'
			}, 200);
			
			$('#yoshi').delay(100).stop().show().animate({
				'right': '-300px'
			}, 300,
				function() {
					DS_LITE.animating = false;
					DS_LITE.action('DS_LITE.Views.' + next, window, 'intro'); // call next section
				}
			);
			
		}
	}
	
};


/**
 * Tooltip
 * @param targets {string}
 * @param options {object}
 */
DS_LITE.Tooltip = function(targets, options) {

	var self = this;
	this.options = $.extend({
		animationDuration: 200, // time, in milliseconds, it takes for animation to complete
		attribute: 'title', // attribute to use as tooltip (most often title)
		dataAttribute: 'data-tooltip', // name of data-attribute
		container: document.body, // container to attach tooltip to
		followMouse: true, // follow the mouse around?
		offsetLeft: -10,
		offsetTop: -30,
		tooltipContent: 'tooltip-content',
		tooltipContainer: 'tooltip'
	}, options || {});

	this.targets = $(targets);
	var size = this.targets.length;
	// animate if browser supports opacity, just show otherwise
	this.animate = (jQuery.support.opacity) ? true : false;
	if(size > 0) {

		// create the tooltip
		this.createTooltip();

		// set attributes
		for (var i = 0; i < size; i++) {
			this.setAttributes(this.targets[i]);
		}

		// events
		this.targets.mouseenter(function(e) {
			var el = $(e.target);
			if(el.attr(self.options.dataAttribute)) {
				self.displayTooltip(el, el.attr(self.options.dataAttribute));
			}
		});

		this.targets.mouseleave(function(e) {
			var el = $(e.target);
			if(el.attr(self.options.dataAttribute)) {
				self.hideTooltip(el);
			}
		});
		
		if(this.options.followMouse) {
			this.targets.mousemove(function(e) {
				var left = e.pageX - self.tooltip.width() + self.options.offsetLeft + 'px';
				var top = e.pageY + self.options.offsetTop + 'px';
				self.tooltip.css({'left': left, 'top': top});
			});
		}
		
	}

};

DS_LITE.Tooltip.prototype = {

	createTooltip: function() {
		// create the HTML structure for the the tooltip
		this.tooltip = $('<div/>', {'class': this.options.tooltipContainer, 'style': 'display: none'});
		this.content = $('<div/>', {'class': this.options.tooltipContent}).appendTo(this.tooltip);
		var container = ($(this.options.container).length > 0) ? $(this.options.container) : document.body;
		this.tooltip.appendTo(container);
	},

	displayTooltip: function(el, attr) {
		var pos,
			top,
			left;
		// update the text
		this.content.text(attr);
		// get height of tooltip
		this.tooltipHeight = this.tooltip.height();
		
		if(!this.options.followMouse) {
			// get position of calling element
			pos = el.offset();
			top = (pos.top + this.options.offsetTop) - this.tooltipHeight + 'px';
			left = pos.left + this.options.offsetLeft + 'px';
			// set css of tooltip
			if(this.animate) {
				this.tooltip.css({'left': left, 'top': top, 'opacity': 0});
			} else {
				this.tooltip.css({'left': left, 'top': top});
			}
		} else {
			if(this.animate) {
				this.tooltip.css({'opacity': 0});
			}
		}
		this.tooltip.show();
		if(this.animate) {
			// animate in tooltip
			this.tooltip.stop().animate({
				opacity: 1
			}, this.options.animationDuration);
		} else {
			this.tooltip.show();
		}

	},

	hideTooltip: function(el) {
		var self = this;
		// animate out tooltip
		if(this.animate) {
			this.tooltip.stop().animate({
					opacity: 0
			}, this.options.animationDuration,
			function() {
				self.tooltip.hide(); // hide just in case
			});
		} else {
			this.tooltip.hide();
		}
	},

	setAttributes: function(el) {
		// copy title to data attribute
		var element = $(el);
		if(element.attr(this.options.attribute)) {
			var attr = element.attr(this.options.attribute);
			element.attr(this.options.dataAttribute, attr);
			element.attr('title', '');
		}
	}
};

//END POP Code for DS Lite Flashy Navigation




