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



dojo.provide('noa.lib.OmnitureLibrary');
// NOTE: Don't declare variables with "var" here. They won't be available in the window scope in Safari

/* SiteCatalyst code version: H.14.
Copyright 1997-2007 Omniture, Inc. More info available at
http://www.omniture.com */
/************************ ADDITIONAL FEATURES ************************
     Plugins
*/
/* Specify the Report Suite ID(s) to track here */
s_account = ($chk(noa.runmode) && noa.runmode == 'production') ? 'ncomglobal,ncomprod' : 'ncomdev';
s=s_gi(s_account);
/************************** CONFIG SECTION **************************/
/* You may add or alter any code config here. */

/* Dynamic Account Selection */
s.dynamicAccountSelection=true;
s.dynamicAccountList="ncomglobal,ncomsupport=/consumer/,/search/support";
s.dynamicAccountMatch=window.location.pathname; 

/* Link Tracking Config */
s.charSet="UTF-8";
s.trackDownloadLinks=true;
s.trackExternalLinks=true;
s.trackInlineStats=true;
s.linkDownloadFileTypes="exe,zip,wav,mp3,mov,mpg,avi,wmv,doc,pdf,xls";
s.linkInternalFilters="javascript:,192.168.,nintendo.com";
s.linkLeaveQueryString=false;
s.linkTrackVars="eVar3,eVar4,eVar5,eVar6,events";
s.linkTrackEvents="event8,event7,event6,event5,event4,event3";

/* Form Analysis Config (should be above doPlugins section) */
s.formList="";
s.trackFormList=true;
s.trackPageName=true;
s.useCommerce=false;
s.varUsed="prop9";
s.eventList=""; //Abandon,Success,Error

/* Plugin Config */
s.usePlugins=true;
function s_doPlugins(s) {

	// Campaign Tracking
	s.campaign=s.getQueryParam('cid');
	s.campaign=s.getValOnce(s.campaign,"s_cid",0);

	// Form Analysis
	s.setupFormAnalysis();

	// Time Parting
/* OLD TIME PARTING PLUG-IN (KEPT FOR SAFETY)
	s.prop13=s.getTimeParting('w','-5','2007'); // Set weekend / weekday 
	s.prop13=s.prop13 + ":" + s.getTimeParting('d','-5','2007'); // add day
	s.prop13=s.prop13 + ":" + s.getTimeParting('h','-5','2007'); // add hour
	s.eVar7=s.prop13;
*/
	s.today=new Date();
	s.prop13=s.getTimeParting('w','-5',s.today.getFullYear()); // Set weekend / weekday 
	s.prop13=s.prop13 + ":" + s.getTimeParting('d','-5',s.today.getFullYear()); // add day
	s.prop13=s.prop13 + ":" + s.getTimeParting('h','-5',s.today.getFullYear()); // add hour
	s.eVar7=s.prop13;

	/* Link Handler
	var url=s.linkHandler("name1~filer1|name2~filter2|filter3");
	if(url){
		s.linkTrackVars="eVar3,events"
		s.linkTrackEvents="event4"
		s.events="event4"
		s.eVar3=url  //can parse this to identify download "type"
	}
	*/

	// Locale
	s.prop6 = 'us:en';
	
	// PageName & Channel Prefix - for support.nintendo.com pages
	//if URL contains "consumer"
	s.supportURL = location.href.toLowerCase();
	if (s.supportURL.match('/consumer/') && (s.pageName.match("us:support:")==null || s.channel.match("us:support:")==null)) {	
		
		//if URL contains "systems", append/set value after "systems" in URL		
		if (s.supportURL.match('/systems/')){
			s.supportURL = s.supportURL.substring(s.supportURL.indexOf("/systems/")+9,s.supportURL.length);
			
			//Check for another folder after "systems"
			if (s.supportURL.indexOf("/")==-1) {
				s.supportURL = "ds";
			}else{
				s.supportURL = s.supportURL.substring(0,s.supportURL.indexOf("/"));			
			}	

			//Set channel
			s.channel="us:support:"+s.supportURL+":";		
			
			//for "general" or "other" channel add "systems general" in prefix
			if (s.supportURL=="general" || s.supportURL=="other") s.channel="us:support:systems:general";			

			//set s.pageName & s.prop1
			if(s.pageName) s.pageName=s.channel+s.pageName;
			if(s.prop1) s.prop1=s.channel+s.prop1;
			
		//if no "systems" then append/set value after "consumer"
		}else{
			s.supportURL = s.supportURL.substring(s.supportURL.indexOf("/consumer/")+10,s.supportURL.length);
			
			//check for wfc channel first
			if (s.supportURL.match("wfc/")){
				if (s.supportURL.match("/wii/")) s.channel="us:support:wii:wfc:";
				if (s.supportURL.match("/ds/")) s.channel="us:support:ds:wfc:";
			}else{			
			s.supportURL = s.supportURL.substring(0,s.supportURL.indexOf("/"));
			s.channel="us:support:"+s.supportURL;
			}
						
			//for "routers" channel add "wii routers" in prefix
			if (s.supportURL=="routers") s.channel="us:support:wii routers:";

			//set pageName & prop1
			if (s.pageName) s.pageName=s.channel+s.pageName;
			if (s.prop1) s.prop1=s.channel+s.prop1;
		}
	}

	// Set content variables to lower-case
	if (s.pageName) s.pageName=s.pageName.toLowerCase();
	if (s.channel) s.channel=s.channel.toLowerCase();
	if (s.prop1) s.prop1=s.prop1.toLowerCase();	

}
s.doPlugins=s_doPlugins;
/************************** PLUGINS SECTION *************************/
/*
 * Plugin: getQueryParam 2.1 - return query string parameter(s)
 */
s.getQueryParam=new Function("p","d","u",""
+"var s=this,v='',i,t;d=d?d:'';u=u?u:(s.pageURL?s.pageURL:s.wd.locati"
+"on);if(u=='f')u=s.gtfs().location;while(p){i=p.indexOf(',');i=i<0?p"
+".length:i;t=s.p_gpv(p.substring(0,i),u+'');if(t)v+=v?d+t:t;p=p.subs"
+"tring(i==p.length?i:i+1)}return v");
s.p_gpv=new Function("k","u",""
+"var s=this,v='',i=u.indexOf('?'),q;if(k&&i>-1){q=u.substring(i+1);v"
+"=s.pt(q,'&','p_gvf',k)}return v");
s.p_gvf=new Function("t","k",""
+"if(t){var s=this,i=t.indexOf('='),p=i<0?t:t.substring(0,i),v=i<0?'T"
+"rue':t.substring(i+1);if(p.toLowerCase()==k.toLowerCase())return s."
+"epa(v)}return ''");
/*
 * Plugin: getValOnce 0.2 - get a value once per session or number of days
 */
s.getValOnce=new Function("v","c","e",""
+"var s=this,k=s.c_r(c),a=new Date;e=e?e:0;if(v){a.setTime(a.getTime("
+")+e*86400000);s.c_w(c,v,e?a:0);}return v==k?'':v");
/*
 * Plugin: linkHandler 0.5 - identify and report custom links
 */
s.linkHandler=new Function("p","t",""
+"var s=this,h=s.p_gh(),i,l;t=t?t:'o';if(!h||(s.linkType&&(h||s.linkN"
+"ame)))return '';i=h.indexOf('?');h=s.linkLeaveQueryString||i<0?h:h."
+"substring(0,i);l=s.pt(p,'|','p_gn',h.toLowerCase());if(l){s.linkNam"
+"e=l=='[['?'':l;s.linkType=t;return h;}return '';");
s.p_gn=new Function("t","h",""
+"var i=t?t.indexOf('~'):-1,n,x;if(t&&h){n=i<0?'':t.substring(0,i);x="
+"t.substring(i+1);if(h.indexOf(x.toLowerCase())>-1)return n?n:'[[';}"
+"return 0;");
/*                                                                                        
 * Plugin: channelExtract : 1.0 - returns site section based on delimiter 
 */
s.channelExtract=new Function("d","p","u","pv",""
+"var s=this,v='';u=u?u:(s.pageURL?s.pageURL:s.wd.location);if(u=='f'"
+")u=s.gtfs().location;u=u+'';li=u.lastIndexOf(d);if(li>0){u=u.substr"
+"ing(0,li);var i,n,a=s.split(u,d),al=a.length;if(al<p){if(pv==1) p=a"
+"l;else return '';}for(i=0;i<p;i++){n=a[i];v=v+n;}return v}return "
+"'';");
/*
 * Utility Function: split v1.5 - split a string (JS 1.0 compatible)
 */
s.split=new Function("l","d",""
+"var i,x=0,a=new Array;while(l){i=l.indexOf(d);i=i>-1?i:l.length;a[x"
+"++]=l.substring(0,i);l=l.substring(i+d.length);}return a");
/*
 * Plugin: getTimeParting 1.3 - Set timeparting values based on time zone
 */
s.getTimeParting=new Function("t","z","y",""
+"dc=new Date('1/1/2000');f=15;ne=8;if(dc.getDay()!=6||"
+"dc.getMonth()!=0){return'Data Not Available'}else{;z=parseInt(z);"
+"if(y=='2009'){f=8;ne=1};gmar=new Date('3/1/'+y);dsts=f-gmar.getDay("
+");gnov=new Date('11/1/'+y);dste=ne-gnov.getDay();spr=new Date('3/'"
+"+dsts+'/'+y);fl=new Date('11/'+dste+'/'+y);cd=new Date();"
+"if(cd>spr&&cd<fl){z=z+1}else{z=z};utc=cd.getTime()+(cd.getTimezoneO"
+"ffset()*60000);tz=new Date(utc + (3600000*z));thisy=tz.getFullYear("
+");var days=['Sunday','Monday','Tuesday','Wednesday','Thursday','Fr"
+"iday','Saturday'];if(thisy!=y){return'Data Not Available'}else{;thi"
+"sh=tz.getHours();thismin=tz.getMinutes();thisd=tz.getDay();var dow="
+"days[thisd];var ap='AM';var dt='Weekday';var mint='00';if(thismin>3"
+"0){mint='30'}if(thish>=12){ap='PM';thish=thish-12};if (thish==0){th"
+"ish=12};if(thisd==6||thisd==0){dt='Weekend'};var timestring=thish+'"
+":'+mint+ap;var daystring=dow;var endstring=dt;if(t=='h'){return tim"
+"estring}if(t=='d'){return daystring};if(t=='w'){return en"
+"dstring}}};"
);
/*
 * Plugin: Form Analysis 2.1 (Success, Error, Abandonment)
 */
s.setupFormAnalysis=new Function(""
+"var s=this;if(!s.fa){s.fa=new Object;var f=s.fa;f.ol=s.wd.onload;s."
+"wd.onload=s.faol;f.uc=s.useCommerce;f.vu=s.varUsed;f.vl=f.uc?s.even"
+"tList:'';f.tfl=s.trackFormList;f.fl=s.formList;f.va=new Array('',''"
+",'','')}");
s.sendFormEvent=new Function("t","pn","fn","en",""
+"var s=this,f=s.fa;t=t=='s'?t:'e';f.va[0]=pn;f.va[1]=fn;f.va[3]=t=='"
+"s'?'Success':en;s.fasl(t);f.va[1]='';f.va[3]='';");
s.faol=new Function("e",""
+"var s=s_c_il["+s._in+"],f=s.fa,r=true,fo,fn,i,en,t,tf;if(!e)e=s.wd."
+"event;f.os=new Array;if(f.ol)r=f.ol(e);if(s.d.forms&&s.d.forms.leng"
+"th>0){for(i=s.d.forms.length-1;i>=0;i--){fo=s.d.forms[i];fn=fo.name"
+";tf=f.tfl&&s.pt(f.fl,',','ee',fn)||!f.tfl&&!s.pt(f.fl,',','ee',fn);"
+"if(tf){f.os[fn]=fo.onsubmit;fo.onsubmit=s.faos;f.va[1]=fn;f.va[3]='"
+"No Data Entered';for(en=0;en<fo.elements.length;en++){el=fo.element"
+"s[en];t=el.type;if(t&&t.toUpperCase){t=t.toUpperCase();var md=el.on"
+"mousedown,kd=el.onkeydown,omd=md?md.toString():'',okd=kd?kd.toStrin"
+"g():'';if(omd.indexOf('.fam(')<0&&okd.indexOf('.fam(')<0){el.s_famd"
+"=md;el.s_fakd=kd;el.onmousedown=s.fam;el.onkeydown=s.fam}}}}}f.ul=s"
+".wd.onunload;s.wd.onunload=s.fasl;}return r;");
s.faos=new Function("e",""
+"var s=s_c_il["+s._in+"],f=s.fa,su;if(!e)e=s.wd.event;if(f.vu){s[f.v"
+"u]='';f.va[1]='';f.va[3]='';}su=f.os[this.name];return su?su(e):tru"
+"e;");
s.fasl=new Function("e",""
+"var s=s_c_il["+s._in+"],f=s.fa,a=f.va,l=s.wd.location,ip=s.trackPag"
+"eName,p=s.pageName;if(a[1]!=''&&a[3]!=''){a[0]=!p&&ip?l.host+l.path"
+"name:a[0]?a[0]:p;if(!f.uc&&a[3]!='No Data Entered'){if(e=='e')a[2]="
+"'Error';else if(e=='s')a[2]='Success';else a[2]='Abandon'}else a[2]"
+"='';var tp=ip?a[0]+':':'',t3=e!='s'?':('+a[3]+')':'',ym=!f.uc&&a[3]"
+"!='No Data Entered'?tp+a[1]+':'+a[2]+t3:tp+a[1]+t3,ltv=s.linkTrackV"
+"ars,lte=s.linkTrackEvents,up=s.usePlugins;if(f.uc){s.linkTrackVars="
+"ltv=='None'?f.vu+',events':ltv+',events,'+f.vu;s.linkTrackEvents=lt"
+"e=='None'?f.vl:lte+','+f.vl;f.cnt=-1;if(e=='e')s.events=s.pt(f.vl,'"
+",','fage',2);else if(e=='s')s.events=s.pt(f.vl,',','fage',1);else s"
+".events=s.pt(f.vl,',','fage',0)}else{s.linkTrackVars=ltv=='None'?f."
+"vu:ltv+','+f.vu}s[f.vu]=ym;s.usePlugins=false;var faLink=new Object"
+"();faLink.href='#';s.tl(faLink,'o','Form Analysis');s[f.vu]='';s.us"
+"ePlugins=up}return f.ul&&e!='e'&&e!='s'?f.ul(e):true;");
s.fam=new Function("e",""
+"var s=s_c_il["+s._in+"],f=s.fa;if(!e) e=s.wd.event;var o=s.trackLas"
+"tChanged,et=e.type.toUpperCase(),t=this.type.toUpperCase(),fn=this."
+"form.name,en=this.name,sc=false;if(document.layers){kp=e.which;b=e."
+"which}else{kp=e.keyCode;b=e.button}et=et=='MOUSEDOWN'?1:et=='KEYDOW"
+"N'?2:et;if(f.ce!=en||f.cf!=fn){if(et==1&&b!=2&&'BUTTONSUBMITRESETIM"
+"AGERADIOCHECKBOXSELECT-ONEFILE'.indexOf(t)>-1){f.va[1]=fn;f.va[3]=e"
+"n;sc=true}else if(et==1&&b==2&&'TEXTAREAPASSWORDFILE'.indexOf(t)>-1"
+"){f.va[1]=fn;f.va[3]=en;sc=true}else if(et==2&&kp!=9&&kp!=13){f.va["
+"1]=fn;f.va[3]=en;sc=true}if(sc){nface=en;nfacf=fn}}if(et==1&&this.s"
+"_famd)return this.s_famd(e);if(et==2&&this.s_fakd)return this.s_fak"
+"d(e);");
s.ee=new Function("e","n",""
+"return n&&n.toLowerCase?e.toLowerCase()==n.toLowerCase():false;");
s.fage=new Function("e","a",""
+"var s=this,f=s.fa,x=f.cnt;x=x?x+1:1;f.cnt=x;return x==a?e:'';");

/* WARNING: Changing any of the below variables will cause drastic
changes to how your visitor data is collected.  Changes should only be
made when instructed to do so by your account manager.*/
s.visitorNamespace="nintendo";
s.trackingServer="metrics.nintendo.com";
s.trackingServerSecure="smetrics.nintendo.com";
s.dc=112;
s.vmk="49023B5D";

/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
var s_code='',s_objectID;function s_gi(un,pg,ss){var d="function s_dr"
+"(x,o,n){var i=x.indexOf(o);if(i>=0&&x.split)x=(x.split(o)).join(n);"
+"else while(i>=0){x=x.substring(0,i)+n+x.substring(i+o.length);i=x.i"
+"ndexOf(o)}return x}w.s_dr=s_dr;function s_d(x) {var t='`^@$#',l='01"
+"23456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',d,n=0"
+",b,k,w,i=x.lastIndexOf('~~');if(i>0){d=x.substring(0,i);x=x.substri"
+"ng(i+2);while(d){w=d;i=d.indexOf('~');if(i>0){w=d.substring(0,i);d="
+"d.substring(i+1)}else d='';b=parseInt(n/62);k=n-b*62;k=t.substring("
+"b,b+1)+l.substring(k,k+1);x=s_dr(x,k,w);n++}for(i=0;i<5;i++){w=t.su"
+"bstring(i,i+1);x=s_dr(x,w+' ',w)}}return x}w.s_d=s_d;",c=".substrin"
+"g(~.indexOf(~return ~=fun`K(~){`Os=^u~`t $6~;$6~.toLowerCase()~`cFu"
+"n`K('e`s`Os=s_c_il['+@i+']~};s.~.length~.toUpperCase~`cObject~s.wd~"
+"t^D~.location~')q='~dynamicAccount~link~s.apv~ction~$l$X~)$6x^X!Obj"
+"ect||!Object.prototype||!Object.prototype[x])~@G^Al)@G^Al['+@i+'].m"
+"rq(\"'+un+'\")'~var ~s.pt(~ookieDomainPeriods~,`s,'~while(~);s.~.pr"
+"otocol~){$6~visitor~=''~:'')~;@F^Vs[k],255)}~s_c2f~javaEnabled~=new"
+" ~.lastIndexOf('~tm.get~@5\"$Qs.b.addBehavior('# default# ~onclick~"
+"ternalFilters~entElement~Name~javascriptVersion~=parseFloat(~cookie"
+"~parseInt(~s.^J~Type~o^joid~browser~','~else~referrer~colorDepth~St"
+"ring~.host~s.rep(~}catch(e){~r=s.m(f)?s[f](~}$6~s.un~s.eo~s.sq~t=s."
+"ot(o)~track~j='1.~)?'Y':'N'~$dURL~^jc_i~s.ismac~lugins~=='~;for(~Sa"
+"mpling~s.rc[un]~s.b.addEventListener~Download~tfs~resolution~.get@I"
+"()~s.eh~s.isie~s.vl_l~s.vl_t~Height~t,h){t=t?t~isopera~escape(~scre"
+"en.~s.fl(~harCode~&&(~variableProvider~s.gg('objectID')~&&s.~:'';h="
+"h?h~e&&l$kSESSION'~');~f',~_'+~Date~name~home$d~.s_~s.c_r(~s.rl[u~o"
+".href~Lifetime~Width~sEnabled~'){q='~b.attachEvent~&&l$kNONE'){~Ext"
+"ernalLinks~this~charSet~onerror~currencyCode~s=s_gi(~e$SElement~;s."
+"gl(s.vl_g~.parent~Array~lnk~Opera~eval(~Math.~s.fsg~s.ns6~docum~s.o"
+"un~conne~InlineStats~Track~'0123456789~s[k]=~window~onload~Time~s.e"
+"pa(~s.c_w(~o.type~(s.ssl~n=s.oid(o)~LeaveQuery~')>=~&&t~'=')~){n=~+"
+"1))~' '+~s.t()}~\",''),~=s.oh(o);~+(y<1900?~ingServer~s_gs~true~ses"
+"s~campaign~lif~;fun~,100)~s.co(~s._in~x in ~='s_~ffset~s.c_d~'&pe~s"
+".gv(~s.qav~s.pl~=(apn~sqs',q);~Year(~=s.n.app~&&!~(''+~(\")>=~)+'/~"
+"',s~s()+':'+~){p=~():''~a):f(~){v=s.n.~channel~if(~un)~.target~o.va"
+"lue~etscape~(ns?ns:~s_')t=t~omePage~++}~')<~){x~1);~e))~'+n~height~"
+"events~trk~random~code~un,~try{~'MSIE ~.src~INPUT'~floor(~s.pg~s.nu"
+"m(~s.ape(~s.c_gd~s.dc~.inner~transa~Events~page~.set~Group,~Match,~"
+".fromC~++){~?'':~!='~='+~(\")<~?'&~+';~(f){~>=5)~&&i>~[b](~=l[n];~~"
+"fun`K `ae$p`Ox`X,s=0,e,a,b,c;`S1){e=f`1'\"@z);b=f`1'\\\\',s);c=f`1"
+"\"\\n\",s)`6e<0||(b>=0&&b<$Ie=b`6e<0||(c>=0&&c<$Ie=c`6e>=0$G+=(e>s?"
+"f`0s,e)`Y+(e==c?'\\\\n':'\\\\'+f`0e,e@T;s=e+1}`t `2x+f`0s)}`2f}w.`a"
+"e=`ae@f`K `aa$p`Os=f`1'(')+1,e=f`1')'),a`X,c;`Ss>=0&&s<e){c=f`0s,s+"
+"1)`6c==`s)a+='\",\"';`5(\"\\n\\r\\t \")`1c)<0)a+=c;s$E`2a?'\"'+a+'"
+"\"':a}w.`aa=`ae@f`K `a(cc){cc`X+cc;`Ofc='`Of`cFun`K(@z=cc`1';',cc`1"
+"'{')),e=cc`d}'),o,a,d,q,c,f,h,x;fc+=`aa(cc)+',\"`Os`C;';c=cc`0s+1,e"
+");s=c`1'fun`K^d`Ss>=0){d=1;q`X;x=0;f=c`0s);a=`aa(f);e=o=c`1'{@z);e+"
+"+;`Sd>0){h=c`0e,e+1)`6q`Vh==q@vx)q`X`6h^D\\\\')x=x?0:1;`t x=0}`t{$6"
+"h^D\"'||h==\"'\")q=h`6h^D{')d++`6h^D}')d--^1d>0)e$Ec=c`00,s)+'new F"
+"un`K('+(a?a+`s`Y+'\"'+`ae(c`0o+1,$I+'\")'+c`0e+$Hs=c`1'fun`K')}fc+="
+"`ae(c)$o`2s\");';@5fc);`2f}w.`a=`a`6pg){fun`K s_co(o){`O^y\"_\",1,$"
+"H`2@ho)}w^jco=s_co@f`K @a($7{`O^y$P1,$H`2@Vw^jgs=@a@f`K s_dc($7{`O^"
+"y$P$H`2@Vw^jdc=s_dc;}fun`K s_c($Ppg,ss`4;s._c@kc';`D=@G`6!`D^An){`D"
+"^Al`c@2;`D^An=0;}s._il=`D^Al;@i=`D^An;s._il[@i]=s;`D^An++;s.m`3m){`"
+"2@wm)`1'{$F0`9fl`3x,l){`2x?@wx)`00,l):x`9co`3o`V!o)`2o;`On`C,x^E@jo"
+")$6x`1'select$F0&&x`1'filter$F0)n[x]=o[x];`2n`9num`3x$G`X+x^E`Op=0;"
+"p<x`A;p++)$6(@E')`1x`0p,p@T<0)`20;`21`9rep`3x,o,n){`Oi=x`1o);`Sx$r="
+"0$G=x`00,i)+n+x`0i+o`A);i=x`1o,i+n`A)}`2x`9ape`3x`4,h=@EABCDEF',i,c"
+"=s.^v,n,l,e,y`X;c=c?c`B$2`6x$G`X+x`6c^DAUTO'^X'').c^WAt){for(i=0;i<"
+"x`A;i$ic=x`0i,i+$Hn=x.c^WAt(i)`6n>127){l=0;e`X;`Sn||l<4){e=h`0n%16,"
+"n%16+1)+e;n=`nn/16);l$Ey+='%u'+e}`5c^D+')y+='%2B';`t y+=^Tc)}x=y}`t"
+"{x=x?`y^T''+x),'+`s%2B'):x`6x&&c^aem==1&&x`1'%u$F0&&x`1'%U$F0){i=x`"
+"1'%^d`Si>=0){i++`6h`08)`1x`0i,i+1)`B())>=0)`2x`00,i)+'u00'+x`0i);i="
+"x`1'%',i)}}}}`2x`9epa`3x`4;`2x?un^T`y''+x,'+`s ')):x`9pt`3x,d,f,a`4"
+",t=x,z=0,y,r;`St){y=t`1d);y=y<0?t`A:y;t=t`00,y);^0t,$3t,a)`6r)`2r;z"
+"+=y+d`A;t=x`0z,x`A);t=z<x`A?t:''}`2''`9isf`3t,a){`Oc=a`1':')`6c>=0)"
+"a=a`00,c)`6t`00,2)^D$C`02);`2(t!`X@Q==a)`9fsf`3t,a`4`6`Pa`Ris^et))@"
+"7+=(@7!`X?`s`Y+t;`20`9fs`3x,f`4;@7`X;`Px`Rfs^ef);`2@7`9c_d`X;$Yf`3t"
+",a`4`6!$Wt))`21;`20`9c_gd`3`4,d=`D`F`x^h,n=s.fpC`Q,p`6!n)n=s.c`Q`6d"
+"@v@m@Sn?`nn):2;n=n>2?n:2;p=d`d.')`6p>=0){`Sp>=0&&n>1$1d`d.',p-$Hn--"
+"}@m=p>0&&`Pd,'.`sc_gd^e0)?d`0p):d}}`2@m`9c_r`3k`4;k=$Xk);`Oc=@Us.d."
+"`m,i=c`1@Uk+@R,e=i<0?i:c`1';',i),v=i<0$j@Jc`0i+2+k`A,e<0?c`A:$I;`2v"
+"$k[[B]]'?v:''`9c_w`3k,v,e`4,d=$Y(),l=s.`m^n,t;v`X+v;l=l?@wl)`B$2`6^"
+"c^st=(v!`X?`nl?l:0):-60)`6t){e`c^g;e$e@I(e^L+(t*1000))}^1k^ss.d.`m="
+"k+'`Lv!`X?v:'[[B]]')$o path=/;'+(^c?' expires$le.toGMT`w()$o'`Y+(d?"
+"' domain$ld$o'`Y;`2^kk)==v}`20`9eh`3o,e,r,f`4,b='s^fe+'^f@i,n=-1,l,"
+"i,x`6!^Ml)^Ml`c@2;l=^Ml^Ei=0;i<l`A&&n<0;i++`Vl[i].o==o&&l[i].e==e)n"
+"=i^1n<0@Si;l[n]`C}x$tx.o=o;x.e=e;f=r?x.b:f`6r||f$G.b=r?0:o[e];x.o[e"
+"]=f^1x.b$G.o[b]=x.b;`2b}`20`9cet`3f,a,t,o,b`4,r`6`J>=5^X!s.^S||`J>="
+"7))@5'$Q^0$3a)`zr=s.m(t)?s[t](e):t(e)}^d`t{$6^B^au`1$R4@P0)r=s.m(b)"
+"?s$sa):b(a);`t{^M(`D,'^w',0,o);^0$3a`Teh(`D,'^w',1)}}`2r`9g^Jet`3e`"
+"4;`2`o`9g^Joe`8;^M(@G,\"^w\",1`Te^J=1;`Oc=s.t()`6c)s.d.write(c`Te^J"
+"=0;`2@b'`Tg^Jfb`3a){`2@G`9g^Jf`3w`4,p=w@1,l=w`F;`o=w`6p&&p`F!=l&&p`"
+"F`x==l`x){`o=p;`2s.g^Jf(`o)}`2`o`9g^J`3`4`6!`o){`o=`D`6!s.e^J)`o=s."
+"cet('g^J^e`o,'g^Jet@z.g^Joe,'g^Jfb')}`2`o`9mrq`3u`4,l=^l],n,r;^l]=0"
+"`6l)for(n=0;n<l`A;n$ir$ts.mr(0,0,r.t,r.u,r.r)}`9mr`3@c,q,ta,u,rs`4,"
+"dc=$Z,t1=s.^6@Z,t2=s.^6@ZSecure,ns=s.`W`jspace,un=u?u:$Bs.f$7,unc=`"
+"y$P'_`s-'),r`C,l,imn@ki^f($7,im,b,e`6!rs){rs='http'+@M?'s'`Y+'://'+"
+"(t1?@M@Q2?t2:t1):($B@M?'102':unc))+'.'+($Z?$Z:112)+'.2o7.net')@yb/s"
+"s/'+^2+'/1/H.14/'+@c+'?[AQB]&ndh=1'+(q?q`Y+'&[AQE]'`6^N@v^B`V`J>5.5"
+")rs=^Vrs,4095);`t rs=^Vrs,2047)}^1s.d.images&&`J>=3^X!s.^S||`J>=7)^"
+"X@8<0||`J>=6.1)`V!s.rc)s.rc`C`6!^G){^G=1`6!s.rl)s.rl`C;^ln]`c@2;set"
+"@Iout('$6`N,750)}`t{l=^ln]`6l){r.t=ta;r.u=un;r.r=rs;l[l`A]=r;`2''}i"
+"mn+='^f^G;^G$Eim=`D[imn]`6!im)im=`D[imn]`cImage;im^jl=0;im.@H`cFun`"
+"K('e`s^u^jl=1`6`N);im$S=rs`6rs`1@n=@P0^X!ta||ta^D_self'||ta^D_top'|"
+"|(`D.^h@Qa==`D.^h))){b=e`c^g;`S!im^jl&&e^L-b^L<500)e`c^g}`2''}`2'<i"
+"m'+'g sr'+'c=\"'+rs+'\" width=1 $K=1 border=0 alt=\"\">'`9gg`3v`4`6"
+"!`D['s^fv])`D['s^fv]`X;`2`D['s^fv]`9glf`3t,a`Vt`00,2)^D$C`02);`Os=^"
+"u,v=s.gg(t)`6v)s[t]=v`9gl`3v`4`6$V)`Pv`Rgl^e0)`9gv`3v`4;`2s['vpm^fv"
+"]?s['vpv^fv]:(s[v]?s[v]`Y`9havf`3t,a`4,b=t`00,4),x=t`04),n=`nx),k='"
+"g^ft,m='vpm^ft,q=t,v=s.`I@DVars,e=s.`I@D$c;@F@ot)`6s.@3||^3){v=v?v+"
+"`s+^O+`s+^O2:''`6v@v`Pv`Ris^et))s[k]`X`6`E$L'&&e)@Fs.fs(s[k],e)}s[m"
+"]=0`6`E`WID`Gvid';`5`E^9^qg'`Z`5`E`u^qr'`Z`5`Evmk`Gvmt';`5`E^v^qce'"
+"`6s[k]&&s[k]`B()^DAUTO')@F'ISO8859-1';`5s[k]^aem==2)@F'UTF-8'}`5`E`"
+"W`jspace`Gns';`5`Ec`Q`Gcdp';`5`E`m^n`Gcl';`5`E^Y`Gvvp';`5`E^x`Gcc';"
+"`5`E$5`Gch';`5`E$b`KID`Gxact';`5`E@d`Gv0';`5`E^K`Gs';`5`E`v`Gc';`5`"
+"E`k`Gj';`5`E`b`Gv';`5`E`m^p`Gk';`5`E`r^o`Gbw';`5`E`r^Q`Gbh';`5`E@B`"
+"K`p`Gct';`5`E^i`Ghp';`5`Ep^C`Gp';`5$Wx)`Vb^Dprop`Gc$J;`5b^DeVar`Gv$"
+"J;`5b^Dhier^qh$J`Z^1s[k]@Q$k`I`j'@Q$k`I`p')@p+='&'+q+'`Ls[k]);`2''`"
+"9hav`3`4;@p`X;`P^P`Rhav^e0);`2@p`9lnf`3^R`7^b`7:'';`Ote=t`1@R`6t@Qe"
+">0&&h`1t`0te@T>=0)`2t`00,te);`2''`9ln`3h`4,n=s.`I`js`6n)`2`Pn`Rln^e"
+"h);`2''`9ltdf`3^R`7^b`7:'';`Oqi=h`1'?^dh=qi>=0?h`00,qi):h`6t&&h`0h`"
+"A-(t`A@T^D.'+t)`21;`20`9ltef`3^R`7^b`7:''`6t&&h`1t)>=0)`21;`20`9lt`"
+"3h`4,lft=s.`I^IFile`ps,lef=s.`IEx`h,@e=s.`IIn`h;@e=@e?@e:`D`F`x^h;h"
+"=h`7`6s.^6^ILinks&&lft&&`Plft`Rltd^eh))`2'd'`6s.^6^t^Xlef||@e)^X!le"
+"f||`Plef`Rlte^eh))^X!@e||!`P@e`Rlte^eh)))`2'e';`2''`9lc`8,b=^M(^u,"
+"\"`g\"`T@3=@h^u`Tt(`T@3=0`6b)`2^u$se);`2@b'`Tbc`8,f`6s.d^ad.all^ad."
+"all.cppXYctnr)return;^3=^z?^z:e$8;@5\"$Q$6^3^X^3.tag`j||^3.par`i||^"
+"3@1Nod$I@Vcatch$p}\"`Teo=0'`Toh`3o`4,l=`D`F,h=^m?^m:'',i,j,k,p;i=h`"
+"1':^dj=h`1'?^dk=h`1'/')`6h^Xi<0||(j>=0$rj)||(k>=0$rk))$1o`U&&o`U`A>"
+"1?o`U:(l`U?l`U`Y;i=l.path^h`d/^dh=(p?p+'//'`Y+(o`x?o`x:(l`x?l`x`Y)+"
+"(h`00,1)$k/'?l.path^h`00,i<0?0:i@y'`Y+h}`2h`9ot`3o){`Ot=o.tag`j;t=t"
+"@Q`B?t`B$2`6`ESHAPE')t`X`6t`V`E$T&&@L&&@L`B)t=@L`B();`5^m)t='A';}`2"
+"t`9oid`3o`4,^5,p,c,n`X,x=0`6t@v`q$1o`U;c=o.`g`6^m^X`EA'||`EAREA')^X"
+"!c||!p||p`7`1'javascript$F0))n@X`5c@S`ys.rep(`ys.rep@wc,\"\\r@W\"\\"
+"n@W\"\\t@W' `s^dx=2}`5$9^X`E$T||`ESUBMIT')@S$9;x=3}`5o$S&&`EIMAGE')"
+"n=o$S`6n){`q=^Vn@g;`qt=x}}`2`q`9rqf`3t,un`4,e=t`1@R,u=e>=0?`s+t`00,"
+"e)+`s:'';`2u&&u`1`s+un+`s)>=0?@Jt`0e@T:''`9rq`3un`4,c=un`1`s),v=^k'"
+"s_sq'),q`X`6c<0)`2`Pv,'&`srq^e$7;`2`Pun`Rrq',0)`9sqp`3t,a`4,e=t`1@R"
+",q=e<0$j@Jt`0e+1)`Tsqq[q]`X`6e>=0)`Pt`00,e)`R@s`20`9sqs`3$Pq`4;^4u["
+"un]=q;`20`9sq`3q`4,k@ksq',v=^kk),x,c=0;^4q`C;^4u`C;^4q[q]`X;`Pv,'&`"
+"ssqp',0);`P^2`R@sv`X^E@j^4u`M)^4q[^4u[x]]+=(^4q[^4u[x]]?`s`Y+x^E@j^"
+"4q`M&&^4q[x]^Xx==q||c<2)){v+=(v$n'`Y+^4q[x]+'`Lx);c$E`2@Kk,v,0)`9wd"
+"l`8,r=@b,b=^M(`D,\"@H\"),i,o,oc`6b)r=^u$se)^Ei=0;i<s.d.`Is`A;i$io=s"
+".d.`Is[i];oc=o.`g?\"\"+o.`g:\"\"`6(oc`1\"@a$m0||oc`1\"^joc@x0)&&oc`"
+"1\".tl$m0)^M(o,\"`g\",0,s.lc);}`2r^d`Ds`3`4`6`J>3^X!^N||!^B||`J$q`V"
+"s.b^a^r)s.^r('`g@z.bc);`5s.b&&^H)^H('click@z.bc,false);`t ^M(`D,'@H"
+"',0,`Dl)}`9vs`3x`4,v=s.`W^F,g=s.`W^F$fk@kvsn^f^2+(g?'^fg`Y,n=^kk),e"
+"`c^g,y=e.get@t);e$e@ty+10@Y1900:0))`6v){v*=100`6!n`V!@Kk,x,$I`20;n="
+"x^1n%10000>v)`20}`21`9dyasmf`3t,m`Vt&&m&&m`1t)>=0)`21;`20`9dyasf`3t"
+",m`4,i=t?t`1@R:-1,n,x`6i>=0&&m){`On=t`00,i),x=t`0i+1)`6`Px`Rdyasm^e"
+"m))`2n}`20`9uns`3`4,x=s.`HSele`K,l=s.`HList,m=s.`H$gn,i;^2=^2`7`6x&"
+"&l`V!m)m=`D`F`x`6!m.toLowerCase)m`X+m;l=l`7;m=m`7;n=`Pl,';`sdyas^em"
+")`6n)^2=n}i=^2`1`s`Tfun=i<0?^2:^2`00,i)`9sa`3un`4;^2=un`6!@A)@A=un;"
+"`5(`s+@A+`s)`1$7<0)@A+=`s+un;^2s()`9t`3`4,$M=1,tm`c^g,sed=Math&&@6$"
+"N?@6$U@6$N()*10000000000000):`e@I(),@c='s'+@6$U`e@I()/10800000)%10+"
+"sed,y=`e@t),vt=`e^g(@y'+`eMonth(@y'@Yy+1900:y)+@U`eHour$0`eMinute$0"
+"`eSeconds()+@U`eDay()+@U`e@IzoneO@l(),^J=s.g^J(),ta`X,q`X,qs`X@0`Tu"
+"ns()`6!s.td){`Otl=^J`F,a,o,i,x`X,c`X,v`X,p`X,bw`X,bh`X,^70',k=@K's_"
+"cc`s@b',0^8,hp`X,ct`X,pn=0,ps`6`w&&`w.prototype){^71'`6j.match){^72"
+"'`6tm$eUTC^g){^73'`6^N&&^B&&`J$q^74'`6pn.toPrecision){^75';a`c@2`6a"
+".forEach){^76';i=0;o`C;@5'$Qi`cIterator(o)`z}')`6i&&i.next)^77'}}}}"
+"^1`J>=4)x=^Uwidth+'x'+^U$K`6s.isns||s.^S`V`J>=3$4`b(^8`6`J>=4){c=^U"
+"pixelDepth;bw=`D$a^o;bh=`D$a^Q}}@q=s.n.p^C}`5^N`V`J>=4$4`b(^8;c=^U`"
+"v`6`J$q{bw=s.d.@9`i.o@l^o;bh=s.d.@9`i.o@l^Q`6!^B^ab){`fh$D^dhp=s.b."
+"isH$D(tl^8`z}\");`fclientCaps^dct=s.b.@B`K`p`z}\")}}}`t r`X^1@q)`Sp"
+"n<@q`A&&pn<30){ps=^V@q[pn].^h@g$o'`6p`1ps)<0)p+=ps;pn$Es.^K=x;s.`v="
+"c;s.`k=j;s.`b=v;s.`m^p=k;s.`r^o=bw;s.`r^Q=bh;s.@B`K`p=ct;s.^i=hp;s."
+"p^C=p;s.td=1^1s.useP^C)s.doP^C(s);`Ol=`D`F,r=^J.@9ent.`u`6!s.^9)s.^"
+"9=l`6!s.`u)s.`u=r`6s.@3||^3){`Oo=^3?^3:s.@3`6!o)`2'';`Op=@o'$d`j'),"
+"w=1,^5,@N,x=`qt,h,l,i,oc`6^3&&o==^3){`So@vn@Q$kBODY'){o=o.par`i?o.p"
+"ar`i:o@1Node`6!o)`2'';^5;@N;x=`qt}oc=o.`g?''+o.`g:''`6(oc`1\"@a@x0&"
+"&oc`1\"^joc$m0)||oc`1\".tl@x0)`2''}ta=n?o$8:1;h@Xi=h`1'?^dh=s.`I@O`"
+"w||i<0?h:h`00,i);l=s.`I`j?s.`I`j:s.ln(h);t=s.`I`p?s.`I`p`7:s.lt(h)`"
+"6t^Xh||l))q+=@n=@3^f(`Ed'||`Ee'?$Xt):'o')+(h?@nv1`Lh)`Y+(l?@nv2`Ll)"
+"`Y;`t $M=0`6s.^6@C`V!p$1@o'^9^dw=0}^5;i=o.sourceIndex`6^Z@S^Z;x=1;i"
+"=1^1p&&n@Q)qs='&pid`L^Vp,255))+(w$npidt$lw`Y+'&oid`L^Vn@g)+(x$noidt"
+"$lx`Y+'&ot`Lt)+(i$noi$li`Y}^1!$M@vqs)`2''`6s.p_r)s.p_r();`O$O`X`6$M"
+"^avs(sed))$O=s.mr(@c,(vt$nt`Lvt)`Y+s.hav()+q+(qs?qs:s.rq(^2)),ta`Ts"
+"q($M$jqs`T@3=^3=s.`I`j=s.`I`p=`D^jobjectID=s.ppu`X`6$V)`D^j@3=`D^je"
+"o=`D^j`I`j=`D^j`I`p`X;`2$O`9tl`3o,t,n`4;s.@3=@ho`T`I`p=t;s.`I`j=n;s"
+".t()`9ssl=(`D`F`U`7`1'https@P0`Td=@9ent;s.b=s.d.body;s.n=navigator;"
+"s.u=s.n.userAgent;@8=s.u`1'N$A6/^d`Oapn@u`j,v@uVersion,ie=v`1$R'),o"
+"=s.u`1'@4 '),i`6v`1'@4@P0||o>0)apn='@4';^N@r^DMicrosoft Internet Ex"
+"plorer'`Tisns@r^DN$A'`T^S@r^D@4'`Tismac=(s.u`1'Mac@P0)`6o>0)`J`ls.u"
+"`0o+6));`5ie>0){`J=`ni=v`0ie+5))`6`J>3)`J`li)}`5@8>0)`J`ls.u`0@8+10"
+"));`t `J`lv`Tem=0`6`w$h^W){i=^T`w$h^W(256))`B(`Tem=(i^D%C4%80'?2:(i"
+"^D%U0100'?1:0))}s.sa(un`Tvl_l='`WID,vmk,ppu,^v,`W`jspace,c`Q,`m^n,$"
+"d`j,^9,`u,^x';^P=^O+',^Y,$5,server,$d`p,$b`KID,purchaseID,@d,state,"
+"zip,$L,products,`I`j,`I`p'^E`On=1;n<51;n++)^P+=',prop$J+',eVar$J+',"
+"hier$J;^O2='^K,`v,`k,`b,`m^p,`r^o,`r^Q,@B`K`p,^i,p^C';^P+=`s+^O2;s."
+"vl_g=^P+',`W^F,`W^F$f`HSele`K,`HList,`H$g^6^ILinks,^6^t,^6@C,`I@O`w"
+",`I^IFile`ps,`IEx`h,`IIn`h,`I@DVars,`I@D$c,`I`js,@3';$V=pg@0)`6!ss)"
+"`Ds()}",
w=window,l=w.s_c_il,n=navigator,u=n.userAgent,v=n.appVersion,e=
v.indexOf('MSIE '),m=u.indexOf('Netscape6/'),a,i,s;if(un){un=
un.toLowerCase();if(l)for(i=0;i<l.length;i++){s=l[i];if(s._c=='s_c'){
if(s.oun==un)return s;else if(s.fs(s.oun,un)){s.sa(un);return s;}}}}
eval(d);c=s_d(c);i=c.indexOf("function s_c(");eval(c.substring(0,i));
if(!un)return 0;c=c.substring(i);if(e>0){a=parseInt(i=v.substring(e
+5));if(a>3)a=parseFloat(i);}else if(m>0)a=parseFloat(u.substring(m+10)
);else a=parseFloat(v);if(a>=5&&v.indexOf('Opera')<0&&u.indexOf(
'Opera')<0){eval(c);return new s_c(un,pg,ss);}else s=s_c2f(c);return s(
un,pg,ss);}s_gi();



