
var cxlEnv = new Object();
cxlEnv.sitePath = "http://www.reysons.com/";
cxlEnv.server = "www.reysons.com/";
cxlEnv.domain = cxlEnv.server.replace(/^[0-9a-zA-Z]+\./,"");
cxlEnv.domain = cxlEnv.domain.replace("/",'');
cxlEnv.subdomain = "";
cxlEnv.context = "";
cxlEnv.protocol = "";
cxlEnv.bodyClass= "partsWholesaling";
cxlEnv.imageBase = "/images/";
cxlEnv.styleBase = "/styles/";
cxlEnv.scriptBase = "/scripts/";
cxlEnv.categories= "";
cxlEnv.mapsAPIkey = "error";
//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2009 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
var MooTools={version:"1.2.5",build:"008d8f0f2fcc2044e54fdd3635341aaab274e757"};var Native=function(l){l=l||{};var a=l.name;var j=l.legacy;var b=l.protect;var c=l.implement;var i=l.generics;var g=l.initialize;var h=l.afterImplement||function(){};var d=g||j;i=i!==false;d.constructor=Native;d.$family={name:"native"};if(j&&g){d.prototype=j.prototype;}d.prototype.constructor=d;if(a){var f=a.toLowerCase();d.prototype.$family={name:f};Native.typize(d,f);}var k=function(o,m,p,n){if(!b||n||!o.prototype[m]){o.prototype[m]=p;}if(i){Native.genericize(o,m,b);}h.call(o,m,p);return o;};d.alias=function(o,m,q){if(typeof o=="string"){var p=this.prototype[o];if((o=p)){return k(this,m,o,q);}}for(var n in o){this.alias(n,o[n],m);}return this;};d.implement=function(n,m,q){if(typeof n=="string"){return k(this,n,m,q);}for(var o in n){k(this,o,n[o],m);}return this;};if(c){d.implement(c);}return d;};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments);return b.prototype[c].apply(d.shift(),d);};}};Native.implement=function(d,c){for(var b=0,a=d.length;b<a;b++){d[b].implement(c);}};Native.typize=function(a,b){if(!a.type){a.type=function(c){return($type(c)===b);};}};(function(){var a={Array:Array,Date:Date,Function:Function,Number:Number,RegExp:RegExp,String:String};for(var j in a){new Native({name:j,initialize:a[j],protect:true});}var d={"boolean":Boolean,"native":Native,object:Object};for(var c in d){Native.typize(d[c],c);}var h={Array:["concat","indexOf","join","lastIndexOf","pop","push","reverse","shift","slice","sort","splice","toString","unshift","valueOf"],String:["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]};for(var f in h){for(var b=h[f].length;b--;){Native.genericize(a[f],h[f][b],true);}}})();var Hash=new Native({name:"Hash",initialize:function(a){if($type(a)=="hash"){a=$unlink(a.getClean());}for(var b in a){this[b]=a[b];}return this;}});Hash.implement({forEach:function(b,c){for(var a in this){if(this.hasOwnProperty(a)){b.call(c,this[a],a,this);}}},getClean:function(){var b={};for(var a in this){if(this.hasOwnProperty(a)){b[a]=this[a];}}return b;},getLength:function(){var b=0;for(var a in this){if(this.hasOwnProperty(a)){b++;}}return b;}});Hash.alias("forEach","each");Array.implement({forEach:function(c,d){for(var b=0,a=this.length;b<a;b++){c.call(d,this[b],b,this);}}});Array.alias("forEach","each");function $A(b){if(b.item){var a=b.length,c=new Array(a);while(a--){c[a]=b[a];}return c;}return Array.prototype.slice.call(b);}function $arguments(a){return function(){return arguments[a];};}function $chk(a){return !!(a||a===0);}function $clear(a){clearTimeout(a);clearInterval(a);return null;}function $defined(a){return(a!=undefined);}function $each(c,b,d){var a=$type(c);((a=="arguments"||a=="collection"||a=="array")?Array:Hash).each(c,b,d);}function $empty(){}function $extend(c,a){for(var b in (a||{})){c[b]=a[b];}return c;}function $H(a){return new Hash(a);}function $lambda(a){return($type(a)=="function")?a:function(){return a;};}function $merge(){var a=Array.slice(arguments);a.unshift({});return $mixin.apply(null,a);}function $mixin(f){for(var d=1,a=arguments.length;d<a;d++){var b=arguments[d];if($type(b)!="object"){continue;}for(var c in b){var h=b[c],g=f[c];f[c]=(g&&$type(h)=="object"&&$type(g)=="object")?$mixin(g,h):$unlink(h);}}return f;}function $pick(){for(var b=0,a=arguments.length;b<a;b++){if(arguments[b]!=undefined){return arguments[b];}}return null;}function $random(b,a){return Math.floor(Math.random()*(a-b+1)+b);}function $splat(b){var a=$type(b);return(a)?((a!="array"&&a!="arguments")?[b]:b):[];}var $time=Date.now||function(){return +new Date;};function $try(){for(var b=0,a=arguments.length;b<a;b++){try{return arguments[b]();}catch(c){}}return null;}function $type(a){if(a==undefined){return false;}if(a.$family){return(a.$family.name=="number"&&!isFinite(a))?false:a.$family.name;}if(a.nodeName){switch(a.nodeType){case 1:return"element";case 3:return(/\S/).test(a.nodeValue)?"textnode":"whitespace";}}else{if(typeof a.length=="number"){if(a.callee){return"arguments";}else{if(a.item){return"collection";}}}}return typeof a;}function $unlink(c){var b;switch($type(c)){case"object":b={};for(var f in c){b[f]=$unlink(c[f]);}break;case"hash":b=new Hash(c);break;case"array":b=[];for(var d=0,a=c.length;d<a;d++){b[d]=$unlink(c[d]);}break;default:return c;}return b;}Array.implement({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;},filter:function(d,f){var c=[];for(var b=0,a=this.length;b<a;b++){if(d.call(f,this[b],b,this)){c.push(this[b]);}}return c;},clean:function(){return this.filter($defined);},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;},map:function(d,f){var c=[];for(var b=0,a=this.length;b<a;b++){c[b]=d.call(f,this[b],b,this);}return c;},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;},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;},link:function(c){var a={};for(var f=0,b=this.length;f<b;f++){for(var d in c){if(c[d](this[f])){a[d]=this[f];delete c[d];break;}}}return a;},contains:function(a,b){return this.indexOf(a,b)!=-1;},extend:function(c){for(var b=0,a=c.length;b<a;b++){this.push(c[b]);}return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;},include:function(a){if(!this.contains(a)){this.push(a);}return this;},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b]);}return this;},erase:function(b){for(var a=this.length;a--;a){if(this[a]===b){this.splice(a,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var d=[];for(var b=0,a=this.length;b<a;b++){var c=$type(this[b]);if(!c){continue;}d=d.concat((c=="array"||c=="collection"||c=="arguments")?Array.flatten(this[b]):this[b]);}return d;},hexToRgb:function(b){if(this.length!=3){return null;}var a=this.map(function(c){if(c.length==1){c+=c;}return c.toInt(16);});return(b)?a:"rgb("+a+")";},rgbToHex:function(d){if(this.length<3){return null;}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("");}});String.implement({test:function(a,b){return((typeof a=="string")?new RegExp(a,b):a).test(this);},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:this.indexOf(a)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim();},camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase());});},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null;},stripScripts:function(b){var a="";var c=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return"";});if(b===true){$exec(a);}else{if($type(b)=="function"){b(a,c);}}return c;},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1);}return(a[c]!=undefined)?a[c]:"";});}});try{delete Function.prototype.bind;}catch(e){}Function.implement({extend:function(a){for(var b in a){this[b]=a[b];}return this;},create:function(b){var a=this;b=b||{};return function(d){var c=b.arguments;c=(c!=undefined)?$splat(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c);}var f=function(){return a.apply(b.bind||null,c);};if(b.delay){return setTimeout(f,b.delay);}if(b.periodical){return setInterval(f,b.periodical);}if(b.attempt){return $try(f);}return f();};},run:function(a,b){return this.apply(b,$splat(a));},pass:function(a,b){return this.create({bind:b,arguments:a});},bind:function(b,a){return this.create({bind:b,arguments:a});},bindWithEvent:function(b,a){return this.create({bind:b,arguments:a,event:true});},attempt:function(a,b){return this.create({bind:b,arguments:a,attempt:true})();},delay:function(b,c,a){return this.create({bind:c,arguments:a,delay:b})();},periodical:function(c,b,a){return this.create({bind:b,arguments:a,periodical:c})();}});Number.implement({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,c){for(var a=0;a<this;a++){b.call(c,a,this);}},toFloat:function(){return parseFloat(this);},toInt:function(a){return parseInt(this,a||10);}});Number.alias("times","each");(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat($A(arguments)));};}});Number.implement(a);})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a;}}return null;},hasValue:function(a){return(Hash.keyOf(this,a)!==null);},extend:function(a){Hash.each(a||{},function(c,b){Hash.set(this,b,c);},this);return this;},combine:function(a){Hash.each(a||{},function(c,b){Hash.include(this,b,c);},this);return this;},erase:function(a){if(this.hasOwnProperty(a)){delete this[a];}return this;},get:function(a){return(this.hasOwnProperty(a))?this[a]:null;},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b;}return this;},empty:function(){Hash.each(this,function(b,a){delete this[a];},this);return this;},include:function(a,b){if(this[a]==undefined){this[a]=b;}return this;},map:function(b,c){var a=new Hash;Hash.each(this,function(f,d){a.set(d,b.call(c,f,d,this));},this);return a;},filter:function(b,c){var a=new Hash;Hash.each(this,function(f,d){if(b.call(c,f,d,this)){a.set(d,f);}},this);return a;},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false;}}return true;},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true;}}return false;},getKeys:function(){var a=[];Hash.each(this,function(c,b){a.push(b);});return a;},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b);});return a;},toQueryString:function(a){var b=[];Hash.each(this,function(g,f){if(a){f=a+"["+f+"]";}var d;switch($type(g)){case"object":d=Hash.toQueryString(g,f);break;case"array":var c={};g.each(function(j,h){c[h]=j;});d=Hash.toQueryString(c,f);break;default:d=f+"="+encodeURIComponent(g);}if(g!=undefined){b.push(d);}});return b.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});function Class(b){if(b instanceof Function){b={initialize:b};}var a=function(){Object.reset(this);if(a._prototyping){return this;}this._current=$empty;var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c;}.extend(this);a.implement(b);a.constructor=Class;a.prototype.constructor=a;return a;}Function.prototype.protect=function(){this._protected=true;return this;};Object.reset=function(a,c){if(c==null){for(var f in a){Object.reset(a,f);}return a;}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]);break;}return a;};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a;},wrap:function(a,b,c){if(c._origin){c=c._origin;}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.');}var f=this.caller,g=this._current;this.caller=g;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=g;this.caller=f;return d;}.extend({_owner:a,_origin:c,_name:b});}});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var f in a){this.implement(f,a[f]);}return this;}var g=Class.Mutators[a];if(g){d=g.call(this,d);if(d==null){return this;}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this;}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a];if($type(b)=="object"){$mixin(b,d);}else{c[a]=$unlink(d);}break;case"array":c[a]=$unlink(d);break;default:c[a]=d;}return this;}});Class.Mutators={Extends:function(a){this.parent=a;this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.');}return c.apply(this,arguments);}.protect());},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b);}this.implement(b);},this);}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){this.$chain.empty();return this;}});var Events=new Class({$events:{},addEvent:function(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events[c]=this.$events[c]||[];this.$events[c].include(b);if(a){b.internal=true;}}return this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this;},fireEvent:function(c,b,a){c=Events.removeOn(c);if(!this.$events||!this.$events[c]){return this;}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})();},this);return this;},removeEvent:function(b,a){b=Events.removeOn(b);if(!this.$events[b]){return this;}if(!a.internal){this.$events[b].erase(a);}return this;},removeEvents:function(c){var d;if($type(c)=="object"){for(d in c){this.removeEvent(d,c[d]);}return this;}if(c){c=Events.removeOn(c);}for(d in this.$events){if(c&&c!=d){continue;}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a]);}}return this;}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase();});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent){return this;}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue;}this.addEvent(a,this.options[a]);delete this.options[a];}return this;}});var Browser=$merge({Engine:{name:"unknown",version:0},Platform:{name:(window.orientation!=undefined)?"ipod":(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime),query:!!(document.querySelector)},Plugins:{},Engines:{presto:function(){return(!window.opera)?false:((arguments.callee.caller)?960:((document.getElementsByClassName)?950:925));},trident:function(){return(!window.ActiveXObject)?false:((window.XMLHttpRequest)?((document.querySelectorAll)?6:5):4);},webkit:function(){return(navigator.taintEnabled)?false:((Browser.Features.xpath)?((Browser.Features.query)?525:420):419);},gecko:function(){return(!document.getBoxObjectFor&&window.mozInnerScreenX==null)?false:((document.getElementsByClassName)?19:18);}}},Browser||{});Browser.Platform[Browser.Platform.name]=true;Browser.detect=function(){for(var b in this.Engines){var a=this.Engines[b]();if(a){this.Engine={name:b,version:a};this.Engine[b]=this.Engine[b+a]=true;break;}}return{name:b,version:a};};Browser.detect();Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject("MSXML2.XMLHTTP");},function(){return new ActiveXObject("Microsoft.XMLHTTP");});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var a=($try(function(){return navigator.plugins["Shockwave Flash"].description;},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");})||"0 r0").match(/\d+/g);return{version:parseInt(a[0]||0+"."+a[1],10)||0,build:parseInt(a[2],10)||0};})();function $exec(b){if(!b){return b;}if(window.execScript){window.execScript(b);}else{var a=document.createElement("script");a.setAttribute("type","text/javascript");a[(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerText":"text"]=b;document.head.appendChild(a);document.head.removeChild(a);}return b;}Native.UID=1;var $uid=(Browser.Engine.trident)?function(a){return(a.uid||(a.uid=[Native.UID++]))[0];}:function(a){return a.uid||(a.uid=Native.UID++);};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(a){$uid(a);if(!a.Element){a.Element=$empty;if(Browser.Engine.webkit){a.document.createElement("iframe");}a.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};}a.document.window=a;return $extend(a,Window.Prototype);},afterImplement:function(b,a){window[b]=Window.Prototype[b]=a;}});Window.Prototype={$family:{name:"window"}};new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(a){$uid(a);a.head=a.getElementsByTagName("head")[0];a.html=a.getElementsByTagName("html")[0];if(Browser.Engine.trident&&Browser.Engine.version<=4){$try(function(){a.execCommand("BackgroundImageCache",false,true);});}if(Browser.Engine.trident){a.window.attachEvent("onunload",function(){a.window.detachEvent("onunload",arguments.callee);a.head=a.html=a.window=null;});}return $extend(a,Document.Prototype);},afterImplement:function(b,a){document[b]=Document.Prototype[b]=a;}});Document.Prototype={$family:{name:"document"}};new Document(document);var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a);if(c){return c(b);}if(typeof a=="string"){return document.newElement(a,b);}return document.id(a).set(b);},afterImplement:function(a,b){Element.Prototype[a]=b;if(Array[a]){return;}Elements.implement(a,function(){var c=[],h=true;for(var f=0,d=this.length;f<d;f++){var g=this[f][a].apply(this[f],arguments);c.push(g);if(h){h=($type(g)=="element");}}return(h)?new Elements(c):c;});}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var g=Array.link(arguments,{properties:Object.type,iframe:$defined});var d=g.properties||{};var c=document.id(g.iframe);var f=d.onload||$empty;delete d.onload;d.id=d.name=$pick(d.id,d.name,c?(c.id||c.name):"IFrame_"+$time());c=new Element(c||"iframe",d);var b=function(){var h=$try(function(){return c.contentWindow.location.host;});if(!h||h==window.location.host){var i=new Window(c.contentWindow);new Document(c.contentWindow.document);$extend(i.Element.prototype,Element.Prototype);}f.call(c.contentWindow,c.contentWindow.document);};var a=$try(function(){return c.contentWindow;});((a&&a.document.body)||window.frames[d.id])?b():c.addListener("load",b);return c;}});var Elements=new Native({initialize:function(g,b){b=$extend({ddup:true,cash:true},b);g=g||[];if(b.ddup||b.cash){var h={},f=[];for(var c=0,a=g.length;c<a;c++){var d=document.id(g[c],!b.cash);if(b.ddup){if(h[d.uid]){continue;}h[d.uid]=true;}if(d){f.push(d);}}g=f;}return(b.cash)?$extend(g,this):g;}});Elements.implement({filter:function(a,b){if(!a){return this;}return new Elements(Array.filter(this,(typeof a=="string")?function(c){return c.match(a);}:a,b));}});(function(){var d;try{var a=document.createElement("<input name=x>");d=(a.name=="x");}catch(b){}var c=function(f){return(""+f).replace(/&/g,"&amp;").replace(/"/g,"&quot;");};Document.implement({newElement:function(f,g){if(g&&g.checked!=null){g.defaultChecked=g.checked;}if(d&&g){f="<"+f;if(g.name){f+=' name="'+c(g.name)+'"';}if(g.type){f+=' type="'+c(g.type)+'"';}f+=">";delete g.name;delete g.type;}return this.id(this.createElement(f)).set(g);},newTextNode:function(f){return this.createTextNode(f);},getDocument:function(){return this;},getWindow:function(){return this.window;},id:(function(){var f={string:function(i,h,g){i=g.getElementById(i);return(i)?f.element(i,h):null;},element:function(g,j){$uid(g);if(!j&&!g.$family&&!(/^object|embed$/i).test(g.tagName)){var h=Element.Prototype;for(var i in h){g[i]=h[i];}}return g;},object:function(h,i,g){if(h.toElement){return f.element(h.toElement(g),i);}return null;}};f.textnode=f.whitespace=f.window=f.document=$arguments(0);return function(h,j,i){if(h&&h.$family&&h.uid){return h;}var g=$type(h);return(f[g])?f[g](h,j,i||document):null;};})()});})();if(window.$==null){Window.implement({$:function(a,b){return document.id(a,b,this.document);}});}Window.implement({$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a);}var g=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d<b;d++){var f=c[d];switch($type(f)){case"element":g.push(f);break;case"string":g.extend(this.document.getElements(f,true));}}return new Elements(g);},getDocument:function(){return this.document;},getWindow:function(){return this;}});Native.implement([Element,Document],{getElement:function(a,b){return document.id(this.getElements(a,true)[0]||null,b);},getElements:function(a,d){a=a.split(",");var c=[];var b=(a.length>1);a.each(function(f){var g=this.getElementsByTagName(f.trim());(b)?c.extend(g):c=g;},this);return new Elements(c,{ddup:b,cash:!d});}});(function(){var i={},g={};var j={input:"checked",option:"selected",textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerHTML":"value"};var c=function(m){return(g[m]||(g[m]={}));};var h=function(o,m){if(!o){return;}var n=o.uid;if(m!==true){m=false;}if(Browser.Engine.trident){if(o.clearAttributes){var r=m&&o.cloneNode(false);o.clearAttributes();if(r){o.mergeAttributes(r);}}else{if(o.removeEvents){o.removeEvents();}}if((/object/i).test(o.tagName)){for(var q in o){if(typeof o[q]=="function"){o[q]=$empty;}}Element.dispose(o);}}if(!n){return;}i[n]=g[n]=null;};var d=function(){Hash.each(i,h);if(Browser.Engine.trident){$A(document.getElementsByTagName("object")).each(h);}if(window.CollectGarbage){CollectGarbage();}i=g=null;};var k=function(o,m,t,n,q,s){var p=o[t||m];var r=[];while(p){if(p.nodeType==1&&(!n||Element.match(p,n))){if(!q){return document.id(p,s);}r.push(p);}p=p[m];}return(q)?new Elements(r,{ddup:false,cash:!s}):null;};var f={html:"innerHTML","class":"className","for":"htmlFor",defaultValue:"defaultValue",text:(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?"innerText":"textContent"};var b=["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"];var l=["value","type","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"];b=b.associate(b);Hash.extend(f,b);Hash.extend(f,l.associate(l.map(String.toLowerCase)));var a={before:function(n,m){if(m.parentNode){m.parentNode.insertBefore(n,m);}},after:function(n,m){if(!m.parentNode){return;}var o=m.nextSibling;(o)?m.parentNode.insertBefore(n,o):m.parentNode.appendChild(n);},bottom:function(n,m){m.appendChild(n);},top:function(n,m){var o=m.firstChild;(o)?m.insertBefore(n,o):m.appendChild(n);}};a.inside=a.bottom;Hash.each(a,function(m,n){n=n.capitalize();Element.implement("inject"+n,function(o){m(this,document.id(o,true));return this;});Element.implement("grab"+n,function(o){m(document.id(o,true),this);return this;});});Element.implement({set:function(q,n){switch($type(q)){case"object":for(var o in q){this.set(o,q[o]);}break;case"string":var m=Element.Properties.get(q);(m&&m.set)?m.set.apply(this,Array.slice(arguments,1)):this.setProperty(q,n);}return this;},get:function(n){var m=Element.Properties.get(n);return(m&&m.get)?m.get.apply(this,Array.slice(arguments,1)):this.getProperty(n);},erase:function(n){var m=Element.Properties.get(n);(m&&m.erase)?m.erase.apply(this):this.removeProperty(n);return this;},setProperty:function(n,o){var m=f[n];if(o==undefined){return this.removeProperty(n);}if(m&&b[n]){o=!!o;}(m)?this[m]=o:this.setAttribute(n,""+o);return this;},setProperties:function(m){for(var n in m){this.setProperty(n,m[n]);}return this;},getProperty:function(n){var m=f[n];var o=(m)?this[m]:this.getAttribute(n,2);return(b[n])?!!o:(m)?o:o||null;},getProperties:function(){var m=$A(arguments);return m.map(this.getProperty,this).associate(m);},removeProperty:function(n){var m=f[n];(m)?this[m]=(m&&b[n])?false:"":this.removeAttribute(n);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;},hasClass:function(m){return this.className.contains(m," ");},addClass:function(m){if(!this.hasClass(m)){this.className=(this.className+" "+m).clean();}return this;},removeClass:function(m){this.className=this.className.replace(new RegExp("(^|\\s)"+m+"(?:\\s|$)"),"$1");return this;},toggleClass:function(m){return this.hasClass(m)?this.removeClass(m):this.addClass(m);},adopt:function(){Array.flatten(arguments).each(function(m){m=document.id(m,true);if(m){this.appendChild(m);}},this);return this;},appendText:function(n,m){return this.grab(this.getDocument().newTextNode(n),m);},grab:function(n,m){a[m||"bottom"](document.id(n,true),this);return this;},inject:function(n,m){a[m||"bottom"](this,document.id(n,true));return this;},replaces:function(m){m=document.id(m,true);m.parentNode.replaceChild(this,m);return this;},wraps:function(n,m){n=document.id(n,true);return this.replaces(n).grab(n,m);},getPrevious:function(m,n){return k(this,"previousSibling",null,m,false,n);},getAllPrevious:function(m,n){return k(this,"previousSibling",null,m,true,n);},getNext:function(m,n){return k(this,"nextSibling",null,m,false,n);},getAllNext:function(m,n){return k(this,"nextSibling",null,m,true,n);},getFirst:function(m,n){return k(this,"nextSibling","firstChild",m,false,n);},getLast:function(m,n){return k(this,"previousSibling","lastChild",m,false,n);},getParent:function(m,n){return k(this,"parentNode",null,m,false,n);},getParents:function(m,n){return k(this,"parentNode",null,m,true,n);},getSiblings:function(m,n){return this.getParent().getChildren(m,n).erase(this);},getChildren:function(m,n){return k(this,"nextSibling","firstChild",m,true,n);},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument;},getElementById:function(p,o){var n=this.ownerDocument.getElementById(p);if(!n){return null;}for(var m=n.parentNode;m!=this;m=m.parentNode){if(!m){return null;}}return document.id(n,o);},getSelected:function(){return new Elements($A(this.options).filter(function(m){return m.selected;}));},getComputedStyle:function(n){if(this.currentStyle){return this.currentStyle[n.camelCase()];}var m=this.getDocument().defaultView.getComputedStyle(this,null);return(m)?m.getPropertyValue([n.hyphenate()]):null;},toQueryString:function(){var m=[];this.getElements("input, select, textarea",true).each(function(n){if(!n.name||n.disabled||n.type=="submit"||n.type=="reset"||n.type=="file"){return;}var o=(n.tagName.toLowerCase()=="select")?Element.getSelected(n).map(function(p){return p.value;}):((n.type=="radio"||n.type=="checkbox")&&!n.checked)?null:n.value;$splat(o).each(function(p){if(typeof p!="undefined"){m.push(n.name+"="+encodeURIComponent(p));}});});return m.join("&");},clone:function(p,m){p=p!==false;var s=this.cloneNode(p);var o=function(w,v){if(!m){w.removeAttribute("id");}if(Browser.Engine.trident){w.clearAttributes();w.mergeAttributes(v);w.removeAttribute("uid");if(w.options){var x=w.options,t=v.options;for(var u=x.length;u--;){x[u].selected=t[u].selected;}}}var y=j[v.tagName.toLowerCase()];if(y&&v[y]){w[y]=v[y];}};if(p){var q=s.getElementsByTagName("*"),r=this.getElementsByTagName("*");for(var n=q.length;n--;){o(q[n],r[n]);}}o(s,this);return document.id(s);},destroy:function(){Element.empty(this);Element.dispose(this);h(this,true);return null;},empty:function(){$A(this.childNodes).each(function(m){Element.destroy(m);});return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},hasChild:function(m){m=document.id(m,true);if(!m){return false;}if(Browser.Engine.webkit&&Browser.Engine.version<420){return $A(this.getElementsByTagName(m.tagName)).contains(m);}return(this.contains)?(this!=m&&this.contains(m)):!!(this.compareDocumentPosition(m)&16);},match:function(m){return(!m||(m==this)||(Element.get(this,"tag")==m));}});Native.implement([Element,Window,Document],{addListener:function(p,o){if(p=="unload"){var m=o,n=this;o=function(){n.removeListener("unload",o);m();};}else{i[this.uid]=this;}if(this.addEventListener){this.addEventListener(p,o,false);}else{this.attachEvent("on"+p,o);}return this;},removeListener:function(n,m){if(this.removeEventListener){this.removeEventListener(n,m,false);}else{this.detachEvent("on"+n,m);}return this;},retrieve:function(n,m){var p=c(this.uid),o=p[n];if(m!=undefined&&o==undefined){o=p[n]=m;}return $pick(o);},store:function(n,m){var o=c(this.uid);o[n]=m;return this;},eliminate:function(m){var n=c(this.uid);delete n[m];return this;}});window.addListener("unload",d);})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a;},get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();}};Element.Properties.html=(function(){var c=document.createElement("div");var a={table:[1,"<table>","</table>"],select:[1,"<select>","</select>"],tbody:[2,"<table><tbody>","</tbody></table>"],tr:[3,"<table><tbody><tr>","</tr></tbody></table>"]};a.thead=a.tfoot=a.tbody;var b={set:function(){var f=Array.flatten(arguments).join("");var g=Browser.Engine.trident&&a[this.get("tag")];if(g){var h=c;h.innerHTML=g[1]+f+g[2];for(var d=g[0];d--;){h=h.firstChild;}this.empty().adopt(h.childNodes);}else{this.innerHTML=f;}}};b.erase=b.set;return b;})();if(Browser.Engine.webkit&&Browser.Engine.version<420){Element.Properties.text={get:function(){if(this.innerText){return this.innerText;}var a=this.ownerDocument.newElement("div",{html:this.innerHTML}).inject(this.ownerDocument.body);var b=a.innerText;a.destroy();return b;}};}(function(){Element.implement({scrollTo:function(i,j){if(b(this)){this.getWindow().scrollTo(i,j);}else{this.scrollLeft=i;this.scrollTop=j;}return this;},getSize:function(){if(b(this)){return this.getWindow().getSize();}return{x:this.offsetWidth,y:this.offsetHeight};},getScrollSize:function(){if(b(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(b(this)){return this.getWindow().getScroll();}return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var j=this,i={x:0,y:0};while(j&&!b(j)){i.x+=j.scrollLeft;i.y+=j.scrollTop;j=j.parentNode;}return i;},getOffsetParent:function(){var i=this;if(b(i)){return null;}if(!Browser.Engine.trident){return i.offsetParent;}while((i=i.parentNode)&&!b(i)){if(d(i,"position")!="static"){return i;}}return null;},getOffsets:function(){if(this.getBoundingClientRect){var k=this.getBoundingClientRect(),n=document.id(this.getDocument().documentElement),q=n.getScroll(),l=this.getScrolls(),j=this.getScroll(),i=(d(this,"position")=="fixed");return{x:k.left.toInt()+l.x-j.x+((i)?0:q.x)-n.clientLeft,y:k.top.toInt()+l.y-j.y+((i)?0:q.y)-n.clientTop};}var m=this,o={x:0,y:0};if(b(this)){return o;}while(m&&!b(m)){o.x+=m.offsetLeft;o.y+=m.offsetTop;if(Browser.Engine.gecko){if(!g(m)){o.x+=c(m);o.y+=h(m);}var p=m.parentNode;if(p&&d(p,"overflow")!="visible"){o.x+=c(p);o.y+=h(p);}}else{if(m!=this&&Browser.Engine.webkit){o.x+=c(m);o.y+=h(m);}}m=m.offsetParent;}if(Browser.Engine.gecko&&!g(this)){o.x-=c(this);o.y-=h(this);}return o;},getPosition:function(l){if(b(this)){return{x:0,y:0};}var m=this.getOffsets(),j=this.getScrolls();var i={x:m.x-j.x,y:m.y-j.y};var k=(l&&(l=document.id(l)))?l.getPosition():{x:0,y:0};return{x:i.x-k.x,y:i.y-k.y};},getCoordinates:function(k){if(b(this)){return this.getWindow().getCoordinates();}var i=this.getPosition(k),j=this.getSize();var l={left:i.x,top:i.y,width:j.x,height:j.y};l.right=l.left+l.width;l.bottom=l.top+l.height;return l;},computePosition:function(i){return{left:i.x-f(this,"margin-left"),top:i.y-f(this,"margin-top")};},setPosition:function(i){return this.setStyles(this.computePosition(i));}});Native.implement([Document,Window],{getSize:function(){if(Browser.Engine.presto||Browser.Engine.webkit){var j=this.getWindow();return{x:j.innerWidth,y:j.innerHeight};}var i=a(this);return{x:i.clientWidth,y:i.clientHeight};},getScroll:function(){var j=this.getWindow(),i=a(this);return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop};},getScrollSize:function(){var j=a(this),i=this.getSize();return{x:Math.max(j.scrollWidth,i.x),y:Math.max(j.scrollHeight,i.y)};},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var i=this.getSize();return{top:0,left:0,bottom:i.y,right:i.x,height:i.y,width:i.x};}});var d=Element.getComputedStyle;function f(i,j){return d(i,j).toInt()||0;}function g(i){return d(i,"-moz-box-sizing")=="border-box";}function h(i){return f(i,"border-top-width");}function c(i){return f(i,"border-left-width");}function b(i){return(/^(?:body|html)$/i).test(i.tagName);}function a(i){var j=i.getDocument();return(!j.compatMode||j.compatMode=="CSS1Compat")?j.html:j.body;}})();Element.alias("setPosition","position");Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y;},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;},getScrollLeft:function(){return this.getScroll().x;},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;},getTop:function(){return this.getPosition().y;},getLeft:function(){return this.getPosition().x;}});var Event=new Native({name:"Event",initialize:function(a,g){g=g||window;var l=g.document;a=a||g.event;if(a.$extended){return a;}this.$extended=true;var k=a.type;var h=a.target||a.srcElement;while(h&&h.nodeType==3){h=h.parentNode;}if(k.test(/key/)){var b=a.which||a.keyCode;var n=Event.Keys.keyOf(b);if(k=="keydown"){var d=b-111;if(d>0&&d<13){n="f"+d;}}n=n||String.fromCharCode(b).toLowerCase();}else{if(k.match(/(click|mouse|menu)/i)){l=(!l.compatMode||l.compatMode=="CSS1Compat")?l.html:l.body;var j={x:a.pageX||a.clientX+l.scrollLeft,y:a.pageY||a.clientY+l.scrollTop};var c={x:(a.pageX)?a.pageX-g.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-g.pageYOffset:a.clientY};if(k.match(/DOMMouseScroll|mousewheel/)){var i=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3;}var f=(a.which==3)||(a.button==2);var m=null;if(k.match(/over|out/)){switch(k){case"mouseover":m=a.relatedTarget||a.fromElement;break;case"mouseout":m=a.relatedTarget||a.toElement;}if(!(function(){while(m&&m.nodeType==3){m=m.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){m=false;}}}}return $extend(this,{event:a,type:k,page:j,client:c,rightClick:f,wheel:i,relatedTarget:m,target:h,code:b,key:n,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.metaKey});}});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({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;}});Element.Properties.events={set:function(a){this.addEvents(a);}};Native.implement([Element,Window,Document],{addEvent:function(f,h){var i=this.retrieve("events",{});i[f]=i[f]||{keys:[],values:[]};if(i[f].keys.contains(h)){return this;}i[f].keys.push(h);var g=f,a=Element.Events.get(f),c=h,j=this;if(a){if(a.onAdd){a.onAdd.call(this,h);}if(a.condition){c=function(k){if(a.condition.call(this,k)){return h.call(this,k);}return true;};}g=a.base||g;}var d=function(){return h.call(j);};var b=Element.NativeEvents[g];if(b){if(b==2){d=function(k){k=new Event(k,j.getWindow());if(c.call(j,k)===false){k.stop();}};}this.addListener(g,d);}i[f].values.push(d);return this;},removeEvent:function(c,b){var a=this.retrieve("events");if(!a||!a[c]){return this;}var g=a[c].keys.indexOf(b);if(g==-1){return this;}a[c].keys.splice(g,1);var f=a[c].values.splice(g,1)[0];var d=Element.Events.get(c);if(d){if(d.onRemove){d.onRemove.call(this,b);}c=d.base||c;}return(Element.NativeEvents[c])?this.removeListener(c,f):this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this;},removeEvents:function(a){var c;if($type(a)=="object"){for(c in a){this.removeEvent(c,a[c]);}return this;}var b=this.retrieve("events");if(!b){return this;}if(!a){for(c in b){this.removeEvents(c);}this.eliminate("events");}else{if(b[a]){while(b[a].keys[0]){this.removeEvent(a,b[a].keys[0]);}b[a]=null;}}return this;},fireEvent:function(d,b,a){var c=this.retrieve("events");if(!c||!c[d]){return this;}c[d].keys.each(function(f){f.create({bind:this,delay:a,"arguments":b})();},this);return this;},cloneEvents:function(d,a){d=document.id(d);var c=d.retrieve("events");if(!c){return this;}if(!a){for(var b in c){this.cloneEvents(d,b);}}else{if(c[a]){c[a].keys.each(function(f){this.addEvent(a,f);},this);}}return this;}});try{if(typeof HTMLElement!="undefined"){HTMLElement.prototype.fireEvent=Element.prototype.fireEvent;}}catch(e){}Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var a=function(b){var c=b.relatedTarget;if(c==undefined){return true;}if(c===false){return false;}return($type(this)!="document"&&c!=this&&c.prefix!="xul"&&!this.hasChild(c));};Element.Events=new Hash({mouseenter:{base:"mouseover",condition:a},mouseleave:{base:"mouseout",condition:a},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}});})();Element.Properties.styles={set:function(a){this.setStyles(a);}};Element.Properties.opacity={set:function(a,b){if(!b){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(Browser.Engine.trident){this.style.filter=(a==1)?"":"alpha(opacity="+a*100+")";}this.style.opacity=a;this.store("opacity",a);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(a){return this.set("opacity",a,true);},getOpacity:function(){return this.get("opacity");},setStyle:function(b,a){switch(b){case"opacity":return this.set("opacity",parseFloat(a));case"float":b=(Browser.Engine.trident)?"styleFloat":"cssFloat";}b=b.camelCase();if($type(a)!="string"){var c=(Element.Styles.get(b)||"@").split(" ");a=$splat(a).map(function(f,d){if(!c[d]){return"";}return($type(f)=="number")?c[d].replace("@",Math.round(f)):f;}).join(" ");}else{if(a==String(Number(a))){a=Math.round(a);}}this.style[b]=a;return this;},getStyle:function(h){switch(h){case"opacity":return this.get("opacity");case"float":h=(Browser.Engine.trident)?"styleFloat":"cssFloat";}h=h.camelCase();var a=this.style[h];if(!$chk(a)){a=[];for(var g in Element.ShortStyles){if(h!=g){continue;}for(var f in Element.ShortStyles[g]){a.push(this.getStyle(f));}return a.join(" ");}a=this.getComputedStyle(h);}if(a){a=String(a);var c=a.match(/rgba?\([\d\s,]+\)/);if(c){a=a.replace(c[0],c[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(a,10)))){if(h.test(/^(height|width)$/)){var b=(h=="width")?["left","right"]:["top","bottom"],d=0;b.each(function(i){d+=this.getStyle("border-"+i+"-width").toInt()+this.getStyle("padding-"+i).toInt();},this);return this["offset"+h.capitalize()]-d+"px";}if((Browser.Engine.presto)&&String(a).test("px")){return a;}if(h.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return a;},setStyles:function(b){for(var a in b){this.setStyle(a,b[a]);}return this;},getStyles:function(){var a={};Array.flatten(arguments).each(function(b){a[b]=this.getStyle(b);},this);return a;}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(h){var g=Element.ShortStyles;var b=Element.Styles;["margin","padding"].each(function(i){var j=i+h;g[i][j]=b[j]="@px";});var f="border"+h;g.border[f]=b[f]="@px @ rgb(@, @, @)";var d=f+"Width",a=f+"Style",c=f+"Color";g[f]={};g.borderWidth[d]=g[f][d]=b[d]="@px";g.borderStyle[a]=g[f][a]=b[a]="@";g.borderColor[c]=g[f][c]=b[c]="rgb(@, @, @)";});var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore"},initialize:function(a){this.subject=this.subject||this;this.setOptions(a);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var b=this.options.wait;if(b===false){this.options.link="cancel";}},getTransition:function(){return function(a){return -(Math.cos(Math.PI*a)-1)/2;};},step:function(){var a=$time();if(a<this.time+this.options.duration){var b=this.transition((a-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,b));}else{this.set(this.compute(this.from,this.to,1));this.complete();}},set:function(a){return a;},compute:function(c,b,a){return Fx.compute(c,b,a);},check:function(){if(!this.timer){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false;}return false;},start:function(b,a){if(!this.check(b,a)){return this;}this.from=b;this.to=a;this.time=0;this.transition=this.getTransition();this.startTimer();this.onStart();return this;},complete:function(){if(this.stopTimer()){this.onComplete();}return this;},cancel:function(){if(this.stopTimer()){this.onCancel();}return this;},onStart:function(){this.fireEvent("start",this.subject);},onComplete:function(){this.fireEvent("complete",this.subject);if(!this.callChain()){this.fireEvent("chainComplete",this.subject);}},onCancel:function(){this.fireEvent("cancel",this.subject).clearChain();},pause:function(){this.stopTimer();return this;},resume:function(){this.startTimer();return this;},stopTimer:function(){if(!this.timer){return false;}this.time=$time()-this.time;this.timer=$clear(this.timer);return true;},startTimer:function(){if(this.timer){return false;}this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true;}});Fx.compute=function(c,b,a){return(b-c)*a+c;};Fx.Durations={"short":250,normal:500,"long":1000};Fx.CSS=new Class({Extends:Fx,prepare:function(d,f,b){b=$splat(b);var c=b[1];if(!$chk(c)){b[1]=b[0];b[0]=d.getStyle(f);}var a=b.map(this.parse);return{from:a[0],to:a[1]};},parse:function(a){a=$lambda(a)();a=(typeof a=="string")?a.split(" "):$splat(a);return a.map(function(c){c=String(c);var b=false;Fx.CSS.Parsers.each(function(g,f){if(b){return;}var d=g.parse(c);if($chk(d)){b={value:d,parser:g};}});b=b||{value:c,parser:Fx.CSS.Parsers.String};return b;});},compute:function(d,c,b){var a=[];(Math.min(d.length,c.length)).times(function(f){a.push({value:d[f].parser.compute(d[f].value,c[f].value,b),parser:d[f].parser});});a.$family={name:"fx:css:value"};return a;},serve:function(c,b){if($type(c)!="fx:css:value"){c=this.parse(c);}var a=[];c.each(function(d){a=a.concat(d.parser.serve(d.value,b));});return a;},render:function(a,d,c,b){a.setStyle(d,this.serve(c,b));},search:function(a){if(Fx.CSS.Cache[a]){return Fx.CSS.Cache[a];}var b={};Array.each(document.styleSheets,function(f,d){var c=f.href;if(c&&c.contains("://")&&!c.contains(document.domain)){return;}var g=f.rules||f.cssRules;Array.each(g,function(k,h){if(!k.style){return;}var j=(k.selectorText)?k.selectorText.replace(/^\w+/,function(i){return i.toLowerCase();}):null;if(!j||!j.test("^"+a+"$")){return;}Element.Styles.each(function(l,i){if(!k.style[i]||Element.ShortStyles[i]){return;}l=String(k.style[i]);b[i]=(l.test(/^rgb/))?l.rgbToHex():l;});});});return Fx.CSS.Cache[a]=b;}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(a){if(a.match(/^#[0-9a-f]{3,6}$/i)){return a.hexToRgb(true);}return((a=a.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[a[1],a[2],a[3]]:false;},compute:function(c,b,a){return c.map(function(f,d){return Math.round(Fx.compute(c[d],b[d],a));});},serve:function(a){return a.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(b,a){return(a)?b+a:b;}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a);},set:function(a){if(typeof a=="string"){a=this.search(a);}for(var b in a){this.render(this.element,b,a[b],this.options.unit);}return this;},compute:function(f,d,c){var a={};for(var b in f){a[b]=this.parent(f[b],d[b],c);}return a;},start:function(b){if(!this.check(b)){return this;}if(typeof b=="string"){b=this.search(b);}var f={},d={};for(var c in b){var a=this.prepare(this.element,c,b[c]);f[c]=a.from;d[c]=a.to;}return this.parent(f,d);}});Element.Properties.morph={set:function(a){var b=this.retrieve("morph");if(b){b.cancel();}return this.eliminate("morph").store("morph:options",$extend({link:"cancel"},a));},get:function(a){if(a||!this.retrieve("morph")){if(a||!this.retrieve("morph:options")){this.set("morph",a);}this.store("morph",new Fx.Morph(this,this.retrieve("morph:options")));}return this.retrieve("morph");}};Element.implement({morph:function(a){this.get("morph").start(a);return this;}});Fx.implement({getTransition:function(){var a=this.options.transition||Fx.Transitions.Sine.easeInOut;if(typeof a=="string"){var b=a.split(":");a=Fx.Transitions;a=a[b[0]]||a[b[0].capitalize()];if(b[1]){a=a["ease"+b[1].capitalize()+(b[2]?b[2].capitalize():"")];}}return a;}});Fx.Transition=function(b,a){a=$splat(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 Hash({linear:$arguments(0)});Fx.Transitions.extend=function(a){for(var b in a){Fx.Transitions[b]=new Fx.Transition(a[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(g){var f;for(var d=0,c=1;1;d+=c,c/=2){if(g>=(7-4*d)/11){f=c*c-Math.pow((11-6*d-11*g)/4,2);break;}}return f;},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.Tween=new Class({Extends:Fx.CSS,initialize:function(b,a){this.element=this.subject=document.id(b);this.parent(a);},set:function(b,a){if(arguments.length==1){a=b;b=this.property||this.options.property;}this.render(this.element,b,a,this.options.unit);return this;},start:function(c,f,d){if(!this.check(c,f,d)){return this;}var b=Array.flatten(arguments);this.property=this.options.property||b.shift();var a=this.prepare(this.element,this.property,b);return this.parent(a.from,a.to);}});Element.Properties.tween={set:function(a){var b=this.retrieve("tween");if(b){b.cancel();}return this.eliminate("tween").store("tween:options",$extend({link:"cancel"},a));},get:function(a){if(a||!this.retrieve("tween")){if(a||!this.retrieve("tween:options")){this.set("tween",a);}this.store("tween",new Fx.Tween(this,this.retrieve("tween:options")));}return this.retrieve("tween");}};Element.implement({tween:function(a,c,b){this.get("tween").start(arguments);return this;},fade:function(c){var f=this.get("tween"),d="opacity",a;c=$pick(c,"toggle");switch(c){case"in":f.start(d,1);break;case"out":f.start(d,0);break;case"show":f.set(d,1);break;case"hide":f.set(d,0);break;case"toggle":var b=this.retrieve("fade:flag",this.get("opacity")==1);f.start(d,(b)?0:1);this.store("fade:flag",!b);a=true;break;default:f.start(d,arguments);}if(!a){this.eliminate("fade:flag");}return this;},highlight:function(c,a){if(!a){a=this.retrieve("highlight:original",this.getStyle("background-color"));a=(a=="transparent")?"#fff":a;}var b=this.get("tween");b.start("background-color",c||"#ffff88",a).chain(function(){this.setStyle("background-color",this.retrieve("highlight:original"));b.callChain();}.bind(this));return this;}});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false,noCache:false},initialize:function(a){this.xhr=new Browser.Request();this.setOptions(a);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers);},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return;}this.running=false;this.status=0;$try(function(){this.status=this.xhr.status;}.bind(this));this.xhr.onreadystatechange=$empty;if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml);}else{this.response={text:null,xml:null};this.failure();}},isSuccess:function(){return((this.status>=200)&&(this.status<300));},processScripts:function(a){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(a);}return a.stripScripts(this.options.evalScripts);},success:function(b,a){this.onSuccess(this.processScripts(b),a);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain();},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},setHeader:function(a,b){this.headers.set(a,b);return this;},getHeader:function(a){return $try(function(){return this.xhr.getResponseHeader(a);}.bind(this));},check:function(){if(!this.running){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false;}return false;},send:function(l){if(!this.check(l)){return this;}this.running=true;var j=$type(l);if(j=="string"||j=="element"){l={data:l};}var d=this.options;l=$extend({data:d.data,url:d.url,method:d.method},l);var h=l.data,b=String(l.url),a=l.method.toLowerCase();switch($type(h)){case"element":h=document.id(h).toQueryString();break;case"object":case"hash":h=Hash.toQueryString(h);}if(this.options.format){var k="format="+this.options.format;h=(h)?k+"&"+h:k;}if(this.options.emulation&&!["get","post"].contains(a)){var i="_method="+a;h=(h)?i+"&"+h:i;a="post";}if(this.options.urlEncoded&&a=="post"){var c=(this.options.encoding)?"; charset="+this.options.encoding:"";this.headers.set("Content-type","application/x-www-form-urlencoded"+c);}if(this.options.noCache){var g="noCache="+new Date().getTime();h=(h)?g+"&"+h:g;}var f=b.lastIndexOf("/");if(f>-1&&(f=b.indexOf("#"))>-1){b=b.substr(0,f);}if(h&&a=="get"){b=b+(b.contains("?")?"&":"?")+h;h=null;}this.xhr.open(a.toUpperCase(),b,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(n,m){try{this.xhr.setRequestHeader(m,n);}catch(o){this.fireEvent("exception",[m,n]);}},this);this.fireEvent("request");this.xhr.send(h);if(!this.options.async){this.onStateChange();}return this;},cancel:function(){if(!this.running){return this;}this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});(function(){var a={};["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(b){a[b]=function(){var c=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(c,{method:b}));};});Request.implement(a);})();Element.Properties.send={set:function(a){var b=this.retrieve("send");if(b){b.cancel();}return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},a));},get:function(a){if(a||!this.retrieve("send")){if(a||!this.retrieve("send:options")){this.set("send",a);}this.store("send",new Request(this.retrieve("send:options")));}return this.retrieve("send");}};Element.implement({send:function(a){var b=this.get("send");b.send({data:this,url:a||b.options.url});return this;}});Request.HTML=new Class({Extends:Request,options:{update:false,append:false,evalScripts:true,filter:false},processHTML:function(c){var b=c.match(/<body[^>]*>([\s\S]*?)<\/body>/i);c=(b)?b[1]:c;var a=new Element("div");return $try(function(){var d="<root>"+c+"</root>",h;if(Browser.Engine.trident){h=new ActiveXObject("Microsoft.XMLDOM");h.async=false;h.loadXML(d);}else{h=new DOMParser().parseFromString(d,"text/xml");}d=h.getElementsByTagName("root")[0];if(!d){return null;}for(var g=0,f=d.childNodes.length;g<f;g++){var j=Element.clone(d.childNodes[g],true,true);if(j){a.grab(j);}}return a;})||a.set("html",c);},success:function(d){var c=this.options,b=this.response;b.html=d.stripScripts(function(f){b.javascript=f;});var a=this.processHTML(b.html);b.tree=a.childNodes;b.elements=a.getElements("*");if(c.filter){b.tree=b.elements.filter(c.filter);}if(c.update){document.id(c.update).empty().set("html",b.html);}else{if(c.append){document.id(c.append).adopt(a.getChildren());}}if(c.evalScripts){$exec(b.javascript);}this.onSuccess(b.tree,b.elements,b.html,b.javascript);}});Element.Properties.load={set:function(a){var b=this.retrieve("load");if(b){b.cancel();}return this.eliminate("load").store("load:options",$extend({data:this,link:"cancel",update:this,method:"get"},a));},get:function(a){if(a||!this.retrieve("load")){if(a||!this.retrieve("load:options")){this.set("load",a);}this.store("load",new Request.HTML(this.retrieve("load:options")));}return this.retrieve("load");}};Element.implement({load:function(){this.get("load").send(Array.link(arguments,{data:Object.type,url:String.type}));return this;}});var JSON=new Hash(this.JSON&&{stringify:JSON.stringify,parse:JSON.parse}).extend({$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(a){return JSON.$specialChars[a]||"\\u00"+Math.floor(a.charCodeAt()/16).toString(16)+(a.charCodeAt()%16).toString(16);},encode:function(b){switch($type(b)){case"string":return'"'+b.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(b.map(JSON.encode).clean())+"]";case"object":case"hash":var a=[];Hash.each(b,function(f,d){var c=JSON.encode(f);if(c){a.push(JSON.encode(d)+":"+c);}});return"{"+a+"}";case"number":case"boolean":return String(b);case false:return"null";}return null;},decode:function(string,secure){if($type(string)!="string"||!string.length){return null;}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null;}return eval("("+string+")");}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(a){this.parent(a);this.headers.extend({Accept:"application/json","X-Request":"JSON"});},success:function(a){this.response.json=JSON.decode(a,this.options.secure);this.onSuccess(this.response.json,a);}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(b,a){this.key=b;this.setOptions(a);},write:function(b){b=encodeURIComponent(b);if(this.options.domain){b+="; domain="+this.options.domain;}if(this.options.path){b+="; path="+this.options.path;}if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+="; expires="+a.toGMTString();}if(this.options.secure){b+="; secure";}this.options.document.cookie=this.key+"="+b;return this;},read:function(){var a=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)");return(a)?decodeURIComponent(a[1]):null;},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this;}});Cookie.write=function(b,c,a){return new Cookie(b,a).write(c);};Cookie.read=function(a){return new Cookie(a).read();};Cookie.dispose=function(b,a){return new Cookie(b,a).dispose();};Element.Events.domready={onAdd:function(a){if(Browser.loaded){a.call(this);}}};(function(){var b=function(){if(Browser.loaded){return;}Browser.loaded=true;window.fireEvent("domready");document.fireEvent("domready");};window.addEvent("load",b);if(Browser.Engine.trident){var a=document.createElement("div");(function(){($try(function(){a.doScroll();return document.id(a).inject(document.body).set("html","temp").dispose();}))?b():arguments.callee.delay(50);})();}else{if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(["loaded","complete"].contains(document.readyState))?b():arguments.callee.delay(50);})();}else{document.addEvent("DOMContentLoaded",b);}}})();Native.implement([Document,Element],{getElements:function(j,h){j=j.split(",");var c,f={};for(var d=0,b=j.length;d<b;d++){var a=j[d],g=Selectors.Utils.search(this,a,f);if(d!=0&&g.item){g=$A(g);}c=(d==0)?g:(c.item)?$A(c).concat(g):c.concat(g);}return new Elements(c,{ddup:(j.length>1),cash:!h});}});Element.implement({match:function(b){if(!b||(b==this)){return true;}var d=Selectors.Utils.parseTagAndID(b);var a=d[0],f=d[1];if(!Selectors.Filters.byID(this,f)||!Selectors.Filters.byTag(this,a)){return false;}var c=Selectors.Utils.parseSelector(b);return(c)?Selectors.Utils.filter(this,c,{}):true;}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(b,c){if(!c){return true;}var a=$uid(b);if(!c[a]){return c[a]=true;}return false;},parseNthArgument:function(i){if(Selectors.Cache.nth[i]){return Selectors.Cache.nth[i];}var f=i.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!f){return false;}var h=parseInt(f[1],10);var d=(h||h===0)?h:1;var g=f[2]||false;var c=parseInt(f[3],10)||0;if(d!=0){c--;while(c<1){c+=d;}while(c>=d){c-=d;}}else{d=c;g="index";}switch(g){case"n":f={a:d,b:c,special:"n"};break;case"odd":f={a:2,b:0,special:"n"};break;case"even":f={a:2,b:1,special:"n"};break;case"first":f={a:0,special:"index"};break;case"last":f={special:"last-child"};break;case"only":f={special:"only-child"};break;default:f={a:(d-1),special:"index"};}return Selectors.Cache.nth[i]=f;},parseSelector:function(f){if(Selectors.Cache.parsed[f]){return Selectors.Cache.parsed[f];}var d,i={classes:[],pseudos:[],attributes:[]};while((d=Selectors.RegExps.combined.exec(f))){var j=d[1],h=d[2],g=d[3],b=d[5],c=d[6],k=d[7];if(j){i.classes.push(j);}else{if(c){var a=Selectors.Pseudo.get(c);if(a){i.pseudos.push({parser:a,argument:k});}else{i.attributes.push({name:c,operator:"=",value:k});}}else{if(h){i.attributes.push({name:h,operator:g,value:b});}}}}if(!i.classes.length){delete i.classes;}if(!i.attributes.length){delete i.attributes;}if(!i.pseudos.length){delete i.pseudos;}if(!i.classes&&!i.attributes&&!i.pseudos){i=null;}return Selectors.Cache.parsed[f]=i;},parseTagAndID:function(b){var a=b.match(Selectors.RegExps.tag);var c=b.match(Selectors.RegExps.id);return[(a)?a[1]:"*",(c)?c[1]:false];},filter:function(g,c,f){var d;if(c.classes){for(d=c.classes.length;d--;d){var h=c.classes[d];if(!Selectors.Filters.byClass(g,h)){return false;}}}if(c.attributes){for(d=c.attributes.length;d--;d){var b=c.attributes[d];if(!Selectors.Filters.byAttribute(g,b.name,b.operator,b.value)){return false;}}}if(c.pseudos){for(d=c.pseudos.length;d--;d){var a=c.pseudos[d];if(!Selectors.Filters.byPseudo(g,a.parser,a.argument,f)){return false;}}}return true;},getByTagAndID:function(b,a,d){if(d){var c=(b.getElementById)?b.getElementById(d,true):Element.getElementById(b,d,true);return(c&&Selectors.Filters.byTag(c,a))?[c]:[];}else{return b.getElementsByTagName(a);}},search:function(p,o,u){var b=[];var c=o.trim().replace(Selectors.RegExps.splitter,function(k,j,i){b.push(j);return":)"+i;}).split(":)");var q,f,B;for(var A=0,w=c.length;A<w;A++){var z=c[A];if(A==0&&Selectors.RegExps.quick.test(z)){q=p.getElementsByTagName(z);continue;}var a=b[A-1];var r=Selectors.Utils.parseTagAndID(z);var C=r[0],s=r[1];if(A==0){q=Selectors.Utils.getByTagAndID(p,C,s);}else{var d={},h=[];for(var y=0,x=q.length;y<x;y++){h=Selectors.Getters[a](h,q[y],C,s,d);}q=h;}var g=Selectors.Utils.parseSelector(z);if(g){f=[];for(var v=0,t=q.length;v<t;v++){B=q[v];if(Selectors.Utils.filter(B,g,u)){f.push(B);}}q=f;}}return q;}};Selectors.Getters={" ":function(j,h,k,a,f){var d=Selectors.Utils.getByTagAndID(h,k,a);for(var c=0,b=d.length;c<b;c++){var g=d[c];if(Selectors.Utils.chk(g,f)){j.push(g);}}return j;},">":function(j,h,k,a,g){var c=Selectors.Utils.getByTagAndID(h,k,a);for(var f=0,d=c.length;f<d;f++){var b=c[f];if(b.parentNode==h&&Selectors.Utils.chk(b,g)){j.push(b);}}return j;},"+":function(c,b,a,f,d){while((b=b.nextSibling)){if(b.nodeType==1){if(Selectors.Utils.chk(b,d)&&Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,f)){c.push(b);}break;}}return c;},"~":function(c,b,a,f,d){while((b=b.nextSibling)){if(b.nodeType==1){if(!Selectors.Utils.chk(b,d)){break;}if(Selectors.Filters.byTag(b,a)&&Selectors.Filters.byID(b,f)){c.push(b);}}}return c;}};Selectors.Filters={byTag:function(b,a){return(a=="*"||(b.tagName&&b.tagName.toLowerCase()==a));},byID:function(a,b){return(!b||(a.id&&a.id==b));},byClass:function(b,a){return(b.className&&b.className.contains&&b.className.contains(a," "));},byPseudo:function(a,d,c,b){return d.call(a,c,b);},byAttribute:function(c,d,b,f){var a=Element.prototype.getProperty.call(c,d);if(!a){return(b=="!=");}if(!b||f==undefined){return true;}switch(b){case"=":return(a==f);case"*=":return(a.contains(f));case"^=":return(a.substr(0,f.length)==f);case"$=":return(a.substr(a.length-f.length)==f);case"!=":return(a!=f);case"~=":return a.contains(f," ");case"|=":return a.contains(f,"-");}return false;}};Selectors.Pseudo=new Hash({checked:function(){return this.checked;},empty:function(){return !(this.innerText||this.textContent||"").length;},not:function(a){return !Element.match(this,a);},contains:function(a){return(this.innerText||this.textContent||"").contains(a);},"first-child":function(){return Selectors.Pseudo.index.call(this,0);},"last-child":function(){var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false;}}return true;},"only-child":function(){var b=this;while((b=b.previousSibling)){if(b.nodeType==1){return false;}}var a=this;while((a=a.nextSibling)){if(a.nodeType==1){return false;}}return true;},"nth-child":function(h,f){h=(h==undefined)?"n":h;var c=Selectors.Utils.parseNthArgument(h);if(c.special!="n"){return Selectors.Pseudo[c.special].call(this,c.a,f);}var g=0;f.positions=f.positions||{};var d=$uid(this);if(!f.positions[d]){var b=this;while((b=b.previousSibling)){if(b.nodeType!=1){continue;}g++;var a=f.positions[$uid(b)];if(a!=undefined){g=a+g;break;}}f.positions[d]=g;}return(f.positions[d]%c.a==c.b);},index:function(a){var b=this,c=0;while((b=b.previousSibling)){if(b.nodeType==1&&++c>a){return false;}}return(c==a);},even:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n+1",a);},odd:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n",a);},selected:function(){return this.selected;},enabled:function(){return(this.disabled===false);}});var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object;},initialize:function(m,n){this.instance="Swiff_"+$time();this.setOptions(n);n=this.options;var b=this.id=n.id||this.instance;var a=document.id(n.container);Swiff.CallBacks[this.instance]={};var f=n.params,h=n.vars,g=n.callBacks;var i=$extend({height:n.height,width:n.width},n.properties);var l=this;for(var d in g){Swiff.CallBacks[this.instance][d]=(function(o){return function(){return o.apply(l.object,arguments);};})(g[d]);h[d]="Swiff.CallBacks."+this.instance+"."+d;}f.flashVars=Hash.toQueryString(h);if(Browser.Engine.trident){i.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";f.movie=m;}else{i.type="application/x-shockwave-flash";i.data=m;}var k='<object id="'+b+'"';for(var j in i){k+=" "+j+'="'+i[j]+'"';}k+=">";for(var c in f){if(f[c]){k+='<param name="'+c+'" value="'+f[c]+'" />';}}k+="</object>";this.object=((a)?a.empty():new Element("div")).set("html",k).firstChild;},replaces:function(a){a=document.id(a,true);a.parentNode.replaceChild(this.toElement(),a);return this;},inject:function(a){document.id(a,true).appendChild(this.toElement());return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments));}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");return eval(rs);};
//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.
MooTools.More={version:"1.2.5.1",build:"254884f2b83651bf95260eed5c6cceb838e22d8e"};(function(){var a={language:"en-US",languages:{"en-US":{}},cascades:["en-US"]};
var b;MooTools.lang=new Events();$extend(MooTools.lang,{setLanguage:function(c){if(!a.languages[c]){return this;}a.language=c;this.load();this.fireEvent("langChange",c);
return this;},load:function(){var c=this.cascade(this.getCurrentLanguage());b={};$each(c,function(f,d){b[d]=this.lambda(f);},this);},getCurrentLanguage:function(){return a.language;
},addLanguage:function(c){a.languages[c]=a.languages[c]||{};return this;},cascade:function(f){var c=(a.languages[f]||{}).cascades||[];c.combine(a.cascades);
c.erase(f).push(f);var d=c.map(function(g){return a.languages[g];},this);return $merge.apply(this,d);},lambda:function(c){(c||{}).get=function(f,d){return $lambda(c[f]).apply(this,$splat(d));
};return c;},get:function(f,d,c){if(b&&b[f]){return(d?b[f].get(d,c):b[f]);}},set:function(d,f,c){this.addLanguage(d);langData=a.languages[d];if(!langData[f]){langData[f]={};
}$extend(langData[f],c);if(d==this.getCurrentLanguage()){this.load();this.fireEvent("langChange",d);}return this;},list:function(){return Hash.getKeys(a.languages);
}});})();Class.refactor=function(b,a){$each(a,function(f,d){var c=b.prototype[d];if(c&&(c=c._origin?c._origin:c)&&typeof f=="function"){b.implement(d,function(){var g=this.previous;
this.previous=c;var h=f.apply(this,arguments);this.previous=g;return h;});}else{b.implement(d,f);}});return b;};Class.Mutators.Binds=function(a){return a;
};Class.Mutators.initialize=function(a){return function(){$splat(this.Binds).each(function(b){var c=this[b];if(c){this[b]=c.bind(this);}},this);return a.apply(this,arguments);
};};Class.Occlude=new Class({occlude:function(c,b){b=document.id(b||this.element);var a=b.retrieve(c||this.property);if(a&&!$defined(this.occluded)){return this.occluded=a;
}this.occluded=false;b.store(c||this.property,this);return this.occluded;}});(function(){var a={wait:function(b){return this.chain(function(){this.callChain.delay($pick(b,500),this);
}.bind(this));}};Chain.implement(a);if(window.Fx){Fx.implement(a);["Css","Tween","Elements"].each(function(b){if(Fx[b]){Fx[b].implement(a);}});}Element.implement({chains:function(b){$splat($pick(b,["tween","morph","reveal"])).each(function(c){c=this.get(c);
if(!c){return;}c.setOptions({link:"chain"});},this);return this;},pauseFx:function(c,b){this.chains(b).get($pick(b,"tween")).wait(c);return this;}});})();
Array.implement({min:function(){return Math.min.apply(null,this);},max:function(){return Math.max.apply(null,this);},average:function(){return this.length?this.sum()/this.length:0;
},sum:function(){var a=0,b=this.length;if(b){do{a+=this[--b];}while(b);}return a;},unique:function(){return[].combine(this);},shuffle:function(){for(var b=this.length;
b&&--b;){var a=this[b],c=Math.floor(Math.random()*(b+1));this[b]=this[c];this[c]=a;}return this;}});(function(){var j=this.Date;if(!j.now){j.now=$time;
}j.Methods={ms:"Milliseconds",year:"FullYear",min:"Minutes",mo:"Month",sec:"Seconds",hr:"Hours"};["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds","Time","TimezoneOffset","Week","Timezone","GMTOffset","DayOfYear","LastMonth","LastDayOfMonth","UTCDate","UTCDay","UTCFullYear","AMPM","Ordinal","UTCHours","UTCMilliseconds","UTCMinutes","UTCMonth","UTCSeconds","UTCMilliseconds"].each(function(q){j.Methods[q.toLowerCase()]=q;
});var d=function(r,q){return new Array(q-String(r).length+1).join("0")+r;};j.implement({set:function(t,r){switch($type(t)){case"object":for(var s in t){this.set(s,t[s]);
}break;case"string":t=t.toLowerCase();var q=j.Methods;if(q[t]){this["set"+q[t]](r);}}return this;},get:function(r){r=r.toLowerCase();var q=j.Methods;if(q[r]){return this["get"+q[r]]();
}return null;},clone:function(){return new j(this.get("time"));},increment:function(q,s){q=q||"day";s=$pick(s,1);switch(q){case"year":return this.increment("month",s*12);
case"month":var r=this.get("date");this.set("date",1).set("mo",this.get("mo")+s);return this.set("date",r.min(this.get("lastdayofmonth")));case"week":return this.increment("day",s*7);
case"day":return this.set("date",this.get("date")+s);}if(!j.units[q]){throw new Error(q+" is not a supported interval");}return this.set("time",this.get("time")+s*j.units[q]());
},decrement:function(q,r){return this.increment(q,-1*$pick(r,1));},isLeapYear:function(){return j.isLeapYear(this.get("year"));},clearTime:function(){return this.set({hr:0,min:0,sec:0,ms:0});
},diff:function(r,q){if($type(r)=="string"){r=j.parse(r);}return((r-this)/j.units[q||"day"](3,3)).round();},getLastDayOfMonth:function(){return j.daysInMonth(this.get("mo"),this.get("year"));
},getDayOfYear:function(){return(j.UTC(this.get("year"),this.get("mo"),this.get("date")+1)-j.UTC(this.get("year"),0,1))/j.units.day();},getWeek:function(){return(this.get("dayofyear")/7).ceil();
},getOrdinal:function(q){return j.getMsg("ordinal",q||this.get("date"));},getTimezone:function(){return this.toString().replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");
},getGMTOffset:function(){var q=this.get("timezoneOffset");return((q>0)?"-":"+")+d((q.abs()/60).floor(),2)+d(q%60,2);},setAMPM:function(q){q=q.toUpperCase();
var r=this.get("hr");if(r>11&&q=="AM"){return this.decrement("hour",12);}else{if(r<12&&q=="PM"){return this.increment("hour",12);}}return this;},getAMPM:function(){return(this.get("hr")<12)?"AM":"PM";
},parse:function(q){this.set("time",j.parse(q));return this;},isValid:function(q){return !isNaN((q||this).valueOf());},format:function(q){if(!this.isValid()){return"invalid date";
}q=q||"%x %X";q=l[q.toLowerCase()]||q;var r=this;return q.replace(/%([a-z%])/gi,function(t,s){switch(s){case"a":return j.getMsg("days")[r.get("day")].substr(0,3);
case"A":return j.getMsg("days")[r.get("day")];case"b":return j.getMsg("months")[r.get("month")].substr(0,3);case"B":return j.getMsg("months")[r.get("month")];
case"c":return r.toString();case"d":return d(r.get("date"),2);case"D":return r.get("date");case"e":return r.get("date");case"H":return d(r.get("hr"),2);
case"I":return((r.get("hr")%12)||12);case"j":return d(r.get("dayofyear"),3);case"m":return d((r.get("mo")+1),2);case"M":return d(r.get("min"),2);case"o":return r.get("ordinal");
case"p":return j.getMsg(r.get("ampm"));case"s":return Math.round(r/1000);case"S":return d(r.get("seconds"),2);case"U":return d(r.get("week"),2);case"w":return r.get("day");
case"x":return r.format(j.getMsg("shortDate"));case"X":return r.format(j.getMsg("shortTime"));case"y":return r.get("year").toString().substr(2);case"Y":return r.get("year");
case"T":return r.get("GMTOffset");case"Z":return r.get("Timezone");case"z":return d(r.get("ms"),3);}return s;});},toISOString:function(){return this.format("iso8601");
}});j.alias("toISOString","toJSON");j.alias("diff","compare");j.alias("format","strftime");var l={db:"%Y-%m-%d %H:%M:%S",compact:"%Y%m%dT%H%M%S",iso8601:"%Y-%m-%dT%H:%M:%S%T",rfc822:"%a, %d %b %Y %H:%M:%S %Z","short":"%d %b %H:%M","long":"%B %d, %Y %H:%M"};
var h=[];var f=j.parse;var o=function(t,v,s){var r=-1;var u=j.getMsg(t+"s");switch($type(v)){case"object":r=u[v.get(t)];break;case"number":r=u[v];if(!r){throw new Error("Invalid "+t+" index: "+v);
}break;case"string":var q=u.filter(function(w){return this.test(w);},new RegExp("^"+v,"i"));if(!q.length){throw new Error("Invalid "+t+" string");}if(q.length>1){throw new Error("Ambiguous "+t);
}r=q[0];}return(s)?u.indexOf(r):r;};j.extend({getMsg:function(r,q){return MooTools.lang.get("Date",r,q);},units:{ms:$lambda(1),second:$lambda(1000),minute:$lambda(60000),hour:$lambda(3600000),day:$lambda(86400000),week:$lambda(608400000),month:function(r,q){var s=new j;
return j.daysInMonth($pick(r,s.get("mo")),$pick(q,s.get("year")))*86400000;},year:function(q){q=q||new j().get("year");return j.isLeapYear(q)?31622400000:31536000000;
}},daysInMonth:function(r,q){return[31,j.isLeapYear(q)?29:28,31,30,31,30,31,31,30,31,30,31][r];},isLeapYear:function(q){return((q%4===0)&&(q%100!==0))||(q%400===0);
},parse:function(s){var r=$type(s);if(r=="number"){return new j(s);}if(r!="string"){return s;}s=s.clean();if(!s.length){return null;}var q;h.some(function(u){var t=u.re.exec(s);
return(t)?(q=u.handler(t)):false;});return q||new j(f(s));},parseDay:function(q,r){return o("day",q,r);},parseMonth:function(r,q){return o("month",r,q);
},parseUTC:function(r){var q=new j(r);var s=j.UTC(q.get("year"),q.get("mo"),q.get("date"),q.get("hr"),q.get("min"),q.get("sec"),q.get("ms"));return new j(s);
},orderIndex:function(q){return j.getMsg("dateOrder").indexOf(q)+1;},defineFormat:function(q,r){l[q]=r;},defineFormats:function(q){for(var r in q){j.defineFormat(r,q[r]);
}},parsePatterns:h,defineParser:function(q){h.push((q.re&&q.handler)?q:m(q));},defineParsers:function(){Array.flatten(arguments).each(j.defineParser);},define2DigitYearStart:function(q){i=q%100;
n=q-i;}});var n=1900;var i=70;var k=function(q){return new RegExp("(?:"+j.getMsg(q).map(function(r){return r.substr(0,3);}).join("|")+")[a-z]*");};var a=function(q){switch(q){case"x":return((j.orderIndex("month")==1)?"%m[-./]%d":"%d[-./]%m")+"([-./]%y)?";
case"X":return"%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%T?";}return null;};var p={d:/[0-2]?[0-9]|3[01]/,H:/[01]?[0-9]|2[0-3]/,I:/0?[1-9]|1[0-2]/,M:/[0-5]?\d/,s:/\d+/,o:/[a-z]*/,p:/[ap]\.?m\.?/,y:/\d{2}|\d{4}/,Y:/\d{4}/,T:/Z|[+-]\d{2}(?::?\d{2})?/};
p.m=p.I;p.S=p.M;var c;var b=function(q){c=q;p.a=p.A=k("days");p.b=p.B=k("months");h.each(function(s,r){if(s.format){h[r]=m(s.format);}});};var m=function(s){if(!c){return{format:s};
}var q=[];var r=(s.source||s).replace(/%([a-z])/gi,function(u,t){return a(t)||u;}).replace(/\((?!\?)/g,"(?:").replace(/ (?!\?|\*)/g,",? ").replace(/%([a-z%])/gi,function(u,t){var v=p[t];
if(!v){return t;}q.push(t);return"("+v.source+")";}).replace(/\[a-z\]/gi,"[a-z\\u00c0-\\uffff]");return{format:s,re:new RegExp("^"+r+"$","i"),handler:function(w){w=w.slice(1).associate(q);
var t=new j().clearTime(),v=w.y||w.Y;if(v!=null){g.call(t,"y",v);}if("d" in w){g.call(t,"d",1);}if("m" in w||"b" in w||"B" in w){g.call(t,"m",1);}for(var u in w){g.call(t,u,w[u]);
}return t;}};};var g=function(q,r){if(!r){return this;}switch(q){case"a":case"A":return this.set("day",j.parseDay(r,true));case"b":case"B":return this.set("mo",j.parseMonth(r,true));
case"d":return this.set("date",r);case"H":case"I":return this.set("hr",r);case"m":return this.set("mo",r-1);case"M":return this.set("min",r);case"p":return this.set("ampm",r.replace(/\./g,""));
case"S":return this.set("sec",r);case"s":return this.set("ms",("0."+r)*1000);case"w":return this.set("day",r);case"Y":return this.set("year",r);case"y":r=+r;
if(r<100){r+=n+(r<i?100:0);}return this.set("year",r);case"T":if(r=="Z"){r="+00";}var s=r.match(/([+-])(\d{2}):?(\d{2})?/);s=(s[1]+"1")*(s[2]*60+(+s[3]||0))+this.getTimezoneOffset();
return this.set("time",this-s*60000);}return this;};j.defineParsers("%Y([-./]%m([-./]%d((T| )%X)?)?)?","%Y%m%d(T%H(%M%S?)?)?","%x( %X)?","%d%o( %b( %Y)?)?( %X)?","%b( %d%o)?( %Y)?( %X)?","%Y %b( %d%o( %X)?)?","%o %b %d %X %T %Y");
MooTools.lang.addEvent("langChange",function(q){if(MooTools.lang.get("Date")){b(q);}}).fireEvent("langChange",MooTools.lang.getCurrentLanguage());})();
Date.implement({timeDiffInWords:function(a){return Date.distanceOfTimeInWords(this,a||new Date);},timeDiff:function(h,b){if(h==null){h=new Date;}var g=((h-this)/1000).toInt();
if(!g){return"0s";}var a={s:60,m:60,h:24,d:365,y:0};var f,d=[];for(var c in a){if(!g){break;}if((f=a[c])){d.unshift((g%f)+c);g=(g/f).toInt();}else{d.unshift(g+c);
}}return d.join(b||":");}});Date.alias("timeDiffInWords","timeAgoInWords");Date.extend({distanceOfTimeInWords:function(b,a){return Date.getTimePhrase(((a-b)/1000).toInt());
},getTimePhrase:function(g){var d=(g<0)?"Until":"Ago";if(g<0){g*=-1;}var b={minute:60,hour:60,day:24,week:7,month:52/12,year:12,eon:Infinity};var f="lessThanMinute";
for(var c in b){var a=b[c];if(g<1.5*a){if(g>0.75*a){f=c;}break;}g/=a;f=c+"s";}return Date.getMsg(f+d,g).substitute({delta:g.round()});}});Date.defineParsers({re:/^(?:tod|tom|yes)/i,handler:function(a){var b=new Date().clearTime();
switch(a[0]){case"tom":return b.increment();case"yes":return b.decrement();default:return b;}}},{re:/^(next|last) ([a-z]+)$/i,handler:function(f){var g=new Date().clearTime();
var b=g.getDay();var c=Date.parseDay(f[2],true);var a=c-b;if(c<=b){a+=7;}if(f[1]=="last"){a-=7;}return g.set("date",g.getDate()+a);}});Hash.implement({getFromPath:function(a){var b=this.getClean();
a.replace(/\[([^\]]+)\]|\.([^.[]+)|[^[.]+/g,function(c){if(!b){return null;}var d=arguments[2]||arguments[1]||arguments[0];b=(d in b)?b[d]:null;return c;
});return b;},cleanValues:function(a){a=a||$defined;this.each(function(c,b){if(!a(c)){this.erase(b);}},this);return this;},run:function(){var a=arguments;
this.each(function(c,b){if($type(c)=="function"){c.run(a);}});}});(function(){var c={a:"[àáâãäåăą]",A:"[ÀÁÂÃÄÅĂĄ]",c:"[ćčç]",C:"[ĆČÇ]",d:"[ďđ]",D:"[ĎÐ]",e:"[èéêëěę]",E:"[ÈÉÊËĚĘ]",g:"[ğ]",G:"[Ğ]",i:"[ìíîï]",I:"[ÌÍÎÏ]",l:"[ĺľł]",L:"[ĹĽŁ]",n:"[ñňń]",N:"[ÑŇŃ]",o:"[òóôõöøő]",O:"[ÒÓÔÕÖØ]",r:"[řŕ]",R:"[ŘŔ]",s:"[ššş]",S:"[ŠŞŚ]",t:"[ťţ]",T:"[ŤŢ]",ue:"[ü]",UE:"[Ü]",u:"[ùúûůµ]",U:"[ÙÚÛŮ]",y:"[ÿý]",Y:"[ŸÝ]",z:"[žźż]",Z:"[ŽŹŻ]",th:"[þ]",TH:"[Þ]",dh:"[ð]",DH:"[Ð]",ss:"[ß]",oe:"[œ]",OE:"[Œ]",ae:"[æ]",AE:"[Æ]"},b={" ":"[\xa0\u2002\u2003\u2009]","*":"[\xb7]","'":"[\u2018\u2019]",'"':"[\u201c\u201d]","...":"[\u2026]","-":"[\u2013]","--":"[\u2014]","&raquo;":"[\uFFFD]"};
function a(g,h){var f=g;for(key in h){f=f.replace(new RegExp(h[key],"g"),key);}return f;}function d(f,g){f=f||"";var h=g?"<"+f+"(?!\\w)[^>]*>([\\s\\S]*?)</"+f+"(?!\\w)>":"</?"+f+"([^>]+)?>";
reg=new RegExp(h,"gi");return reg;}String.implement({standardize:function(){return a(this,c);},repeat:function(f){return new Array(f+1).join(this);},pad:function(g,i,f){if(this.length>=g){return this;
}var h=(i==null?" ":""+i).repeat(g-this.length).substr(0,g-this.length);if(!f||f=="right"){return this+h;}if(f=="left"){return h+this;}return h.substr(0,(h.length/2).floor())+this+h.substr(0,(h.length/2).ceil());
},getTags:function(f,g){return this.match(d(f,g))||[];},stripTags:function(f,g){return this.replace(d(f,g),"");},tidy:function(){return a(this,b);}});})();
String.implement({parseQueryString:function(d,a){if(d==null){d=true;}if(a==null){a=true;}var c=this.split(/[&;]/),b={};if(c.length){c.each(function(j){var f=j.indexOf("="),g=f<0?[""]:j.substr(0,f).match(/([^\]\[]+|(\B)(?=\]))/g),h=a?decodeURIComponent(j.substr(f+1)):j.substr(f+1),i=b;
g.each(function(l,k){if(d){l=decodeURIComponent(l);}var m=i[l];if(k<g.length-1){i=i[l]=m||{};}else{if($type(m)=="array"){m.push(h);}else{i[l]=$defined(m)?[m,h]:h;
}}});});}return b;},cleanQueryString:function(a){return this.split("&").filter(function(f){var b=f.indexOf("="),c=b<0?"":f.substr(0,b),d=f.substr(b+1);
return a?a.run([c,d]):$chk(d);}).join("&");}});var URI=new Class({Implements:Options,options:{},regex:/^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,parts:["scheme","user","password","host","port","directory","file","query","fragment"],schemes:{http:80,https:443,ftp:21,rtsp:554,mms:1755,file:0},initialize:function(b,a){this.setOptions(a);
var c=this.options.base||URI.base;if(!b){b=c;}if(b&&b.parsed){this.parsed=$unlink(b.parsed);}else{this.set("value",b.href||b.toString(),c?new URI(c):false);
}},parse:function(c,b){var a=c.match(this.regex);if(!a){return false;}a.shift();return this.merge(a.associate(this.parts),b);},merge:function(b,a){if((!b||!b.scheme)&&(!a||!a.scheme)){return false;
}if(a){this.parts.every(function(c){if(b[c]){return false;}b[c]=a[c]||"";return true;});}b.port=b.port||this.schemes[b.scheme.toLowerCase()];b.directory=b.directory?this.parseDirectory(b.directory,a?a.directory:""):"/";
return b;},parseDirectory:function(b,c){b=(b.substr(0,1)=="/"?"":(c||"/"))+b;if(!b.test(URI.regs.directoryDot)){return b;}var a=[];b.replace(URI.regs.endSlash,"").split("/").each(function(d){if(d==".."&&a.length>0){a.pop();
}else{if(d!="."){a.push(d);}}});return a.join("/")+"/";},combine:function(a){return a.value||a.scheme+"://"+(a.user?a.user+(a.password?":"+a.password:"")+"@":"")+(a.host||"")+(a.port&&a.port!=this.schemes[a.scheme]?":"+a.port:"")+(a.directory||"/")+(a.file||"")+(a.query?"?"+a.query:"")+(a.fragment?"#"+a.fragment:"");
},set:function(b,d,c){if(b=="value"){var a=d.match(URI.regs.scheme);if(a){a=a[1];}if(a&&!$defined(this.schemes[a.toLowerCase()])){this.parsed={scheme:a,value:d};
}else{this.parsed=this.parse(d,(c||this).parsed)||(a?{scheme:a,value:d}:{value:d});}}else{if(b=="data"){this.setData(d);}else{this.parsed[b]=d;}}return this;
},get:function(a,b){switch(a){case"value":return this.combine(this.parsed,b?b.parsed:false);case"data":return this.getData();}return this.parsed[a]||"";
},go:function(){document.location.href=this.toString();},toURI:function(){return this;},getData:function(c,b){var a=this.get(b||"query");if(!$chk(a)){return c?null:{};
}var d=a.parseQueryString();return c?d[c]:d;},setData:function(a,c,b){if(typeof a=="string"){data=this.getData();data[arguments[0]]=arguments[1];a=data;
}else{if(c){a=$merge(this.getData(),a);}}return this.set(b||"query",Hash.toQueryString(a));},clearData:function(a){return this.set(a||"query","");}});URI.prototype.toString=URI.prototype.valueOf=function(){return this.get("value");
};URI.regs={endSlash:/\/$/,scheme:/^(\w+):/,directoryDot:/\.\/|\.$/};URI.base=new URI(document.getElements("base[href]",true).getLast(),{base:document.location});
String.implement({toURI:function(a){return new URI(this,a);}});URI=Class.refactor(URI,{combine:function(g,f){if(!f||g.scheme!=f.scheme||g.host!=f.host||g.port!=f.port){return this.previous.apply(this,arguments);
}var a=g.file+(g.query?"?"+g.query:"")+(g.fragment?"#"+g.fragment:"");if(!f.directory){return(g.directory||(g.file?"":"./"))+a;}var d=f.directory.split("/"),c=g.directory.split("/"),h="",j;
var b=0;for(j=0;j<d.length&&j<c.length&&d[j]==c[j];j++){}for(b=0;b<d.length-j-1;b++){h+="../";}for(b=j;b<c.length-1;b++){h+=c[b]+"/";}return(h||(g.file?"":"./"))+a;
},toAbsolute:function(a){a=new URI(a);if(a){a.set("directory","").set("file","");}return this.toRelative(a);},toRelative:function(a){return this.get("value",new URI(a));
}});Element.implement({tidy:function(){this.set("value",this.get("value").tidy());},getTextInRange:function(b,a){return this.get("value").substring(b,a);
},getSelectedText:function(){if(this.setSelectionRange){return this.getTextInRange(this.getSelectionStart(),this.getSelectionEnd());}return document.selection.createRange().text;
},getSelectedRange:function(){if($defined(this.selectionStart)){return{start:this.selectionStart,end:this.selectionEnd};}var f={start:0,end:0};var a=this.getDocument().selection.createRange();
if(!a||a.parentElement()!=this){return f;}var c=a.duplicate();if(this.type=="text"){f.start=0-c.moveStart("character",-100000);f.end=f.start+a.text.length;
}else{var b=this.get("value");var d=b.length;c.moveToElementText(this);c.setEndPoint("StartToEnd",a);if(c.text.length){d-=b.match(/[\n\r]*$/)[0].length;
}f.end=d-c.text.length;c.setEndPoint("StartToStart",a);f.start=d-c.text.length;}return f;},getSelectionStart:function(){return this.getSelectedRange().start;
},getSelectionEnd:function(){return this.getSelectedRange().end;},setCaretPosition:function(a){if(a=="end"){a=this.get("value").length;}this.selectRange(a,a);
return this;},getCaretPosition:function(){return this.getSelectedRange().start;},selectRange:function(f,a){if(this.setSelectionRange){this.focus();this.setSelectionRange(f,a);
}else{var c=this.get("value");var d=c.substr(f,a-f).replace(/\r/g,"").length;f=c.substr(0,f).replace(/\r/g,"").length;var b=this.createTextRange();b.collapse(true);
b.moveEnd("character",f+d);b.moveStart("character",f);b.select();}return this;},insertAtCursor:function(b,a){var d=this.getSelectedRange();var c=this.get("value");
this.set("value",c.substring(0,d.start)+b+c.substring(d.end,c.length));if($pick(a,true)){this.selectRange(d.start,d.start+b.length);}else{this.setCaretPosition(d.start+b.length);
}return this;},insertAroundCursor:function(b,a){b=$extend({before:"",defaultMiddle:"",after:""},b);var c=this.getSelectedText()||b.defaultMiddle;var h=this.getSelectedRange();
var g=this.get("value");if(h.start==h.end){this.set("value",g.substring(0,h.start)+b.before+c+b.after+g.substring(h.end,g.length));this.selectRange(h.start+b.before.length,h.end+b.before.length+c.length);
}else{var d=g.substring(h.start,h.end);this.set("value",g.substring(0,h.start)+b.before+d+b.after+g.substring(h.end,g.length));var f=h.start+b.before.length;
if($pick(a,true)){this.selectRange(f,f+d.length);}else{this.setCaretPosition(f+g.length);}}return this;}});(function(d,f){var c=/(.*?):relay\(((?:\(.*?\)|.)+)\)$/,b=/[+>~\s]/,g=function(h){var i=h.match(c);
return !i?{event:h}:{event:i[1],selector:i[2]};},a=function(n,h){var l=n.target;if(b.test(h=h.trim())){var k=this.getElements(h);for(var j=k.length;j--;
){var m=k[j];if(l==m||m.hasChild(l)){return m;}}}else{for(;l&&l!=this;l=l.parentNode){if(Element.match(l,h)){return document.id(l);}}}return null;};Element.implement({addEvent:function(l,k){var j=g(l);
if(j.selector){var i=this.retrieve("delegation:_delegateMonitors",{});if(!i[l]){var h=function(n){var m=a.call(this,n,j.selector);if(m){this.fireEvent(l,[n,m],0,m);
}}.bind(this);i[l]=h;d.call(this,j.event,h);}}return d.apply(this,arguments);},removeEvent:function(l,k){var j=g(l);if(j.selector){var i=this.retrieve("events");
if(!i||!i[l]||(k&&!i[l].keys.contains(k))){return this;}if(k){f.apply(this,[l,k]);}else{f.apply(this,l);}i=this.retrieve("events");if(i&&i[l]&&i[l].keys.length==0){var h=this.retrieve("delegation:_delegateMonitors",{});
f.apply(this,[j.event,h[l]]);delete h[l];}return this;}return f.apply(this,arguments);},fireEvent:function(l,i,h,n){var j=this.retrieve("events");var m,k;
if(i){m=i[0];k=i[1];}if(!j||!j[l]){return this;}j[l].keys.each(function(o){o.create({bind:n||this,delay:h,arguments:i})();},this);return this;}});})(Element.prototype.addEvent,Element.prototype.removeEvent);
try{if(typeof HTMLElement!="undefined"){HTMLElement.prototype.fireEvent=Element.prototype.fireEvent;}}catch(e){}Element.implement({measure:function(f){var h=function(i){return !!(!i||i.offsetHeight||i.offsetWidth);
};if(h(this)){return f.apply(this);}var d=this.getParent(),g=[],b=[];while(!h(d)&&d!=document.body){b.push(d.expose());d=d.getParent();}var c=this.expose();
var a=f.apply(this);c();b.each(function(i){i();});return a;},expose:function(){if(this.getStyle("display")!="none"){return $empty;}var a=this.style.cssText;
this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=a;}.bind(this);},getDimensions:function(a){a=$merge({computeSize:false},a);
var f={};var d=function(h,g){return(g.computeSize)?h.getComputedSize(g):h.getSize();};var b=this.getParent("body");if(b&&this.getStyle("display")=="none"){f=this.measure(function(){return d(this,a);
});}else{if(b){try{f=d(this,a);}catch(c){}}else{f={x:0,y:0};}}return $chk(f.x)?$extend(f,{width:f.x,height:f.y}):$extend(f,{x:f.width,y:f.height});},getComputedSize:function(a){if(a&&a.plains){a.planes=a.plains;
}a=$merge({styles:["padding","border"],planes:{height:["top","bottom"],width:["left","right"]},mode:"both"},a);var c={width:0,height:0};switch(a.mode){case"vertical":delete c.width;
delete a.planes.width;break;case"horizontal":delete c.height;delete a.planes.height;break;}var b=[];$each(a.planes,function(g,h){g.each(function(i){a.styles.each(function(j){b.push((j=="border")?j+"-"+i+"-width":j+"-"+i);
});});});var f={};b.each(function(g){f[g]=this.getComputedStyle(g);},this);var d=[];$each(a.planes,function(g,h){var i=h.capitalize();c["total"+i]=c["computed"+i]=0;
g.each(function(j){c["computed"+j.capitalize()]=0;b.each(function(l,k){if(l.test(j)){f[l]=f[l].toInt()||0;c["total"+i]=c["total"+i]+f[l];c["computed"+j.capitalize()]=c["computed"+j.capitalize()]+f[l];
}if(l.test(j)&&h!=l&&(l.test("border")||l.test("padding"))&&!d.contains(l)){d.push(l);c["computed"+i]=c["computed"+i]-f[l];}});});});["Width","Height"].each(function(h){var g=h.toLowerCase();
if(!$chk(c[g])){return;}c[g]=c[g]+this["offset"+h]+c["computed"+h];c["total"+h]=c[g]+c["total"+h];delete c["computed"+h];},this);return $extend(f,c);}});
(function(){var a=false,b=false;var c=function(){var d=new Element("div").setStyles({position:"fixed",top:0,right:0}).inject(document.body);a=(d.offsetTop===0);
d.dispose();b=true;};Element.implement({pin:function(i,g){if(!b){c();}if(this.getStyle("display")=="none"){return this;}var k,l=window.getScroll();if(i!==false){k=this.getPosition(a?document.body:this.getOffsetParent());
if(!this.retrieve("pin:_pinned")){var h={top:k.y-l.y,left:k.x-l.x};if(a&&!g){this.setStyle("position","fixed").setStyles(h);}else{var m=this.getOffsetParent(),j=this.getPosition(m),n=this.getStyles("left","top");
if(m&&n.left=="auto"||n.top=="auto"){this.setPosition(j);}if(this.getStyle("position")=="static"){this.setStyle("position","absolute");}j={x:n.left.toInt()-l.x,y:n.top.toInt()-l.y};
var f=function(){if(!this.retrieve("pin:_pinned")){return;}var o=window.getScroll();this.setStyles({left:j.x+o.x,top:j.y+o.y});}.bind(this);this.store("pin:_scrollFixer",f);
window.addEvent("scroll",f);}this.store("pin:_pinned",true);}}else{if(!this.retrieve("pin:_pinned")){return this;}var m=this.getParent(),d=(m.getComputedStyle("position")!="static"?m:m.getOffsetParent());
k=this.getPosition(d);this.store("pin:_pinned",false);var f=this.retrieve("pin:_scrollFixer");if(!f){this.setStyles({position:"absolute",top:k.y+l.y,left:k.x+l.x});
}else{this.store("pin:_scrollFixer",null);window.removeEvent("scroll",f);}this.removeClass("isPinned");}return this;},unpin:function(){return this.pin(false);
},togglepin:function(){return this.pin(!this.retrieve("pin:_pinned"));}});})();(function(){var a=Element.prototype.position;Element.implement({position:function(h){if(h&&($defined(h.x)||$defined(h.y))){return a?a.apply(this,arguments):this;
}$each(h||{},function(w,u){if(!$defined(w)){delete h[u];}});h=$merge({relativeTo:document.body,position:{x:"center",y:"center"},edge:false,offset:{x:0,y:0},returnPos:false,relFixedPosition:false,ignoreMargins:false,ignoreScroll:false,allowNegative:false},h);
var s={x:0,y:0},f=false;var c=this.measure(function(){return document.id(this.getOffsetParent());});if(c&&c!=this.getDocument().body){s=c.measure(function(){return this.getPosition();
});f=c!=document.id(h.relativeTo);h.offset.x=h.offset.x-s.x;h.offset.y=h.offset.y-s.y;}var t=function(u){if($type(u)!="string"){return u;}u=u.toLowerCase();
var v={};if(u.test("left")){v.x="left";}else{if(u.test("right")){v.x="right";}else{v.x="center";}}if(u.test("upper")||u.test("top")){v.y="top";}else{if(u.test("bottom")){v.y="bottom";
}else{v.y="center";}}return v;};h.edge=t(h.edge);h.position=t(h.position);if(!h.edge){if(h.position.x=="center"&&h.position.y=="center"){h.edge={x:"center",y:"center"};
}else{h.edge={x:"left",y:"top"};}}this.setStyle("position","absolute");var g=document.id(h.relativeTo)||document.body,d=g==document.body?window.getScroll():g.getPosition(),m=d.y,i=d.x;
var o=this.getDimensions({computeSize:true,styles:["padding","border","margin"]});var k={},p=h.offset.y,r=h.offset.x,l=window.getSize();switch(h.position.x){case"left":k.x=i+r;
break;case"right":k.x=i+r+g.offsetWidth;break;default:k.x=i+((g==document.body?l.x:g.offsetWidth)/2)+r;break;}switch(h.position.y){case"top":k.y=m+p;break;
case"bottom":k.y=m+p+g.offsetHeight;break;default:k.y=m+((g==document.body?l.y:g.offsetHeight)/2)+p;break;}if(h.edge){var b={};switch(h.edge.x){case"left":b.x=0;
break;case"right":b.x=-o.x-o.computedRight-o.computedLeft;break;default:b.x=-(o.totalWidth/2);break;}switch(h.edge.y){case"top":b.y=0;break;case"bottom":b.y=-o.y-o.computedTop-o.computedBottom;
break;default:b.y=-(o.totalHeight/2);break;}k.x+=b.x;k.y+=b.y;}k={left:((k.x>=0||f||h.allowNegative)?k.x:0).toInt(),top:((k.y>=0||f||h.allowNegative)?k.y:0).toInt()};
var j={left:"x",top:"y"};["minimum","maximum"].each(function(u){["left","top"].each(function(v){var w=h[u]?h[u][j[v]]:null;if(w!=null&&((u=="minimum")?k[v]<w:k[v]>w)){k[v]=w;
}});});if(g.getStyle("position")=="fixed"||h.relFixedPosition){var n=window.getScroll();k.top+=n.y;k.left+=n.x;}var q=g.getScroll();if(h.ignoreScroll){k.top-=q.y;
k.left-=q.x;}else{k.top+=q.y;k.left+=q.x;}if(h.ignoreMargins){k.left+=(h.edge.x=="right"?o["margin-right"]:h.edge.x=="center"?-o["margin-left"]+((o["margin-right"]+o["margin-left"])/2):-o["margin-left"]);
k.top+=(h.edge.y=="bottom"?o["margin-bottom"]:h.edge.y=="center"?-o["margin-top"]+((o["margin-bottom"]+o["margin-top"])/2):-o["margin-top"]);}k.left=Math.ceil(k.left);
k.top=Math.ceil(k.top);if(h.returnPos){return k;}else{this.setStyles(k);}return this;}});})();Element.implement({isDisplayed:function(){return this.getStyle("display")!="none";
},isVisible:function(){var a=this.offsetWidth,b=this.offsetHeight;return(a==0&&b==0)?false:(a>0&&b>0)?true:this.style.display!="none";},toggle:function(){return this[this.isDisplayed()?"hide":"show"]();
},hide:function(){var b;try{b=this.getStyle("display");}catch(a){}if(b=="none"){return this;}return this.store("element:_originalDisplay",b||"").setStyle("display","none");
},show:function(a){if(!a&&this.isDisplayed()){return this;}a=a||this.retrieve("element:_originalDisplay")||"block";return this.setStyle("display",(a=="none")?"block":a);
},swapClass:function(a,b){return this.removeClass(a).addClass(b);}});Document.implement({clearSelection:function(){if(document.selection&&document.selection.empty){document.selection.empty();
}else{if(window.getSelection){var a=window.getSelection();if(a&&a.removeAllRanges){a.removeAllRanges();}}}}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(b,a){this.elements=this.subject=$$(b);
this.parent(a);},compute:function(h,j,k){var c={};for(var d in h){var a=h[d],f=j[d],g=c[d]={};for(var b in a){g[b]=this.parent(a[b],f[b],k);}}return c;
},set:function(b){for(var c in b){if(!this.elements[c]){continue;}var a=b[c];for(var d in a){this.render(this.elements[c],d,a[d],this.options.unit);}}return this;
},start:function(c){if(!this.check(c)){return this;}var j={},k={};for(var d in c){if(!this.elements[d]){continue;}var g=c[d],a=j[d]={},h=k[d]={};for(var b in g){var f=this.prepare(this.elements[d],b,g[b]);
a[b]=f.from;h[b]=f.to;}}return this.parent(j,k);}});Fx.Accordion=new Class({Extends:Fx.Elements,options:{fixedHeight:false,fixedWidth:false,display:0,show:false,height:true,width:false,opacity:true,alwaysHide:false,trigger:"click",initialDisplayFx:true,returnHeightToAuto:true},initialize:function(){var c=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});
this.parent(c.elements,c.options);this.togglers=$$(c.togglers);this.previous=-1;this.internalChain=new Chain();if(this.options.alwaysHide){this.options.wait=true;
}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show;}if(this.options.start){this.options.display=false;this.options.show=false;
}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity";}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth";
}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight";}for(var b=0,a=this.togglers.length;b<a;b++){this.addSection(this.togglers[b],this.elements[b]);
}this.elements.each(function(f,d){if(this.options.show===d){this.fireEvent("active",[this.togglers[d],f]);}else{for(var g in this.effects){f.setStyle(g,0);
}}},this);if($chk(this.options.display)||this.options.initialDisplayFx===false){this.display(this.options.display,this.options.initialDisplayFx);}if(this.options.fixedHeight!==false){this.options.returnHeightToAuto=false;
}this.addEvent("complete",this.internalChain.callChain.bind(this.internalChain));},addSection:function(f,c){f=document.id(f);c=document.id(c);var g=this.togglers.contains(f);
this.togglers.include(f);this.elements.include(c);var a=this.togglers.indexOf(f);var b=this.display.bind(this,a);f.store("accordion:display",b);f.addEvent(this.options.trigger,b);
if(this.options.height){c.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"});}if(this.options.width){c.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"});
}c.fullOpacity=1;if(this.options.fixedWidth){c.fullWidth=this.options.fixedWidth;}if(this.options.fixedHeight){c.fullHeight=this.options.fixedHeight;}c.setStyle("overflow","hidden");
if(!g){for(var d in this.effects){c.setStyle(d,0);}}return this;},removeSection:function(f,b){var a=this.togglers.indexOf(f);var c=this.elements[a];var d=function(){this.togglers.erase(f);
this.elements.erase(c);this.detach(f);}.bind(this);if(this.now==a||b!=undefined){this.display($pick(b,a-1>=0?a-1:0)).chain(d);}else{d();}return this;},detach:function(b){var a=function(c){c.removeEvent(this.options.trigger,c.retrieve("accordion:display"));
}.bind(this);if(!b){this.togglers.each(a);}else{a(b);}return this;},display:function(a,b){if(!this.check(a,b)){return this;}b=$pick(b,true);a=($type(a)=="element")?this.elements.indexOf(a):a;
if(a==this.previous&&!this.options.alwaysHide){return this;}if(this.options.returnHeightToAuto){var d=this.elements[this.previous];if(d&&!this.selfHidden){for(var c in this.effects){d.setStyle(c,d[this.effects[c]]);
}}}if((this.timer&&this.options.wait)||(a===this.previous&&!this.options.alwaysHide)){return this;}this.previous=a;var f={};this.elements.each(function(j,h){f[h]={};
var g;if(h!=a){g=true;}else{if(this.options.alwaysHide&&((j.offsetHeight>0&&this.options.height)||j.offsetWidth>0&&this.options.width)){g=true;this.selfHidden=true;
}}this.fireEvent(g?"background":"active",[this.togglers[h],j]);for(var k in this.effects){f[h][k]=g?0:j[this.effects[k]];}},this);this.internalChain.clearChain();
this.internalChain.chain(function(){if(this.options.returnHeightToAuto&&!this.selfHidden){var g=this.elements[a];if(g){g.setStyle("height","auto");}}}.bind(this));
return b?this.start(f):this.set(f);}});var Accordion=new Class({Extends:Fx.Accordion,initialize:function(){this.parent.apply(this,arguments);var a=Array.link(arguments,{container:Element.type});
this.container=a.container;},addSection:function(c,b,f){c=document.id(c);b=document.id(b);var d=this.togglers.contains(c);var a=this.togglers.length;if(a&&(!d||f)){f=$pick(f,a-1);
c.inject(this.togglers[f],"before");b.inject(c,"after");}else{if(this.container&&!d){c.inject(this.container);b.inject(this.container);}}return this.parent.apply(this,arguments);
}});Fx.Move=new Class({Extends:Fx.Morph,options:{relativeTo:document.body,position:"center",edge:false,offset:{x:0,y:0}},start:function(a){var b=this.element,c=b.getStyles("top","left");
if(c.top=="auto"||c.left=="auto"){b.setPosition(b.getPosition(b.getOffsetParent()));}return this.parent(b.position($merge(this.options,a,{returnPos:true})));
}});Element.Properties.move={set:function(a){var b=this.retrieve("move");if(b){b.cancel();}return this.eliminate("move").store("move:options",$extend({link:"cancel"},a));
},get:function(a){if(a||!this.retrieve("move")){if(a||!this.retrieve("move:options")){this.set("move",a);}this.store("move",new Fx.Move(this,this.retrieve("move:options")));
}return this.retrieve("move");}};Element.implement({move:function(a){this.get("move").start(a);return this;}});Fx.Reveal=new Class({Extends:Fx.Morph,options:{link:"cancel",styles:["padding","border","margin"],transitionOpacity:!Browser.Engine.trident4,mode:"vertical",display:function(){return this.element.get("tag")!="tr"?"block":"table-row";
},hideInputs:Browser.Engine.trident?"select, input, textarea, object, embed":false,opacity:1},dissolve:function(){try{if(!this.hiding&&!this.showing){if(this.element.getStyle("display")!="none"){this.hiding=true;
this.showing=false;this.hidden=true;this.cssText=this.element.style.cssText;var d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
this.element.setStyle("display",$lambda(this.options.display).apply(this));if(this.options.transitionOpacity){d.opacity=this.options.opacity;}var b={};
$each(d,function(g,f){b[f]=[g,0];},this);this.element.setStyle("overflow","hidden");var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;
this.$chain.unshift(function(){if(this.hidden){this.hiding=false;$each(d,function(g,f){d[f]=g;},this);this.element.style.cssText=this.cssText;this.element.setStyle("display","none");
if(a){a.setStyle("visibility","visible");}}this.fireEvent("hide",this.element);this.callChain();}.bind(this));if(a){a.setStyle("visibility","hidden");}this.start(b);
}else{this.callChain.delay(10,this);this.fireEvent("complete",this.element);this.fireEvent("hide",this.element);}}else{if(this.options.link=="chain"){this.chain(this.dissolve.bind(this));
}else{if(this.options.link=="cancel"&&!this.hiding){this.cancel();this.dissolve();}}}}catch(c){this.hiding=false;this.element.setStyle("display","none");
this.callChain.delay(10,this);this.fireEvent("complete",this.element);this.fireEvent("hide",this.element);}return this;},reveal:function(){try{if(!this.showing&&!this.hiding){if(this.element.getStyle("display")=="none"){this.showing=true;
this.hiding=this.hidden=false;var d;this.cssText=this.element.style.cssText;this.element.measure(function(){d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
}.bind(this));$each(d,function(g,f){d[f]=g;});if($chk(this.options.heightOverride)){d.height=this.options.heightOverride.toInt();}if($chk(this.options.widthOverride)){d.width=this.options.widthOverride.toInt();
}if(this.options.transitionOpacity){this.element.setStyle("opacity",0);d.opacity=this.options.opacity;}var b={height:0,display:$lambda(this.options.display).apply(this)};
$each(d,function(g,f){b[f]=0;});this.element.setStyles($merge(b,{overflow:"hidden"}));var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;
if(a){a.setStyle("visibility","hidden");}this.start(d);this.$chain.unshift(function(){this.element.style.cssText=this.cssText;this.element.setStyle("display",$lambda(this.options.display).apply(this));
if(!this.hidden){this.showing=false;}if(a){a.setStyle("visibility","visible");}this.callChain();this.fireEvent("show",this.element);}.bind(this));}else{this.callChain();
this.fireEvent("complete",this.element);this.fireEvent("show",this.element);}}else{if(this.options.link=="chain"){this.chain(this.reveal.bind(this));}else{if(this.options.link=="cancel"&&!this.showing){this.cancel();
this.reveal();}}}}catch(c){this.element.setStyles({display:$lambda(this.options.display).apply(this),visiblity:"visible",opacity:this.options.opacity});
this.showing=false;this.callChain.delay(10,this);this.fireEvent("complete",this.element);this.fireEvent("show",this.element);}return this;},toggle:function(){if(this.element.getStyle("display")=="none"){this.reveal();
}else{this.dissolve();}return this;},cancel:function(){this.parent.apply(this,arguments);this.element.style.cssText=this.cssText;this.hiding=false;this.showing=false;
return this;}});Element.Properties.reveal={set:function(a){var b=this.retrieve("reveal");if(b){b.cancel();}return this.eliminate("reveal").store("reveal:options",a);
},get:function(a){if(a||!this.retrieve("reveal")){if(a||!this.retrieve("reveal:options")){this.set("reveal",a);}this.store("reveal",new Fx.Reveal(this,this.retrieve("reveal:options")));
}return this.retrieve("reveal");}};Element.Properties.dissolve=Element.Properties.reveal;Element.implement({reveal:function(a){this.get("reveal",a).reveal();
return this;},dissolve:function(a){this.get("reveal",a).dissolve();return this;},nix:function(){var a=Array.link(arguments,{destroy:Boolean.type,options:Object.type});
this.get("reveal",a.options).dissolve().chain(function(){this[a.destroy?"destroy":"dispose"]();}.bind(this));return this;},wink:function(){var b=Array.link(arguments,{duration:Number.type,options:Object.type});
var a=this.get("reveal",b.options);a.reveal().chain(function(){(function(){a.dissolve();}).delay(b.duration||2000);});}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(b,a){this.element=this.subject=document.id(b);
this.parent(a);var d=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=document.id(this.element.getDocument().body);}var c=this.element;
if(this.options.wheelStops){this.addEvent("start",function(){c.addEvent("mousewheel",d);},true);this.addEvent("complete",function(){c.removeEvent("mousewheel",d);
},true);}},set:function(){var a=Array.flatten(arguments);if(Browser.Engine.gecko){a=[Math.round(a[0]),Math.round(a[1])];}this.element.scrollTo(a[0]+this.options.offset.x,a[1]+this.options.offset.y);
},compute:function(c,b,a){return[0,1].map(function(d){return Fx.compute(c[d],b[d],a);});},start:function(c,h){if(!this.check(c,h)){return this;}var f=this.element.getScrollSize(),b=this.element.getScroll(),d={x:c,y:h};
for(var g in d){var a=f[g];if($chk(d[g])){d[g]=($type(d[g])=="number")?d[g]:a;}else{d[g]=b[g];}d[g]+=this.options.offset[g];}return this.parent([b.x,b.y],[d.x,d.y]);
},toTop:function(){return this.start(false,0);},toLeft:function(){return this.start(0,false);},toRight:function(){return this.start("right",false);},toBottom:function(){return this.start(false,"bottom");
},toElement:function(b){var a=document.id(b).getPosition(this.element);return this.start(a.x,a.y);},scrollIntoView:function(c,f,d){f=f?$splat(f):["x","y"];
var i={};c=document.id(c);var g=c.getPosition(this.element);var j=c.getSize();var h=this.element.getScroll();var a=this.element.getSize();var b={x:g.x+j.x,y:g.y+j.y};
["x","y"].each(function(k){if(f.contains(k)){if(b[k]>h[k]+a[k]){i[k]=b[k]-a[k];}if(g[k]<h[k]){i[k]=g[k];}}if(i[k]==null){i[k]=h[k];}if(d&&d[k]){i[k]=i[k]+d[k];
}},this);if(i.x!=h.x||i.y!=h.y){this.start(i.x,i.y);}return this;},scrollToCenter:function(c,f,d){f=f?$splat(f):["x","y"];c=$(c);var i={},g=c.getPosition(this.element),j=c.getSize(),h=this.element.getScroll(),a=this.element.getSize(),b={x:g.x+j.x,y:g.y+j.y};
["x","y"].each(function(k){if(f.contains(k)){i[k]=g[k]-(a[k]-j[k])/2;}if(i[k]==null){i[k]=h[k];}if(d&&d[k]){i[k]=i[k]+d[k];}},this);if(i.x!=h.x||i.y!=h.y){this.start(i.x,i.y);
}return this;}});Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical",wrapper:false,hideOverflow:true,resetHeight:false},initialize:function(b,a){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
if(this.open&&this.options.resetHeight){this.wrapper.setStyle("height","");}if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper);
}},true);this.element=this.subject=document.id(b);this.parent(a);var d=this.element.retrieve("wrapper");var c=this.element.getStyles("margin","position","overflow");
if(this.options.hideOverflow){c=$extend(c,{overflow:"hidden"});}if(this.options.wrapper){d=document.id(this.options.wrapper).setStyles(c);}this.wrapper=d||new Element("div",{styles:c}).wraps(this.element);
this.element.store("wrapper",this.wrapper).setStyle("margin",0);this.now=[];this.open=true;},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;},set:function(a){this.element.setStyle(this.margin,a[0]);
this.wrapper.setStyle(this.layout,a[1]);return this;},compute:function(c,b,a){return[0,1].map(function(d){return Fx.compute(c[d],b[d],a);});},start:function(b,f){if(!this.check(b,f)){return this;
}this[f||this.options.mode]();var d=this.element.getStyle(this.margin).toInt();var c=this.wrapper.getStyle(this.layout).toInt();var a=[[d,c],[0,this.offset]];
var h=[[d,c],[-this.offset,0]];var g;switch(b){case"in":g=a;break;case"out":g=h;break;case"toggle":g=(c==0)?a:h;}return this.parent(g[0],g[1]);},slideIn:function(a){return this.start("in",a);
},slideOut:function(a){return this.start("out",a);},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){return this.start("toggle",a);}});Element.Properties.slide={set:function(b){var a=this.retrieve("slide");
if(a){a.cancel();}return this.eliminate("slide").store("slide:options",$extend({link:"cancel"},b));},get:function(a){if(a||!this.retrieve("slide")){if(a||!this.retrieve("slide:options")){this.set("slide",a);
}this.store("slide",new Fx.Slide(this,this.retrieve("slide:options")));}return this.retrieve("slide");}};Element.implement({slide:function(d,f){d=d||"toggle";
var b=this.get("slide"),a;switch(d){case"hide":b.hide(f);break;case"show":b.show(f);break;case"toggle":var c=this.retrieve("slide:flag",b.open);b[c?"slideOut":"slideIn"](f);
this.store("slide:flag",!c);a=true;break;default:b.start(d,f);}if(!a){this.eliminate("slide:flag");}return this;}});var SmoothScroll=Fx.SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(b,c){c=c||document;
this.doc=c.getDocument();var d=c.getWindow();this.parent(this.doc,b);this.links=$$(this.options.links||this.doc.links);var a=d.location.href.match(/^[^#]*/)[0]+"#";
this.links.each(function(g){if(g.href.indexOf(a)!=0){return;}var f=g.href.substr(a.length);if(f){this.useLink(g,f);}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){d.location.hash=this.anchor;
},true);}},useLink:function(c,a){var b;c.addEvent("click",function(d){if(b!==false&&!b){b=document.id(a)||this.doc.getElement("a[name="+a+"]");}if(b){d.preventDefault();
this.anchor=a;this.toElement(b).chain(function(){this.fireEvent("scrolledTo",[c,b]);}.bind(this));c.blur();}}.bind(this));}});Fx.Sort=new Class({Extends:Fx.Elements,options:{mode:"vertical"},initialize:function(b,a){this.parent(b,a);
this.elements.each(function(c){if(c.getStyle("position")=="static"){c.setStyle("position","relative");}});this.setDefaultOrder();},setDefaultOrder:function(){this.currentOrder=this.elements.map(function(b,a){return a;
});},sort:function(f){if($type(f)!="array"){return false;}var j=0,a=0,c={},i={},d=this.options.mode=="vertical";var g=this.elements.map(function(n,l){var m=n.getComputedSize({styles:["border","padding","margin"]});
var o;if(d){o={top:j,margin:m["margin-top"],height:m.totalHeight};j+=o.height-m["margin-top"];}else{o={left:a,margin:m["margin-left"],width:m.totalWidth};
a+=o.width;}var k=d?"top":"left";i[l]={};var p=n.getStyle(k).toInt();i[l][k]=p||0;return o;},this);this.set(i);f=f.map(function(k){return k.toInt();});
if(f.length!=this.elements.length){this.currentOrder.each(function(k){if(!f.contains(k)){f.push(k);}});if(f.length>this.elements.length){f.splice(this.elements.length-1,f.length-this.elements.length);
}}var b=j=a=0;f.each(function(m,k){var l={};if(d){l.top=j-g[m].top-b;j+=g[m].height;}else{l.left=a-g[m].left;a+=g[m].width;}b=b+g[m].margin;c[m]=l;},this);
var h={};$A(f).sort().each(function(k){h[k]=c[k];});this.start(h);this.currentOrder=f;return this;},rearrangeDOM:function(a){a=a||this.currentOrder;var b=this.elements[0].getParent();
var c=[];this.elements.setStyle("opacity",0);a.each(function(d){c.push(this.elements[d].inject(b).setStyles({top:0,left:0}));},this);this.elements.setStyle("opacity",1);
this.elements=$$(c);this.setDefaultOrder();return this;},getDefaultOrder:function(){return this.elements.map(function(b,a){return a;});},forward:function(){return this.sort(this.getDefaultOrder());
},backward:function(){return this.sort(this.getDefaultOrder().reverse());},reverse:function(){return this.sort(this.currentOrder.reverse());},sortByElements:function(a){return this.sort(a.map(function(b){return this.elements.indexOf(b);
},this));},swap:function(c,b){if($type(c)=="element"){c=this.elements.indexOf(c);}if($type(b)=="element"){b=this.elements.indexOf(b);}var a=$A(this.currentOrder);
a[this.currentOrder.indexOf(c)]=b;a[this.currentOrder.indexOf(b)]=c;return this.sort(a);}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,stopPropagation:false,modifiers:{x:"left",y:"top"}},initialize:function(){var b=Array.link(arguments,{options:Object.type,element:$defined});
this.element=document.id(b.element);this.document=this.element.getDocument();this.setOptions(b.options||{});var a=$type(this.options.handle);this.handles=((a=="array"||a=="collection")?$$(this.options.handle):document.id(this.options.handle))||this.element;
this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};
this.attach();},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this;},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);
return this;},start:function(f){if(f.rightClick){return;}if(this.options.preventDefault){f.preventDefault();}if(this.options.stopPropagation){f.stopPropagation();
}this.mouse.start=f.page;this.fireEvent("beforeStart",this.element);var a=this.options.limit;this.limit={x:[],y:[]};var d=this.element.getStyles("left","right","top","bottom");
this._invert={x:this.options.modifiers.x=="left"&&d.left=="auto"&&!isNaN(d.right.toInt())&&(this.options.modifiers.x="right"),y:this.options.modifiers.y=="top"&&d.top=="auto"&&!isNaN(d.bottom.toInt())&&(this.options.modifiers.y="bottom")};
var h,g;for(h in this.options.modifiers){if(!this.options.modifiers[h]){continue;}var c=this.element.getStyle(this.options.modifiers[h]);if(c&&!c.match(/px$/)){if(!g){g=this.element.getCoordinates(this.element.getOffsetParent());
}c=g[this.options.modifiers[h]];}if(this.options.style){this.value.now[h]=(c||0).toInt();}else{this.value.now[h]=this.element[this.options.modifiers[h]];
}if(this.options.invert){this.value.now[h]*=-1;}if(this._invert[h]){this.value.now[h]*=-1;}this.mouse.pos[h]=f.page[h]-this.value.now[h];if(a&&a[h]){for(var b=2;
b--;b){if($chk(a[h][b])){this.limit[h][b]=$lambda(a[h][b])();}}}}if($type(this.options.grid)=="number"){this.options.grid={x:this.options.grid,y:this.options.grid};
}this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop);},check:function(a){if(this.options.preventDefault){a.preventDefault();
}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){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});
this.fireEvent("start",[this.element,a]).fireEvent("snap",this.element);}},drag:function(a){if(this.options.preventDefault){a.preventDefault();}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.options.invert){this.value.now[b]*=-1;
}if(this._invert[b]){this.value.now[b]*=-1;}if(this.options.limit&&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];
}else{if($chk(this.limit[b][0])&&(this.value.now[b]<this.limit[b][0])){this.value.now[b]=this.limit[b][0];}}}if(this.options.grid[b]){this.value.now[b]-=((this.value.now[b]-(this.limit[b][0]||0))%this.options.grid[b]);
}if(this.options.style){this.element.setStyle(this.options.modifiers[b],this.value.now[b]+this.options.unit);}else{this.element[this.options.modifiers[b]]=this.value.now[b];
}}this.fireEvent("drag",[this.element,a]);},cancel:function(a){this.document.removeEvent("mousemove",this.bound.check);this.document.removeEvent("mouseup",this.bound.cancel);
if(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element);}},stop:function(a){this.document.removeEvent(this.selection,this.bound.eventStop);
this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);if(a){this.fireEvent("complete",[this.element,a]);
}}});Element.implement({makeResizable:function(a){var b=new Drag(this,$merge({modifiers:{x:"width",y:"height"}},a));this.store("resizer",b);return b.addEvent("drag",function(){this.fireEvent("resize",b);
}.bind(this));}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false,precalculate:false,includeMargins:true,checkDroppables:true},initialize:function(b,a){this.parent(b,a);
b=this.element;this.droppables=$$(this.options.droppables);this.container=document.id(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=document.id(this.container.getDocument().body);
}if(this.options.style){if(this.options.modifiers.x=="left"&&this.options.modifiers.y=="top"){var g,c=document.id(b.getOffsetParent());if(c){g=c.getStyles("border-top-width","border-left-width");
}var d=b.getStyles("left","top");if(c&&(d.left=="auto"||d.top=="auto")){var f=b.getPosition(c);f.x=f.x-(g["border-left-width"]?g["border-left-width"].toInt():0);
f.y=f.y-(g["border-top-width"]?g["border-top-width"].toInt():0);b.setPosition(f);}}if(b.getStyle("position")=="static"){b.setStyle("position","absolute");
}}this.addEvent("start",this.checkDroppables,true);this.overed=null;},start:function(a){if(this.container){this.options.limit=this.calculateLimit();}if(this.options.precalculate){this.positions=this.droppables.map(function(b){return b.getCoordinates();
});}this.parent(a);},calculateLimit:function(){var d=document.id(this.element.getOffsetParent())||document.body,i=this.container.getCoordinates(d),h={},c={},b={},k={},g={},m={};
["top","right","bottom","left"].each(function(q){h[q]=this.container.getStyle("border-"+q).toInt();b[q]=this.element.getStyle("border-"+q).toInt();c[q]=this.element.getStyle("margin-"+q).toInt();
k[q]=this.container.getStyle("margin-"+q).toInt();m[q]=d.getStyle("padding-"+q).toInt();g[q]=d.getStyle("border-"+q).toInt();},this);var f=this.element.offsetWidth+c.left+c.right,p=this.element.offsetHeight+c.top+c.bottom,j=0,l=0,o=i.right-h.right-f,a=i.bottom-h.bottom-p;
if(this.options.includeMargins){j+=c.left;l+=c.top;}else{o+=c.right;a+=c.bottom;}if(this.element.getStyle("position")=="relative"){var n=this.element.getCoordinates(d);
n.left-=this.element.getStyle("left").toInt();n.top-=this.element.getStyle("top").toInt();j+=h.left-n.left;l+=h.top-n.top;o+=c.left-n.left;a+=c.top-n.top;
if(this.container!=d){j+=k.left+m.left;l+=(Browser.Engine.trident4?0:k.top)+m.top;}}else{j-=c.left;l-=c.top;if(this.container==d){o-=h.left;a-=h.top;}else{j+=i.left+h.left-g.left;
l+=i.top+h.top-g.top;o-=g.left;a-=g.top;}}return{x:[j,o],y:[l,a]};},checkAgainst:function(c,b){c=(this.positions)?this.positions[b]:c.getCoordinates();
var a=this.mouse.now;return(a.x>c.left&&a.x<c.right&&a.y<c.bottom&&a.y>c.top);},checkDroppables:function(){var a=this.droppables.filter(this.checkAgainst,this).getLast();
if(this.overed!=a){if(this.overed){this.fireEvent("leave",[this.element,this.overed]);}if(a){this.fireEvent("enter",[this.element,a]);}this.overed=a;}},drag:function(a){this.parent(a);
if(this.options.checkDroppables&&this.droppables.length){this.checkDroppables();}},stop:function(a){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed,a]);
this.overed=null;return this.parent(a);}});Element.implement({makeDraggable:function(a){var b=new Drag.Move(this,a);this.store("dragger",b);return b;}});
var Slider=new Class({Implements:[Events,Options],Binds:["clickedElement","draggedKnob","scrolledElement"],options:{onTick:function(a){if(this.options.snap){a=this.toPosition(this.step);
}this.knob.setStyle(this.property,a);},initialStep:0,snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(g,a,f){this.setOptions(f);
this.element=document.id(g);this.knob=document.id(a);this.previousChange=this.previousEnd=this.step=-1;var h,b={},d={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";
this.property="top";h="offsetHeight";break;case"horizontal":this.axis="x";this.property="left";h="offsetWidth";}this.full=this.element.measure(function(){this.half=this.knob[h]/2;
return this.element[h]-this.knob[h]+(this.options.offset*2);}.bind(this));this.setRange(this.options.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);
d[this.axis]=this.property;b[this.axis]=[-this.options.offset,this.full-this.options.offset];var c={snap:0,limit:b,modifiers:d,onDrag:this.draggedKnob,onStart:this.draggedKnob,onBeforeStart:(function(){this.isDragging=true;
}).bind(this),onCancel:function(){this.isDragging=false;}.bind(this),onComplete:function(){this.isDragging=false;this.draggedKnob();this.end();}.bind(this)};
if(this.options.snap){c.grid=Math.ceil(this.stepWidth);c.limit[this.axis][1]=this.full;}this.drag=new Drag(this.knob,c);this.attach();if(this.options.initialStep!=null){this.set(this.options.initialStep);
}},attach:function(){this.element.addEvent("mousedown",this.clickedElement);if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement);
}this.drag.attach();return this;},detach:function(){this.element.removeEvent("mousedown",this.clickedElement);this.element.removeEvent("mousewheel",this.scrolledElement);
this.drag.detach();return this;},set:function(a){if(!((this.range>0)^(a<this.min))){a=this.min;}if(!((this.range>0)^(a>this.max))){a=this.max;}this.step=Math.round(a);
this.checkStep();this.fireEvent("tick",this.toPosition(this.step));this.end();return this;},setRange:function(a,b){this.min=$pick(a[0],0);this.max=$pick(a[1],this.options.steps);
this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);
this.set($pick(b,this.step).floor(this.min).max(this.max));return this;},clickedElement:function(c){if(this.isDragging||c.target==this.knob){return;}var b=this.range<0?-1:1;
var a=c.page[this.axis]-this.element.getPosition()[this.axis]-this.half;a=a.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+b*this.toStep(a));
this.checkStep();this.fireEvent("tick",a);this.end();},scrolledElement:function(a){var b=(this.options.mode=="horizontal")?(a.wheel<0):(a.wheel>0);this.set(b?this.step-this.stepSize:this.step+this.stepSize);
a.stop();},draggedKnob:function(){var b=this.range<0?-1:1;var a=this.drag.value.now[this.axis];a=a.limit(-this.options.offset,this.full-this.options.offset);
this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
this.fireEvent("change",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"");
}},toStep:function(a){var b=(a+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(b-=b%this.stepSize):b;},toPosition:function(a){return(this.full*Math.abs(this.min-a))/(this.steps*this.stepSize)-this.options.offset;
}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false,preventDefault:false},initialize:function(a,b){this.setOptions(b);
this.elements=[];this.lists=[];this.idle=true;this.addLists($$(document.id(a)||a));if(!this.options.clone){this.options.revert=false;}if(this.options.revert){this.effect=new Fx.Morph(null,$merge({duration:250,link:"cancel"},this.options.revert));
}},attach:function(){this.addLists(this.lists);return this;},detach:function(){this.lists=this.removeLists(this.lists);return this;},addItems:function(){Array.flatten(arguments).each(function(a){this.elements.push(a);
var b=a.retrieve("sortables:start",this.start.bindWithEvent(this,a));(this.options.handle?a.getElement(this.options.handle)||a:a).addEvent("mousedown",b);
},this);return this;},addLists:function(){Array.flatten(arguments).each(function(a){this.lists.push(a);this.addItems(a.getChildren());},this);return this;
},removeItems:function(){return $$(Array.flatten(arguments).map(function(a){this.elements.erase(a);var b=a.retrieve("sortables:start");(this.options.handle?a.getElement(this.options.handle)||a:a).removeEvent("mousedown",b);
return a;},this));},removeLists:function(){return $$(Array.flatten(arguments).map(function(a){this.lists.erase(a);this.removeItems(a.getChildren());return a;
},this));},getClone:function(b,a){if(!this.options.clone){return new Element(a.tagName).inject(document.body);}if($type(this.options.clone)=="function"){return this.options.clone.call(this,b,a,this.list);
}var c=a.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:a.getStyle("width")});if(c.get("html").test("radio")){c.getElements("input[type=radio]").each(function(d,f){d.set("name","clone_"+f);
if(d.get("checked")){a.getElements("input[type=radio]")[f].set("checked",true);}});}return c.inject(this.list).setPosition(a.getPosition(a.getOffsetParent()));
},getDroppables:function(){var a=this.list.getChildren();if(!this.options.constrain){a=this.lists.concat(a).erase(this.list);}return a.erase(this.clone).erase(this.element);
},insert:function(c,b){var a="inside";if(this.lists.contains(b)){this.list=b;this.drag.droppables=this.getDroppables();}else{a=this.element.getAllPrevious().contains(b)?"before":"after";
}this.element.inject(b,a);this.fireEvent("sort",[this.element,this.clone]);},start:function(b,a){if(!this.idle||b.rightClick||["button","input"].contains(document.id(b.target).get("tag"))){return;
}this.idle=false;this.element=a;this.opacity=a.get("opacity");this.list=a.getParent();this.clone=this.getClone(b,a);this.drag=new Drag.Move(this.clone,{preventDefault:this.options.preventDefault,snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){b.stop();
this.clone.setStyle("visibility","visible");this.element.set("opacity",this.options.opacity||0);this.fireEvent("start",[this.element,this.clone]);}.bind(this),onEnter:this.insert.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});
this.clone.inject(this.element,"before");this.drag.start(b);},end:function(){this.drag.detach();this.element.set("opacity",this.opacity);if(this.effect){var a=this.element.getStyles("width","height");
var b=this.clone.computePosition(this.element.getPosition(this.clone.getOffsetParent()));this.effect.element=this.clone;this.effect.start({top:b.top,left:b.left,width:a.width,height:a.height,opacity:0.25}).chain(this.reset.bind(this));
}else{this.reset();}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent("complete",this.element);},serialize:function(){var c=Array.link(arguments,{modifier:Function.type,index:$defined});
var b=this.lists.map(function(d){return d.getChildren().map(c.modifier||function(f){return f.get("id");},this);},this);var a=c.index;if(this.lists.length==1){a=0;
}return $chk(a)&&a>=0&&a<this.lists.length?b[a]:b;}});var Asset={javascript:function(g,d){d=$extend({onload:$empty,document:document,check:$lambda(true)},d);
if(d.onLoad){d.onload=d.onLoad;delete d.onLoad;}var b=new Element("script",{src:g,type:"text/javascript"});var f=d.onload.bind(b),a=d.check,h=d.document;
delete d.onload;delete d.check;delete d.document;b.addEvents({load:f,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){f();
}}}).set(d);if(Browser.Engine.webkit419){var c=(function(){if(!$try(a)){return;}$clear(c);f();}).periodical(50);}return b.inject(h.head);},css:function(b,a){a=a||{};
var c=a.onload||a.onLoad;if(c){a.events=a.events||{};a.events.load=c;delete a.onload;delete a.onLoad;}return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:b},a)).inject(document.head);
},image:function(c,b){b=$merge({onload:$empty,onabort:$empty,onerror:$empty},b);var d=new Image();var a=document.id(d)||new Element("img");["load","abort","error"].each(function(f){var h="on"+f;
var g=f.capitalize();if(b["on"+g]){b[h]=b["on"+g];delete b["on"+g];}var i=b[h];delete b[h];d[h]=function(){if(!d){return;}if(!a.parentNode){a.width=d.width;
a.height=d.height;}d=d.onload=d.onabort=d.onerror=null;i.delay(1,a,a);a.fireEvent(f,a,1);};});d.src=a.src=c;if(d&&d.complete){d.onload.delay(1);}return a.set(b);
},images:function(d,c){c=$merge({onComplete:$empty,onProgress:$empty,onError:$empty,properties:{}},c);d=$splat(d);var a=[];var b=0;return new Elements(d.map(function(g,f){return Asset.image(g,$extend(c.properties,{onload:function(){c.onProgress.call(this,b,f);
b++;if(b==d.length){c.onComplete();}},onerror:function(){c.onError.call(this,b,f);b++;if(b==d.length){c.onComplete();}}}));}));}};(function(){var a=function(c,b){return(c)?($type(c)=="function"?c(b):b.get(c)):"";
};this.Tips=new Class({Implements:[Events,Options],options:{onShow:function(){this.tip.setStyle("display","block");},onHide:function(){this.tip.setStyle("display","none");
},title:"title",text:function(b){return b.get("rel")||b.get("href");},showDelay:100,hideDelay:100,className:"tip-wrap",offset:{x:16,y:16},windowPadding:{x:0,y:0},fixed:false},initialize:function(){var b=Array.link(arguments,{options:Object.type,elements:$defined});
this.setOptions(b.options);if(b.elements){this.attach(b.elements);}this.container=new Element("div",{"class":"tip"});},toElement:function(){if(this.tip){return this.tip;
}return this.tip=new Element("div",{"class":this.options.className,styles:{position:"absolute",top:0,left:0}}).adopt(new Element("div",{"class":"tip-top"}),this.container,new Element("div",{"class":"tip-bottom"}));
},attach:function(b){$$(b).each(function(d){var g=a(this.options.title,d),f=a(this.options.text,d);d.erase("title").store("tip:native",g).retrieve("tip:title",g);
d.retrieve("tip:text",f);this.fireEvent("attach",[d]);var c=["enter","leave"];if(!this.options.fixed){c.push("move");}c.each(function(i){var h=d.retrieve("tip:"+i);
if(!h){h=this["element"+i.capitalize()].bindWithEvent(this,d);}d.store("tip:"+i,h).addEvent("mouse"+i,h);},this);},this);return this;},detach:function(b){$$(b).each(function(d){["enter","leave","move"].each(function(f){d.removeEvent("mouse"+f,d.retrieve("tip:"+f)).eliminate("tip:"+f);
});this.fireEvent("detach",[d]);if(this.options.title=="title"){var c=d.retrieve("tip:native");if(c){d.set("title",c);}}},this);return this;},elementEnter:function(c,b){this.container.empty();
["title","text"].each(function(f){var d=b.retrieve("tip:"+f);if(d){this.fill(new Element("div",{"class":"tip-"+f}).inject(this.container),d);}},this);$clear(this.timer);
this.timer=(function(){this.show(b);this.position((this.options.fixed)?{page:b.getPosition()}:c);}).delay(this.options.showDelay,this);},elementLeave:function(c,b){$clear(this.timer);
this.timer=this.hide.delay(this.options.hideDelay,this,b);this.fireForParent(c,b);},fireForParent:function(c,b){b=b.getParent();if(!b||b==document.body){return;
}if(b.retrieve("tip:enter")){b.fireEvent("mouseenter",c);}else{this.fireForParent(c,b);}},elementMove:function(c,b){this.position(c);},position:function(f){if(!this.tip){document.id(this);
}var c=window.getSize(),b=window.getScroll(),g={x:this.tip.offsetWidth,y:this.tip.offsetHeight},d={x:"left",y:"top"},h={};for(var i in d){h[d[i]]=f.page[i]+this.options.offset[i];
if((h[d[i]]+g[i]-b[i])>c[i]-this.options.windowPadding[i]){h[d[i]]=f.page[i]-this.options.offset[i]-g[i];}}this.tip.setStyles(h);},fill:function(b,c){if(typeof c=="string"){b.set("html",c);
}else{b.adopt(c);}},show:function(b){if(!this.tip){document.id(this);}if(!this.tip.getParent()){this.tip.inject(document.body);}this.fireEvent("show",[this.tip,b]);
},hide:function(b){if(!this.tip){document.id(this);}this.fireEvent("hide",[this.tip,b]);}});})();MooTools.lang.set("en-US","Date",{months:["January","February","March","April","May","June","July","August","September","October","November","December"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dateOrder:["month","date","year"],shortDate:"%m/%d/%Y",shortTime:"%I:%M%p",AM:"AM",PM:"PM",ordinal:function(a){return(a>3&&a<21)?"th":["th","st","nd","rd","th"][Math.min(a%10,4)];
},lessThanMinuteAgo:"less than a minute ago",minuteAgo:"about a minute ago",minutesAgo:"{delta} minutes ago",hourAgo:"about an hour ago",hoursAgo:"about {delta} hours ago",dayAgo:"1 day ago",daysAgo:"{delta} days ago",weekAgo:"1 week ago",weeksAgo:"{delta} weeks ago",monthAgo:"1 month ago",monthsAgo:"{delta} months ago",yearAgo:"1 year ago",yearsAgo:"{delta} years ago",lessThanMinuteUntil:"less than a minute from now",minuteUntil:"about a minute from now",minutesUntil:"{delta} minutes from now",hourUntil:"about an hour from now",hoursUntil:"about {delta} hours from now",dayUntil:"1 day from now",daysUntil:"{delta} days from now",weekUntil:"1 week from now",weeksUntil:"{delta} weeks from now",monthUntil:"1 month from now",monthsUntil:"{delta} months from now",yearUntil:"1 year from now",yearsUntil:"{delta} years from now"});
//based on prototype's ajax class
//to be used with prototype.lite, moofx.mad4milk.net.
ajax = Class.create();
ajax.prototype = {
initialize: function(url, options){
this.transport = this.getTransport();
this.postBody = options.postBody || '';
this.method = options.method || 'post';
this.onComplete = options.onComplete || null;
this.update = $(options.update) || null;
this.request(url);
},
request: function(url){
this.transport.open(this.method, url, true);
this.transport.onreadystatechange = this.onStateChange.bind(this);
if (this.method == 'post') {
this.transport.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
if (this.transport.overrideMimeType) this.transport.setRequestHeader('Connection', 'close');
}
this.transport.send(this.postBody);
},
onStateChange: function(){
if (this.transport.readyState == 4 && this.transport.status == 200) {
if (this.onComplete)
setTimeout(function(){this.onComplete(this.transport);}.bind(this), 10);
if (this.update)
setTimeout(function(){this.update.innerHTML = this.transport.responseText;}.bind(this), 10);
this.transport.onreadystatechange = function(){};
}
},
getTransport: function() {
if (window.ActiveXObject) return new ActiveXObject('Microsoft.XMLHTTP');
else if (window.XMLHttpRequest) return new XMLHttpRequest();
else return false;
}
};
// cmscript: globals
var isIE5or6, isIE6;
cxlEnv.isIE5or6 = cxlEnv.isIE6 = isIE5or6 = isIE6 = Browser.Engine.trident4;
// cmscript: clientcide
/*
Script: dbug.js
A wrapper for Firebug console.* statements.
License:
http://clientside.cnet.com/wiki/cnet-libraries#license
*/
var dbug = {
logged: [],	
timers: {},
firebug: false, 
enabled: false, 
log: function() {
dbug.logged.push(arguments);
},
nolog: function(msg) {
dbug.logged.push(arguments);
},
time: function(name){
dbug.timers[name] = new Date().getTime();
},
timeEnd: function(name){
if (dbug.timers[name]) {
var end = new Date().getTime() - dbug.timers[name];
dbug.timers[name] = false;
dbug.log('%s: %s', name, end);
} else dbug.log('no such timer: %s', name);
},
enable: function(silent) { 
if(dbug.firebug) {
try {
dbug.enabled = true;
dbug.log = function(){
(console.debug || console.log).apply(console, arguments);
};
dbug.time = function(){
console.time.apply(console, arguments);
};
dbug.timeEnd = function(){
console.timeEnd.apply(console, arguments);
};
if(!silent) dbug.log('enabling dbug');
for(var i=0;i<dbug.logged.length;i++){ dbug.log.apply(console, dbug.logged[i]); }
dbug.logged=[];
} catch(e) {
dbug.enable.delay(400);
}
}
},
disable: function(){ 
if(dbug.firebug) dbug.enabled = false;
dbug.log = dbug.nolog;
dbug.time = function(){};
dbug.timeEnd = function(){};
},
cookie: function(set){
var value = document.cookie.match('(?:^|;)\\s*jsdebug=([^;]*)');
var debugCookie = value ? unescape(value[1]) : false;
if((debugCookie != 'true' || set) && !set) {
dbug.enable();
dbug.log('setting debugging cookie');
var date = new Date();
date.setTime(date.getTime()+(24*60*60*1000));
document.cookie = 'jsdebug=true;expires='+date.toGMTString()+';path=/;';
} else dbug.disableCookie();
},
disableCookie: function(){
dbug.log('disabling debugging cookie');
document.cookie = 'jsdebug=false;path=/;';
}
};
(function(){
var fb = typeof console != "undefined";
var debugMethods = ['debug','info','warn','error','assert','dir','dirxml'];
var otherMethods = ['trace','group','groupEnd','profile','profileEnd','count'];
function set(methodList, defaultFunction) {
for(var i = 0; i < methodList.length; i++){
dbug[methodList[i]] = (fb && console[methodList[i]])?console[methodList[i]]:defaultFunction;
}
};
set(debugMethods, dbug.log);
set(otherMethods, function(){});
})();
if (typeof console != "undefined" && console.warn){
dbug.firebug = true;
var value = document.cookie.match('(?:^|;)\\s*jsdebug=([^;]*)');
var debugCookie = value ? unescape(value[1]) : false;
if(window.location.href.indexOf("jsdebug=true")>0 || debugCookie=='true') dbug.enable();
if(debugCookie=='true')dbug.log('debugging cookie enabled');
if(window.location.href.indexOf("jsdebugCookie=true")>0){
dbug.cookie();
if(!dbug.enabled)dbug.enable();
}
if(window.location.href.indexOf("jsdebugCookie=false")>0)dbug.disableCookie();
}
/*
Script: Element.Measure.js
Extends the Element native object to include methods useful in measuring dimensions.
License:
http://clientside.cnet.com/wiki/cnet-libraries#license
*/
Element.implement({
expose: function(){
if (this.getStyle('display') != 'none') return $empty;
var before = {};
var styles = { visibility: 'hidden', display: 'block', position:'absolute' };
//use this method instead of getStyles 
$each(styles, function(value, style){
before[style] = this.style[style]||'';
}, this);
//this.getStyles('visibility', 'display', 'position');
this.setStyles(styles);
return (function(){ this.setStyles(before); }).bind(this);
},
getDimensions: function(options) {
options = $merge({computeSize: false},options);
var dim = {};
function getSize(el, options){
return (options.computeSize)?el.getComputedSize(options):el.getSize();
};
if(this.getStyle('display') == 'none'){
var restore = this.expose();
dim = getSize(this, options); //works now, because the display isn't none
restore(); //put it back where it was
} else {
try { //safari sometimes crashes here, so catch it
dim = getSize(this, options);
}catch(e){}
}
return $chk(dim.x)?$extend(dim, {width: dim.x, height: dim.y}):$extend(dim, {x: dim.width, y: dim.height});
},
getComputedSize: function(options){
options = $merge({
styles: ['padding','border'],
plains: {height: ['top','bottom'], width: ['left','right']},
mode: 'both'
}, options);
var size = {width: 0,height: 0};
switch (options.mode){
case 'vertical':
delete size.width;
delete options.plains.width;
break;
case 'horizontal':
delete size.height;
delete options.plains.height;
break;
};
var getStyles = [];
//this function might be useful in other places; perhaps it should be outside this function?
$each(options.plains, function(plain, key){
plain.each(function(edge){
options.styles.each(function(style){
getStyles.push((style=="border")?style+'-'+edge+'-'+'width':style+'-'+edge);
});
});
});
var styles = this.getStyles.apply(this, getStyles);
var subtracted = [];
$each(options.plains, function(plain, key){ //keys: width, height, plains: ['left','right'], ['top','bottom']
size['total'+key.capitalize()] = 0;
size['computed'+key.capitalize()] = 0;
plain.each(function(edge){ //top, left, right, bottom
size['computed'+edge.capitalize()] = 0;
getStyles.each(function(style,i){ //padding, border, etc.
//'padding-left'.test('left') size['totalWidth'] = size['width']+[padding-left]
if(style.test(edge)) {
styles[style] = styles[style].toInt(); //styles['padding-left'] = 5;
if(isNaN(styles[style]))styles[style]=0;
size['total'+key.capitalize()] = size['total'+key.capitalize()]+styles[style];
size['computed'+edge.capitalize()] = size['computed'+edge.capitalize()]+styles[style];
}
//if width != width (so, padding-left, for instance), then subtract that from the total
if(style.test(edge) && key!=style && 
(style.test('border') || style.test('padding')) && !subtracted.contains(style)) {
subtracted.push(style);
size['computed'+key.capitalize()] = size['computed'+key.capitalize()]-styles[style];
}
});
});
});
if($chk(size.width)) {
size.width = size.width+this.offsetWidth+size.computedWidth;
size.totalWidth = size.width + size.totalWidth;
delete size.computedWidth;
}
if($chk(size.height)) {
size.height = size.height+this.offsetHeight+size.computedHeight;
size.totalHeight = size.height + size.totalHeight;
delete size.computedHeight;
}
return $extend(styles, size);
}
});
/*
Script: Element.Shortcuts.js
Extends the Element native object to include some shortcut methods.
License:
http://clientside.cnet.com/wiki/cnet-libraries#license
*/
Element.implement({
isVisible: function() {
return this.getStyle('display') != 'none';
},
toggle: function() {
return this[this.isVisible() ? 'hide' : 'show']();
},
hide: function() {
var d;
try {
//IE fails here if the element is not in the dom
d = this.getStyle('display');
} catch(e){}
this.store('originalDisplay', d||'block'); 
this.setStyle('display','none');
return this;
},
show: function(display) {
original = this.retrieve('originalDisplay')?this.retrieve('originalDisplay'):this.get('originalDisplay');
this.setStyle('display',(display || original || 'block'));
return this;
},
swapClass: function(remove, add) {
return this.removeClass(remove).addClass(add);
},
//TODO
//DO NOT USE THIS METHOD
//it is temporary, as Mootools 1.1 will negate its requirement
fxOpacityOk: function(){
return !Browser.Engine.trident4;
}
});
/*
Script: Fx.Reveal.js
Defines Fx.Reveal, a class that shows and hides elements with a transition.
License:
http://clientside.cnet.com/wiki/cnet-libraries#license
*/
Fx.Reveal = new Class({
Extends: Fx.Morph,
options: {
styles: ['padding','border','margin'],
transitionOpacity: true,
mode:'vertical',
heightOverride: null,
widthOverride: null
},
dissolve: function(){
try {
if(!this.hiding && !this.showing) {
if(this.element.getStyle('display') != 'none'){
this.hiding = true;
this.showing = false;
this.hidden = true;
var startStyles = this.element.getComputedSize({
styles: this.options.styles,
mode: this.options.mode
});
var setToAuto = this.element.style.height === ""||this.element.style.height=="auto";
this.element.setStyle('display', 'block');
if (this.element.fxOpacityOk() && this.options.transitionOpacity) startStyles.opacity = 1;
var zero = {};
$each(startStyles, function(style, name){
zero[name] = [style, 0]; 
}, this);
var overflowBefore = this.element.getStyle('overflow');
this.element.setStyle('overflow', 'hidden');
//put the final fx method at the front of the chain
if (!this.$chain) this.$chain = [];
this.$chain.unshift(function(){
if(this.hidden) {
this.hiding = false;
$each(startStyles, function(style, name) {
startStyles[name] = style;
}, this);
this.element.setStyles($merge({display: 'none', overflow: overflowBefore}, startStyles));
if (setToAuto) this.element.setStyle('height', 'auto');
}
this.callChain();
}.bind(this));
this.start(zero);
} else {
this.callChain.delay(10, this);
this.fireEvent('onComplete', this.element);
}
}
} catch(e) {
this.hiding = false;
this.element.hide();
this.callChain.delay(10, this);
this.fireEvent('onComplete', this.element);
}
return this;
},
reveal: function(){
try {
if(!this.showing && !this.hiding) {
if(this.element.getStyle('display') == "none" || 
this.element.getStyle('visiblity') == "hidden" || 
this.element.getStyle('opacity')==0){
this.showing = true;
this.hiding = false;
this.hidden = false;
//toggle display, but hide it
var before = this.element.getStyles('visibility', 'display', 'position');
this.element.setStyles({
visibility: 'hidden',
display: 'block',
position:'absolute'
});
var setToAuto = this.element.style.height === ""||this.element.style.height=="auto";
//enable opacity effects
if(this.element.fxOpacityOk() && this.options.transitionOpacity) this.element.setStyle('opacity',0);
//create the styles for the opened/visible state
var startStyles = this.element.getComputedSize({
styles: this.options.styles,
mode: this.options.mode
});
//reset the styles back to hidden now
this.element.setStyles(before);
$each(startStyles, function(style, name) {
startStyles[name] = style;
}, this);
//if we're overridding height/width
if($chk(this.options.heightOverride)) startStyles['height'] = this.options.heightOverride.toInt();
if($chk(this.options.widthOverride)) startStyles['width'] = this.options.widthOverride.toInt();
if(this.element.fxOpacityOk() && this.options.transitionOpacity) startStyles.opacity = 1;
//create the zero state for the beginning of the transition
var zero = { 
height: 0,
display: 'block'
};
$each(startStyles, function(style, name){ zero[name] = 0 }, this);
var overflowBefore = this.element.getStyle('overflow');
//set to zero
this.element.setStyles($merge(zero, {overflow: 'hidden'}));
//start the effect
this.start(startStyles);
if (!this.$chain) this.$chain = [];
this.$chain.unshift(function(){
if (!this.options.heightOverride && setToAuto) {
if (["vertical", "both"].contains(this.options.mode)) this.element.setStyle('height', 'auto');
if (["width", "both"].contains(this.options.mode)) this.element.setStyle('width', 'auto');
}
if(!this.hidden) this.showing = false;
this.element.setStyle('overflow', overflowBefore);
this.callChain();
}.bind(this));
} else {
this.callChain();
this.fireEvent('onComplete', this.element);
}
}
} catch(e) {
this.element.setStyles({
display: 'block',
visiblity: 'visible',
opacity: 1
});
this.showing = false;
this.callChain.delay(10, this);
this.fireEvent('onComplete', this.element);
}
return this;
},
toggle: function(){
try {
if(this.element.getStyle('display') == "none" || 
this.element.getStyle('visiblity') == "hidden" || 
this.element.getStyle('opacity')==0){
this.reveal();
} else {
this.dissolve();
}
} catch(e) { this.show(); }
return this;
}
});
Element.Properties.reveal = {
set: function(options){
var reveal = this.retrieve('reveal');
if (reveal) reveal.cancel();
return this.eliminate('reveal').store('reveal:options', $extend({link: 'cancel'}, options));
},
get: function(options){
if (options || !this.retrieve('reveal')){
if (options || !this.retrieve('reveal:options')) this.set('reveal', options);
this.store('reveal', new Fx.Reveal(this, this.retrieve('reveal:options')));
}
return this.retrieve('reveal');
}
};
Element.Properties.dissolve = Element.Properties.reveal;
Element.implement({
reveal: function(options){
this.get('reveal', options).reveal();
return this;
},
dissolve: function(options){
this.get('reveal', options).dissolve();
return this;
}
});
/*
Script: MultipleOpenAccordion.js
Creates a Mootools Fx.Accordion that allows the user to open more than one element.
License:
http://clientside.cnet.com/wiki/cnet-libraries#license
*/
var MultipleOpenAccordion = new Class({
Implements: [Options, Events, Chain],
options: {
togglers: [],
elements: [],
openAll: true,
firstElementsOpen: [0],
fixedHeight: false,
fixedWidth: false,
height: true,
opacity: true,
width: false
//	onActive: $empty,
//	onBackground: $empty
},
togglers: [],
elements: [],
initialize: function(container, options){
this.setOptions(options);
this.container = $(container);
elements = $$(options.elements);
$$(options.togglers).each(function(toggler, idx){
this.addSection(toggler, elements[idx], idx);
}, this);
if (this.togglers.length) {
if (this.options.openAll) this.showAll();
else this.openSections(this.options.firstElementsOpen);
}
},
addSection: function(toggler, element, pos){
toggler = $(toggler);
element = $(element);
var test = this.togglers.contains(toggler);
var len = this.togglers.length;
this.togglers.include(toggler);
this.elements.include(element);
if (len && (!test || pos)){
pos = $pick(pos - 1, len - 1);
toggler.inject(this.elements[pos], 'after');
element.inject(toggler, 'after');
} else if (this.container && !test){
toggler.inject(this.container);
element.inject(this.container);
}
var idx = this.togglers.indexOf(toggler);
toggler.addEvent('click', this.toggleSection.bind(this, idx));
var mode;
if (this.options.height && this.options.width) mode = "both";
else mode = (this.options.height)?"vertical":"horizontal";
element.store('reveal', new Fx.Reveal(element, {
transitionOpacity: this.options.opacity,
mode: mode,
heightOverride: this.options.fixedHeight,
widthOverride: this.options.fixedWidth
}));
return this;
},
onComplete: function(idx, callChain){
this.fireEvent(this.elements[idx].isVisible()?'onActive':'onBackground', [this.togglers[idx], this.elements[idx]]);
this.callChain();
return this;
},
showSection: function(idx, useFx){
alert("showing");
this.toggleSection(idx, useFx, true);
},
hideSection: function(idx, useFx){
this.toggleSection(idx, useFx, false);
},
toggleSection: function(idx, useFx, show, callChain){
var method = show?'reveal':$defined(show)?'dissolve':'toggle';
callChain = $pick(callChain, true);
if($pick(useFx, true)) {
this.elements[idx].retrieve('reveal')[method]().chain(
this.onComplete.bind(this, [idx, callChain])
);
} else {
if (method == "toggle") el.togglek();
else el[method == "reveal"?'show':'hide']();
this.onComplete(idx, callChain);
}
return this;
},
toggleAll: function(useFx, show){
var method = show?'reveal':$chk(show)?'disolve':'toggle';
var last = this.elements.getLast();
this.elements.each(function(el, idx){
this.toggleSection(idx, useFx, show, el == last);
}, this);
return this;
},
toggleSections: function(sections, useFx, show) {
last = sections.getLast();
this.elements.each(function(el,idx){
this.toggleSection(idx, useFx, sections.contains(idx), show, idx == last);
}, this);
return this;
},
openSections: function(sections, useFx){
this.toggleSections(sections, useFx, true);
},
closeSections: function(sections, useFx){
this.toggleSections(sections, useFx, false);
},
showAll: function(useFx){
return this.toggleAll(useFx, true);
},
hideAll: function(useFx){
return this.toggleAll(useFx, false);
}
});
/*
Script: SimpleCarousel.js
Builds a carousel object that manages the basic functions of a generic carousel (a carousel	here being a collection of "slides" that play from one to the next, with a collection of "buttons" that reference each slide).
License:
http://clientside.cnet.com/wiki/cnet-libraries#license
*/
var SimpleCarousel = new Class({
Implements: [Options, Events],
options: {
//	onRotate: $empty,
//	onStop: $empty,
//	onAutoPlay: $empty,
//	onShowSlide: $empty,
slideInterval: 4000,
transitionDuration: 700,
startIndex: 0,
buttonOnClass: "selected",
buttonOffClass: "off",
rotateAction: "none",
rotateActionDuration: 100,
autoplay: true
},
initialize: function(container, slides, buttons, options){
this.container = $(container);
if(this.container.hasClass('hasCarousel')) return false;
this.setOptions(options);
this.container.addClass('hasCarousel');
this.slides = $$(slides);
this.buttons = $$(buttons);
this.createFx();
this.showSlide(this.options.startIndex);
if(this.options.autoplay) this.autoplay();
if(this.options.rotateAction != 'none') this.setupAction(this.options.rotateAction);
return this;
},
toElement: function(){
return this.container;
},
setupAction: function(action) {
this.buttons.each(function(el, idx){
$(el).addEvent(action, function() {
this.slideFx.setOptions(this.slideFx.options, {duration: this.options.rotateActionDuration});
if(this.currentSlide != idx) this.showSlide(idx);
this.stop();
}.bind(this));
}, this);
},
createFx: function(){
if (!this.slideFx) this.slideFx = new Fx.Elements(this.slides, {duration: this.options.transitionDuration});
this.slides.each(function(slide){
slide.setStyle('opacity',0);
});
},
showSlide: function(slideIndex){
var action = {};
this.slides.each(function(slide, index){
if(index == slideIndex && index != this.currentSlide){ //show
$(this.buttons[index]).swapClass(this.options.buttonOffClass, this.options.buttonOnClass);
action[index.toString()] = {
opacity: 1
};
} else {
$(this.buttons[index]).swapClass(this.options.buttonOnClass, this.options.buttonOffClass);
action[index.toString()] = {
opacity:0
};
}
}, this);
this.fireEvent('onShowSlide', slideIndex);
this.currentSlide = slideIndex;
this.slideFx.start(action);
return this;
},
autoplay: function(){
this.slideshowInt = this.rotate.periodical(this.options.slideInterval, this);
this.fireEvent('onAutoPlay');
return this;
},
stop: function(){
$clear(this.slideshowInt);
this.fireEvent('onStop');
return this;
},
rotate: function(){
current = this.currentSlide;
next = (current+1 >= this.slides.length) ? 0 : current+1;
this.showSlide(next);
this.fireEvent('onRotate', next);
return this;
}
});
// cmscript: tipsx3 
/*
Script: TipsX3.js
Tooltips, BubbleTips, whatever they are, they will appear on mouseover
License:
MIT-style license.
Credits:
The idea behind Tips.js is based on Bubble Tooltips (<http://web-graphics.com/mtarchive/001717.php>) by Alessandro Fulcitiniti <http://web-graphics.com>
TipsX3.js is based on Tips.js, with slight modifications, by razvan@e-magine.ro
*/
/*
Class: TipsX3
Display a tip on any element with a title and/or href.
Note:
Tips requires an XHTML doctype.
Arguments:
elements - a collection of elements to apply the tooltips to on mouseover.
options - an object. See options Below.
Options:
maxTitleChars - the maximum number of characters to display in the title of the tip. defaults to 30.
onShow - optionally you can alter the default onShow behaviour with this option (like displaying a fade in effect);
onHide - optionally you can alter the default onHide behaviour with this option (like displaying a fade out effect);
showDelay - the delay the onShow method is called. (defaults to 100 ms)
hideDelay - the delay the onHide method is called. (defaults to 100 ms)
className - the prefix for your tooltip classNames. defaults to 'tool'.
the whole tooltip will have as classname: tool-tip
the title will have as classname: tool-title
the text will have as classname: tool-text
offsets - the distance of your tooltip from the mouse. an Object with x/y properties.
fixed - if set to true, the toolTip will not follow the mouse.
loadingText - text to display as a title while loading an AJAX tooltip.
errTitle, errText - text to display when there's a problem with the AJAX request.
Example:
(start code)
<img src="/images/i.png" title="The body of the tooltip is stored in the title" class="toolTipImg"/>
<script>
var myTips = new Tips($$('.toolTipImg'), {
maxTitleChars: 50	//I like my captions a little long
});
</script>
(end)
Note:
The title of the element will always be used as the tooltip body. If you put :: on your title, the text before :: will become the tooltip title.
If you put DOM:someElementID in your title, $('someElementID').innerHTML will be used as your tooltip contents (same syntax as above).
If you put AJAX:http://www.example.com/path/to/ajax_file.php in your title, the response text will be used as tooltip contents (same syntax as above). Either absolute or relative paths are ok.
*/
var TipsX3 = new Class({
options: { // modded for X3
onShow: function(tip){
tip.setStyle('visibility', 'visible');
},
onHide: function(tip){
tip.setStyle('visibility', 'hidden');
},
maxTitleChars: 30,
showDelay: 100,
hideDelay: 100,
className: 'tool',
offsets: {'x': 16, 'y': 16},
fixed: false,
loadingText: 'Loading...',
errTitle: 'Oops..',
errText: 'There was a problem retrieving the tooltip.'
},
initialize: function(elements, options){
this.setOptions(options);
this.toolTip = new Element('div', {
'class': this.options.className + '-tip',
'styles': {
'position': 'absolute',
'top': '0',
'left': '0',
'visibility': 'hidden'
}
}).inject(document.body);
this.wrapper = new Element('div').inject(this.toolTip);
$$(elements).each(this.build, this);
if (this.options.initialize) this.options.initialize.call(this);
},
build: function(el){ // modded for X3
el.$tmp.myTitle = (el.href && el.getTag() == 'a') ? el.href.replace('http://', '') : (el.rel || false);
if (el.title){
// check if we need to extract contents from a DOM element
if (el.title.test('^DOM:', 'i')) {
el.title = $(el.title.split(':')[1].trim()).innerHTML;	
}
// check for an URL to retrieve content from
if (el.title.test('^AJAX:', 'i')) {
el.title = this.options.loadingText + '::' + el.title;
}
var dual = el.title.split('::');
if (dual.length > 1) {
el.$tmp.myTitle = dual[0].trim();
el.$tmp.myText = dual[1].trim();
} else {
el.$tmp.myText = el.title;
}
el.removeAttribute('title');
} else {
el.$tmp.myText = false;
}
if (el.$tmp.myTitle && el.$tmp.myTitle.length > this.options.maxTitleChars) el.$tmp.myTitle = el.$tmp.myTitle.substr(0, this.options.maxTitleChars - 1) + "&hellip;";
el.addEvent('mouseenter', function(event){
this.start(el);
if (!this.options.fixed) this.locate(event);
else this.position(el);
}.bind(this));
if (!this.options.fixed) el.addEvent('mousemove', this.locate.bindWithEvent(this));
var end = this.end.bind(this);
el.addEvent('mouseleave', end);
el.addEvent('trash', end);
},
start: function(el){ // modded for X3
this.wrapper.empty();
// check if we have an AJAX request - if so, show a loading animation and launch the request	
if (el.$tmp.myText && el.$tmp.myText.test('^AJAX:', 'i')) {
//if (this.ajax) this.ajax.cancel();
this.ajax = new Ajax (el.$tmp.myText.replace(/AJAX:/i,''), {
onComplete: function (responseText, responseXML) {
el.title = responseText;
this.build(el);
this.start(el);
}.bind(this),
onFailure: function () {
el.title = this.options.errTitle + '::' + this.options.errText;
this.build(el);
this.start(el);
}.bind(this),
method: 'get'
}).request();	
el.$tmp.myText = '<div class="' + this.options.className + '-loading">&nbsp;</div>';	
}
if (el.$tmp.myTitle){
this.title = new Element('span').inject(
new Element('div', {'class': this.options.className + '-title'}).inject(this.wrapper)
).setHTML(el.$tmp.myTitle);
}
if (el.$tmp.myText){
this.text = new Element('span').inject(
new Element('div', {'class': this.options.className + '-text'}).inject(this.wrapper)
).setHTML(el.$tmp.myText);
}
$clear(this.timer);
this.timer = this.show.delay(this.options.showDelay, this);
},
end: function(event){
$clear(this.timer);
this.timer = this.hide.delay(this.options.hideDelay, this);
},
position: function(element){
var pos = element.getPosition();
this.toolTip.setStyles({
'left': pos.x + this.options.offsets.x,
'top': pos.y + this.options.offsets.y
});
},
locate: function(event){
var win = {'x': window.getWidth(), 'y': window.getHeight()};
var scroll = {'x': window.getScrollLeft(), 'y': window.getScrollTop()};
var tip = {'x': this.toolTip.offsetWidth, 'y': this.toolTip.offsetHeight};
var prop = {'x': 'left', 'y': 'top'};
for (var z in prop){
var pos = event.page[z] + this.options.offsets[z];
if ((pos + tip[z] - scroll[z]) > win[z]) pos = event.page[z] - this.options.offsets[z] - tip[z];
this.toolTip.setStyle(prop[z], pos);
};
},
show: function(){
if (this.options.timeout) this.timer = this.hide.delay(this.options.timeout, this);
this.fireEvent('onShow', [this.toolTip]);
},
hide: function(){
this.fireEvent('onHide', [this.toolTip]);
}
});
TipsX3.implement(new Events, new Options);
// cmscript: cookie 
// =========================================================================
// Cookie functions
// =========================================================================
/* This function is used to set cookies */
function setCookie(name,value,expires,path,domain,secure) {
document.cookie = name + "=" + escape (value) +
((expires) ? "; expires=" + expires.toGMTString() : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
}
/* This function is used to get cookies */
function getCookie(name) {
var prefix = name + "=";
var start = document.cookie.indexOf(prefix);
if (start==-1) {
return null;
}
var end = document.cookie.indexOf(";", start+prefix.length);
if (end==-1) {
end=document.cookie.length;
}
var value=document.cookie.substring(start+prefix.length, end);
return unescape(value);
}
/* This function is used to delete cookies */
function deleteCookie(name,path,domain) {
if (getCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
}
function setMenuCookie(id, context) {
if (cxlEnv)
cxlEnv.previousMenuCookie = getCookie("subMenu");
setCookie("subMenu", id, "", "/");
}
function revertMenuCookie()
{
if (cxlEnv.previousMenuCookie)
setMenuCookie(cxlEnv.previousMenuCookie);
}
// cmscript: topnav 
/* (c) 2005 CaribMedia
* this module places IFRAME elements behind UL elements
* in order to prevent content to be placed
* on top of the dynamic menus
*/
/*
* @name addMenuEffects
* @description places the IFRAME
* preconditions:
* - there can be only one IFRAME
* - the menu has an id of "nav"
* - the menu is built as a nested list (UL/LI)
* - the script is run in IE
* @author Michiel van der Blonk
* @date Nov 22, 2005
*/
/* anonymous function wrapper, protects global namespace */
(function() {
if (!document.getElementById)
return;
if (!window.MooTools)
return;
window.debugInfo = function(s) {
if (!$('contentPane'))
return;
if (!window.debugmode)
window.debugmode = true;
else
$('contentPane').innerHTML = '';
$('contentPane').innerHTML += s;
};
var addMenuEffects = function(obj, doShim, doHover)
{
/* only in IE */
if (!cxlEnv.isIE5or6 || !obj)
return;
var iframeCode = '<iframe class="menushim" src="about:blank" scrolling="no" frameborder="0"></iframe>';
// add an IFRAME to all UL's in the menu,
// this will make IE display the menu on top of all other elements
if (doShim)
{
$(obj).getElements('ul').each(function(tag) {
tag.innerHTML=(iframeCode + tag.innerHTML);
//tag.addEvent('mouseover', function() {tag.addClass('over');});
//tag.addEvent('mouseout', function() {tag.removeClass('over');});
});
}
// resize the iframe
$(obj).getElements('li ul').each(function(tag) {
tag.addEvent('mouseenter', function() {
tag.getElements('iframe')[0].setStyle('height', tag.clientHeight -1 + 'px');
});
});
};
/*
* @name startList
* @description adds the menu effects for several menus
* @author Michiel van der Blonk
* @date Nov 22, 2005
*/
var startList = function()
{
['dynamicMenu', 'nav', 'subMenu'].each(function(item) {
if ($(item))
addMenuEffects($(item), true, true);
});
};
/*
* @name addEvent
* @description adds an event handler to an element
* this way multiple functions can be triggered by an event
* @author Michiel van der Blonk
* @date Nov 22, 2005
*/
if (!window.addEvent)
{
window.addEvent = function(obj, evType, fn)
{
var ret = false;
// MB:check if fn exists
if (!fn || typeof fn != 'function')
return false;
// adds an eventListener for browsers which support it
// Written by Scott Andrew: nice one, Scott
if (obj.addEventListener)
{
obj.addEventListener(evType, fn, true);
ret = true;
}
else
if (obj.attachEvent)
{
var r = obj.attachEvent("on"+evType,fn);
ret = r;
}
return ret;
};
}
var dragStuff = function()
{
// if mootools is loaded, use the short version
if (window.MooTools && $chk(Drag))
$$('.drag').makeDraggable();
else
{
if (!window.Drag || !document.getElementById)
return;
draggableItems = ['obj1', 'extra3'];
for (var i=0; i < draggableItems.length; i++) {
var dragger = document.getElementById(draggableItems[i]);
if (dragger) {
dragger.style.position = 'relative';
Drag.init(dragger, null);
}
}
}
};
// window.addEvent('load', startList);
window.addEvent('load', dragStuff);
window.addEvent('load', function(){setMenuCookie(-1);});
})();
// cmscript: swfobject 
/*! SWFObject v2.1 <http://code.google.com/p/swfobject/>
Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject = function() {
var UNDEF = "undefined",
OBJECT = "object",
SHOCKWAVE_FLASH = "Shockwave Flash",
SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
FLASH_MIME_TYPE = "application/x-shockwave-flash",
EXPRESS_INSTALL_ID = "SWFObjectExprInst",
win = window,
doc = document,
nav = navigator,
domLoadFnArr = [],
regObjArr = [],
objIdArr = [],
listenersArr = [],
script,
timer = null,
storedAltContent = null,
storedAltContentId = null,
isDomLoaded = false,
isExpressInstallActive = false;
/* Centralized function for browser feature detection
- Proprietary feature detection (conditional compiling) is used to detect Internet Explorer's features
- User agent string detection is only used when no alternative is possible
- Is executed directly for optimal performance
*/	
var ua = function() {
var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
playerVersion = [0,0,0],
d = null;
if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
d = nav.plugins[SHOCKWAVE_FLASH].description;
if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
playerVersion[2] = /r/.test(d) ? parseInt(d.replace(/^.*r(.*)$/, "$1"), 10) : 0;
}
}
else if (typeof win.ActiveXObject != UNDEF) {
var a = null, fp6Crash = false;
try {
a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".7");
}
catch(e) {
try { 
a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".6");
playerVersion = [6,0,21];
a.AllowScriptAccess = "always";	// Introduced in fp6.0.47
}
catch(e) {
if (playerVersion[0] == 6) {
fp6Crash = true;
}
}
if (!fp6Crash) {
try {
a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
}
catch(e) {}
}
}
if (!fp6Crash && a) { // a will return null when ActiveX is disabled
try {
d = a.GetVariable("$version");	// Will crash fp6.0.21/23/29
if (d) {
d = d.split(" ")[1].split(",");
playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
}
}
catch(e) {}
}
}
var u = nav.userAgent.toLowerCase(),
p = nav.platform.toLowerCase(),
webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
ie = false,
windows = p ? /win/.test(p) : /win/.test(u),
mac = p ? /mac/.test(p) : /mac/.test(u);
/*@cc_on
ie = true;
@if (@_win32)
windows = true;
@elif (@_mac)
mac = true;
@end
@*/
return { w3cdom:w3cdom, pv:playerVersion, webkit:webkit, ie:ie, win:windows, mac:mac };
}();
/* Cross-browser onDomLoad
- Based on Dean Edwards' solution: http://dean.edwards.name/weblog/2006/06/again/
- Will fire an event as soon as the DOM of a page is loaded (supported by Gecko based browsers - like Firefox -, IE, Opera9+, Safari)
*/ 
var onDomLoad = function() {
if (!ua.w3cdom) {
return;
}
addDomLoadEvent(main);
if (ua.ie && ua.win) {
try {	// Avoid a possible Operation Aborted error
doc.write("<scr" + "ipt id=__ie_ondomload defer=true src=//:></scr" + "ipt>"); // String is split into pieces to avoid Norton AV to add code that can cause errors 
script = getElementById("__ie_ondomload");
if (script) {
addListener(script, "onreadystatechange", checkReadyState);
}
}
catch(e) {}
}
if (ua.webkit && typeof doc.readyState != UNDEF) {
timer = setInterval(function() { if (/loaded|complete/.test(doc.readyState)) { callDomLoadFunctions(); }}, 10);
}
if (typeof doc.addEventListener != UNDEF) {
doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, null);
}
addLoadEvent(callDomLoadFunctions);
}();
function checkReadyState() {
if (script.readyState == "complete") {
script.parentNode.removeChild(script);
callDomLoadFunctions();
}
}
function callDomLoadFunctions() {
if (isDomLoaded) {
return;
}
if (ua.ie && ua.win) { // Test if we can really add elements to the DOM; we don't want to fire it too early
var s = createElement("span");
try { // Avoid a possible Operation Aborted error
var t = doc.getElementsByTagName("body")[0].appendChild(s);
t.parentNode.removeChild(t);
}
catch (e) {
return;
}
}
isDomLoaded = true;
if (timer) {
clearInterval(timer);
timer = null;
}
var dl = domLoadFnArr.length;
for (var i = 0; i < dl; i++) {
domLoadFnArr[i]();
}
}
function addDomLoadEvent(fn) {
if (isDomLoaded) {
fn();
}
else { 
domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
}
}
/* Cross-browser onload
- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
- Will fire an event as soon as a web page including all of its assets are loaded 
*/
function addLoadEvent(fn) {
if (typeof win.addEventListener != UNDEF) {
win.addEventListener("load", fn, false);
}
else if (typeof doc.addEventListener != UNDEF) {
doc.addEventListener("load", fn, false);
}
else if (typeof win.attachEvent != UNDEF) {
addListener(win, "onload", fn);
}
else if (typeof win.onload == "function") {
var fnOld = win.onload;
win.onload = function() {
fnOld();
fn();
};
}
else {
win.onload = fn;
}
}
/* Main function
- Will preferably execute onDomLoad, otherwise onload (as a fallback)
*/
function main() { // Static publishing only
var rl = regObjArr.length;
for (var i = 0; i < rl; i++) { // For each registered object element
var id = regObjArr[i].id;
if (ua.pv[0] > 0) {
var obj = getElementById(id);
if (obj) {
regObjArr[i].width = obj.getAttribute("width") ? obj.getAttribute("width") : "0";
regObjArr[i].height = obj.getAttribute("height") ? obj.getAttribute("height") : "0";
if (hasPlayerVersion(regObjArr[i].swfVersion)) { // Flash plug-in version >= Flash content version: Houston, we have a match!
if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements
fixParams(obj);
}
setVisibility(id, true);
}
else if (regObjArr[i].expressInstall && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) { // Show the Adobe Express Install dialog if set by the web page author and if supported (fp6.0.65+ on Win/Mac OS only)
showExpressInstall(regObjArr[i]);
}
else { // Flash plug-in and Flash content version mismatch: display alternative content instead of Flash content
displayAltContent(obj);
}
}
}
else {	// If no fp is installed, we let the object element do its job (show alternative content)
setVisibility(id, true);
}
}
}
/* Fix nested param elements, which are ignored by older webkit engines
- This includes Safari up to and including version 1.2.2 on Mac OS 10.3
- Fall back to the proprietary embed element
*/
function fixParams(obj) {
var nestedObj = obj.getElementsByTagName(OBJECT)[0];
if (nestedObj) {
var e = createElement("embed"), a = nestedObj.attributes;
if (a) {
var al = a.length;
for (var i = 0; i < al; i++) {
if (a[i].nodeName == "DATA") {
e.setAttribute("src", a[i].nodeValue);
}
else {
e.setAttribute(a[i].nodeName, a[i].nodeValue);
}
}
}
var c = nestedObj.childNodes;
if (c) {
var cl = c.length;
for (var j = 0; j < cl; j++) {
if (c[j].nodeType == 1 && c[j].nodeName == "PARAM") {
e.setAttribute(c[j].getAttribute("name"), c[j].getAttribute("value"));
}
}
}
obj.parentNode.replaceChild(e, obj);
}
}
/* Show the Adobe Express Install dialog
- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
*/
function showExpressInstall(regObj) {
isExpressInstallActive = true;
var obj = getElementById(regObj.id);
if (obj) {
if (regObj.altContentId) {
var ac = getElementById(regObj.altContentId);
if (ac) {
storedAltContent = ac;
storedAltContentId = regObj.altContentId;
}
}
else {
storedAltContent = abstractAltContent(obj);
}
if (!(/%$/.test(regObj.width)) && parseInt(regObj.width, 10) < 310) {
regObj.width = "310";
}
if (!(/%$/.test(regObj.height)) && parseInt(regObj.height, 10) < 137) {
regObj.height = "137";
}
doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
dt = doc.title,
fv = "MMredirectURL=" + win.location + "&MMplayerType=" + pt + "&MMdoctitle=" + dt,
replaceId = regObj.id;
// For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
// In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
if (ua.ie && ua.win && obj.readyState != 4) {
var newObj = createElement("div");
replaceId += "SWFObjectNew";
newObj.setAttribute("id", replaceId);
obj.parentNode.insertBefore(newObj, obj); // Insert placeholder div that will be replaced by the object element that loads expressinstall.swf
obj.style.display = "none";
var fn = function() {
obj.parentNode.removeChild(obj);
};
addListener(win, "onload", fn);
}
createSWF({ data:regObj.expressInstall, id:EXPRESS_INSTALL_ID, width:regObj.width, height:regObj.height }, { flashvars:fv }, replaceId);
}
}
/* Functions to abstract and display alternative content
*/
function displayAltContent(obj) {
if (ua.ie && ua.win && obj.readyState != 4) {
// For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
// In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
var el = createElement("div");
obj.parentNode.insertBefore(el, obj); // Insert placeholder div that will be replaced by the alternative content
el.parentNode.replaceChild(abstractAltContent(obj), el);
obj.style.display = "none";
var fn = function() {
obj.parentNode.removeChild(obj);
};
addListener(win, "onload", fn);
}
else {
obj.parentNode.replaceChild(abstractAltContent(obj), obj);
}
} 
function abstractAltContent(obj) {
var ac = createElement("div");
if (ua.win && ua.ie) {
ac.innerHTML = obj.innerHTML;
}
else {
var nestedObj = obj.getElementsByTagName(OBJECT)[0];
if (nestedObj) {
var c = nestedObj.childNodes;
if (c) {
var cl = c.length;
for (var i = 0; i < cl; i++) {
if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
ac.appendChild(c[i].cloneNode(true));
}
}
}
}
}
return ac;
}
/* Cross-browser dynamic SWF creation
*/
function createSWF(attObj, parObj, id) {
var r, el = getElementById(id);
if (el) {
if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
attObj.id = id;
}
if (ua.ie && ua.win) { // IE, the object element and W3C DOM methods do not combine: fall back to outerHTML
var att = "";
for (var i in attObj) {
if (attObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries, like Object.prototype.toJSONString = function() {}
if (i.toLowerCase() == "data") {
parObj.movie = attObj[i];
}
else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
att += ' class="' + attObj[i] + '"';
}
else if (i.toLowerCase() != "classid") {
att += ' ' + i + '="' + attObj[i] + '"';
}
}
}
var par = "";
for (var j in parObj) {
if (parObj[j] != Object.prototype[j]) { // Filter out prototype additions from other potential libraries
par += '<param name="' + j + '" value="' + parObj[j] + '" />';
}
}
el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
objIdArr[objIdArr.length] = attObj.id; // Stored to fix object 'leaks' on unload (dynamic publishing only)
r = getElementById(attObj.id);	
}
else if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements: fall back to the proprietary embed element
var e = createElement("embed");
e.setAttribute("type", FLASH_MIME_TYPE);
for (var k in attObj) {
if (attObj[k] != Object.prototype[k]) { // Filter out prototype additions from other potential libraries
if (k.toLowerCase() == "data") {
e.setAttribute("src", attObj[k]);
}
else if (k.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
e.setAttribute("class", attObj[k]);
}
else if (k.toLowerCase() != "classid") { // Filter out IE specific attribute
e.setAttribute(k, attObj[k]);
}
}
}
for (var l in parObj) {
if (parObj[l] != Object.prototype[l]) { // Filter out prototype additions from other potential libraries
if (l.toLowerCase() != "movie") { // Filter out IE specific param element
e.setAttribute(l, parObj[l]);
}
}
}
el.parentNode.replaceChild(e, el);
r = e;
}
else { // Well-behaving browsers
var o = createElement(OBJECT);
o.setAttribute("type", FLASH_MIME_TYPE);
for (var m in attObj) {
if (attObj[m] != Object.prototype[m]) { // Filter out prototype additions from other potential libraries
if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
o.setAttribute("class", attObj[m]);
}
else if (m.toLowerCase() != "classid") { // Filter out IE specific attribute
o.setAttribute(m, attObj[m]);
}
}
}
for (var n in parObj) {
if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // Filter out prototype additions from other potential libraries and IE specific param element
createObjParam(o, n, parObj[n]);
}
}
el.parentNode.replaceChild(o, el);
r = o;
}
}
return r;
}
function createObjParam(el, pName, pValue) {
var p = createElement("param");
p.setAttribute("name", pName);	
p.setAttribute("value", pValue);
el.appendChild(p);
}
/* Cross-browser SWF removal
- Especially needed to safely and completely remove a SWF in Internet Explorer
*/
function removeSWF(id) {
var obj = getElementById(id);
if (obj && (obj.nodeName == "OBJECT" || obj.nodeName == "EMBED")) {
if (ua.ie && ua.win) {
if (obj.readyState == 4) {
removeObjectInIE(id);
}
else {
win.attachEvent("onload", function() {
removeObjectInIE(id);
});
}
}
else {
obj.parentNode.removeChild(obj);
}
}
}
function removeObjectInIE(id) {
var obj = getElementById(id);
if (obj) {
for (var i in obj) {
if (typeof obj[i] == "function") {
obj[i] = null;
}
}
obj.parentNode.removeChild(obj);
}
}
/* Functions to optimize JavaScript compression
*/
function getElementById(id) {
var el = null;
try {
el = doc.getElementById(id);
}
catch (e) {}
return el;
}
function createElement(el) {
return doc.createElement(el);
}
/* Updated attachEvent function for Internet Explorer
- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
*/	
function addListener(target, eventType, fn) {
target.attachEvent(eventType, fn);
listenersArr[listenersArr.length] = [target, eventType, fn];
}
/* Flash Player and SWF content version matching
*/
function hasPlayerVersion(rv) {
var pv = ua.pv, v = rv.split(".");
v[0] = parseInt(v[0], 10);
v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
v[2] = parseInt(v[2], 10) || 0;
return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
}
/* Cross-browser dynamic CSS creation
- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
*/	
function createCSS(sel, decl) {
if (ua.ie && ua.mac) {
return;
}
var h = doc.getElementsByTagName("head")[0], s = createElement("style");
s.setAttribute("type", "text/css");
s.setAttribute("media", "screen");
if (!(ua.ie && ua.win) && typeof doc.createTextNode != UNDEF) {
s.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
}
h.appendChild(s);
if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
var ls = doc.styleSheets[doc.styleSheets.length - 1];
if (typeof ls.addRule == OBJECT) {
ls.addRule(sel, decl);
}
}
}
function setVisibility(id, isVisible) {
var v = isVisible ? "visible" : "hidden";
if (isDomLoaded && getElementById(id)) {
getElementById(id).style.visibility = v;
}
else {
createCSS("#" + id, "visibility:" + v);
}
}
/* Filter to avoid XSS attacks 
*/
function urlEncodeIfNecessary(s) {
var regex = /[\\\"<>\.;]/;
var hasBadChars = regex.exec(s) != null;
return hasBadChars ? encodeURIComponent(s) : s;
}
/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
*/
var cleanup = function() {
if (ua.ie && ua.win) {
window.attachEvent("onunload", function() {
// remove listeners to avoid memory leaks
var ll = listenersArr.length;
for (var i = 0; i < ll; i++) {
listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
}
// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
var il = objIdArr.length;
for (var j = 0; j < il; j++) {
removeSWF(objIdArr[j]);
}
// cleanup library's main closures to avoid memory leaks
for (var k in ua) {
ua[k] = null;
}
ua = null;
for (var l in swfobject) {
swfobject[l] = null;
}
swfobject = null;
});
}
}();
return {
/* Public API
- Reference: http://code.google.com/p/swfobject/wiki/SWFObject_2_0_documentation
*/ 
registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr) {
if (!ua.w3cdom || !objectIdStr || !swfVersionStr) {
return;
}
var regObj = {};
regObj.id = objectIdStr;
regObj.swfVersion = swfVersionStr;
regObj.expressInstall = xiSwfUrlStr ? xiSwfUrlStr : false;
regObjArr[regObjArr.length] = regObj;
setVisibility(objectIdStr, false);
},
getObjectById: function(objectIdStr) {
var r = null;
if (ua.w3cdom) {
var o = getElementById(objectIdStr);
if (o) {
var n = o.getElementsByTagName(OBJECT)[0];
if (!n || (n && typeof o.SetVariable != UNDEF)) {
r = o;
}
else if (typeof n.SetVariable != UNDEF) {
r = n;
}
}
}
return r;
},
embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj) {
if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr || !swfVersionStr) {
return;
}
widthStr += ""; // Auto-convert to string
heightStr += "";
if (hasPlayerVersion(swfVersionStr)) {
setVisibility(replaceElemIdStr, false);
var att = {};
if (attObj && typeof attObj === OBJECT) {
for (var i in attObj) {
if (attObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries
att[i] = attObj[i];
}
}
}
att.data = swfUrlStr;
att.width = widthStr;
att.height = heightStr;
var par = {}; 
if (parObj && typeof parObj === OBJECT) {
for (var j in parObj) {
if (parObj[j] != Object.prototype[j]) { // Filter out prototype additions from other potential libraries
par[j] = parObj[j];
}
}
}
if (flashvarsObj && typeof flashvarsObj === OBJECT) {
for (var k in flashvarsObj) {
if (flashvarsObj[k] != Object.prototype[k]) { // Filter out prototype additions from other potential libraries
if (typeof par.flashvars != UNDEF) {
par.flashvars += "&" + k + "=" + flashvarsObj[k];
}
else {
par.flashvars = k + "=" + flashvarsObj[k];
}
}
}
}
addDomLoadEvent(function() {
createSWF(att, par, replaceElemIdStr);
if (att.id == replaceElemIdStr) {
setVisibility(replaceElemIdStr, true);
}
});
}
else if (xiSwfUrlStr && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
isExpressInstallActive = true; // deferred execution
setVisibility(replaceElemIdStr, false);
addDomLoadEvent(function() {
var regObj = {};
regObj.id = regObj.altContentId = replaceElemIdStr;
regObj.width = widthStr;
regObj.height = heightStr;
regObj.expressInstall = xiSwfUrlStr;
showExpressInstall(regObj);
});
}
},
getFlashPlayerVersion: function() {
return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
},
hasFlashPlayerVersion: hasPlayerVersion,
createSWF: function(attObj, parObj, replaceElemIdStr) {
if (ua.w3cdom) {
return createSWF(attObj, parObj, replaceElemIdStr);
}
else {
return undefined;
}
},
removeSWF: function(objElemIdStr) {
if (ua.w3cdom) {
removeSWF(objElemIdStr);
}
},
createCSS: function(sel, decl) {
if (ua.w3cdom) {
createCSS(sel, decl);
}
},
addDomLoadEvent: addDomLoadEvent,
addLoadEvent: addLoadEvent,
getQueryParamValue: function(param) {
var q = doc.location.search || doc.location.hash;
if (param == null) {
return urlEncodeIfNecessary(q);
}
if (q) {
var pairs = q.substring(1).split("&");
for (var i = 0; i < pairs.length; i++) {
if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));
}
}
}
return "";
},
// For internal usage only
expressInstallCallback: function() {
if (isExpressInstallActive && storedAltContent) {
var obj = getElementById(EXPRESS_INSTALL_ID);
if (obj) {
obj.parentNode.replaceChild(storedAltContent, obj);
if (storedAltContentId) {
setVisibility(storedAltContentId, true);
if (ua.ie && ua.win) {
storedAltContent.style.display = "block";
}
}
storedAltContent = null;
storedAltContentId = null;
isExpressInstallActive = false;
}
} 
}
};
}();
// cmscript: calendar 
// Calendar: a Javascript class for Mootools that adds accessible and unobtrusive date pickers to your form elements <http://electricprism.com/aeron/calendar>
// Calendar RC4, Copyright (c) 2007 Aeron Glemann <http://electricprism.com/aeron>, MIT Style License.
// Mootools 1.2 compatibility by Davorin Šego
var Calendar = new Class({	
Implements: Options,
options: {
blocked: [], // blocked dates 
classes: [], // ['calendar', 'prev', 'next', 'month', 'year', 'today', 'invalid', 'valid', 'inactive', 'active', 'hover', 'hilite']
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // days of the week starting at sunday
direction: 0, // -1 past, 0 past + future, 1 future
draggable: true,
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
navigation: 1, // 0 = no nav; 1 = single nav for month; 2 = dual nav for month and year
offset: 0, // first day of the week: 0 = sunday, 1 = monday, etc..
onHideStart: Class.empty,
onHideComplete: Class.empty,
onShowStart: Class.empty,
onShowComplete: Class.empty,
pad: 1, // padding between multiple calendars
tweak: {x: 0, y: 0}, // tweak calendar positioning
permanent: false,
parentNode: false
},
// initialize: calendar constructor
// @param obj (obj) a js object containing the form elements and format strings { id: 'format', id: 'format' etc }
// @param props (obj) optional properties
initialize: function(obj, options) {
// basic error checking
if (!obj) { return false; }
this.setOptions(options);
// create our classes array
var keys = ['calendar', 'prev', 'next', 'month', 'year', 'today', 'invalid', 'valid', 'inactive', 'active', 'hover', 'hilite'];
var values = keys.map(function(key, i) {
if (this.options.classes[i]) {
if (this.options.classes[i].length) { key = this.options.classes[i]; }
}
return key;
}, this);
this.classes = values.associate(keys);
if (this.options.parentNode)
var pnode = $(this.options.parentNode);
else
var pnode = document.body;
var posStyle = 'absolute';
if (this.options.parentNode && this.options.permanent)
var posStyle = 'static';
// create cal element with css styles required for proper cal functioning
this.calendar = new Element('div', { 
'styles': { left: '-1000px', opacity: 0, position: posStyle, top: '-1000px', zIndex: 1000 }
}).addClass(this.classes.calendar).injectInside(pnode);
// ie 6 needs a transparent iframe underneath the calendar in order to not allow select elements to render through
if (window.ie6) {
this.iframe = new Element('iframe', { 
'styles': { left: '-1000px', position: 'absolute', top: '-1000px', zIndex: 999 }
}).injectInside(document.body);
this.iframe.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
}
// initialize fade method
this.fx = new Fx.Tween(this.calendar, {
onStart: function() { 
if (this.calendar.getStyle('opacity') == 0) { // show
if (window.ie6) { this.iframe.setStyle('display', 'block'); }
this.calendar.setStyle('display', 'block');
this.fireEvent('onShowStart', this.element);
}
else { // hide
this.fireEvent('onHideStart', this.element);
}
}.bind(this),
onComplete: function() { 
if (this.calendar.getStyle('opacity') == 0) { // hidden
this.calendar.setStyle('display', 'none');
if (window.ie6) { this.iframe.setStyle('display', 'none'); }
this.fireEvent('onHideComplete', this.element);
}
else { // shown
this.fireEvent('onShowComplete', this.element);
}
}.bind(this)
});
// initialize drag method
if (window.Drag && this.options.draggable) {
this.drag = new Drag.Move(this.calendar, { 
onDrag: function() {
if (window.ie6) { this.iframe.setStyles({ left: this.calendar.style.left, top: this.calendar.style.top }); } 
}.bind(this) 
}); 
}
// create calendars array
this.calendars = [];
var id = 0;
var d = new Date(); // today
d.setDate(d.getDate() + this.options.direction.toInt()); // correct today for directional offset
for (var i in obj) {
var cal = { 
button: new Element('button', { 'type': 'button' }),
el: $(i),
els: [],
id: id++,
month: d.getMonth(),
visible: false,
year: d.getFullYear()
};
// fix for bad element (naughty, naughty element!)
if (!this.element(i, obj[i], cal)) { continue; }
cal.el.addClass(this.classes.calendar);
// create cal button
cal.button.addClass(this.classes.calendar).addEvent('click', function(cal) { this.toggle(cal); }.pass(cal, this)).injectAfter(cal.el);
// read in default value
cal.val = this.read(cal);
$extend(cal, this.bounds(cal)); // abs bounds of calendar
$extend(cal, this.values(cal)); // valid days, months, years
this.rebuild(cal);
this.calendars.push(cal); // add to cals array	
}	
},
// blocked: returns an array of blocked days for the month / year
// @param cal (obj)
// @returns blocked days (array)
blocked: function(cal) {
var blocked = [];
var offset = new Date(cal.year, cal.month, 1).getDay(); // day of the week (offset)
var last = new Date(cal.year, cal.month + 1, 0).getDate(); // last day of this month
this.options.blocked.each(function(date){
var values = date.split(' ');
// preparation
for (var i = 0; i <= 3; i++){ 
if (!values[i]){ values[i] = (i == 3) ? '' : '*'; } // make sure blocked date contains values for at least d, m and y
values[i] = values[i].contains(',') ? values[i].split(',') : new Array(values[i]); // split multiple values
var count = values[i].length - 1;
for (var j = count; j >= 0; j--){
if (values[i][j].contains('-')){ // a range
var val = values[i][j].split('-');
for (var k = val[0]; k <= val[1]; k++){
if (!values[i].contains(k)){ values[i].push(k + ''); }
}
values[i].splice(j, 1);
}
}
}
// execution
if (values[2].contains(cal.year + '') || values[2].contains('*')){
if (values[1].contains(cal.month + 1 + '') || values[1].contains('*')){
values[0].each(function(val){ // if blocked value indicates this month / year
if (val > 0){ blocked.push(val.toInt()); } // add date to blocked array
});
if (values[3]){ // optional value for day of week
for (var i = 0; i < last; i++){
var day = (i + offset) % 7;
if (values[3].contains(day + '')){ 
blocked.push(i + 1); // add every date that corresponds to the blocked day of the week to the blocked array
}
}
}
}
}
}, this);
return blocked;
},
// bounds: returns the start / end bounds of the calendar
// @param cal (obj)
// @returns obj	
bounds: function(cal) {
// 1. first we assume the calendar has no bounds (or a thousand years in either direction)
// by default the calendar will accept a millennium in either direction
var start = new Date(1000, 0, 1); // jan 1, 1000
var end = new Date(2999, 11, 31); // dec 31, 2999
// 2. but if the cal is one directional we adjust accordingly
var date = new Date().getDate() + this.options.direction.toInt();
if (this.options.direction > 0) {
start = new Date();
start.setDate(date + this.options.pad * cal.id);
}
if (this.options.direction < 0) {
end = new Date();
end.setDate(date - this.options.pad * (this.calendars.length - cal.id - 1));
}
// 3. then we can further filter the limits by using the pre-existing values in the selects
cal.els.each(function(el) {	
if (el.get('tag') == 'select') {	
if (el.format.test('(y|Y)')) { // search for a year select
var years = [];
el.getChildren().each(function(option) { // get options
var values = this.unformat(option.value, el.format);
if (!years.contains(values[0])) { years.push(values[0]); } // add to years array
}, this);
years.sort(this.sort);
if (years[0] > start.getFullYear()) { 
d = new Date(years[0], start.getMonth() + 1, 0); // last day of new month
if (start.getDate() > d.getDate()) { start.setDate(d.getDate()); }
start.setYear(years[0]); 
}
if (years.getLast() < end.getFullYear()) { 
d = new Date(years.getLast(), end.getMonth() + 1, 0); // last day of new month
if (end.getDate() > d.getDate()) { end.setDate(d.getDate()); }
end.setYear(years.getLast());
}	
}
if (el.format.test('(F|m|M|n)')) { // search for a month select
var months_start = [];
var months_end = [];
el.getChildren().each(function(option) { // get options
var values = this.unformat(option.value, el.format);
if ($type(values[0]) != 'number' || values[0] == years[0]) { // if it's a year / month combo for curr year, or simply a month select
if (!months_start.contains(values[1])) { months_start.push(values[1]); } // add to months array
}
if ($type(values[0]) != 'number' || values[0] == years.getLast()) { // if it's a year / month combo for curr year, or simply a month select
if (!months_end.contains(values[1])) { months_end.push(values[1]); } // add to months array
}
}, this);
months_start.sort(this.sort);
months_end.sort(this.sort);
if (months_start[0] > start.getMonth()) { 
d = new Date(start.getFullYear(), months_start[0] + 1, 0); // last day of new month
if (start.getDate() > d.getDate()) { start.setDate(d.getDate()); }
start.setMonth(months_start[0]); 
}
if (months_end.getLast() < end.getMonth()) { 
d = new Date(start.getFullYear(), months_end.getLast() + 1, 0); // last day of new month
if (end.getDate() > d.getDate()) { end.setDate(d.getDate()); }
end.setMonth(months_end.getLast());
}	
}
}
}, this);
return { 'start': start, 'end': end };
},
// caption: returns the caption element with header and navigation
// @param cal (obj)
// @returns caption (element)
caption: function(cal) {
// start by assuming navigation is allowed
var navigation = {
prev: { 'month': true, 'year': true },
next: { 'month': true, 'year': true }
};
// if we're in an out of bounds year
if (cal.year == cal.start.getFullYear()) { 
navigation.prev.year = false; 
if (cal.month == cal.start.getMonth() && this.options.navigation == 1) { 
navigation.prev.month = false;
}	
}	
if (cal.year == cal.end.getFullYear()) { 
navigation.next.year = false; 
if (cal.month == cal.end.getMonth() && this.options.navigation == 1) { 
navigation.next.month = false;
}
}
// special case of improved navigation but months array with only 1 month we can disable all month navigation
if ($type(cal.months) == 'array') {
if (cal.months.length == 1 && this.options.navigation == 2) {
navigation.prev.month = navigation.next.month = false;
}
}
var caption = new Element('caption');
var prev = new Element('a').addClass(this.classes.prev).appendText('\x3c'); // <	
var next = new Element('a').addClass(this.classes.next).appendText('\x3e'); // >
if (this.options.navigation == 2) {
var month = new Element('span').addClass(this.classes.month).injectInside(caption);
if (navigation.prev.month) { prev.clone().addEvent('click', function(cal) { this.navigate(cal, 'm', -1); }.pass(cal, this)).injectInside(month); }
month.adopt(new Element('span').appendText(this.options.months[cal.month]));
if (navigation.next.month) { next.clone().addEvent('click', function(cal) { this.navigate(cal, 'm', 1); }.pass(cal, this)).injectInside(month); }
var year = new Element('span').addClass(this.classes.year).injectInside(caption);
if (navigation.prev.year) { prev.clone().addEvent('click', function(cal) { this.navigate(cal, 'y', -1); }.pass(cal, this)).injectInside(year); }
year.adopt(new Element('span').appendText(cal.year));
if (navigation.next.year) { next.clone().addEvent('click', function(cal) { this.navigate(cal, 'y', 1); }.pass(cal, this)).injectInside(year); }
}
else { // 1 or 0
if (navigation.prev.month && this.options.navigation) { prev.clone().addEvent('click', function(cal) { this.navigate(cal, 'm', -1); }.pass(cal, this)).injectInside(caption); }
caption.adopt(new Element('span').addClass(this.classes.month).appendText(this.options.months[cal.month]));
caption.adopt(new Element('span').addClass(this.classes.year).appendText(cal.year));
if (navigation.next.month && this.options.navigation) { next.clone().addEvent('click', function(cal) { this.navigate(cal, 'm', 1); }.pass(cal, this)).injectInside(caption); }
}
return caption;
},
// changed: run when a select value is changed
// @param cal (obj)
changed: function(cal) {
cal.val = this.read(cal); // update calendar val from inputs	
$extend(cal, this.values(cal)); // update bounds - based on curr month
this.rebuild(cal); // rebuild days select
if (!cal.val) { return; } // in case the same date was clicked the cal has no set date we should exit	
if (cal.val.getDate() < cal.days[0]) { cal.val.setDate(cal.days[0]); }
if (cal.val.getDate() > cal.days.getLast()) { cal.val.setDate(cal.days.getLast()); }
cal.els.each(function(el) {	// then we can set the value to the field
el.value = this.format(cal.val, el.format); 
}, this);
this.check(cal); // checks other cals
this.calendars.each(function(kal) { // update cal graphic if visible
if (kal.visible) { this.display(kal); }
}, this);
},
// check: checks other calendars to make sure no overlapping values
// @param cal (obj)
check: function(cal) {
this.calendars.each(function(kal, i) {
if (kal.val) { // if calendar has value set
var change = false;
if (i < cal.id) { // preceding calendar
var bound = new Date(Date.parse(cal.val));
bound.setDate(bound.getDate() - (this.options.pad * (cal.id - i)));
if (bound < kal.val) { change = true; }
}
if (i > cal.id) { // following calendar
var bound = new Date(Date.parse(cal.val));
bound.setDate(bound.getDate() + (this.options.pad * (i - cal.id)));
if (bound > kal.val) { change = true; }
}
if (change) {
if (kal.start > bound) { bound = kal.start; }
if (kal.end < bound) { bound = kal.end; }
kal.month = bound.getMonth();
kal.year = bound.getFullYear();	
$extend(kal, this.values(kal));	
// TODO - IN THE CASE OF SELECT MOVE TO NEAREST VALID VALUE
// IN THE CASE OF INPUT DISABLE
// if new date is not valid better unset cal value
// otherwise it would mean incrementally checking to find the nearest valid date which could be months / years away
kal.val = kal.days.contains(bound.getDate()) ? bound : null;
this.write(kal);
if (kal.visible) { this.display(kal); } // update cal graphic if visible
}
}
else {
kal.month = cal.month;
kal.year = cal.year;
}
}, this);
},
// clicked: run when a valid day is clicked in the calendar
// @param cal (obj)
clicked: function(td, day, cal) {
cal.val = (this.value(cal) == day) ? null : new Date(cal.year, cal.month, day); // set new value - if same then disable
this.write(cal); 
// ok - in the special case that it's all selects and there's always a date no matter what (at least as far as the form is concerned)
// we can't let the calendar undo a date selection - it's just not possible!!
if (!cal.val) { cal.val = this.read(cal); }
if (cal.val) {
this.check(cal); // checks other cals	
this.toggle(cal); // hide cal
} 
else { // remove active class and replace with valid
td.addClass(this.classes.valid);
td.removeClass(this.classes.active);
}
},
// display: create calendar element
// @param cal (obj)
display: function(cal) {
// 1. header and navigation
this.calendar.empty(); // init div
this.calendar.className = this.classes.calendar + ' ' + this.options.months[cal.month].toLowerCase();
var div = new Element('div').injectInside(this.calendar); // a wrapper div to help correct browser css problems with the caption element
var table = new Element('table').injectInside(div).adopt(this.caption(cal));
// 2. day names	
var thead = new Element('thead').injectInside(table);
var tr = new Element('tr').injectInside(thead);
for (var i = 0; i <= 6; i++) {
var th = this.options.days[(i + this.options.offset) % 7];
tr.adopt(new Element('th', { 'title': th }).appendText(th.substr(0, 1)));
}
// 3. day numbers
var tbody = new Element('tbody').injectInside(table);
var tr = new Element('tr').injectInside(tbody);
var d = new Date(cal.year, cal.month, 1);
var offset = ((d.getDay() - this.options.offset) + 7) % 7; // day of the week (offset)
var last = new Date(cal.year, cal.month + 1, 0).getDate(); // last day of this month
var prev = new Date(cal.year, cal.month, 0).getDate(); // last day of previous month
var active = this.value(cal); // active date (if set and within curr month)
var valid = cal.days; // valid days for curr month
var inactive = []; // active dates set by other calendars
var hilited = [];
this.calendars.each(function(kal, i) {
if (kal != cal && kal.val) {
if (cal.year == kal.val.getFullYear() && cal.month == kal.val.getMonth()) { inactive.push(kal.val.getDate()); }
if (cal.val) {
for (var day = 1; day <= last; day++) {
d.setDate(day);
if ((i < cal.id && d > kal.val && d < cal.val) || (i > cal.id && d > cal.val && d < kal.val)) { 
if (!hilited.contains(day)) { hilited.push(day); }
}
}
}
}
}, this);
var d = new Date();
var today = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime(); // today obv 
for (var i = 1; i < 43; i++) { // 1 to 42 (6 x 7 or 6 weeks)
if ((i - 1) % 7 == 0) { tr = new Element('tr').injectInside(tbody); } // each week is it's own table row
var td = new Element('td').injectInside(tr);
var day = i - offset;
var date = new Date(cal.year, cal.month, day);
var cls = '';
if (day === active) { cls = this.classes.active; } // active
else if (inactive.contains(day)) { cls = this.classes.inactive; } // inactive
else if (valid.contains(day)) { cls = this.classes.valid; } // valid
else if (day >= 1 && day <= last) { cls = this.classes.invalid; } // invalid
if (date.getTime() == today) { cls = cls + ' ' + this.classes.today; } // adds class for today
if (hilited.contains(day)) { cls = cls + ' ' + this.classes.hilite; } // adds class if hilited
td.addClass(cls);
if (valid.contains(day) || this.options.permanent) { // if it's a valid - clickable - day we add interaction
td.setProperty('title', this.format(date, 'D M jS Y'));
td.addEvents({
'click': function(td, day, cal) { 
this.clicked(td, day, cal); 
}.pass([td, day, cal], this),
'mouseover': function(td, cls) { 
td.addClass(cls); 
}.pass([td, this.classes.hover]),
'mouseout': function(td, cls) { 
td.removeClass(cls); 
}.pass([td, this.classes.hover])
});
}
// pad calendar with last days of prev month and first days of next month
if (day < 1) { day = prev + day; }
else if (day > last) { day = day - last; }
td.appendText(day);
}
},
// element: helper function
// @param el (string) element id
// @param f (string) format string
// @param cal (obj)
element: function(el, f, cal) {
if ($type(f) == 'object') { // in the case of multiple inputs per calendar
for (var i in f) { 
if (!this.element(i, f[i], cal)) { return false; }	
}
return true;
}
el = $(el);
if (!el) { return false; }
el.format = f;
if (el.get('tag') == 'select') { // select elements allow the user to manually set the date via select option
el.addEvent('change', function(cal) { this.changed(cal); }.pass(cal, this));
}
else { // input (type text) elements restrict the user to only setting the date via the calendar
el.readOnly = true;
el.addEvent('focus', function(cal) { this.toggle(cal); }.pass(cal, this));
}
cal.els.push(el);
return true;
},
// format: formats a date object according to passed in instructions
// @param date (obj)
// @param f (string) any combination of punctuation / separators and d, j, D, l, S, m, n, F, M, y, Y
// @returns string
format: function(date, format) {
var str = '';
if (date) {
var j = date.getDate(); // 1 - 31
var w = date.getDay(); // 0 - 6
var l = this.options.days[w]; // Sunday - Saturday
var n = date.getMonth() + 1; // 1 - 12
var f = this.options.months[n - 1]; // January - December
var y = date.getFullYear() + ''; // 19xx - 20xx
for (var i = 0, len = format.length; i < len; i++) {
var cha = format.charAt(i); // format char
switch(cha) {
// year cases
case 'y': // xx - xx
y = y.substr(2);
case 'Y': // 19xx - 20xx
str += y;
break;
// month cases
case 'm': // 01 - 12
if (n < 10) { n = '0' + n; }
case 'n': // 1 - 12
str += n;
break;
case 'M': // Jan - Dec
f = f.substr(0, 3);
case 'F': // January - December
str += f;
break;
// day cases
case 'd': // 01 - 31
if (j < 10) { j = '0' + j; }
case 'j': // 1 - 31
str += j;
break;
case 'D': // Sun - Sat
l = l.substr(0, 3);
case 'l': // Sunday - Saturday
str += l;
break;
case 'N': // 1 - 7
w += 1;
case 'w': // 0 - 6
str += w;
break;
case 'S': // st, nd, rd or th (works well with j)
if (j % 10 == 1 && j != '11') { str += 'st'; }
else if (j % 10 == 2 && j != '12') { str += 'nd'; }
else if (j % 10 == 3 && j != '13') { str += 'rd'; }
else { str += 'th'; }
break;
default:
str += cha;
}
}
}
return str; // return format with values replaced
},
// navigate: calendar navigation
// @param cal (obj)
// @param type (str) m or y for month or year
// @param n (int) + or - for next or prev
navigate: function(cal, type, n) {
switch (type) {
case 'm': // month
if ($type(cal.months) == 'array') {
var i = cal.months.indexOf(cal.month) + n; // index of current month
if (i < 0 || i == cal.months.length) { // out of range
if (this.options.navigation == 1) { // if type 1 nav we'll need to increment the year
this.navigate(cal, 'y', n);	
}
i = (i < 0) ? cal.months.length - 1 : 0;
}
cal.month = cal.months[i];
}
else { 
var i = cal.month + n;
if (i < 0 || i == 12) {
if (this.options.navigation == 1) {
this.navigate(cal, 'y', n);	
}
i = (i < 0) ? 11 : 0;
}
cal.month = i;
}	
break;
case 'y': // year
if ($type(cal.years) == 'array') {
var i = cal.years.indexOf(cal.year) + n;
cal.year = cal.years[i]; 
}
else { 
cal.year += n;
}	
break;	
}
$extend(cal, this.values(cal));
if ($type(cal.months) == 'array') { // if the calendar has a months select
var i = cal.months.indexOf(cal.month); // and make sure the curr months exists for the new year
if (i < 0) { cal.month = cal.months[0]; } // otherwise we'll reset the month
}
this.display(cal);
},
// read: compiles cal value based on array of inputs passed in
// @param cal (obj)
// @returns date (obj) or (null)
read: function(cal) {
var arr = [null, null, null];
cal.els.each(function(el) {
// returns an array which may contain empty values
var values = this.unformat(el.value, el.format);
values.each(function(val, i) { 
if ($type(val) == 'number') { arr[i] = val; }
}); 
}, this);
// we can update the cals month and year values
if ($type(arr[0]) == 'number') { cal.year = arr[0]; }
if ($type(arr[1]) == 'number') { cal.month = arr[1]; }
var val = null;
if (arr.every(function(i) { return $type(i) == 'number'; })) { // if valid date
var last = new Date(arr[0], arr[1] + 1, 0).getDate(); // last day of month
if (arr[2] > last) { arr[2] = last; } // make sure we stay within the month (ex in case default day of select is 31 and month is feb)
val = new Date(arr[0], arr[1], arr[2]);
}
return (cal.val == val) ? null : val; // if new date matches old return null (same date clicked twice = disable)
},
// rebuild: rebuilds days + months selects
// @param cal (obj)
rebuild: function(cal) {
cal.els.each(function(el) {	
/*
if (el.get('tag') == 'select' && el.format.test('^(F|m|M|n)$')) { // special case for months-only select
if (!cal.options) { cal.options = el.clone(); } // clone a copy of months select
var val = (cal.val) ? cal.val.getMonth() : el.value.toInt();
el.empty(); // initialize select
cal.months.each(function(month) {
// create an option element
var option = new Element('option', {
'selected': (val == month),
'value': this.format(new Date(1, month, 1), el.format);
}).appendText(day).injectInside(el);
}, this);
}
*/
if (el.get('tag') == 'select' && el.format.test('^(d|j)$')) { // special case for days-only select
var d = this.value(cal);
if (!d) { d = el.value.toInt(); } // if the calendar doesn't have a set value, try to use value from select
el.empty(); // initialize select
cal.days.each(function(day) {
// create an option element
var option = new Element('option', {
'selected': (d == day),
'value': ((el.format == 'd' && day < 10) ? '0' + day : day)
}).appendText(day).injectInside(el);
}, this);
}
}, this); 
},
// sort: helper function for numerical sorting
sort: function(a, b) {
return a - b;
},
// toggle: show / hide calendar 
// @param cal (obj)
toggle: function(cal) {
document.removeEvent('mousedown', this.fn); // always remove the current mousedown script first
// don't remove permanent calendars
if (cal.visible) { // simply hide curr cal	
if (this.options.permanent)
return;
cal.visible = false;
cal.button.removeClass(this.classes.active); // active
this.fx.start('opacity', 1, 0);
}
else { // otherwise show (may have to hide others)
// hide cal on out-of-bounds click
this.fn = function(e, cal) { 
var e = new Event(e);
var el = e.target;
var stop = false;
while (el != document.body && el.nodeType == 1) {
if (el == this.calendar) { stop = true; }
this.calendars.each(function(kal) {
if (kal.button == el || kal.els.contains(el)) { stop = true; }
});
if (stop) { 
e.stop();
return false;
}
else { el = el.parentNode; }
}
this.toggle(cal);
}.create({ 'arguments': cal, 'bind': this, 'event': true });	
document.addEvent('mousedown', this.fn);
this.calendars.each(function(kal) {
if (kal == cal) {
kal.visible = true;
kal.button.addClass(this.classes.active); // css c-icon-active
}
else {
kal.visible = false;
kal.button.removeClass(this.classes.active); // css c-icon-active
}
}, this);
var size = window.getScrollSize();
var coord = cal.button.getCoordinates();
var x = coord.right + this.options.tweak.x;
var y = coord.top + this.options.tweak.y;
// make sure the calendar doesn't open off screen
if (!this.calendar.coord) { this.calendar.coord = this.calendar.getCoordinates(); }
if (x + this.calendar.coord.width > size.x) { x -= (x + this.calendar.coord.width - size.x); }
if (y + this.calendar.coord.height > size.y) { y -= (y + this.calendar.coord.height - size.y); }
this.calendar.setStyles({ left: x + 'px', top: y + 'px' });
if (window.ie6) { 
this.iframe.setStyles({ height: this.calendar.coord.height + 'px', left: x + 'px', top: y + 'px', width: this.calendar.coord.width + 'px' }); 
}
this.display(cal);
this.fx.start('opacity', 0, 1);
}
},
// unformat: takes a value from an input and parses the d, m and y elements
// @param val (string)
// @param f (string) any combination of punctuation / separators and d, j, D, l, S, m, n, F, M, y, Y
// @returns array
unformat: function(val, f) {
f = f.escapeRegExp();
var re = {
d: '([0-9]{2})',
j: '([0-9]{1,2})',
D: '(' + this.options.days.map(function(day) { return day.substr(0, 3); }).join('|') + ')',	
l: '(' + this.options.days.join('|') + ')',
S: '(st|nd|rd|th)',
F: '(' + this.options.months.join('|') + ')',
m: '([0-9]{2})',
M: '(' + this.options.months.map(function(month) { return month.substr(0, 3); }).join('|') + ')',	
n: '([0-9]{1,2})',
Y: '([0-9]{4})',
y: '([0-9]{2})'
}
var arr = []; // array of indexes
var g = '';
// convert our format string to regexp
for (var i = 0; i < f.length; i++) {
var c = f.charAt(i);
if (re[c]) {
arr.push(c);
g += re[c];
}
else {
g += c;
}
}
// match against date
var matches = val.match('^' + g + '$');
var dates = new Array(3);
if (matches) {
matches = matches.slice(1); // remove first match which is the date
arr.each(function(c, i) {
i = matches[i];
switch(c) {
// year cases
case 'y':
i = '19' + i; // 2 digit year assumes 19th century (same as JS)
case 'Y':
dates[0] = i.toInt();
break;
// month cases
case 'F':
i = i.substr(0, 3);
case 'M':
i = this.options.months.map(function(month) { return month.substr(0, 3); }).indexOf(i) + 1;
case 'm':
case 'n':
dates[1] = i.toInt() - 1;
break;
// day cases
case 'd':
case 'j':
dates[2] = i.toInt();
break;
}
}, this);
}
return dates;
},
// value: returns day value of calendar if set
// @param cal (obj)
// @returns day (int) or null
value: function(cal) {
var day = null;
if (cal.val) {
if (cal.year == cal.val.getFullYear() && cal.month == cal.val.getMonth()) { day = cal.val.getDate(); }
}
return day;
},
// values: returns the years, months (for curr year) and days (for curr month and year) for the calendar
// @param cal (obj)
// @returns obj	
values: function(cal) {
var years, months, days;
cal.els.each(function(el) {	
if (el.get('tag') == 'select') {	
if (el.format.test('(y|Y)')) { // search for a year select
years = [];
el.getChildren().each(function(option) { // get options
var values = this.unformat(option.value, el.format);
if (!years.contains(values[0])) { years.push(values[0]); } // add to years array
}, this);
years.sort(this.sort);
}
if (el.format.test('(F|m|M|n)')) { // search for a month select
months = []; // 0 - 11 should be
el.getChildren().each(function(option) { // get options
var values = this.unformat(option.value, el.format);
if ($type(values[0]) != 'number' || values[0] == cal.year) { // if it's a year / month combo for curr year, or simply a month select
if (!months.contains(values[1])) { months.push(values[1]); } // add to months array
}
}, this);
months.sort(this.sort);
}
if (el.format.test('(d|j)') && !el.format.test('^(d|j)$')) { // search for a day select, but NOT a days only select
days = []; // 1 - 31
el.getChildren().each(function(option) { // get options
var values = this.unformat(option.value, el.format);
// in the special case of days we dont want the value if its a days only select
// otherwise that will screw up the options rebuilding
// we will take the values if they are exact dates though
if (values[0] == cal.year && values[1] == cal.month) {
if (!days.contains(values[2])) { days.push(values[2]); } // add to days array
}
}, this);
}
}
}, this);
// we start with what would be the first and last days were there no restrictions
var first = 1;
var last = new Date(cal.year, cal.month + 1, 0).getDate(); // last day of the month
// if we're in an out of bounds year
if (cal.year == cal.start.getFullYear()) {
// in the special case of improved navigation but no months array, we'll need to construct one
if (months == null && this.options.navigation == 2) {
months = [];
for (var i = 0; i < 12; i ++) { 
if (i >= cal.start.getMonth()) { months.push(i); } 
}
}
// if we're in an out of bounds month
if (cal.month == cal.start.getMonth()) { 
first = cal.start.getDate(); // first day equals day of bound
}
}	
if (cal.year == cal.end.getFullYear()) {
// in the special case of improved navigation but no months array, we'll need to construct one
if (months == null && this.options.navigation == 2) {
months = [];
for (var i = 0; i < 12; i ++) { 
if (i <= cal.end.getMonth()) { months.push(i); } 
}
}
if (cal.month == cal.end.getMonth()) { 
last = cal.end.getDate(); // last day equals day of bound
}
}
// let's get our invalid days
var blocked = this.blocked(cal);
// finally we can prepare all the valid days in a neat little array
if ($type(days) == 'array') { // somewhere there was a days select
days = days.filter(function(day) {
if (day >= first && day <= last && !blocked.contains(day)) { return day; }
});
}
else { // no days select we'll need to construct a valid days array
days = [];
for (var i = first; i <= last; i++) { 
if (!blocked.contains(i)) { days.push(i); }
}
}	
days.sort(this.sort); // sorting our days will give us first and last of month
return { 'days': days, 'months': months, 'years': years };
},
// write: sets calendars value to form elements
// @param cal (obj)
write: function(cal) {
this.rebuild(cal);	// in the case of options, we'll need to make sure we have the correct number of days available
cal.els.each(function(el) {	// then we can set the value to the field
el.value = this.format(cal.val, el.format); 
}, this);
}
});
Calendar.implement(new Events, new Options);
// cmscript: fold
/* (c) 2009 CaribMedia */
var activeElement;
/*
* @name isTag
* @description simply checks if an element is a tag or a text
* IE sees tags+text, FF sees only tags
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function isTag(node)
{
return (node.nodeType == 1);
}
/*
* @name fold
* @description folds/unfolds part of a page (tile)
* @param skip - the number of elements to skip after
* - in fact, skip is the Nth child from the parent
* @author Michiel van der Blonk
* @date July 11, 2005
* @updated Oct 18, 2005
*/
function fold(el, skip)
{
// the block to hide should be the first child after
// the show-hide button
var tile, node, parent;
if (!el)
return;
// find the element
parent = el.parentNode;
if (parent.hasChildNodes())
{
// init node
node = parent.childNodes[0];
var size = parent.childNodes.length;
var nCountElements = 0;
var nCountTags = 0;
// if there are any elements, continue
if (size > 0)
{
// loop until bounds
while (nCountTags < skip && nCountElements<size)
{
node = parent.childNodes[nCountElements];
nCountElements++;
// count the tags
if (isTag(node))
nCountTags++;
}
tile = node;
}
else
alert('error: list cannot display');
}
else
alert('error: list cannot display');
// now show/hide the element
var isHidden = false;
if (tile.className)
isHidden = tile.className.match(/hide/)!==null;
if (!isHidden)
{
tile.className += " hide";
el.className += " collapsed";
}
else
{
tile.className = tile.className.replace(" hide","");
el.className = el.className.replace(" collapsed","");
// also for elements with a single class name
tile.className = tile.className.replace("hide","");
el.className = el.className.replace("collapsed","");
}
return false;
}
/*
* @name collapse
* @description collapses all elements in a list by calling fold()
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function collapse(listId)
{
var list = document.getElementById(listId);
if (!list) 
return;
var foldIcons = list.getElementsByTagName("span");
for (var i=0; i<foldIcons.length; i++)
{
if ( foldIcons[i].className.match(/fold/)!==null )
fold(foldIcons[i], 3);
}
}
/*
* @name expand
* @description expands an item by walking up the tree
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function expand(objElement)
{
// THIS IS NOT WORKING YET.
// WE NEED TO ACTUALLY _FOLD_ HERE, SINCE THE + NEEDS TO BE SHOWN
var activeElement = objElement;
var el;
do
{
if (activeElement.tagName == "UL")
{
tile.className = tile.className.replace(" hide","");
el.className = el.className.replace(" collapsed","");
// also for elements with a single class name
tile.className = tile.className.replace("hide","");
el.className = el.className.replace("collapsed","");
}
activeElement = activeElement.parentNode;
} while (activeElement.tagName!="DIV" && activeElement.tagName!="BODY")
}
/*
* @name showHide
* @description hides an element effectively by adding the 'hide' class
* @precond the class named 'hide' should exist in the css
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function showHide(id)
{
var isHidden;
var tile = document.getElementById(id);
showHideObject(tile);
}
/*
* @name showHide
* @description hides an element effectively by adding the 'hide' class
* @precond the class named 'hide' should exist in the css
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function showHideObject(objElement)
{
var isHidden;
tile = objElement;
// check for existence of tile element
if (!tile)
return;
isHidden = tile.className.match(/hide/)!==null;
if (isHidden)
{
tile.className = tile.className.replace(" hide","");
// also for elements with a single class name
tile.className = tile.className.replace("hide","");
}
else
tile.className += " hide";
}
/*
* @name debug
* @description shows debug info in a 'debug' box in html
* @precond the element named 'debug' should exist in the css
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function debug(s)
{
debugBox = document.getElementById('debug');
if (debugBox)
debugBox.innerHTML += s + "<br>";
}
/*
* @name findOwner
* @description finds the parent DIV
* @param evt - the event
* @author PPK (www.quirksmode.org)
* @date Oct 18, 2005
*/
function findOwner(element)
{
node = element;
while (node)
{
if (isTag(node) && node.nodeName == "DIV")
return node;
node = node.parentNode;
}
return null;
}
/*
* @name autoFold
* @description sets a timer to automatically hide the list
* @param selectId - the id of the faux-select
* @param listId - the id of the UL
* @param target - the element that triggered the event
* @param delay - nr of seconds to wait before closing
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function autoFold(selectId, listId, target, delay)
{
// prevent bubbles
if (window.event)
window.event.cancelBubble = true;
// if this is not the list return
if (target.id!=listId)
return;
var isHidden;
list = document.getElementById(listId);
selectBox = document.getElementById(selectId);
isListVisible = list.className.match(/hide/)===null;
if (isListVisible)
window.setTimeout("fold(selectBox, 2)", delay*1000);
}
/*
* @name getTarget
* @description cross browser code for finding out an event target
* @param e - the event
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function getTarget(e)
{
// in IE the event param is null
if (!e)
var e = window.event;
// IE has srcElement attr
if (e.srcElement)
target = e.srcElement;
// FF/NN has target attr
if (e.target)
target = e.target;
return target;
}
/*
* @name initSelectList
* @param selectId - the id of the faux-select box
* @param listId - the id of the actual list (expanding div)
* @param action - either 'select' (default) or 'submit'
* @param formId - the form that contains the select box
* @param fieldId - the hidden field which is used to submit the value
* @param autoHide - hide the list after 2 seconds
* @param currentNode - display the current node as the selected item
* @param onAction - javascript function string to call in addition to
* standard select/submit actions
* @description initialises a subcategory list box
* @precond the html for the subcat should be in place
* @author Michiel van der Blonk
* @date Oct 18, 2005
*/
function initSelectList(selectId, listId, action, formId, fieldId, autoHide, currentNode, onAction)
{
// set default action
if (!action)
action = 'select';
// get elements
var selectBox = $(selectId);
var list = $(listId);
if (!list)
return;
// when someone clicks anywhere on the document
// outside of the list we close it (the list)
// list.onclick = function() {event.cancelBubble = true;return false;}
if (!document.onclick) {
$(document.body).addEvent('click', function(e) {
// init
t = getTarget(e);
owner = findOwner(t);
// if this element is a child of the list
// then don't close the list
if (owner && owner.id==listId)
return;
// otherwise, if the list is currently open
// then close it now
if (t.id!=listId && t.id!=selectId )
{
if (!list.className.match(/hide/))
fold(selectBox, 2);
}
});
}
// find the list, collapse all elements
collapse(listId);
// hide the list
fold(selectBox, 2);
// create select/submit actions for all anchors in the list
var items = $(list).getElements('a');
items.each(function(item) {
var rel = item.get('rel');
// in case of submit attach function
if (item.get('rel') == currentNode)
{
selectBox.innerHTML = item.innerHTML;
activeElement = item.parentNode.parentNode;
// expand all UL's up the tree from the current node
//expand(activeElement);
}
item.addEvent('click', function() {
selectBox.set('html', this.get('html'));
fold(selectBox, 2);
var form = $(formId);
$(fieldId).set('value', this.get('rel'));
if (onAction !== null)
eval(onAction);
if (action=='submit')
form.submit();
return false;
});
});
}
// cmscript: contentxl
/* (c) 2003 CaribMedia
* these functions are used on several places.
* Please note this is an outdated file and needs major cleanup
*/
// This function sorts the entity lists
function sortBy(theForm, target) {
if (theForm.sortBy && theForm.sortDirection)
{
if (theForm.sortBy.value == target) {
if (theForm.sortDirection.value == 'ASC') {
theForm.sortDirection.value = 'DESC';
} else {
theForm.sortDirection.value = 'ASC';
}
} else {
theForm.sortDirection.value = 'ASC';
}
theForm.sortBy.value = target;
theForm.submit();
}
return false;
}
function textCounter(field, countfield, maxlimit) {
if (field.value.length > maxlimit)
{
field.value = field.value.substring(0, maxlimit);
field.blur();
field.focus();
return false;
}
else
countfield.value = maxlimit - field.value.length;
return true;
}
function getSelectedRadio(buttonGroup) {
// returns the array number of the selected radio button or -1 if no button is selected
if (buttonGroup[0]) { // if the button group is an array (one button is not an array)
for (var i=0; i<buttonGroup.length; i++) {
if (buttonGroup[i].checked) {
return i;
}
}
} else {
if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
}
// if we get to this point, no radio button is selected
return -1;
} // Ends the "getSelectedRadio" function
function getSelectedRadioValue(buttonGroup) {
// returns the value of the selected radio button or "" if no button is selected
var i = getSelectedRadio(buttonGroup);
if (i == -1) {
return "";
} else {
if (buttonGroup[i]) { // Make sure the button group is an array (not just one button)
return buttonGroup[i].value;
} else { // The button group is just the one button, and it is checked
return buttonGroup.value;
}
}
} // Ends the "getSelectedRadioValue" function
function getDate(field, format) {
var newDate = new Date();
var day, month, year;
if (format.toLowerCase() == 'yyyy-mm-dd') {
month = field.value.substring(5,7);
if (month.charAt(0) == "0") {
month = month.charAt(1);
}
day = field.value.substring(8,10);
if (day.charAt(0) == "0") {
day = day.charAt(1);
}
newDate.setMonth(parseInt(month)-1);
newDate.setDate(parseInt(day));
newDate.setYear(parseInt(field.value.substring(0,4)));
} else if (format.toLowerCase() == 'mm/dd/yyyy') {
month = field.value.substring(0,2);
if (month.charAt(0) == "0") {
month = month.charAt(1);
}
day = field.value.substring(3,5);
if (day.charAt(0) == "0") {
day = day.charAt(1);
}
newDate.setMonth(parseInt(month)-1);
newDate.setDate(parseInt(day));
newDate.setYear(parseInt(field.value.substring(6,10)));
}
return newDate;
}
// Determines the number of days between two dates.
function daysBetween(date1, date2) {
var diff;
var days;
diff = Math.abs(date1.getTime() - date2.getTime());
days = Math.floor(diff/(1000 * 60 * 60 * 24));
return days;
}
// Accepts a non-negative currency value
function isCurrency(field) {
var result;
var regexp;
result = false;
if (field.value === '' || field.value === null) {
return result;
}
//regexp = new RegExp('^[-]?([1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|\.[0-9]{1,2})$');
regexp = new RegExp('^([1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|\.[0-9]{1,2})$');
result = regexp.test(field.value);
return result;
}
function datesEqual(date1,date2) {
var result = date1.getMonth() == date2.getMonth();
result = result && date1.getDate() == date2.getDate();
result = result && date1.getYear() == date2.getYear();
return result;
}
function checkAll(field) {
for(var i = 0; i < field.length; i++)
field[i].checked = true;
}
function uncheckAll(field) {
for(var i = 0; i < field.length; i++)
field[i].checked = false;
}
function getCalBase() {
var metaTag = document.getElementsByTagName("meta");
var calendarBase = "";
for(var i=0; i<metaTag.length; i++) {
if(metaTag[i].name == "calbase") {
calendarBase = metaTag[i].content;
}
}
return calendarBase;
}
function clearFieldIfChecked(field, checkbox) {
if (checkbox.checked) field.value = '';
}
// Enable/Disable appropriate elements based on selected country
function checkCountry(myform) {
if (myform.country.value === '') {
myform.state.disabled = false;
myform.province.disabled = false;
} else if (myform.country.value == 'CA') {
myform.province.disabled = false;
myform.state.disabled = true;
myform.state.value = '';
} else if (myform.country.value == 'US') {
myform.state.disabled = false;
myform.province.disabled = true;
myform.province.value = '';
} else {
myform.state.disabled = true;
myform.state.value = '';
myform.province.disabled = true;
myform.province.value = '';
}
}
function setElementValue(element, value) {
var el = document.getElementsByName(element)[0];
el.value = value;
}
function getElementValue(element) {
var el = document.getElementsByName(element)[0];
return el.value;
}
function isChecked(element) {
var el = document.getElementsByName(element)[0];
return el.checked;
}
function setChecked(element, on) {
var el = document.getElementsByName(element)[0];
el.checked = on;
}
function setElementDisabled(element, disabled) {
var el = document.getElementsByName(element)[0];
el.disabled = disabled;
}
function setElementReadonly(element, readonly) {
var el = document.getElementsByName(element)[0];
el.readOnly = readonly;
}
function resetFirstItem(formId) {
var frm = document.getElementById(formId);
frm.firstItem.value = '0';
}
/*
function selectAllInList(listId) {
selectAllInList(listId, true);
}
*/
function selectAllInList(listId, on) {
var list = document.getElementById(listId);
var len = list.length;
for(i=0; i<len; i++) {
list.options[i].selected=on;
}
}
// Get the LI values from a UL tag and concatenate them with '|'.
// Set element 'elemId' to the concatenated value.
function getListValues(listId, prefix, elemId) {
var list = document.getElementById(listId);
var values = '';
for (var i=0; i < list.childNodes.length; i++)
{
var item = list.childNodes[i].getAttribute('value');
var id = item.substring(prefix.length,item.length);
values += id;
if (i < list.childNodes.length-1)
values += '|';
}
document.getElementById(elemId).value = values;
}
// cmscript: squeezebox
/**
* SqueezeBox - Expandable Lightbox
*
* Allows to open various content as modal,
* centered and animated box.
*
* Dependencies: MooTools 1.2
*
* Inspired by
* ... Lokesh Dhakar	- The original Lightbox v2
*
* @version	1.1 rc4
*
* @license	MIT-style license
* @author	Harald Kirschner <mail [at] digitarald.de>
* @copyright	Author
*/
var SqueezeBox = {
presets: {
onOpen: $empty,
onClose: $empty,
onUpdate: $empty,
onResize: $empty,
onMove: $empty,
onShow: $empty,
onHide: $empty,
size: {x: 600, y: 450},
sizeLoading: {x: 200, y: 150},
marginInner: {x: 20, y: 20},
marginImage: {x: 50, y: 75},
handler: false,
target: null,
closable: true,
closeBtn: true,
zIndex: 65555,
overlayOpacity: 0.7,
classWindow: '',
classOverlay: '',
overlayFx: {},
resizeFx: {},
contentFx: {},
parse: false, // 'rel'
parseSecure: false,
shadow: true,
document: null,
ajaxOptions: {}
},
initialize: function(presets) {
if (this.options) return this;
this.presets = $merge(this.presets, presets);
this.doc = this.presets.document || document;
this.options = {};
this.setOptions(this.presets).build();
this.bound = {
window: this.reposition.bind(this, [null]),
scroll: this.checkTarget.bind(this),
close: this.close.bind(this),
key: this.onKey.bind(this)
};
this.isOpen = this.isLoading = false;
return this;
},
build: function() {
this.overlay = new Element('div', {
id: 'sbox-overlay',
styles: {display: 'none', zIndex: this.options.zIndex}
});
this.win = new Element('div', {
id: 'sbox-window',
styles: {display: 'none', zIndex: this.options.zIndex + 2}
});
if (this.options.shadow) {
if (Browser.Engine.webkit420) {
this.win.setStyle('-webkit-box-shadow', '0 0 10px rgba(0, 0, 0, 0.7)');
} else if (!Browser.Engine.trident4) {
var shadow = new Element('div', {'class': 'sbox-bg-wrap'}).inject(this.win);
var relay = function(e) {
this.overlay.fireEvent('click', [e]);
}.bind(this);
['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'].each(function(dir) {
new Element('div', {'class': 'sbox-bg sbox-bg-' + dir}).inject(shadow).addEvent('click', relay);
});
}
}
this.content = new Element('div', {id: 'sbox-content'}).inject(this.win);
this.closeBtn = new Element('a', {id: 'sbox-btn-close', href: '#'}).inject(this.win);
this.fx = {
overlay: new Fx.Tween(this.overlay, $merge({
property: 'opacity',
onStart: Events.prototype.clearChain,
duration: 250,
link: 'cancel'
}, this.options.overlayFx)).set(0),
win: new Fx.Morph(this.win, $merge({
onStart: Events.prototype.clearChain,
unit: 'px',
duration: 750,
transition: Fx.Transitions.Quint.easeOut,
link: 'cancel',
unit: 'px'
}, this.options.resizeFx)),
content: new Fx.Tween(this.content, $merge({
property: 'opacity',
duration: 250,
link: 'cancel'
}, this.options.contentFx)).set(0)
};
$(this.doc.body).adopt(this.overlay, this.win);
},
assign: function(to, options) {
return ($(to) || $$(to)).addEvent('click', function() {
return !SqueezeBox.fromElement(this, options);
});
},
open: function(subject, options) {
this.initialize();
if (this.element != null) this.trash();
this.element = $(subject) || false;
this.setOptions($merge(this.presets, options || {}));
if (this.element && this.options.parse) {
var obj = this.element.getProperty(this.options.parse);
if (obj && (obj = JSON.decode(obj, this.options.parseSecure))) this.setOptions(obj);
}
this.url = ((this.element) ? (this.element.get('href')) : subject) || this.options.url || '';
this.assignOptions();
var handler = handler || this.options.handler;
if (handler) return this.setContent(handler, this.parsers[handler].call(this, true));
var ret = false;
return this.parsers.some(function(parser, key) {
var content = parser.call(this);
if (content) {
ret = this.setContent(key, content);
return true;
}
return false;
}, this);
},
fromElement: function(from, options) {
return this.open(from, options);
},
assignOptions: function() {
this.overlay.set('class', this.options.classOverlay);
this.win.set('class', this.options.classWindow);
if (Browser.Engine.trident4) this.win.addClass('sbox-window-ie6');
},
close: function(e) {
var stoppable = ($type(e) == 'event');
if (stoppable) e.stop();
if (!this.isOpen || (stoppable && !$lambda(this.options.closable).call(this, e))) return this;
this.fx.overlay.start(0).chain(this.toggleOverlay.bind(this));
this.win.setStyle('display', 'none');
this.fireEvent('onClose', [this.content]);
this.trash();
this.toggleListeners();
this.isOpen = false;
return this;
},
trash: function() {
this.element = this.asset = null;
this.content.empty();
this.options = {};
this.removeEvents().setOptions(this.presets).callChain();
},
onError: function() {
this.asset = null;
this.setContent('string', this.options.errorMsg || 'An error occurred');
},
setContent: function(handler, content) {
if (!this.handlers[handler]) return false;
this.content.className = 'sbox-content-' + handler;
this.applyTimer = this.applyContent.delay(this.fx.overlay.options.duration, this, this.handlers[handler].call(this, content));
if (this.overlay.retrieve('opacity')) return this;
this.toggleOverlay(true);
this.fx.overlay.start(this.options.overlayOpacity);
return this.reposition();
},
applyContent: function(content, size) {
if (!this.isOpen && !this.applyTimer) return;
this.applyTimer = $clear(this.applyTimer);
this.hideContent();
if (!content) {
this.toggleLoading(true);
} else {
if (this.isLoading) this.toggleLoading(false);
this.fireEvent('onUpdate', [this.content], 20);
}
if (content) {
if (['string', 'array'].contains($type(content))) this.content.set('html', content);
else if (!this.content.hasChild(content)) this.content.adopt(content);
}
this.callChain();
if (!this.isOpen) {
this.toggleListeners(true);
this.resize(size, true);
this.isOpen = true;
this.fireEvent('onOpen', [this.content]);
} else {
this.resize(size);
}
},
resize: function(size, instantly) {
this.showTimer = $clear(this.showTimer || null);
var box = this.doc.getSize(), scroll = this.doc.getScroll();
this.size = $merge((this.isLoading) ? this.options.sizeLoading : this.options.size, size);
var to = {
width: this.size.x,
height: this.size.y,
left: (scroll.x + (box.x - this.size.x - this.options.marginInner.x) / 2).toInt(),
top: (scroll.y + (box.y - this.size.y - this.options.marginInner.y) / 2).toInt()
};
this.hideContent();
if (!instantly) {
this.fx.win.start(to).chain(this.showContent.bind(this));
} else {
this.win.setStyles(to).setStyle('display', '');
this.showTimer = this.showContent.delay(50, this);
}
return this.reposition();
},
toggleListeners: function(state) {
var fn = (state) ? 'addEvent' : 'removeEvent';
this.closeBtn[fn]('click', this.bound.close);
this.overlay[fn]('click', this.bound.close);
this.doc[fn]('keydown', this.bound.key)[fn]('mousewheel', this.bound.scroll);
this.doc.getWindow()[fn]('resize', this.bound.window)[fn]('scroll', this.bound.window);
},
toggleLoading: function(state) {
this.isLoading = state;
this.win[(state) ? 'addClass' : 'removeClass']('sbox-loading');
if (state) this.fireEvent('onLoading', [this.win]);
},
toggleOverlay: function(state) {
var full = this.doc.getSize().x;
this.overlay.setStyle('display', (state) ? '' : 'none');
this.doc.body[(state) ? 'addClass' : 'removeClass']('body-overlayed');
if (state) {
this.scrollOffset = this.doc.getWindow().getSize().x - full;
this.doc.body.setStyle('margin-right', this.scrollOffset);
} else {
this.doc.body.setStyle('margin-right', '');
}
},
showContent: function() {
if (this.content.get('opacity')) this.fireEvent('onShow', [this.win]);
this.fx.content.start(1);
},
hideContent: function() {
if (!this.content.get('opacity')) this.fireEvent('onHide', [this.win]);
this.fx.content.cancel().set(0);
},
onKey: function(e) {
switch (e.key) {
case 'esc': this.close(e);
case 'up': case 'down': return false;
}
},
checkTarget: function(e) {
return this.content.hasChild(e.target);
},
reposition: function() {
var size = this.doc.getSize(), scroll = this.doc.getScroll(), ssize = this.doc.getScrollSize();
this.overlay.setStyles({
width: ssize.x + 'px',
height: ssize.y + 'px'
});
this.win.setStyles({
left: (scroll.x + (size.x - this.win.offsetWidth) / 2 - this.scrollOffset).toInt() + 'px',
top: (scroll.y + (size.y - this.win.offsetHeight) / 2).toInt() + 'px'
});
return this.fireEvent('onMove', [this.overlay, this.win]);
},
removeEvents: function(type){
if (!this.$events) return this;
if (!type) this.$events = null;
else if (this.$events[type]) this.$events[type] = null;
return this;
},
extend: function(properties) {
return $extend(this, properties);
},
handlers: new Hash(),
parsers: new Hash()
};
SqueezeBox.extend(new Events($empty)).extend(new Options($empty)).extend(new Chain($empty));
SqueezeBox.parsers.extend({
image: function(preset) {
return (preset || (/\.(?:jpg|png|gif)$/i).test(this.url)) ? this.url : false;
},
clone: function(preset) {
if ($(this.options.target)) return $(this.options.target);
if (this.element && !this.element.parentNode) return this.element;
var bits = this.url.match(/#([\w-]+)$/);
return (bits) ? $(bits[1]) : (preset ? this.element : false);
},
ajax: function(preset) {
return (preset || (this.url && !(/^(?:javascript|#)/i).test(this.url))) ? this.url : false;
},
iframe: function(preset) {
return (preset || this.url) ? this.url : false;
},
string: function(preset) {
return true;
}
});
SqueezeBox.handlers.extend({
image: function(url) {
var size, tmp = new Image();
this.asset = null;
tmp.onload = tmp.onabort = tmp.onerror = (function() {
tmp.onload = tmp.onabort = tmp.onerror = null;
if (!tmp.width) {
this.onError.delay(10, this);
return;
}
var box = this.doc.getSize();
box.x -= this.options.marginImage.x;
box.y -= this.options.marginImage.y;
size = {x: tmp.width, y: tmp.height};
for (var i = 2; i--;) {
if (size.x > box.x) {
size.y *= box.x / size.x;
size.x = box.x;
} else if (size.y > box.y) {
size.x *= box.y / size.y;
size.y = box.y;
}
}
size.x = size.x.toInt();
size.y = size.y.toInt();
this.asset = $(tmp);
tmp = null;
this.asset.width = size.x;
this.asset.height = size.y;
this.applyContent(this.asset, size);
}).bind(this);
tmp.src = url;
if (tmp && tmp.onload && tmp.complete) tmp.onload();
return (this.asset) ? [this.asset, size] : null;
},
clone: function(el) {
if (el) return el.clone();
return this.onError();
},
adopt: function(el) {
if (el) return el;
return this.onError();
},
ajax: function(url) {
var options = this.options.ajaxOptions || {};
this.asset = new Request.HTML($merge({
method: 'get',
evalScripts: false
}, this.options.ajaxOptions)).addEvents({
onSuccess: function(resp) {
this.applyContent(resp);
if (options.evalScripts !== null && !options.evalScripts) $exec(this.asset.response.javascript);
this.fireEvent('onAjax', [resp, this.asset]);
this.asset = null;
}.bind(this),
onFailure: this.onError.bind(this)
});
this.asset.send.delay(10, this.asset, [{url: url}]);
},
iframe: function(url) {
this.asset = new Element('iframe', $merge({
src: url,
frameBorder: 0,
width: this.options.size.x,
height: this.options.size.y
}, this.options.iframeOptions));
if (this.options.iframePreload) {
this.asset.addEvent('load', function() {
this.applyContent(this.asset.setStyle('display', ''));
}.bind(this));
this.asset.setStyle('display', 'none').inject(this.content);
return false;
}
return this.asset;
},
string: function(str) {
return str;
}
});
SqueezeBox.handlers.url = SqueezeBox.handlers.ajax;
SqueezeBox.parsers.url = SqueezeBox.parsers.ajax;
SqueezeBox.parsers.adopt = SqueezeBox.parsers.clone;
/*
Slimbox v1.71 - The ultimate lightweight Lightbox clone
(c) 2007-2009 Christophe Beyls <http://www.digitalia.be>
MIT-style license.
*/
var Slimbox=(function(){var F=window,n=Browser.Engine.trident4,u,g,G=-1,o,w,E,v,y,M,s,m={},t=new Image(),K=new Image(),I,a,h,q,J,e,H,c,A,L,x,i,d,C;F.addEvent("domready",function(){$(document.body).adopt($$(I=new Element("div",{id:"lbOverlay",events:{click:D}}),a=new Element("div",{id:"lbCenter"}),H=new Element("div",{id:"lbBottomContainer"})).setStyle("display","none"));h=new Element("div",{id:"lbImage"}).injectInside(a).adopt(q=new Element("div",{styles:{position:"relative"}}).adopt(J=new Element("a",{id:"lbPrevLink",href:"#",events:{click:B}}),e=new Element("a",{id:"lbNextLink",href:"#",events:{click:f}})));c=new Element("div",{id:"lbBottom"}).injectInside(H).adopt(new Element("a",{id:"lbCloseLink",href:"#",events:{click:D}}),A=new Element("div",{id:"lbCaption"}),L=new Element("div",{id:"lbNumber"}),new Element("div",{styles:{clear:"both"}}))});function z(){var N=F.getScroll(),O=F.getSize();$$(a,H).setStyle("left",N.x+(O.x/2));if(v){I.setStyles({left:N.x,top:N.y,width:O.x,height:O.y})}}function l(N){["object",n?"select":"embed"].forEach(function(P){Array.forEach(document.getElementsByTagName(P),function(Q){if(N){Q._slimbox=Q.style.visibility}Q.style.visibility=N?"hidden":Q._slimbox})});I.style.display=N?"":"none";var O=N?"addEvent":"removeEvent";F[O]("scroll",z)[O]("resize",z);document[O]("keydown",p)}function p(O){var N=O.code;return u.closeKeys.contains(N)?D():u.nextKeys.contains(N)?f():u.previousKeys.contains(N)?B():false}function B(){return b(w)}function f(){return b(E)}function b(N){if(N>=0){G=N;o=g[N][0];w=(G||(u.loop?g.length:0))-1;E=((G+1)%g.length)||(u.loop?0:-1);r();a.className="lbLoading";m=new Image();m.onload=k;m.src=o}return false}function k(){a.className="";d.set(0);h.setStyles({backgroundImage:"url("+o+")",display:""});q.setStyle("width",m.width);$$(q,J,e).setStyle("height",m.height);A.set("html",g[G][1]||"");L.set("html",(((g.length>1)&&u.counterText)||"").replace(/{x}/,G+1).replace(/{y}/,g.length));if(w>=0){t.src=g[w][0]}if(E>=0){K.src=g[E][0]}M=h.offsetWidth;s=h.offsetHeight;var P=Math.max(0,y-(s/2)),N=0,O;if(a.offsetHeight!=s){N=i.start({height:s,top:P})}if(a.offsetWidth!=M){N=i.start({width:M,marginLeft:-M/2})}O=function(){H.setStyles({width:M,top:P+s,marginLeft:-M/2,visibility:"hidden",display:""});d.start(1)};if(N){i.chain(O)}else{O()}}function j(){if(w>=0){J.style.display=""}if(E>=0){e.style.display=""}C.set(-c.offsetHeight).start(0);H.style.visibility=""}function r(){m.onload=$empty;m.src=t.src=K.src=o;i.cancel();d.cancel();C.cancel();$$(J,e,h,H).setStyle("display","none")}function D(){if(G>=0){r();G=w=E=-1;a.style.display="none";x.cancel().chain(l).start(0)}return false}Element.implement({slimbox:function(N,O){$$(this).slimbox(N,O);return this}});Elements.implement({slimbox:function(N,Q,P){Q=Q||function(R){return[R.href,R.title]};P=P||function(){return true};var O=this;O.removeEvents("click").addEvent("click",function(){var R=O.filter(P,this);return Slimbox.open(R.map(Q),R.indexOf(this),N)});return O}});return{open:function(P,O,N){u=$extend({loop:false,overlayOpacity:0.8,overlayFadeDuration:400,resizeDuration:400,resizeTransition:false,initialWidth:250,initialHeight:250,imageFadeDuration:400,captionAnimationDuration:400,counterText:"Image {x} of {y}",closeKeys:[27,88,67],previousKeys:[37,80],nextKeys:[39,78]},N||{});x=new Fx.Tween(I,{property:"opacity",duration:u.overlayFadeDuration});i=new Fx.Morph(a,$extend({duration:u.resizeDuration,link:"chain"},u.resizeTransition?{transition:u.resizeTransition}:{}));d=new Fx.Tween(h,{property:"opacity",duration:u.imageFadeDuration,onComplete:j});C=new Fx.Tween(c,{property:"margin-top",duration:u.captionAnimationDuration});if(typeof P=="string"){P=[[P,O]];O=0}y=F.getScrollTop()+(F.getHeight()/2);M=u.initialWidth;s=u.initialHeight;a.setStyles({top:Math.max(0,y-(s/2)),width:M,height:s,marginLeft:-M/2,display:""});v=n||(I.currentStyle&&(I.currentStyle.position!="fixed"));if(v){I.style.position="absolute"}x.set(0).start(u.overlayOpacity);z();l(1);g=P;u.loop=u.loop&&(g.length>1);return b(O)}}})();
// AUTOLOAD CODE BLOCK (MAY BE CHANGED OR REMOVED)
Slimbox.scanPage = function() {
$$("a").filter(function(el) {
return el.rel && el.rel.test(/^lightbox/i);
}).slimbox({/* Put custom options here */}, null, function(el) {
return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
});
};
if (!/android|iphone|ipod|series60|symbian|windows ce|blackberry/i.test(navigator.userAgent)) {
window.addEvent("domready", Slimbox.scanPage);
}
/*
mediaboxAdvanced v1.3.4b - The ultimate extension of Slimbox and Mediabox; an all-media script
updated 2010.09.21
(c) 2007-2010 John Einselen <http://iaian7.com>
based on Slimbox v1.64 - The ultimate lightweight Lightbox clone
(c) 2007-2008 Christophe Beyls <http://www.digitalia.be>
MIT-style license.
*/
var Mediabox;
(function() {
// Global variables, accessible to Mediabox only
var options, images, activeImage, prevImage, nextImage, top, mTop, left, mLeft, winWidth, winHeight, fx, preload, preloadPrev = new Image(), preloadNext = new Image(), foxfix = false, iefix = false,
// DOM elements
overlay, center, image, bottom, captionSplit, title, caption, prevLink, number, nextLink,
// Mediabox specific vars
URL, WH, WHL, elrel, mediaWidth, mediaHeight, mediaType = "none", mediaSplit, mediaId = "mediaBox", mediaFmt, margin;
/*	Initialization	*/
window.addEvent("domready", function() {
// Create and append the Mediabox HTML code at the bottom of the document
document.id(document.body).adopt(
$$([
overlay = new Element("div", {id: "mbOverlay"}).addEvent("click", close),
center = new Element("div", {id: "mbCenter"})
]).setStyle("display", "none")
);
image = new Element("div", {id: "mbImage"}).injectInside(center);
bottom = new Element("div", {id: "mbBottom"}).injectInside(center).adopt(
closeLink = new Element("a", {id: "mbCloseLink", href: "#"}).addEvent("click", close),
nextLink = new Element("a", {id: "mbNextLink", href: "#"}).addEvent("click", next),
prevLink = new Element("a", {id: "mbPrevLink", href: "#"}).addEvent("click", previous),
title = new Element("div", {id: "mbTitle"}),
number = new Element("div", {id: "mbNumber"}),
caption = new Element("div", {id: "mbCaption"})
);
fx = {
overlay: new Fx.Tween(overlay, {property: "opacity", duration: 360}).set(0),
image: new Fx.Tween(image, {property: "opacity", duration: 360, onComplete: captionAnimate}),
bottom: new Fx.Tween(bottom, {property: "opacity", duration: 240}).set(0)
};
});
/*	API	*/
Mediabox = {
close: function(){
close();	// Thanks to Yosha on the google group for fixing the close function API!
},
open: function(_images, startImage, _options) {
options = $extend({
text: ['<big>&laquo;</big>','<big>&raquo;</big>','<big>&times;</big>'],	// Set "previous", "next", and "close" button content (HTML code should be written as entity codes or properly escaped)
//	text: ['<big>«</big>','<big>»</big>','<big>×</big>'],	// Set "previous", "next", and "close" button content (HTML code should be written as entity codes or properly escaped)
//	example	text: ['<b>P</b>rev','<b>N</b>ext','<b>C</b>lose'],
loop: false,	// Allows to navigate between first and last images
keyboard: true,	// Enables keyboard control; escape key, left arrow, and right arrow
alpha: true,	// Adds 'x', 'c', 'p', and 'n' when keyboard control is also set to true
stopKey: false,	// Stops all default keyboard actions while overlay is open (such as up/down arrows)
// Does not apply to iFrame content, does not affect mouse scrolling
overlayOpacity: 0.7,	// 1 is opaque, 0 is completely transparent (change the color in the CSS file)
resizeOpening: true,	// Determines if box opens small and grows (true) or starts at larger size (false)
resizeDuration: 240,	// Duration of each of the box resize animations (in milliseconds)
resizeTransition: false,	// Mootools transition effect (false leaves it at the default)
initialWidth: 320,	// Initial width of the box (in pixels)
initialHeight: 180,	// Initial height of the box (in pixels)
defaultWidth: 640,	// Default width of the box (in pixels) for undefined media (MP4, FLV, etc.)
defaultHeight: 360,	// Default height of the box (in pixels) for undefined media (MP4, FLV, etc.)
showCaption: true,	// Display the title and caption, true / false
showCounter: true,	// If true, a counter will only be shown if there is more than 1 image to display
counterText: '({x} of {y})',	// Translate or change as you wish
//	Image options
imgBackground: false,	// Embed images as CSS background (true) or <img> tag (false)
// CSS background is naturally non-clickable, preventing downloads
// IMG tag allows automatic scaling for smaller screens
// (all images have no-click code applied, albeit not Opera compatible. To remove, comment lines 212 and 822)
imgPadding: 100,	// Clearance necessary for images larger than the window size (only used when imgBackground is false)
// Change this number only if the CSS style is significantly divergent from the original, and requires different sizes
//	Inline options
//	overflow: 'auto',	// If set, overides CSS settings for inline content only
//	Global media options
html5: 'true',	// HTML5 settings for YouTube and Vimeo, false = off, true = on
scriptaccess: 'true',	// Allow script access to flash files
fullscreen: 'true',	// Use fullscreen
fullscreenNum: '1',	// 1 = true
autoplay: 'true',	// Plays the video as soon as it's opened
autoplayNum: '1',	// 1 = true
autoplayYes: 'yes',	// yes = true
volume: '100',	// 0-100, used for NonverBlaster and Quicktime players
medialoop: 'true',	// Loop video playback, true / false, used for NonverBlaster and Quicktime players
bgcolor: '#000000',	// Background color, used for flash and QT media
wmode: 'opaque',	// Background setting for Adobe Flash ('opaque' and 'transparent' are most common)
//	NonverBlaster
useNB: true,	// use NonverBlaster (true) or JW Media Player (false) for .flv and .mp4 files
playerpath: '/NonverBlaster.swf',	// Path to NonverBlaster.swf
controlColor: '0xFFFFFF',	// set the controlbar color
controlBackColor: '0x000000',	// set the controlbar color
showTimecode: 'false',	// turn timecode display off or on
//	JW Media Player settings and options
JWplayerpath: '/js/player.swf',	// Path to the mediaplayer.swf or flvplayer.swf file
backcolor:	'000000',	// Base color for the controller, color name / hex value (0x000000)
frontcolor: '999999',	// Text and button color for the controller, color name / hex value (0x000000)
lightcolor: '000000',	// Rollover color for the controller, color name / hex value (0x000000)
screencolor: '000000',	// Rollover color for the controller, color name / hex value (0x000000)
controlbar: 'over',	// bottom, over, none (this setting is ignored when playing audio files)
//	Quicktime options
controller: 'true',	// Show controller, true / false
//	Flickr options
flInfo: 'true',	// Show title and info at video start
//	Revver options
revverID: '187866',	// Revver affiliate ID, required for ad revinue sharing
revverFullscreen: 'true',	// Fullscreen option
revverBack: '000000',	// Background color
revverFront: 'ffffff',	// Foreground color
revverGrad: '000000',	// Gradation color
//	Ustream options
usViewers: 'true',	// Show online viewer count (true/false)
//	Youtube options
ytBorder: '0',	// Outline	(1=true, 0=false)
ytColor1: '000000',	// Outline color
ytColor2: '333333',	// Base interface color (highlight colors stay consistent)
ytQuality: '&ap=%2526fmt%3D18', // Leave empty for standard quality, use '&ap=%2526fmt%3D18' for high quality, and '&ap=%2526fmt%3D22' for HD (note that not all videos are availible in high quality, and very few in HD)
ytRel: '0',	// Show related videos	(1=true, 0=false)
ytInfo: '1',	// Show video info	(1=true, 0=false)
ytSearch: '0',	// Show search field	(1=true, 0=false)
//	Viddyou options
vuPlayer: 'basic',	// Use 'full' or 'basic' players
//	Vimeo options
vmTitle: '1',	// Show video title
vmByline: '1',	// Show byline
vmPortrait: '1',	// Show author portrait
vmColor: 'ffffff'	// Custom controller colors, hex value minus the # sign, defult is 5ca0b5
}, _options || {});
prevLink.set('html', options.text[0]);
nextLink.set('html', options.text[1]);
closeLink.set('html', options.text[2]);
margin = center.getStyle('padding-left').toInt()+image.getStyle('margin-left').toInt()+image.getStyle('padding-left').toInt();
if ((Browser.Engine.gecko) && (Browser.Engine.version<19)) {	// Fixes Firefox 2 and Camino 1.6 incompatibility with opacity + flash
foxfix = true;
options.overlayOpacity = 1;
overlay.className = 'mbOverlayFF';
}
if ((Browser.Engine.trident) && (Browser.Engine.version<5)) {	// Fixes IE 6 and earlier incompatibilities with CSS position: fixed;
iefix = true;
overlay.className = 'mbOverlayIE';
overlay.setStyle("position", "absolute");
position();
}
if (typeof _images == "string") {	// Used for single images only, with URL and Title as first two arguments
_images = [[_images,startImage,_options]];
startImage = 0;
}
images = _images;
options.loop = options.loop && (images.length > 1);
size();
setup(true);
top = window.getScrollTop() + (window.getHeight()/2);
left = window.getScrollLeft() + (window.getWidth()/2);
fx.resize = new Fx.Morph(center, $extend({duration: options.resizeDuration, onComplete: imageAnimate}, options.resizeTransition ? {transition: options.resizeTransition} : {}));
center.setStyles({top: top, left: left, width: options.initialWidth, height: options.initialHeight, marginTop: -(options.initialHeight/2)-margin, marginLeft: -(options.initialWidth/2)-margin, display: ""});
fx.overlay.start(options.overlayOpacity);
return changeImage(startImage);
}
};
Element.implement({
mediabox: function(_options, linkMapper) {
$$(this).mediabox(_options, linkMapper);	// The processing of a single element is similar to the processing of a collection with a single element
return this;
}
});
Elements.implement({
/*
options:	Optional options object, see Mediabox.open()
linkMapper:	Optional function taking a link DOM element and an index as arguments and returning an array containing 3 elements:
the image URL and the image caption (may contain HTML)
linksFilter:Optional function taking a link DOM element and an index as arguments and returning true if the element is part of
the image collection that will be shown on click, false if not. "this" refers to the element that was clicked.
This function must always return true when the DOM element argument is "this".
*/
mediabox: function(_options, linkMapper, linksFilter) {
linkMapper = linkMapper || function(el) {
elrel = el.rel.split(/[\[\]]/);
elrel = elrel[1];
return [el.href, el.title, elrel];
};
linksFilter = linksFilter || function() {
return true;
};
var links = this;
links.addEvent('contextmenu', function(e){
if (this.toString().match(/\.gif|\.jpg|\.jpeg|\.png/i)) e.stop();
});
links.removeEvents("click").addEvent("click", function() {
// Build the list of images that will be displayed
var filteredArray = links.filter(linksFilter, this);
var filteredLinks = [];
var filteredHrefs = [];
filteredArray.each(function(item, index){
if(filteredHrefs.indexOf(item.toString()) < 0) {
filteredLinks.include(filteredArray[index]);
filteredHrefs.include(filteredArray[index].toString());
};
});
return Mediabox.open(filteredLinks.map(linkMapper), filteredHrefs.indexOf(this.toString()), _options);
});
return links;
}
});
/*	Internal functions	*/
function position() {
overlay.setStyles({top: window.getScrollTop(), left: window.getScrollLeft()});
}
function size() {
winWidth = window.getWidth();
winHeight = window.getHeight();
overlay.setStyles({width: winWidth, height: winHeight});
}
function setup(open) {
// Hides on-page objects and embeds while the overlay is open, nessesary to counteract Firefox stupidity
if (Browser.Engine.gecko) {
["object", window.ie ? "select" : "embed"].forEach(function(tag) {
Array.forEach(document.getElementsByTagName(tag), function(el) {
if (open) el._mediabox = el.style.visibility;
el.style.visibility = open ? "hidden" : el._mediabox;
});
});
}
overlay.style.display = open ? "" : "none";
var fn = open ? "addEvent" : "removeEvent";
if (iefix) window[fn]("scroll", position);
window[fn]("resize", size);
if (options.keyboard) document[fn]("keydown", keyDown);
}
function keyDown(event) {
if (options.alpha) {
switch(event.code) {
case 27:	// Esc
case 88:	// 'x'
case 67:	// 'c'
close();
break;
case 37:	// Left arrow
case 80:	// 'p'
previous();
break;
case 39:	// Right arrow
case 78:	// 'n'
next();
}
} else {
switch(event.code) {
case 27:	// Esc
close();
break;
case 37:	// Left arrow
previous();
break;
case 39:	// Right arrow
next();
}
}
if (options.stopKey) { return false; };
}
function previous() {
return changeImage(prevImage);
}
function next() {
return changeImage(nextImage);
}
function changeImage(imageIndex) {
if (imageIndex >= 0) {
image.set('html', '');
activeImage = imageIndex;
prevImage = ((activeImage || !options.loop) ? activeImage : images.length) - 1;
nextImage = activeImage + 1;
if (nextImage == images.length) nextImage = options.loop ? 0 : -1;
stop();
center.className = "mbLoading";
/*	mediaboxAdvanced link formatting and media support	*/
if (!images[imageIndex][2]) images[imageIndex][2] = '';	// Thanks to Leo Feyer for offering this fix
WH = images[imageIndex][2].split(' ');
WHL = WH.length;
if (WHL>1) {
mediaWidth = (WH[WHL-2].match("%")) ? (window.getWidth()*((WH[WHL-2].replace("%", ""))*0.01))+"px" : WH[WHL-2]+"px";
mediaHeight = (WH[WHL-1].match("%")) ? (window.getHeight()*((WH[WHL-1].replace("%", ""))*0.01))+"px" : WH[WHL-1]+"px";
} else {
mediaWidth = "";
mediaHeight = "";
}
URL = images[imageIndex][0];
URL = encodeURI(URL).replace("(","%28").replace(")","%29");
captionSplit = images[activeImage][1].split('::');
// Quietube and yFrog support
if (URL.match(/quietube\.com/i)) {
mediaSplit = URL.split('v.php/');
URL = mediaSplit[1];
} else if (URL.match(/\/\/yfrog/i)) {
mediaType = (URL.substring(URL.length-1));
if (mediaType.match(/b|g|j|p|t/i)) mediaType = 'image';
if (mediaType == 's') mediaType = 'flash';
if (mediaType.match(/f|z/i)) mediaType = 'video';
URL = URL+":iphone";
}
/*	Specific Media Types	*/
// GIF, JPG, PNG
if (URL.match(/\.gif|\.jpg|\.jpeg|\.png|twitpic\.com/i) || mediaType == 'image') {
mediaType = 'img';
URL = URL.replace(/twitpic\.com/i, "twitpic.com/show/full");
preload = new Image();
preload.onload = startEffect;
preload.src = URL;
// FLV, MP4
} else if (URL.match(/\.flv|\.mp4/i) || mediaType == 'video') {
mediaType = 'obj';
mediaWidth = mediaWidth || options.defaultWidth;
mediaHeight = mediaHeight || options.defaultHeight;
if (options.useNB) {
preload = new Swiff(''+options.playerpath+'?mediaURL='+URL+'&allowSmoothing=true&autoPlay='+options.autoplay+'&buffer=6&showTimecode='+options.showTimecode+'&loop='+options.medialoop+'&controlColor='+options.controlColor+'&controlBackColor='+options.controlBackColor+'&defaultVolume='+options.volume+'&scaleIfFullScreen=true&showScalingButton=true&crop=false', {
id: 'MediaboxSWF',
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
} else {
preload = new Swiff(''+options.JWplayerpath+'?file='+URL+'&backcolor='+options.backcolor+'&frontcolor='+options.frontcolor+'&lightcolor='+options.lightcolor+'&screencolor='+options.screencolor+'&autostart='+options.autoplay+'&controlbar='+options.controlbar, {
id: 'MediaboxSWF',
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
}
startEffect();
// MP3, AAC
} else if (URL.match(/\.mp3|\.aac|tweetmic\.com|tmic\.fm/i) || mediaType == 'audio') {
mediaType = 'obj';
mediaWidth = mediaWidth || options.defaultWidth;
mediaHeight = mediaHeight || "20px";
if (URL.match(/tweetmic\.com|tmic\.fm/i)) {
URL = URL.split('/');
URL[4] = URL[4] || URL[3];
URL = "http://media4.fjarnet.net/tweet/tweetmicapp-"+URL[4]+'.mp3';
}
if (options.useNB) {
preload = new Swiff(''+options.playerpath+'?mediaURL='+URL+'&allowSmoothing=true&autoPlay='+options.autoplay+'&buffer=6&showTimecode='+options.showTimecode+'&loop='+options.medialoop+'&controlColor='+options.controlColor+'&controlBackColor='+options.controlBackColor+'&defaultVolume='+options.volume+'&scaleIfFullScreen=true&showScalingButton=true&crop=false', {
id: 'MediaboxSWF',
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
} else {
preload = new Swiff(''+options.JWplayerpath+'?file='+URL+'&backcolor='+options.backcolor+'&frontcolor='+options.frontcolor+'&lightcolor='+options.lightcolor+'&screencolor='+options.screencolor+'&autostart='+options.autoplay, {
id: 'MediaboxSWF',
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
}
startEffect();
// SWF
} else if (URL.match(/\.swf/i) || mediaType == 'flash') {
mediaType = 'obj';
mediaWidth = mediaWidth || options.defaultWidth;
mediaHeight = mediaHeight || options.defaultHeight;
preload = new Swiff(URL, {
id: 'MediaboxSWF',
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// MOV, M4V, M4A, MP4, AIFF, etc.
} else if (URL.match(/\.mov|\.m4v|\.m4a|\.aiff|\.avi|\.caf|\.dv|\.mid|\.m3u|\.mp3|\.mp2|\.mp4|\.qtz/i) || mediaType == 'qt') {
mediaType = 'qt';
mediaWidth = mediaWidth || options.defaultWidth;
mediaHeight = (parseInt(mediaHeight)+16)+"px" || options.defaultHeight;
preload = new Quickie(URL, {
id: 'MediaboxQT',
width: mediaWidth,
height: mediaHeight,
container: 'mbImage',
attributes: {controller: options.controller, autoplay: options.autoplay, volume: options.volume, loop: options.medialoop, bgcolor: options.bgcolor}
});
startEffect();
/*	Social Media Sites	*/
// Blip.tv
} else if (URL.match(/blip\.tv/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "640px";
mediaHeight = mediaHeight || "390px";
preload = new Swiff(URL, {
src: URL,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Break.com
} else if (URL.match(/break\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "464px";
mediaHeight = mediaHeight || "376px";
mediaId = URL.match(/\d{6}/g);
preload = new Swiff('http://embed.break.com/'+mediaId, {
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// DailyMotion
} else if (URL.match(/dailymotion\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "480px";
mediaHeight = mediaHeight || "381px";
preload = new Swiff(URL, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Facebook
} else if (URL.match(/facebook\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "320px";
mediaHeight = mediaHeight || "240px";
mediaSplit = URL.split('v=');
mediaSplit = mediaSplit[1].split('&');
mediaId = mediaSplit[0];
preload = new Swiff('http://www.facebook.com/v/'+mediaId, {
movie: 'http://www.facebook.com/v/'+mediaId,
classid: 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Flickr
} else if (URL.match(/flickr\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "500px";
mediaHeight = mediaHeight || "375px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[5];
preload = new Swiff('http://www.flickr.com/apps/video/stewart.swf', {
id: mediaId,
classid: 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
width: mediaWidth,
height: mediaHeight,
params: {flashvars: 'photo_id='+mediaId+'&amp;show_info_box='+options.flInfo, wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// GameTrailers Video
} else if (URL.match(/gametrailers\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "480px";
mediaHeight = mediaHeight || "392px";
mediaId = URL.match(/\d{5}/g);
preload = new Swiff('http://www.gametrailers.com/remote_wrap.php?mid='+mediaId, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Google Video
} else if (URL.match(/google\.com\/videoplay/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "400px";
mediaHeight = mediaHeight || "326px";
mediaSplit = URL.split('=');
mediaId = mediaSplit[1];
preload = new Swiff('http://video.google.com/googleplayer.swf?docId='+mediaId+'&autoplay='+options.autoplayNum, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Megavideo - Thanks to Robert Jandreu for suggesting this code!
} else if (URL.match(/megavideo\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "640px";
mediaHeight = mediaHeight || "360px";
mediaSplit = URL.split('=');
mediaId = mediaSplit[1];
preload = new Swiff('http://wwwstatic.megavideo.com/mv_player.swf?v='+mediaId, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Metacafe
} else if (URL.match(/metacafe\.com\/watch/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "400px";
mediaHeight = mediaHeight || "345px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[4];
preload = new Swiff('http://www.metacafe.com/fplayer/'+mediaId+'/.swf?playerVars=autoPlay='+options.autoplayYes, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Myspace
} else if (URL.match(/vids\.myspace\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "425px";
mediaHeight = mediaHeight || "360px";
preload = new Swiff(URL, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Revver
} else if (URL.match(/revver\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "480px";
mediaHeight = mediaHeight || "392px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[4];
preload = new Swiff('http://flash.revver.com/player/1.0/player.swf?mediaId='+mediaId+'&affiliateId='+options.revverID+'&allowFullScreen='+options.revverFullscreen+'&autoStart='+options.autoplay+'&backColor=#'+options.revverBack+'&frontColor=#'+options.revverFront+'&gradColor=#'+options.revverGrad+'&shareUrl=revver', {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Rutube
} else if (URL.match(/rutube\.ru/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "470px";
mediaHeight = mediaHeight || "353px";
mediaSplit = URL.split('=');
mediaId = mediaSplit[1];
preload = new Swiff('http://video.rutube.ru/'+mediaId, {
movie: 'http://video.rutube.ru/'+mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Seesmic
} else if (URL.match(/seesmic\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "435px";
mediaHeight = mediaHeight || "355px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[5];
preload = new Swiff('http://seesmic.com/Standalone.swf?video='+mediaId, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Tudou
} else if (URL.match(/tudou\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "400px";
mediaHeight = mediaHeight || "340px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[5];
preload = new Swiff('http://www.tudou.com/v/'+mediaId, {
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Twitvcam
} else if (URL.match(/twitcam\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "320px";
mediaHeight = mediaHeight || "265px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[3];
preload = new Swiff('http://static.livestream.com/chromelessPlayer/wrappers/TwitcamPlayer.swf?hash='+mediaId, {
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Twiturm
} else if (URL.match(/twiturm\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "402px";
mediaHeight = mediaHeight || "48px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[3];
preload = new Swiff('http://twiturm.com/flash/twiturm_mp3.swf?playerID=0&sf='+mediaId, {
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Twitvid
} else if (URL.match(/twitvid\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "600px";
mediaHeight = mediaHeight || "338px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[3];
preload = new Swiff('http://www.twitvid.com/player/'+mediaId, {
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Ustream.tv
} else if (URL.match(/ustream\.tv/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "400px";
mediaHeight = mediaHeight || "326px";
preload = new Swiff(URL+'&amp;viewcount='+options.usViewers+'&amp;autoplay='+options.autoplay, {
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// YouKu
} else if (URL.match(/youku\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "480px";
mediaHeight = mediaHeight || "400px";
mediaSplit = URL.split('id_');
mediaId = mediaSplit[1];
preload = new Swiff('http://player.youku.com/player.php/sid/'+mediaId+'=/v.swf', {
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// YouTube Video (now includes HTML5 option)
} else if (URL.match(/youtube\.com\/watch/i)) {
mediaSplit = URL.split('v=');
if (options.html5) {
mediaType = 'url';
mediaWidth = mediaWidth || "640px";
mediaHeight = mediaHeight || "385px";
mediaId = "mediaId_"+new Date().getTime();	// Safari may not update iframe content with a static id.
preload = new Element('iframe', {
'src': 'http://www.youtube.com/embed/'+mediaSplit[1],
'id': mediaId,
'width': mediaWidth,
'height': mediaHeight,
'frameborder': 0
});
startEffect();
} else {
mediaType = 'obj';
mediaId = mediaSplit[1];
if (mediaId.match(/fmt=22/i)) {
mediaFmt = '&ap=%2526fmt%3D22';
mediaWidth = mediaWidth || "640px";
mediaHeight = mediaHeight || "385px";
} else if (mediaId.match(/fmt=18/i)) {
mediaFmt = '&ap=%2526fmt%3D18';
mediaWidth = mediaWidth || "560px";
mediaHeight = mediaHeight || "345px";
} else {
mediaFmt = options.ytQuality;
mediaWidth = mediaWidth || "480px";
mediaHeight = mediaHeight || "295px";
}
preload = new Swiff('http://www.youtube.com/v/'+mediaId+'&autoplay='+options.autoplayNum+'&fs='+options.fullscreenNum+mediaFmt+'&border='+options.ytBorder+'&color1=0x'+options.ytColor1+'&color2=0x'+options.ytColor2+'&rel='+options.ytRel+'&showinfo='+options.ytInfo+'&showsearch='+options.ytSearch, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
}
// YouTube Playlist
} else if (URL.match(/youtube\.com\/view/i)) {
mediaType = 'obj';
mediaSplit = URL.split('p=');
mediaId = mediaSplit[1];
mediaWidth = mediaWidth || "480px";
mediaHeight = mediaHeight || "385px";
preload = new Swiff('http://www.youtube.com/p/'+mediaId+'&autoplay='+options.autoplayNum+'&fs='+options.fullscreenNum+mediaFmt+'&border='+options.ytBorder+'&color1=0x'+options.ytColor1+'&color2=0x'+options.ytColor2+'&rel='+options.ytRel+'&showinfo='+options.ytInfo+'&showsearch='+options.ytSearch, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Veoh
} else if (URL.match(/veoh\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "410px";
mediaHeight = mediaHeight || "341px";
URL = URL.replace('%3D','/');
mediaSplit = URL.split('watch/');
mediaId = mediaSplit[1];
preload = new Swiff('http://www.veoh.com/static/swf/webplayer/WebPlayer.swf?version=AFrontend.5.5.2.1001&permalinkId='+mediaId+'&player=videodetailsembedded&videoAutoPlay='+options.AutoplayNum+'&id=anonymous', {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Viddler
} else if (URL.match(/viddler\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "437px";
mediaHeight = mediaHeight || "370px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[4];
preload = new Swiff(URL, {
id: 'viddler_'+mediaId,
movie: URL,
classid: 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen, id: 'viddler_'+mediaId, movie: URL}
});
startEffect();
// Viddyou
} else if (URL.match(/viddyou\.com/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "416px";
mediaHeight = mediaHeight || "312px";
mediaSplit = URL.split('=');
mediaId = mediaSplit[1];
preload = new Swiff('http://www.viddyou.com/get/v2_'+options.vuPlayer+'/'+mediaId+'.swf', {
id: mediaId,
movie: 'http://www.viddyou.com/get/v2_'+options.vuPlayer+'/'+mediaId+'.swf',
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
// Vimeo (now includes HTML5 option)
} else if (URL.match(/vimeo\.com/i)) {
mediaWidth = mediaWidth || "640px";	// site defualt: 400px
mediaHeight = mediaHeight || "360px";	// site defualt: 225px
mediaSplit = URL.split('/');
mediaId = mediaSplit[3];
if (options.html5) {
mediaType = 'url';
mediaId = "mediaId_"+new Date().getTime();	// Safari may not update iframe content with a static id.
preload = new Element('iframe', {
'src': 'http://player.vimeo.com/video/'+mediaSplit[3]+'?portrait='+options.vmPortrait,
'id': mediaId,
'width': mediaWidth,
'height': mediaHeight,
'frameborder': 0
});
startEffect();
} else {
mediaType = 'obj';
preload = new Swiff('http://www.vimeo.com/moogaloop.swf?clip_id='+mediaId+'&amp;server=www.vimeo.com&amp;fullscreen='+options.fullscreenNum+'&amp;autoplay='+options.autoplayNum+'&amp;show_title='+options.vmTitle+'&amp;show_byline='+options.vmByline+'&amp;show_portrait='+options.vmPortrait+'&amp;color='+options.vmColor, {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
}
// 12seconds
} else if (URL.match(/12seconds\.tv/i)) {
mediaType = 'obj';
mediaWidth = mediaWidth || "430px";
mediaHeight = mediaHeight || "360px";
mediaSplit = URL.split('/');
mediaId = mediaSplit[5];
preload = new Swiff('http://embed.12seconds.tv/players/remotePlayer.swf', {
id: mediaId,
width: mediaWidth,
height: mediaHeight,
params: {flashvars: 'vid='+mediaId+'', wmode: options.wmode, bgcolor: options.bgcolor, allowscriptaccess: options.scriptaccess, allowfullscreen: options.fullscreen}
});
startEffect();
/*	Specific Content Types	*/
// INLINE
} else if (URL.match(/\#mb_/i)) {
mediaType = 'inline';
mediaWidth = mediaWidth || options.defaultWidth;
mediaHeight = mediaHeight || options.defaultHeight;
URLsplit = URL.split('#');
preload = document.id(URLsplit[1]).get('html');
startEffect();
// HTML
} else {
mediaType = 'url';
mediaWidth = mediaWidth || options.defaultWidth;
mediaHeight = mediaHeight || options.defaultHeight;
mediaId = "mediaId_"+new Date().getTime();	// Safari may not update iframe content with a static id.
preload = new Element('iframe', {
'src': URL,
'id': mediaId,
'width': mediaWidth,
'height': mediaHeight,
'frameborder': 0
});
startEffect();
}
}
return false;
}
function startEffect() {
if (mediaType == "img"){
mediaWidth = preload.width;
mediaHeight = preload.height;
if (options.imgBackground) {
image.setStyles({backgroundImage: "url("+URL+")", display: ""});
} else {	// Thanks to Dusan Medlin for fixing large 16x9 image errors in a 4x3 browser
if (mediaHeight >= winHeight-options.imgPadding && (mediaHeight / winHeight) >= (mediaWidth / winWidth)) {
mediaHeight = winHeight-options.imgPadding;
mediaWidth = preload.width = parseInt((mediaHeight/preload.height)*mediaWidth);
preload.height = mediaHeight;
} else if (mediaWidth >= winWidth-options.imgPadding && (mediaHeight / winHeight) < (mediaWidth / winWidth)) {
mediaWidth = winWidth-options.imgPadding;
mediaHeight = preload.height = parseInt((mediaWidth/preload.width)*mediaHeight);
preload.width = mediaWidth;
}
if (Browser.Engine.trident) preload = document.id(preload);
preload.addEvent('mousedown', function(e){ e.stop(); }).addEvent('contextmenu', function(e){ e.stop(); });
image.setStyles({backgroundImage: "none", display: ""});
preload.inject(image);
}
} else if (mediaType == "obj") {
if (Browser.Plugins.Flash.version<8) {
image.setStyles({backgroundImage: "none", display: ""});
image.set('html', '<div id="mbError"><b>Error</b><br/>Adobe Flash is either not installed or not up to date, please visit <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" title="Get Flash" target="_new">Adobe.com</a> to download the free player.</div>');
mediaWidth = options.DefaultWidth;
mediaHeight = options.DefaultHeight;
} else {
image.setStyles({backgroundImage: "none", display: ""});
preload.inject(image);
}
} else if (mediaType == "qt") {
image.setStyles({backgroundImage: "none", display: ""});
preload;
} else if (mediaType == "inline") {
//	if (options.overflow) image.setStyles({overflow: options.overflow});
image.setStyles({backgroundImage: "none", display: ""});
image.set('html', preload);
} else if (mediaType == "url") {
image.setStyles({backgroundImage: "none", display: ""});
preload.inject(image);
} else {
image.setStyles({backgroundImage: "none", display: ""});
image.set('html', '<div id="mbError"><b>Error</b><br/>A file type error has occoured, please visit <a href="iaian7.com/webcode/mediaboxAdvanced" title="mediaboxAdvanced" target="_new">iaian7.com</a> or contact the website author for more information.</div>');
mediaWidth = options.defaultWidth;
mediaHeight = options.defaultHeight;
}
image.setStyles({width: mediaWidth, height: mediaHeight});
caption.setStyles({width: mediaWidth});
title.set('html', (options.showCaption) ? captionSplit[0] : "");
caption.set('html', (options.showCaption && (captionSplit.length > 1)) ? captionSplit[1] : "");
number.set('html', (options.showCounter && (images.length > 1)) ? options.counterText.replace(/{x}/, activeImage + 1).replace(/{y}/, images.length) : "");
if ((prevImage >= 0) && (images[prevImage][0].match(/\.gif|\.jpg|\.jpeg|\.png|twitpic\.com/i))) preloadPrev.src = images[prevImage][0].replace(/twitpic\.com/i, "twitpic.com/show/full");
if ((nextImage >= 0) && (images[nextImage][0].match(/\.gif|\.jpg|\.jpeg|\.png|twitpic\.com/i))) preloadNext.src = images[nextImage][0].replace(/twitpic\.com/i, "twitpic.com/show/full");
mediaWidth = image.offsetWidth;
mediaHeight = image.offsetHeight+bottom.offsetHeight;
if (mediaHeight >= top+top) { mTop = -top } else { mTop = -(mediaHeight/2) };
if (mediaWidth >= left+left) { mLeft = -left } else { mLeft = -(mediaWidth/2) };
if (options.resizeOpening) { fx.resize.start({width: mediaWidth, height: mediaHeight, marginTop: mTop-margin, marginLeft: mLeft-margin});
} else { center.setStyles({width: mediaWidth, height: mediaHeight, marginTop: mTop-margin, marginLeft: mLeft-margin}); imageAnimate(); }
}
function imageAnimate() {
fx.image.start(1);
}
function captionAnimate() {
center.className = "";
if (prevImage >= 0) prevLink.style.display = "";
if (nextImage >= 0) nextLink.style.display = "";
fx.bottom.start(1);
}
function stop() {
if (preload) preload.onload = $empty;
fx.resize.cancel();
fx.image.cancel().set(0);
fx.bottom.cancel().set(0);
$$(prevLink, nextLink).setStyle("display", "none");
}
function close() {
if (activeImage >= 0) {
preload.onload = $empty;
image.set('html', '');
for (var f in fx) fx[f].cancel();
center.setStyle("display", "none");
fx.overlay.chain(setup).start(0);
}
return false;
}
})();
/*	Autoload code block	*/
Mediabox.scanPage = function() { 
//	$$('#mb_').each(function(hide) { hide.set('display', 'none'); });
var links = $$("a").filter(function(el) {
//	return el.rel && el.rel.test(/^lightbox/i);
return el.rel && el.rel.test(/^mediabox/i);
});
$$(links).mediabox({/* Put custom options here */}, null, function(el) {
var rel0 = this.rel.replace(/[[]|]/gi," ");
var relsize = rel0.split(" ");
return (this == el) || ((this.rel.length > 8) && el.rel.match(relsize[1]));
});
};
window.addEvent("domready", Mediabox.scanPage);
// cmscript: slideitmoo 
/**
SlideItMoo v1.1 - Image slider
(c) 2007-2008 Constantin Boiangiu <http://www.php-help.ro>
MIT-style license.
Changes from version 1.0
- added continuous navigation
- changed the navigation from Fx.Scroll to Fx.Morph
- added new parameters: itemsSelector: pass the CSS class for divs
- itemWidth: for elements with margin/padding pass their width including margin/padding
Updates ( August 4'th 2009 )
- added new parameter 'elemsSlide'. When this is set to a value lower that the actual number of elements in HTML, it will slide at once that number of elements when navigation clicked. Default: null
**/
var SlideItMoo = new Class({
Implements: [Options],
options: {
overallContainer: null,
elementScrolled: null,
thumbsContainer: null,	
itemsVisible:5,
elemsSlide: null,
itemsSelector: null,
itemWidth: null,
showControls:1,
transition: Fx.Transitions.linear,
duration: 800,
direction: 1,
autoSlide: false,
mouseWheelNav: false
},
initialize: function(options){
this.setOptions(options);
/* all elements are identified on CSS selector (itemsSelector) */
this.elements = $(this.options.thumbsContainer).getElements(this.options.itemsSelector);
this.totalElements = this.elements.length;
if( this.totalElements <= this.options.itemsVisible ) return;
// width of thumbsContainer children
this.elementWidth = this.options.itemWidth || this.elements[0].getSize().x;
this.currentElement = 0;
this.direction = this.options.direction;
this.autoSlideTotal = this.options.autoSlide + this.options.duration;
if( this.options.elemsSlide == 1 ) this.options.elemsSlide = null;
this.begin();
},
begin: function(){	
// resizes the container div's according to the number of itemsVisible thumbnails
this.setContainersSize();
this.myFx = new Fx.Morph(this.options.thumbsContainer, { 
wait: true, 
transition: this.options.transition,
duration: this.options.duration
});	
/* if navigation is needed and enabled, add it */
this.addControls();
/* if autoSlide is not set, scoll on mouse wheel */
if( this.options.mouseWheelNav && !this.options.autoSlide ){
$(this.options.thumbsContainer).addEvent('mousewheel', function(ev){
new Event(ev).stop();
this.slide(-ev.wheel);	
}.bind(this));
}
if( this.options.autoSlide )
this.startAutoSlide();	
},
setContainersSize: function(){
$(this.options.overallContainer).set({
styles:{
'width': this.options.itemsVisible * this.elementWidth + 50 * this.options.showControls
}
});
$(this.options.elementScrolled).set({
styles:{
'width': this.options.itemsVisible * this.elementWidth
}
});
$(this.options.thumbsContainer).set({
styles:{
'width': this.totalElements * (this.elementWidth + 10)	
}
});
},
addControls: function(){
if( !this.options.showControls ) return;
this.fwd = new Element('div', {
'class': 'SlideItMoo_forward',
'events':{
'click':this.slide.pass(1, this)
}
});
this.bkwd = new Element('div', {
'class': 'SlideItMoo_back',
'events':{
'click': this.slide.pass(-1, this)
}
});
$(this.options.overallContainer).adopt(this.fwd, this.bkwd);	
},
slide: function( direction ){
if(this.started) return;
this.direction = direction;
var currentIndex = this.currentIndex();
if( this.options.elemsSlide && this.options.elemsSlide>1 && this.endingElem==null ){
this.endingElem = this.currentElement;	
for(var i = 0; i < this.options.elemsSlide; i++ ){
this.endingElem += direction;
if( this.endingElem >= this.totalElements ) this.endingElem = 0;
if( this.endingElem < 0 ) this.endingElem = this.totalElements-1;
}
}	
if( this.direction == -1 ){
this.rearange();
$(this.options.thumbsContainer).setStyle('margin-left', -this.elementWidth);	
}
this.started = true;
this.myFx.start({ 
'margin-left': this.direction == 1 ? -this.elementWidth : 0 
}).chain( function(){	
this.rearange(true);	
if(this.options.elemsSlide){
if( this.endingElem !== this.currentElement ) this.slide(this.direction);
else this.endingElem=null;	
}
}.bind(this) );
},
rearange: function( rerun ){
if(rerun) this.started = false;
if( rerun && this.direction == -1 ) {
return;
}
this.currentElement = this.currentIndex( this.direction );
//$('debug').innerHTML+= this.currentElement+'<br>';
$(this.options.thumbsContainer).setStyle('margin-left',0);
if( this.currentElement == 1 && this.direction == 1 ){
this.elements[0].injectAfter(this.elements[this.totalElements-1]);
return;
}
if( (this.currentElement == 0 && this.direction ==1) || (this.direction==-1 && this.currentElement == this.totalElements-1) ){
this.rearrangeElement( this.elements.getLast(), this.direction == 1 ? this.elements[this.totalElements-2] : this.elements[0]);
return;
}
if( this.direction == 1 ){
this.rearrangeElement( this.elements[this.currentElement-1], this.elements[this.currentElement-2]);
}
else{
this.rearrangeElement( this.elements[this.currentElement], this.elements[this.currentElement+1]);
}	
},
rearrangeElement: function( element , indicator ){
this.direction == 1 ? element.injectAfter(indicator) : element.injectBefore(indicator);
},
currentIndex: function(){
var elemIndex = null;
switch( this.direction ){
/* forward */
case 1:
elemIndex = this.currentElement >= this.totalElements-1 ? 0 : this.currentElement + this.direction;	
break;
/* backwards */
case -1:
elemIndex = this.currentElement == 0 ? this.totalElements - 1 : this.currentElement + this.direction;
break;
}
return elemIndex;
},
startAutoSlide: function(){
this.startIt = this.slide.bind(this).pass(this.direction||1);
this.autoSlide = this.startIt.periodical(this.autoSlideTotal, this);
this.elements.addEvents({
'mouseover':function(){
$clear(this.autoSlide);	
}.bind(this),
'mouseout':function(){
this.autoSlide = this.startIt.periodical(this.autoSlideTotal, this);
}.bind(this)
})
}
})
// cmscript: fx
/* (c) 2009 CaribMedia
* this module defines and initiates nice effects
* preconditions:
* - MooTools available
*/
var openPopup;
(function() {
var cxlFx = new Class({
Implements: [Options],
options : {
hover : true,
popup: true,
zebra: true,
linkTracking: true,
tooltips: false,
picNav: false,
loginPopup: false,
flashClips: false,
accordion: false,
slider: false,
sifr: false,
rating:false,
nosifr: '',
calendar: false,
lightbox: true,
filmstrip: false
},
initialize: function(options){
this.setOptions(options);
var opt = this.options;
if (opt.hover) this.doAddHover();
if (opt.tooltips) this.tooltips();
if (opt.zebra) this.zebraStripes();
if (opt.picNav) this.pictureNavigation();
if (opt.loginPopup) this.loginPopup();
if (opt.linkTracking) this.addLinkTracking();
if (opt.flashClips) this.flashClips();
if (opt.accordion) this.accordion();
if (opt.slider) this.slider();
if (opt.popup) this.popup();
if (opt.rating) this.rating();
if (opt.sifr)
if (window.loadFonts)
//window.addEvent('load', function() {loadFonts(opt.nosifr)});
loadFonts(opt.nosifr);
if (opt.calendar && window.eventList)
this.showCalendar(eventList);
if (opt.lightbox) this.lightbox();
if (opt.filmstrip) this.filmstrip();
},
/*
* @name sfHover
* @description gives all input elements an effect
* @author Michiel van der Blonk
* @date Apr 6, 2006
*/
sfHover : function(addFocusFx) {
// add :hover and :focus support to internet explorer 5 and 6
// remove this code as soon as most common browsers support this
if (cxlEnv.isIE5or6)
{
var tagNames = ['p','li','ul','input','button','select','img'];
tagNames.each( function(tagName) {
$$(tagName).each( function(tag)
{
tag.addEvent('mouseenter', function() {tag.addClass('over');});
tag.addEvent('mouseleave', function() {tag.removeClass('over');});
if (addFocusFx)
{
tag.addEvent('focus', function() {tag.addClass('focus');});
tag.addEvent('blur', function() {tag.removeClass('focus');});
}
});
});
}
return true;
},
/*
* @name tooltips
* @description initiate tooltips
* @author Michiel van der Blonk
* @date Apr 6, 2006
*/
tooltips : function()
{
if (window.hasTooltips)
domTT_replaceTitles(null,"'styleClass', 'niceTitle', 'offsetX', 25, 'offsetY', -20, 'type', 'velcro', 'source', 'tt' ");
},
/*
* @name popup
* @description initiate popup effect
* @author Michiel van der Blonk
* @date June 16, 2006
* @source http://www.openhosting.co.uk/articles/webdev/5918/
*/
popup : function()
{
// check to see that the browser supports the getElementsByTagName method
// if not, exit the loop
if (!document.getElementsByTagName) {
return false;
}
// create an array of objects of each link in the document
var popuplinks = document.getElementsByTagName("a");
// loop through each of these links (anchor tags)
for (var i=0; i < popuplinks.length; i++)
{
// if the link has a class of "popup"...
cName = popuplinks[i].getAttribute("class");
if (!cName)
cName = popuplinks[i].className;
re = new RegExp("popup","ig");
if (cName && re.test(cName)) {
options = null;
if (new RegExp("popup-fullscreen","ig").test(cName))
options = "fullscreen";
if (new RegExp("popup-tiny","ig").test(cName))
options = "tiny";
if (new RegExp("popup-medium","ig").test(cName))
options = "medium";
if (new RegExp("popup-picture","ig").test(cName))
options = "picture";
if (new RegExp("popup-large","ig").test(cName))
options = "large";
// add an onclick event on the fly to pass the href attribute
// of the link to our second function, openPopUp
popuplinks[i].onclick = function() {
return openPopUp(this.getAttribute("href"), options);
};
}
}
return false;
},
openPopUp : function(linkURL, options, width, height) {
// default position in options
var position = 'screenX=300, screenY=250, top=250, left=300';
var resizable = "resizable=yes";
var scrollbars = "scrollbars=1";
var defaultOptions = resizable + ',' + scrollbars + ',' + position;
// define options
var popupOptions = {
'fullscreen': '',
'tiny' : 'width=250, height=150, ' + defaultOptions,
'small' : 'width=350, height=200, ' + defaultOptions,
'medium' : 'width=450, height=225, ' + defaultOptions,
'picture' : 'width=680, height=530, ' + defaultOptions,
'large' : 'width=800, height=600, ' + resizable + ',' + scrollbars
};
// get special ops
if (!options)
{
var sOptions = '';
if (width && height)
sOptions += 'width='+width + ', height='+height + ',';
sOptions += resizable + ',' + position;
}
else
sOptions = popupOptions[options];
var handle = window.open(linkURL, 'popup', sOptions);
handle.focus();
return false;
},
doAddHover : function(){
var addFocusFx = true;
this.sfHover(addFocusFx);
},
flashClips : function()
{
var clips = {
gallerybutton : 'gallerymovie',
menubutton: 'menumovie',
guestbutton: 'guestmovie',
eventsbutton: 'eventsmovie',
barbutton: 'barmovie'
// contactbutton: 'contactmovie' not doing anything special
};
var i;
for (button in clips)
{
var oButton = $(button);
//alert(oButton.id);
if (oButton) {
oButton.addEvent("click", function() {
// first set contentPane to overflow hidden to
// fix the 'screwed up movie' bug
var contentPane = $('contentPane');
if (contentPane)
contentPane.style.overflow = 'hidden';
// now play the movie! It's.... showtime!!!!
var oMovie = $(clips[this.id]);
this.style.display="none";
cxlFx.showhide(oMovie);
});
}
}
},
showhide : function(obj)
{
if (obj.style.display == "block")
obj.style.display = "none";
else
obj.style.display = "block";
},
switchMovie : function (buttonId, movieId)
{
var clips = {
gallerybutton : 'gallerymovie',
menubutton: 'menumovie',
guestbutton: 'guestmovie',
eventsbutton: 'eventsmovie',
barbutton: 'barmovie'
// contactbutton: 'contactmovie' not doing anything special
};
cxlFx.prototype.showhide($(buttonId));
cxlFx.prototype.showhide($(movieId));
},
flashInterface : function(id, eventName)
{
var oButton = document.getElementById(button);
if (eventName == 'click')
{
if (cxlEnv.isIE)
oButton.onclick();
}
},
zebraStripes : function()
{
$$('#contentPane table tr').each(function(el, count){
if (!el.hasClass('even') && !el.hasClass('odd'))
el.className += count % 2 === 0 ? 'odd' : 'even';
});
},
/*
* @name pictureNavigation
* @description setup the previous and next buttons
* @author Michiel van der Blonk
* @date January 13, 2008
*/
pictureNavigation : function()
{
if (!window.currentThumb)
window.currentThumb = 1;
var mainPictureField = $$('.field_main_picture img');
var prev = $('previousThumb');
var next = $('nextThumb');
if (!mainPictureField || !prev || !next)
return;
if (mainPictureField.length)
{
var mainPicture = mainPictureField[0];
mainPicture.addEvent("mouseover", function() {
prev.addClass('visible');
next.addClass('visible');
});
mainPicture.addEvent("mouseout", function(evt) {
if (evt.toElement && evt.toElement.tagName=='BUTTON')
return;
if (evt.relatedTarget && evt.relatedTarget.tagName=='BUTTON')
return;
prev.removeClass('visible');
next.removeClass('visible');
});
$('previousThumb').onclick = function() {
if (!$$('.field_picture' + (currentThumb-1) + ' img').length) return;
currentThumb--;
mainPicture.src = $$('.field_picture' + currentThumb + ' img')[0].src;
};
$('nextThumb').onclick = function() {
if (!$$('.field_picture' + (currentThumb+1) + ' img').length) return;
currentThumb++;
mainPicture.src = $$('.field_picture' + currentThumb + ' img')[0].src;
};
}
},
loginPopup : function() {
if (!$('memberInfo') || !$('login'))
return true;
if (!$('memberInfo').hasClass('layer'))
return true;
$('memberInfo').addClass('loginHide');
$('login').onclick = function() {
$('memberInfo').removeClass('loginHide');
$('memberInfo').addClass('loginShow');
return false;
};
return true;
},
addLinkTracking: function()
{
//suggested by remy
var host = window.location.host;
var url;
//go thru each link
$$('a').each(function(el)
{
//if rel tag is google then track what's inside brackets
//ex: google[download/thisfile]
if(el.rel && el.rel.match(/^google/i))
{
el.addEvent('click',function()
{
// var pageTracker = cxlEnv.pageTracker;
var track_id = this.rel.match(/^google\[(.*)\]$/);
if (track_id && window.pageTracker)
pageTracker._trackPageview(track_id[1]);
});
}
// track lnkinlte codes
if (el.href.match(/lnkinlte/i))
{
el.addEvent('click',function()
{
var track_id = this.href;
track_id = track_id.replace('http://' + host, '');
track_id = track_id.replace('/cgi-bin/redirect/lnkinlte.cgi?l=.','');
track_id = track_id.replace('cgi-bin/redirect/lnkinlte.cgi?l=.','');
if (track_id && window.pageTracker)
pageTracker._trackPageview('linklite/' + track_id);
});
}
// track external links
else if(el.host != host)
{
el.addEvent('click',function()
{
var track_id = this.href.match(/^http:\/\/([^\/]+)/);
// do not track ourselves
if (track_id && window.pageTracker && track_id[1] != 'www.visitaruba.com')
pageTracker._trackPageview('outgoing/'+track_id[1]);
});
}
});
},
accordion: function() {
if (!$('sidebarNav'))
return;
if (window.MultipleOpenAccordion)
{
var sideToggle = new MultipleOpenAccordion($('sidebarNav'), {
elements: $$('#sidebarNav>div'),
togglers: $$('#sidebarNav>h2'),
openAll: false,
opacity: false,
firstElementsOpen:[5],
onActive: function(myToggler){myToggler.addClass('open');},
onBackground: function(myToggler){myToggler.removeClass('open');}
});
$('openAccordion').onclick = function() { sideToggle.showAll.call(sideToggle); };
$('closeAccordion').onclick = function() { sideToggle.hideAll.call(sideToggle); };
if ($('faqItems')) {
var faqToggle = new MultipleOpenAccordion($('faqItems'), {
elements: $$('.answer'),
togglers: $$('.question'),
openAll: false,
opacity: false,
onActive: function(myToggler){myToggler.addClass('open');},
onBackground: function(myToggler){myToggler.removeClass('open');}
});
}
//$('openAccordion').onclick = function() { sideToggle.showAll.call(sideToggle); };
//$('closeAccordion').onclick = function() { sideToggle.hideAll.call(sideToggle); };
}
},
rating: function() {
var mySlider = new Slider('myElement', 'myKnob', {
range: [-50, 50],
wheel: true,
snap: true,
onStart: function(){
this.borderFx = this.borderFx || this.element.tween('border').start('#ccc');
},
onTick: function(pos){
this.element.setStyle('border-color', '#f00');
this.knob.setStyle(this.property, pos);
},
onComplete: function(){
this.element.tween('border').start('#000');
}
});
},
slider: function() {
var el = $('featuredArticles') || $('rotatingArticles');
if (!el)
return;
new SimpleCarousel(
el.id,
$$('#' + el.id + ' .article'),
$$('#num_nav .button'),
{rotateAction: 'click'}
);
},
lightbox: function() {
if (!window.SqueezeBox)
return false;
SqueezeBox.initialize({size: {x: 725, y: 600}});
// SqueezeBox.assign($$('a[rel=lightbox]'));
SqueezeBox.assign($$('a[rel=boxed]'));
SqueezeBox.assign($$('a[class=boxed]'), {parse: 'rel'});
$$('a').each(function(el) {
if (el.href.match(/getContent.do.type=contact/)) {
var url = el.href;
if (!url.match(/inline=true/))
url += '&inline=true&width=450&height=450';
el.addEvent('click', function() {SqueezeBox.open(url, {size: {x: 500, y: 500}});return false;});
}
});
},
filmstrip: function() {
/* new SlideItMoo({
overallContainer: 'strip1-outer',
elementScrolled: 'strip1-inner',
thumbsContainer: 'strip1',
itemsVisible:1,
elemsSlide:1,
duration:300,
itemsSelector: '.GalleryPhotoItem',
itemWidth: 300,
showControls:1});
*/
if (!$('strip'))
return false;
var strip = $('strip');
var stripWidth = $('strip-inner').getStyle('width').toInt();
var numShown = 3;
var width = (stripWidth / numShown).toInt();
var s = new Fx.Move(strip, {relativeTo:strip});
var numItems = $$('#strip li').length;
var edge = -(numItems-numShown-1) * width;
function setButtonState(position) {
$('previousGalleryItem').disabled = position >= 0;
$('nextGalleryItem').disabled = position < edge;
}
function getLeft(el) {
var position = el.getStyle('left').toInt();
return isNaN(position)?0:position;
}
if ($('previousGalleryItem')) {
$('previousGalleryItem').addEvent('click', function() {
position = getLeft(strip);
s.start({offset:{x:width, y:0}});
setButtonState(position+width);
});
}
if ($('nextGalleryItem')) {
$('nextGalleryItem').addEvent('click', function() {
position = getLeft(strip);
s.start({offset:{x:-width, y:0}});
setButtonState(position-width);
});
}
},
showCalendar: function(eventDates) {
var addZero = function(n) { return n<10?'0'+(1*n):(1*n);};
if (!$('dynamic-calendar'))
{
var h3 = document.createElement('h3');
h3.innerHTML = 'Calendar of Events';
var d = document.createElement('div');
d.appendChild(h3);
d.setAttribute('id', 'dynamic-calendar');
var inp = document.createElement('input');
inp.setAttribute('id', 'date-select');
inp.setAttribute('type', 'text');
var curMonth = 1+1*(currentDate.substr(0, 2));
var curDay = currentDate.substr(2, 2);
var curYear = currentDate.substr(4, 4);
var curDate = '' + addZero(curMonth) + addZero(curDay) + curYear;
inp.setAttribute('value', curDate);
d.appendChild(inp);
$('contentPane').appendChild(d);
}
if (!$('dynamic-calendar'))
return false;
// extend calendar to have class names for linked days
var cxlPage = new cxlObject();
//cxlPage.blockedDates = eventDates;
cxlPage.showEvents = function(cal) {
if (cal.dateClicked) {
var y = cal.year;
var m = addZero(cal.month);
var d = addZero(cal.day);
url = '/getDailyEventCalendar.do?currentDate='+m+d+y;
location.href = url;
}
};
var cal = cxlPage.addCalendar('date-select', '', 'events');
cal.blockedDates = eventDates;
cxlPage.blockSundays = false;
cxlPage.initCalendars();
$('date-select').setStyle('visibility', 'hidden');
$$('#dynamic-calendar button')[0].setStyle('visibility', 'hidden');
}
});
window.addEvent('domready', function() {
var fx = new cxlFx({accordion:true, slider:true, sifr:false, nosifr:'home', calendar:true, filmstrip:true});
openPopUp = fx.openPopUp;
});
})();
// cmscript: cxlobject
/*
Author: Michiel van der Blonk
Date: Somewhere in 2006
Description:
cxlObject has generic form functions
- getForm
- imageSelect
- addCalendar
- initCalendars
- validateForm
Note: this file depends on MooTools to be loaded.
*/
var cxlObject = new Class( {
getForm: function()
{
return document.forms[this.formName];
},
imageSelect: function()
{
window.open(cxlPage.imageSelection + '?dispatch=images&id=' + cxlPage.id, 'image', 'width=750, height=400, screenX=300, screenY=100, top=100,left=300, resizable=yes');
},
addCalendar: function(fieldId, buttonId, sOptions)
{
if (!this.calendars)
this.calendars = new Array();
this.calendars[fieldId] = {field:fieldId, button:buttonId, options:sOptions, object:''};
this.blockDates = false;
if (sOptions!=null)
{
if (sOptions=='startdate')
this.startCalendar = fieldId;
if (sOptions=='enddate')
this.endCalendar = fieldId;
if (new RegExp('blockDates').test(sOptions))
this.blockDates = true;
if (sOptions=='events')
this.reverseBlocked = true;
}
return this.calendars[fieldId];
},
//utility functions for the calendars
invalidDate: function(d)
{
var startDateElement = this.startCalendar;
var startDate = Date.parseDate(startDateElement.value, "%m/%d/%Y");
return (d < startDate);
},
//utility functions for the calendars
blockRange: function(d)
{
var ret = true;
var out = '';
var i;
var startDate;
var endDate;
var options;
var curDate;
if (!this.blockedDates)
return false;
if (this.blockSundays)
if (d.getDay()==0) // block all sundays
ret = true;
var blockedDates = this.blockedDates;
ret = false;
for (i=0;i<blockedDates.length;i++)
{
startDate = new Date(blockedDates[i].start);
endDate = new Date(blockedDates[i].end);
// add one day, so end date behaves properly
endDate.setDate(endDate.getDate()+1);
options = blockedDates[i].options;
curDate = new Date(d);
if (options=='yearly')
curDate.setYear(startDate.getFullYear());
if (curDate>=startDate && curDate<=endDate)
ret = true;
}
if (this.reverseBlocked)
return !ret;
else
return ret;
},
setEndDate: function (cal)
{
var startDateElement = this.startCalendar;
var endDateElement = this.endCalendar;
if (startDateElement.value !== '' && endDateElement.value === '')
endDateElement.value = startDateElement.value;
},
initCalendars: function() {
var i;
for (i in this.calendars)
{
var calendar = this.calendars[i];
if (typeof calendar == "object" && $(calendar.field))
{
var that = this;
var format={};
format[calendar.field] = 'm/d/Y';
var options = { tweak: {x:-20, y:0}, draggable:false};
switch(calendar.options)
{
case 'startdate':
this.calendars[i].object = new Calendar(format, options);
break;
case 'enddate':
this.calendars[i].object = new Calendar(format, options);
break;
case 'blockDates':
this.calendars[i].object = new Calendar(format, options);
break;
case 'events':
format[calendar.field] = 'mdY';
this.calendars[i].object = new Calendar(
format, { tweak: {x:-20, y:0}, draggable:false, permanent:true, blocked:this.calendars[i].blockedDates, parentNode: 'dynamic-calendar' });
var cal = this.calendars[i].object;
this.calendars[i].object.clicked = function(td, day, cal) {
cal.val = (this.value(cal) == day) ? null : new Date(cal.year, cal.month, day); // set new value - if same then disable
/* once Otmar fixed the month -1 problem we can use this
var date = this.format(cal.val, cal.el.format);
*/
var addZero = function(n) {	return n<10?'0'+n:n;};
var y = cal.val.getFullYear();
var m = addZero(cal.val.getMonth());
var d = addZero(cal.val.getDate());
var date = ''+m+d+y;
var url = '/getDailyEventCalendar.do?currentDate=' + date;
location.href = url;
};
cal.toggle(cal.calendars[0]);
break;
default:
this.calendars[i].object = new Calendar(format, options);
break;
}
}
}
},
initSliders:	function() {
function setupSlider(id)
{
var slider = new Element('div').set(
{
'id':id+'_slider', 
'styles': 
{
'width': '72px', 
'height':'12px', 
'background': 'url(/visitaruba/styles/member/visitaruba/bg_rating_stars2.jpg) no-repeat -60px 0',
'position':'relative',	
'left':'12em',
'font-size':'10px',
'line-height':'10px'
}
}).injectAfter($(id));
new Element('div').set(
{
'id':id+'_knob', 
'class':'knob',
'styles':{
'width': '12px', 
'height': '11px',
'position' : 'absolute',
'font-size':'10px',
'line-height':'10px',
'background':'url(/visitaruba/styles/member/visitaruba/bg_bullet.gif) no-repeat center center'
}	
}).inject(slider);	
return slider;
}
$$('form .slider').each(
function(el) {
var slider = setupSlider(el.id);
// Create the new slider instance
new Slider(slider, slider.getElement('.knob'), {
steps: 5,	// There are 5 steps
wheel: true,
snap: true,
range: [0,5],	// Minimum value is 0
onChange: function(value){
if (!$defined(value) || isNaN(value))
value = 0;
// Everytime the value changes, we change the select element
el.value = value;
var knobWidth = parseInt(slider.style.width) / (this.steps+1);
var pos = (this.steps-value) * knobWidth * -1;
$('comments').innerText += pos;
slider.setStyle('background-position', "" + (knobWidth+pos) + 'px 0');
slider.set('title', $chk(value)?'no rating':value+' stars');
}
}).set('value', el.value.toInt());
//el.hide();
}
);
},
isDate: function(d, formatted) {
var ret = false;
var date = new Date(d);
// it's at least a number
if (!isNaN(date))
{
if (formatted)
{
var day = date.getDate();
var month = date.getMonth()+1;
var year = date.getFullYear();
var dateString = '' + month + '.' + day + '.' + year;
var pattern = new RegExp(dateString);
ret = pattern.test(d);
}
else
ret = true;
}
return ret;
},
/*
* @Date: Somewhere 2006
* @Description: Validate fields based on class name
* example: class="validation-date" will be
* matched against mm/dd/yy, or a valid Date object
**/
validateForm: function(frm, target)
{
var i;
var ret = true;
var field;
var out='';
var errorFields = [];
if (target==null)
target = 'errors';
// loop through all fields
// check if they have validation class name
// and do appropriate validation
// @return true, if all validation passes
for (i=0; i<frm.elements.length; i++)
{
field = frm.elements[i];
// skip disabled fields
if (field.disabled)
continue;
// validate required fields
filter = /validation-required/;
if (filter.test(field.className))
{
if (field.type=='checkbox' && !field.checked)
{
out += 'Please check the ' + field.name + ' box<br />';
errorFields.push(field);
ret = false;
}
else
if (field.value==='')
{
out += 'Please enter a value for ' + field.name + '<br />';
errorFields.push(field);
ret = false;
}
}
// validate numeric fields
filter = /validation-number/;
if (filter.test(field.className))
{
if (field.value!=='' && !isNaN(field.value))
{
out += 'Please enter a number for ' + field.name + '<br />';
errorFields.push(field);
ret = false;
}
}
// validate digit only fields
filter = /validation-digits/;
if (filter.test(field.className))
{
var filter = /^[0-9]+$/;
if (field.value!=='' && !filter.test(field.value))
{
out += 'Please enter a number for ' + field.name + '<br />';
errorFields.push(field);
ret = false;
}
}
// validate date fields
filter = /validation-date/;
if (filter.test(field.className))
{
if (field.value!=='' && !isDate(field.value, true))
{
out += 'Please enter a valid date (mm/dd/yyyy) in ' + field.name + '<br />';
errorFields.push(field);
ret = false;
}
}
// validate email addresses
filter = /format-email/;
if (filter.test(field.className))
{
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (field.value!=='' && !filter.test(field.value))
{
out += 'Please enter a valid email address in ' + field.name + '<br />';
errorFields.push(field);
ret = false;
}
}
// validate credit cards
// this uses Luhn validation
// which is a numeric algorithm
filter = /format-creditcard/;
if (filter.test(field.className))
{
filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (field.value!=='' && !this.isValidCreditCard(field.value))
{
out += 'Please enter a valid credit card number' + '<br />';
errorFields.push(field);
ret = false;
}
}
// validate urls
filter = /format-url/;
if (filter.test(field.className))
{
filter = /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/i;
if (field.value!=='' && !filter.test(field.value))
{
out += 'Please enter a valid url' + '<br />';
errorFields.push(field);
ret = false;
}
}
// validate verification fields
filter = /validation-match/;
if (filter.test(field.className))
{
var otherField = field.className.replace(/.*validation-match-/,'').replace(/ .*/,'');
if (field.value!=='' && field.value!=$(otherField).value)
{
out += 'The value in ' + field.name + ' does not match ' + otherField + '<br />';
errorFields.push(field);
ret = false;
}
}
$(field).removeClass('error');
}
$(target).innerHTML = out;
// indicate errors
for (i = 0; i < errorFields.length; i++)
$(errorFields[i]).addClass('error');
window.scroll(0,0);
return ret;
},
/*
* @Date: Feb 21, 2005
* @Description: This function strips defined chars from a string
* useful in validation routines
* example: stripChars(str, "()-") returns the string with any
* brackets and dashes removed
**/
stripChars : function(str, chars) {
var i;
var newstring = "";
for (i = 0; i < str.length; i++) {
mychar = str.charAt(i);
if (chars.indexOf(mychar) == -1)
newstring += mychar;
}
return newstring;
},
/**
* @Date: Feb 21, 2005
* @Description: This function extracts defined chars from a string
* useful in validation routines
* it is 'sort of' the reverse of stripChars
* example: extractChars(str, "0123456789") returns all digits from the string
**/
extractChar: function(str, chars) {
var i;
var newstring = "";
for (i = 0; i < str.length; i++) {
mychar = str.charAt(i);
if (chars.indexOf(mychar) != -1)
newstring += mychar;
}
return newstring;
},
/**
* @Date: Dec 1, 2004
* @Description: This function tests a credit card using the Luhn validation
* The sum of digits must be divisible by 10
* digits in odd positions are doubled, then sum of left+right digit is taken
**/
isValidCreditCard: function(sCreditCardNumber)
{
var nTotal = 0;
var nPosition = 0;
var bValid = true; // innocent until proven guilty
sCreditCardNumber = this.extractChars(sCreditCardNumber, "0123456789");
if (sCreditCardNumber.length < 13)
bValid = false;
else
{
for ( i = sCreditCardNumber.length; i > 0 ; i--)
{
var nDigit = 0;
// advance
nPosition++;
// get digit
nDigit= parseInt(sCreditCardNumber.charAt(i-1));
// odd position: add to total
if ((nPosition % 2) !== 0)
nTotal += parseInt(nDigit);
else
// even position: add sum of digits to total
{
// calc sum of left and right digit (use parseInt to cut off fractional parts
var nDoubled = nDigit * 2;
var nLeftDigit = parseInt(nDoubled / 10);
var nRightDigit = nDoubled % 10;
// get sum of left and right
nTotal += nLeftDigit + nRightDigit;
}
}
// if divisible by 10 it is valid
bValid = (nTotal % 10) === 0;
}
return (bValid);
},
// utility functions for the form
setDispatch: function(value, frm) {
// default to cxlPage.getForm()
if (typeof frm=="undefined")
{
if (window.cxlPage && window.cxlPage.getForm())
frm = cxlPage.getForm();
else
return false;
}
frm.dispatch.value = value;
return true;
},
submitForm: function(target) {
if (!window.cxlPage || !window.cxlPage.getForm())
return false;
this.setDispatch(target, window.cxlPage.getForm());
window.cxlPage.getForm().submit();
return false;
},
initNeverExpires: function() {
if (!window.cxlPage || !window.cxlPage.getForm())
return;
var frm = window.cxlPage.getForm();
if (frm.neverExpire)
frm.neverExpire.checked = (frm.expirationDate.value === '');
},
checkFeatured: function() {
if (!window.cxlPage || !window.cxlPage.getForm())
return;
var frm = cxlPage.getForm();
if (frm.pressRelease)
frm.pressRelease.checked = false;
},
checkPressRelease: function() {
if (!window.cxlPage || !window.cxlPage.getForm())
return;
var frm = window.cxlPage.getForm();
if (frm.featured)
frm.featured.checked = false;
},
deleteImage: function(image) {
if (!window.cxlPage || !window.cxlPage.getForm())
return;
var frm = window.cxlPage.getForm();
if (confirm(window.cxlPage.confirmDelete)) {
var theLink = window.cxlPage.imageSelection + '?dispatch=delete&id=' + image;
window.location.href = theLink;
}
}
}
);
// cmscript: map
// cxlObject.map = {
var map;
function createMarker(point, options, item)
{
var icon = new GIcon();
icon.image = 'http://gmaps-samples.googlecode.com/svn/trunk/markers/circular/greencirclemarker.png';
icon.image = '/styles/member/visitaruba/list-' + item.listId + '.png';
icon.shadow = '/styles/member/visitaruba/list-' + item.listId + '-shadow.png';
icon.iconSize = new GSize(24, 24);
icon.shadowSize = new GSize(37, 24);
icon.iconAnchor = new GPoint(24, 24);
icon.infoWindowAnchor = new GPoint(25, 7);
options.icon = icon;
options.title = item.name;
// opts = { "icon": icon,"clickable": true,"title": item.name,"labelText": item.name,"labelOffset": new GSize(-6, -10)};
//var marker = new LabeledMarker(point, opts);
var marker = new GMarker(point, options);
var itemName = item.name;
GEvent.addListener(marker, "click", function() {
// NB: below is a link to the listing item page
// var link = "/listId/" + item.listId + "/id/" + item.id + '/getListingItem.html';
if (item.readMore.substr(0,1)!='/' && item.readMore.substr(0,7)!='http://')
var link = "/" + item.readMore;
var html= '<p style="color:navy">' + itemName + '</p>';
//	html += listItem.desc;
//	html += '<img width="100" src="'+item.picture+'"/>';
if (item.readMore!='null')
html += '<a href="' + link + '">[read more]</a>'
marker.openInfoWindow(html);
});
return marker;
}
function addIcons(items)
{
// Create our "tiny" marker icon
var markerIcon = new GIcon();
// markerIcon.image = '/styles/member/visitaruba/list-' + item.listId + '.png';
//	markerIcon.shadow = '/styles/member/visitaruba/list-' + item.listId + '-shadow.png';
markerIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
markerIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
markerIcon.iconSize = new GSize(41, 51);
markerIcon.shadowSize = new GSize(41, 51);
markerIcon.iconAnchor = new GPoint(6, 20);
markerIcon.infoWindowAnchor = new GPoint(5, 1);
var altIcon = new GIcon(G_DEFAULT_ICON);
altIcon.image = "http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png";
altIcon.iconSize = new GSize(32, 32);
// Set up our GMarkerOptions object
var markerOptions = { icon:markerIcon };
var altOptions = { icon:altIcon };
var bounds = map.getBounds();
for (var i = 0; i < items.length; i++) {
var item = items[i];
var point = new GLatLng(item.latitude,item.longitude);
map.addOverlay(createMarker(point, altOptions, item));
}
var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
var topRightBelow = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,40));
var bottomLeftUp = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(10,40));
map.addControl(new GSmallZoomControl());
map.addControl(new GOverviewMapControl());
map.addControl(new GMapTypeControl(), topRight);
map.addControl(new GScaleControl(), bottomLeftUp);
}
function hideMap()
{
var mapTag = $('map');
var mapContainer = $('mapContainer');
mapTag.className="hide";
mapContainer.setStyle('z-index', -1);
mapContainer.setStyle('visibility', 'hidden');
}
function loadMap() {
var mapLink = this;
if ($('closeMap'))
$('closeMap').onclick = hideMap;
$('map').className = '';
var mapContainer = $('mapContainer');
if (!mapContainer)
return true;
showMap('map', listItems, listItems[0].latitude, listItems[0].longitude, 15);
mapContainer.setStyle('z-index', 10);
mapContainer.setStyle('visibility', 'visible');
mapContainer.makeDraggable();
return false;
}
function showMap(id, items, latitude, longitude, zoom) {
if (!$(id))
return;
if (!latitude)
latitude = 12.569601;
if (!longitude)
longitude = -70.043635;
if (!zoom)
zoom = 12;
if (window.GMap2) {
var mapTag = $(id);
if (GBrowserIsCompatible()) {
map = new GMap2(mapTag);
map.setCenter(new GLatLng(latitude, longitude, longitude), zoom);
addIcons(items);
}
}
else
$('contentPane').innerHTML = '<p class="alert">Maps are temporarily not available. Try again later.</p>' + $('contentPane').innerHTML ;
return false;
}
// init, should be done in calculated field
function initMap()
{
var mapLink;
window.addEvent('unload', function() {if (window.GUnload) {GUnload();}});
if ($$)
mapLink = $$('.field_map a'); // document.getElementById("mapLink");
if (mapLink && mapLink.length)
{
mapLink = mapLink[0];
mapLink.onclick = loadMap;
}
}
window.addEvent('load', initMap);
// cmscript: pictureNavigator 
/*
* @name
* @description initiate image effects
* @author Michiel van der Blonk
* @date May 13, 2008
*/
window.addEvent("load", function()
{
if (!$('strip'))
$$('#contentPane #thumbs img').each(function(thumb){
thumb.onclick = function(){$('mainPicture').src = thumb.src;};
});
}
);
// cmscript: shoppingCart
/* @file: shoppingCart.js
* @description: shopping cart functionality
* @dependencies: moo.ajax, listings module, custom css
*/
/*
* @name removeMsg
* @description remove the 'product added' message
* @author Michiel van der Blonk
* @date May 12, 2006
*/
function removeMsg()
{
// Element.remove('productAdded');
var pa = $('productAdded');
pa.dispose();
}
/*
* @name updateSummary
* @description update the shopping cart items on page
* @author Michiel van der Blonk
* @date May 12, 2006
*/
function updateSummary(el) {
var sc = $('shoppingCart');
// create a new paragraph
msg = document.createElement("p");
msg.setAttribute('id', 'productAdded');
// $('modules').appendChild(msg);
el.appendChild(msg);
// if there has been a change, the product is added
// so we check the contents of the result with the cart summary
// sc.innerHTML = request.responseText;
if ($('cartMessage'))
{
msgText = document.createTextNode($('cartMessage').value);
msg.appendChild(msgText);
}
else
{
msgText = document.createTextNode("product added");
msg.appendChild(msgText);
}
sc.className = "active tooltip";
setTimeout("removeMsg()", 3000);
}
/*
* @name changeQty
* @description inc or dec the quantity field for a product
* @author Michiel van der Blonk
* @date May 12, 2006
*/
function changeQty()
{
delta = 1;
if (isNaN($(this.rel).value))
return false;
if (this.className=='minus')
delta = -1;
$(this.rel).value = +$(this.rel).value + delta;
// check minimum value
if ($(this.rel).value<1)
$(this.rel).value = 1;
return false;
}
/*
* @name onLoadActions
* @description initiate shopping cart effects
* @author Michiel van der Blonk
* @date May 12, 2006
*/
function onLoadActions()
{
$$('#contentPane .field_addCart input').each(function(element){
element.onclick = function(){
now = new Date();
url = eval(this.alt) + '&inline=true' + '&time=' + now.getTime();
var parent = this.parentNode;
$('shoppingCart').className = "active updating";
// new ajax (url, {
// method: 'get',
// onComplete: updateSummary
// });
var req = new Request({
method: 'get',
url: url,
onComplete: function(response) 
{$('shoppingCart').innerHTML=response;updateSummary(parent);}
});
req.send();
return false;
};
});
$$('#contentPane td.field_quantity a').each(function(element){
element.onclick = changeQty;
});
}
// cmscript: onLoadActions
// clear menus
// if (location.pathname.match(/listing/i)==null)
//	setMenuCookie(-1);
if (typeof onLoadActions=='function')
{
if (typeof addEvent=='function')
{
if (window.MooTools)
window.addEvent("domready", onLoadActions);
else
addEvent(window, "load", onLoadActions);
}
else
window.onload = onLoadActions;
}

