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

var MooTools={version:"1.2.0",build:""};var Native=function(J){J=J||{};var F=J.afterImplement||function(){};var G=J.generics;G=(G!==false);var H=J.legacy;
var E=J.initialize;var B=J.protect;var A=J.name;var C=E||H;C.constructor=Native;C.$family={name:"native"};if(H&&E){C.prototype=H.prototype;}C.prototype.constructor=C;
if(A){var D=A.toLowerCase();C.prototype.$family={name:D};Native.typize(C,D);}var I=function(M,K,N,L){if(!B||L||!M.prototype[K]){M.prototype[K]=N;}if(G){Native.genericize(M,K,B);
}F.call(M,K,N);return M;};C.implement=function(L,K,N){if(typeof L=="string"){return I(this,L,K,N);}for(var M in L){I(this,M,L[M],K);}return this;};C.alias=function(M,K,N){if(typeof M=="string"){M=this.prototype[M];
if(M){I(this,K,M,N);}}else{for(var L in M){this.alias(L,M[L],K);}}return this;};return C;};Native.implement=function(D,C){for(var B=0,A=D.length;B<A;B++){D[B].implement(C);
}};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.typize=function(A,B){if(!A.type){A.type=function(C){return($type(C)===B);};}};Native.alias=function(E,B,A,F){for(var D=0,C=E.length;D<C;D++){E[D].alias(B,A,F);
}};(function(B){for(var A in B){Native.typize(B[A],A);}})({"boolean":Boolean,"native":Native,object:Object});(function(B){for(var A in B){new Native({name:A,initialize:B[A],protect:true});
}})({String:String,Function:Function,Number:Number,Array:Array,RegExp:RegExp,Date:Date});(function(B,A){for(var C=A.length;C--;C){Native.genericize(B,A[C],true);
}return arguments.callee;})(Array,["pop","push","reverse","shift","sort","splice","unshift","concat","join","slice","toString","valueOf","indexOf","lastIndexOf"])(String,["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]);
function $chk(A){return !!(A||A===0);}function $clear(A){clearTimeout(A);clearInterval(A);return null;}function $defined(A){return(A!=undefined);}function $empty(){}function $arguments(A){return function(){return arguments[A];
};}function $lambda(A){return(typeof A=="function")?A:function(){return A;};}function $extend(C,A){for(var B in (A||{})){C[B]=A[B];}return C;}function $unlink(C){var B;
switch($type(C)){case"object":B={};for(var E in C){B[E]=$unlink(C[E]);}break;case"hash":B=$unlink(C.getClean());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;}function $merge(){var E={};for(var D=0,A=arguments.length;D<A;D++){var B=arguments[D];if($type(B)!="object"){continue;
}for(var C in B){var G=B[C],F=E[C];E[C]=(F&&$type(G)=="object"&&$type(F)=="object")?$merge(F,G):$unlink(G);}}return E;}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().getTime();};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;}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({getLength:function(){var B=0;for(var A in this){if(this.hasOwnProperty(A)){B++;}}return B;
},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;}});Hash.alias("forEach","each");function $H(A){return new Hash(A);}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(C){if(C.item){var D=[];for(var B=0,A=C.length;B<A;B++){D[B]=C[B];}return D;}return Array.prototype.slice.call(C);
}function $each(C,B,D){var A=$type(C);((A=="arguments"||A=="collection"||A=="array")?Array:Hash).each(C,B,D);}var Browser=new Hash({Engine:{name:"unknown",version:""},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});
if(window.opera){Browser.Engine={name:"presto",version:(document.getElementsByClassName)?950:925};}else{if(window.ActiveXObject){Browser.Engine={name:"trident",version:(window.XMLHttpRequest)?5:4};
}else{if(!navigator.taintEnabled){Browser.Engine={name:"webkit",version:(Browser.Features.xpath)?420:419};}else{if(document.getBoxObjectFor!=null){Browser.Engine={name:"gecko",version:(document.getElementsByClassName)?19:18};
}}}}Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined){Browser.Platform.name="ipod";
}Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject("MSXML2.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]||0),build:parseInt(A[2]||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.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]]"]:{};
}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];A.window=A.defaultView||A.parentWindow;if(Browser.Engine.trident4){$try(function(){A.execCommand("BackgroundImageCache",false,true);
});}return $extend(A,Document.Prototype);},afterImplement:function(B,A){document[B]=Document.Prototype[B]=A;}});Document.Prototype={$family:{name:"document"}};
new Document(document);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,E){var C=[];for(var B=0,A=this.length;B<A;B++){if(D.call(E,this[B],B,this)){C.push(this[B]);}}return C;},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,E){var C=[];
for(var B=0,A=this.length;B<A;B++){C[B]=D.call(E,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 E=0,B=this.length;E<B;E++){for(var D in C){if(C[D](this[E])){A[D]=this[E];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("");}});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 E=function(){return A.apply(B.bind||null,C);};if(B.delay){return setTimeout(E,B.delay);}if(B.periodical){return setInterval(E,B.periodical);}if(B.attempt){return $try(E);
}return E();};},pass:function(A,B){return this.create({arguments:A,bind:B});},attempt:function(A,B){return this.create({arguments:A,bind:B,attempt:true})();
},bind:function(B,A){return this.create({bind:B,arguments:A});},bindWithEvent:function(B,A){return this.create({bind:B,event:true,arguments:A});},delay:function(B,C,A){return this.create({delay:B,bind:C,arguments:A})();
},periodical:function(A,C,B){return this.create({periodical:A,bind:C,arguments:B})();},run:function(A,B){return this.apply(B,$splat(A));}});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"]);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]:"";
});}});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(B,C){var A=this[B];if(A==undefined){this[B]=C;}return this;},map:function(B,C){var A=new Hash;Hash.each(this,function(E,D){A.set(D,B.call(C,E,D,this));
},this);return A;},filter:function(B,C){var A=new Hash;Hash.each(this,function(E,D){if(B.call(C,E,D,this)){A.set(D,E);}},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(F,E){if(A){E=A+"["+E+"]";}var D;switch($type(F)){case"object":D=Hash.toQueryString(F,E);break;case"array":var C={};F.each(function(H,G){C[G]=H;
});D=Hash.toQueryString(C,E);break;default:D=E+"="+encodeURIComponent(F);}if(F!=undefined){B.push(D);}});return B.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});
var Event=new Native({name:"Event",initialize:function(A,F){F=F||window;var K=F.document;A=A||F.event;if(A.$extended){return A;}this.$extended=true;var J=A.type;
var G=A.target||A.srcElement;while(G&&G.nodeType==3){G=G.parentNode;}if(J.test(/key/)){var B=A.which||A.keyCode;var M=Event.Keys.keyOf(B);if(J=="keydown"){var D=B-111;
if(D>0&&D<13){M="f"+D;}}M=M||String.fromCharCode(B).toLowerCase();}else{if(J.match(/(click|mouse|menu)/i)){K=(!K.compatMode||K.compatMode=="CSS1Compat")?K.html:K.body;
var I={x:A.pageX||A.clientX+K.scrollLeft,y:A.pageY||A.clientY+K.scrollTop};var C={x:(A.pageX)?A.pageX-F.pageXOffset:A.clientX,y:(A.pageY)?A.pageY-F.pageYOffset:A.clientY};
if(J.match(/DOMMouseScroll|mousewheel/)){var H=(A.wheelDelta)?A.wheelDelta/120:-(A.detail||0)/3;}var E=(A.which==3)||(A.button==2);var L=null;if(J.match(/over|out/)){switch(J){case"mouseover":L=A.relatedTarget||A.fromElement;
break;case"mouseout":L=A.relatedTarget||A.toElement;}if(!(function(){while(L&&L.nodeType==3){L=L.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){L=false;
}}}}return $extend(this,{event:A,type:J,page:I,client:C,rightClick:E,wheel:H,relatedTarget:L,target:G,code:B,key:M,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;}});var Class=new Native({name:"Class",initialize:function(B){B=B||{};var A=function(E){for(var D in this){this[D]=$unlink(this[D]);
}for(var F in Class.Mutators){if(!this[F]){continue;}Class.Mutators[F](this,this[F]);delete this[F];}this.constructor=A;if(E===$empty){return this;}var C=(this.initialize)?this.initialize.apply(this,arguments):this;
if(this.options&&this.options.initialize){this.options.initialize.call(this);}return C;};$extend(A,this);A.constructor=Class;A.prototype=B;return A;}});
Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this;}});Class.Mutators={Implements:function(A,B){$splat(B).each(function(C){$extend(A,($type(C)=="class")?new C($empty):C);
});},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];
if(current==undefined){self[key]=previous;continue;}var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype){continue;}switch(ctype){case"function":if(!arguments.callee.caller){self[key]=eval("("+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return"arguments.callee._parent_.call(this"+(close||", ");
})+")");}self[key]._parent_=previous;break;case"object":self[key]=$merge(previous,current);}}self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments);
};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1));};}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);
return this;},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){if(this.$chain){this.$chain.empty();
}return this;}});var Events=new Class({addEvent:function(C,B,A){C=Events.removeOn(C);if(B!=$empty){this.$events=this.$events||{};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||!this.$events[B]){return this;}if(!A.internal){this.$events[B].erase(A);}return this;},removeEvents:function(C){for(var 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;}});Document.implement({newElement:function(A,B){if(Browser.Engine.trident&&B){["name","type","checked"].each(function(C){if(!B[C]){return ;
}A+=" "+C+'="'+B[C]+'"';if(C!="checked"){delete B[C];}});A="<"+A+">";}return $.element(this.createElement(A)).set(B);},newTextNode:function(A){return this.createTextNode(A);
},getDocument:function(){return this;},getWindow:function(){return this.defaultView||this.parentWindow;},purge:function(){var C=this.getElementsByTagName("*");
for(var B=0,A=C.length;B<A;B++){Browser.freeMem(C[B]);}}});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 $(A).set(B);},afterImplement:function(A,B){if(!Array[A]){Elements.implement(A,Elements.multi(A));
}Element.Prototype[A]=B;}});Element.Prototype={$family:{name:"element"}};Element.Constructors=new Hash;var IFrame=new Native({name:"IFrame",generics:false,initialize:function(){var E=Array.link(arguments,{properties:Object.type,iframe:$defined});
var C=E.properties||{};var B=$(E.iframe)||false;var D=C.onload||$empty;delete C.onload;C.id=C.name=$pick(C.id,C.name,B.id,B.name,"IFrame_"+$time());B=new Element(B||"iframe",C);
var A=function(){var F=$try(function(){return B.contentWindow.location.host;});if(F&&F==window.location.host){var H=new Window(B.contentWindow);var G=new Document(B.contentWindow.document);
$extend(H.Element.prototype,Element.Prototype);}D.call(B.contentWindow,B.contentWindow.document);};(!window.frames[C.id])?B.addListener("load",A):A();return B;
}});var Elements=new Native({initialize:function(F,B){B=$extend({ddup:true,cash:true},B);F=F||[];if(B.ddup||B.cash){var G={},E=[];for(var C=0,A=F.length;
C<A;C++){var D=$.element(F[C],!B.cash);if(B.ddup){if(G[D.uid]){continue;}G[D.uid]=true;}E.push(D);}F=E;}return(B.cash)?$extend(F,this):F;}});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));}});Elements.multi=function(A){return function(){var B=[];
var F=true;for(var D=0,C=this.length;D<C;D++){var E=this[D][A].apply(this[D],arguments);B.push(E);if(F){F=($type(E)=="element");}}return(F)?new Elements(B):B;
};};Window.implement({$:function(B,C){if(B&&B.$family&&B.uid){return B;}var A=$type(B);return($[A])?$[A](B,C,this.document):null;},$$:function(A){if(arguments.length==1&&typeof A=="string"){return this.document.getElements(A);
}var F=[];var C=Array.flatten(arguments);for(var D=0,B=C.length;D<B;D++){var E=C[D];switch($type(E)){case"element":E=[E];break;case"string":E=this.document.getElements(E,true);
break;default:E=false;}if(E){F.extend(E);}}return new Elements(F);},getDocument:function(){return this.document;},getWindow:function(){return this;}});
$.string=function(C,B,A){C=A.getElementById(C);return(C)?$.element(C,B):null;};$.element=function(A,D){$uid(A);if(!D&&!A.$family&&!(/^object|embed$/i).test(A.tagName)){var B=Element.Prototype;
for(var C in B){A[C]=B[C];}}return A;};$.object=function(B,C,A){if(B.toElement){return $.element(B.toElement(A),C);}return null;};$.textnode=$.whitespace=$.window=$.document=$arguments(0);
Native.implement([Element,Document],{getElement:function(A,B){return $(this.getElements(A,true)[0]||null,B);},getElements:function(A,D){A=A.split(",");
var C=[];var B=(A.length>1);A.each(function(E){var F=this.getElementsByTagName(E.trim());(B)?C.extend(F):C=F;},this);return new Elements(C,{ddup:B,cash:!D});
}});Element.Storage={get:function(A){return(this[A]||(this[A]={}));}};Element.Inserters=new Hash({before:function(B,A){if(A.parentNode){A.parentNode.insertBefore(B,A);
}},after:function(B,A){if(!A.parentNode){return ;}var C=A.nextSibling;(C)?A.parentNode.insertBefore(B,C):A.parentNode.appendChild(B);},bottom:function(B,A){A.appendChild(B);
},top:function(B,A){var C=A.firstChild;(C)?A.insertBefore(B,C):A.appendChild(B);}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(C,B){var A=B.capitalize();
Element.implement("inject"+A,function(D){C(this,$(D,true));return this;});Element.implement("grab"+A,function(D){C($(D,true),this);return this;});});Element.implement({getDocument:function(){return this.ownerDocument;
},getWindow:function(){return this.ownerDocument.getWindow();},getElementById:function(D,C){var B=this.ownerDocument.getElementById(D);if(!B){return null;
}for(var A=B.parentNode;A!=this;A=A.parentNode){if(!A){return null;}}return $.element(B,C);},set:function(D,B){switch($type(D)){case"object":for(var C in D){this.set(C,D[C]);
}break;case"string":var A=Element.Properties.get(D);(A&&A.set)?A.set.apply(this,Array.slice(arguments,1)):this.setProperty(D,B);}return this;},get:function(B){var A=Element.Properties.get(B);
return(A&&A.get)?A.get.apply(this,Array.slice(arguments,1)):this.getProperty(B);},erase:function(B){var A=Element.Properties.get(B);(A&&A.erase)?A.erase.apply(this,Array.slice(arguments,1)):this.removeProperty(B);
return this;},match:function(A){return(!A||Element.get(this,"tag")==A);},inject:function(B,A){Element.Inserters.get(A||"bottom")(this,$(B,true));return this;
},wraps:function(B,A){B=$(B,true);return this.replaces(B).grab(B,A);},grab:function(B,A){Element.Inserters.get(A||"bottom")($(B,true),this);return this;
},appendText:function(B,A){return this.grab(this.getDocument().newTextNode(B),A);},adopt:function(){Array.flatten(arguments).each(function(A){A=$(A,true);
if(A){this.appendChild(A);}},this);return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},clone:function(D,C){switch($type(this)){case"element":var H={};
for(var G=0,E=this.attributes.length;G<E;G++){var B=this.attributes[G],L=B.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(L)){continue;
}var K=(L=="style"&&this.style)?this.style.cssText:B.nodeValue;if(!$chk(K)||L=="uid"||(L=="id"&&!C)){continue;}if(K!="inherit"&&["string","number"].contains($type(K))){H[L]=K;
}}var J=new Element(this.nodeName.toLowerCase(),H);if(D!==false){for(var I=0,F=this.childNodes.length;I<F;I++){var A=Element.clone(this.childNodes[I],true,C);
if(A){J.grab(A);}}}return J;case"textnode":return document.newTextNode(this.nodeValue);}return null;},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this,A);
return this;},hasClass:function(A){return this.className.contains(A," ");},addClass:function(A){if(!this.hasClass(A)){this.className=(this.className+" "+A).clean();
}return this;},removeClass:function(A){this.className=this.className.replace(new RegExp("(^|\\s)"+A+"(?:\\s|$)"),"$1").clean();return this;},toggleClass:function(A){return this.hasClass(A)?this.removeClass(A):this.addClass(A);
},getComputedStyle:function(B){if(this.currentStyle){return this.currentStyle[B.camelCase()];}var A=this.getWindow().getComputedStyle(this,null);return(A)?A.getPropertyValue([B.hyphenate()]):null;
},empty:function(){$A(this.childNodes).each(function(A){Browser.freeMem(A);Element.empty(A);Element.dispose(A);},this);return this;},destroy:function(){Browser.freeMem(this.empty().dispose());
return null;},getSelected:function(){return new Elements($A(this.options).filter(function(A){return A.selected;}));},toQueryString:function(){var A=[];
this.getElements("input, select, textarea").each(function(B){if(!B.name||B.disabled){return ;}var C=(B.tagName.toLowerCase()=="select")?Element.getSelected(B).map(function(D){return D.value;
}):((B.type=="radio"||B.type=="checkbox")&&!B.checked)?null:B.value;$splat(C).each(function(D){if(D){A.push(B.name+"="+encodeURIComponent(D));}});});return A.join("&");
},getProperty:function(C){var B=Element.Attributes,A=B.Props[C];var D=(A)?this[A]:this.getAttribute(C,2);return(B.Bools[C])?!!D:(A)?D:D||null;},getProperties:function(){var A=$A(arguments);
return A.map(function(B){return this.getProperty(B);},this).associate(A);},setProperty:function(D,E){var C=Element.Attributes,B=C.Props[D],A=$defined(E);
if(B&&C.Bools[D]){E=(E||!A)?true:false;}else{if(!A){return this.removeProperty(D);}}(B)?this[B]=E:this.setAttribute(D,E);return this;},setProperties:function(A){for(var B in A){this.setProperty(B,A[B]);
}return this;},removeProperty:function(D){var C=Element.Attributes,B=C.Props[D],A=(B&&C.Bools[D]);(B)?this[B]=(A)?false:"":this.removeAttribute(D);return this;
},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;}});(function(){var A=function(D,B,I,C,F,H){var E=D[I||B];var G=[];
while(E){if(E.nodeType==1&&(!C||Element.match(E,C))){G.push(E);if(!F){break;}}E=E[B];}return(F)?new Elements(G,{ddup:false,cash:!H}):$(G[0],H);};Element.implement({getPrevious:function(B,C){return A(this,"previousSibling",null,B,false,C);
},getAllPrevious:function(B,C){return A(this,"previousSibling",null,B,true,C);},getNext:function(B,C){return A(this,"nextSibling",null,B,false,C);},getAllNext:function(B,C){return A(this,"nextSibling",null,B,true,C);
},getFirst:function(B,C){return A(this,"nextSibling","firstChild",B,false,C);},getLast:function(B,C){return A(this,"previousSibling","lastChild",B,false,C);
},getParent:function(B,C){return A(this,"parentNode",null,B,false,C);},getParents:function(B,C){return A(this,"parentNode",null,B,true,C);},getChildren:function(B,C){return A(this,"nextSibling","firstChild",B,true,C);
},hasChild:function(B){B=$(B,true);return(!!B&&$A(this.getElementsByTagName(B.tagName)).contains(B));}});})();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.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp("^"+document.location.protocol+"//"+document.location.host),"");
}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join("");}};Native.implement([Element,Window,Document],{addListener:function(B,A){if(this.addEventListener){this.addEventListener(B,A,false);
}else{this.attachEvent("on"+B,A);}return this;},removeListener:function(B,A){if(this.removeEventListener){this.removeEventListener(B,A,false);}else{this.detachEvent("on"+B,A);
}return this;},retrieve:function(B,A){var D=Element.Storage.get(this.uid);var C=D[B];if($defined(A)&&!$defined(C)){C=D[B]=A;}return $pick(C);},store:function(B,A){var C=Element.Storage.get(this.uid);
C[B]=A;return this;},eliminate:function(A){var B=Element.Storage.get(this.uid);delete B[A];return this;}});Element.Attributes=new Hash({Props:{html:"innerHTML","class":"className","for":"htmlFor",text:(Browser.Engine.trident)?"innerText":"textContent"},Bools:["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"],Camels:["value","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]});
Browser.freeMem=function(A){if(!A){return ;}if(Browser.Engine.trident&&(/object/i).test(A.tagName)){for(var B in A){if(typeof A[B]=="function"){A[B]=$empty;
}}Element.dispose(A);}if(A.uid&&A.removeEvents){A.removeEvents();}};(function(B){var C=B.Bools,A=B.Camels;B.Bools=C=C.associate(C);Hash.extend(Hash.combine(B.Props,C),A.associate(A.map(function(D){return D.toLowerCase();
})));B.erase("Camels");})(Element.Attributes);window.addListener("unload",function(){window.removeListener("unload",arguments.callee);document.purge();
if(Browser.Engine.trident){CollectGarbage();}});Element.Properties.events={set:function(A){this.addEvents(A);}};Native.implement([Element,Window,Document],{addEvent:function(E,G){var H=this.retrieve("events",{});
H[E]=H[E]||{keys:[],values:[]};if(H[E].keys.contains(G)){return this;}H[E].keys.push(G);var F=E,A=Element.Events.get(E),C=G,I=this;if(A){if(A.onAdd){A.onAdd.call(this,G);
}if(A.condition){C=function(J){if(A.condition.call(this,J)){return G.call(this,J);}return false;};}F=A.base||F;}var D=function(){return G.call(I);};var B=Element.NativeEvents[F]||0;
if(B){if(B==2){D=function(J){J=new Event(J,I.getWindow());if(C.call(I,J)===false){J.stop();}};}this.addListener(F,D);}H[E].values.push(D);return this;},removeEvent:function(D,C){var B=this.retrieve("events");
if(!B||!B[D]){return this;}var G=B[D].keys.indexOf(C);if(G==-1){return this;}var A=B[D].keys.splice(G,1)[0];var F=B[D].values.splice(G,1)[0];var E=Element.Events.get(D);
if(E){if(E.onRemove){E.onRemove.call(this,C);}D=E.base||D;}return(Element.NativeEvents[D])?this.removeListener(D,F):this;},addEvents:function(A){for(var B in A){this.addEvent(B,A[B]);
}return this;},removeEvents:function(B){var A=this.retrieve("events");if(!A){return this;}if(!B){for(var C in A){this.removeEvents(C);}A=null;}else{if(A[B]){while(A[B].keys[0]){this.removeEvent(B,A[B].keys[0]);
}A[B]=null;}}return this;},fireEvent:function(D,B,A){var C=this.retrieve("events");if(!C||!C[D]){return this;}C[D].keys.each(function(E){E.create({bind:this,delay:A,"arguments":B})();
},this);return this;},cloneEvents:function(D,A){D=$(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(E){this.addEvent(A,E);
},this);}}return this;}});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(E,D){if(!C[D]){return"";}return($type(E)=="number")?C[D].replace("@",Math.round(E)):E;
}).join(" ");}else{if(A==String(Number(A))){A=Math.round(A);}}this.style[B]=A;return this;},getStyle:function(G){switch(G){case"opacity":return this.get("opacity");
case"float":G=(Browser.Engine.trident)?"styleFloat":"cssFloat";}G=G.camelCase();var A=this.style[G];if(!$chk(A)){A=[];for(var F in Element.ShortStyles){if(G!=F){continue;
}for(var E in Element.ShortStyles[F]){A.push(this.getStyle(E));}return A.join(" ");}A=this.getComputedStyle(G);}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)))){if(G.test(/^(height|width)$/)){var B=(G=="width")?["left","right"]:["top","bottom"],D=0;
B.each(function(H){D+=this.getStyle("border-"+H+"-width").toInt()+this.getStyle("padding-"+H).toInt();},this);return this["offset"+G.capitalize()]-D+"px";
}if(Browser.Engine.presto&&String(A).test("px")){return A;}if(G.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.each(arguments,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(G){var F=Element.ShortStyles;
var B=Element.Styles;["margin","padding"].each(function(H){var I=H+G;F[H][I]=B[I]="@px";});var E="border"+G;F.border[E]=B[E]="@px @ rgb(@, @, @)";var D=E+"Width",A=E+"Style",C=E+"Color";
F[E]={};F.borderWidth[D]=F[E][D]=B[D]="@px";F.borderStyle[A]=F[E][A]=B[A]="@";F.borderColor[C]=F[E][C]=B[C]="rgb(@, @, @)";});(function(){Element.implement({scrollTo:function(H,I){if(B(this)){this.getWindow().scrollTo(H,I);
}else{this.scrollLeft=H;this.scrollTop=I;}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 I=this,H={x:0,y:0};while(I&&!B(I)){H.x+=I.scrollLeft;H.y+=I.scrollTop;I=I.parentNode;
}return H;},getOffsetParent:function(){var H=this;if(B(H)){return null;}if(!Browser.Engine.trident){return H.offsetParent;}while((H=H.parentNode)&&!B(H)){if(D(H,"position")!="static"){return H;
}}return null;},getOffsets:function(){var I=this,H={x:0,y:0};if(B(this)){return H;}while(I&&!B(I)){H.x+=I.offsetLeft;H.y+=I.offsetTop;if(Browser.Engine.gecko){if(!F(I)){H.x+=C(I);
H.y+=G(I);}var J=I.parentNode;if(J&&D(J,"overflow")!="visible"){H.x+=C(J);H.y+=G(J);}}else{if(I!=this&&(Browser.Engine.trident||Browser.Engine.webkit)){H.x+=C(I);
H.y+=G(I);}}I=I.offsetParent;if(Browser.Engine.trident){while(I&&!I.currentStyle.hasLayout){I=I.offsetParent;}}}if(Browser.Engine.gecko&&!F(this)){H.x-=C(this);
H.y-=G(this);}return H;},getPosition:function(K){if(B(this)){return{x:0,y:0};}var L=this.getOffsets(),I=this.getScrolls();var H={x:L.x-I.x,y:L.y-I.y};var J=(K&&(K=$(K)))?K.getPosition():{x:0,y:0};
return{x:H.x-J.x,y:H.y-J.y};},getCoordinates:function(J){if(B(this)){return this.getWindow().getCoordinates();}var H=this.getPosition(J),I=this.getSize();
var K={left:H.x,top:H.y,width:I.x,height:I.y};K.right=K.left+K.width;K.bottom=K.top+K.height;return K;},computePosition:function(H){return{left:H.x-E(this,"margin-left"),top:H.y-E(this,"margin-top")};
},position:function(H){return this.setStyles(this.computePosition(H));}});Native.implement([Document,Window],{getSize:function(){var I=this.getWindow();
if(Browser.Engine.presto||Browser.Engine.webkit){return{x:I.innerWidth,y:I.innerHeight};}var H=A(this);return{x:H.clientWidth,y:H.clientHeight};},getScroll:function(){var I=this.getWindow();
var H=A(this);return{x:I.pageXOffset||H.scrollLeft,y:I.pageYOffset||H.scrollTop};},getScrollSize:function(){var I=A(this);var H=this.getSize();return{x:Math.max(I.scrollWidth,H.x),y:Math.max(I.scrollHeight,H.y)};
},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var H=this.getSize();return{top:0,left:0,bottom:H.y,right:H.x,height:H.y,width:H.x};
}});var D=Element.getComputedStyle;function E(H,I){return D(H,I).toInt()||0;}function F(H){return D(H,"-moz-box-sizing")=="border-box";}function G(H){return E(H,"border-top-width");
}function C(H){return E(H,"border-left-width");}function B(H){return(/^(?:body|html)$/i).test(H.tagName);}function A(H){var I=H.getDocument();return(!I.compatMode||I.compatMode=="CSS1Compat")?I.html:I.body;
}})();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;}});Native.implement([Document,Element],{getElements:function(H,G){H=H.split(",");
var C,E={};for(var D=0,B=H.length;D<B;D++){var A=H[D],F=Selectors.Utils.search(this,A,E);if(D!=0&&F.item){F=$A(F);}C=(D==0)?F:(C.item)?$A(C).concat(F):C.concat(F);
}return new Elements(C,{ddup:(H.length>1),cash:!G});}});Element.implement({match:function(B){if(!B){return true;}var D=Selectors.Utils.parseTagAndID(B);
var A=D[0],E=D[1];if(!Selectors.Filters.byID(this,E)||!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+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\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(F){if(Selectors.Cache.nth[F]){return Selectors.Cache.nth[F];
}var C=F.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!C){return false;}var E=parseInt(C[1]);var B=(E||E===0)?E:1;var D=C[2]||false;var A=parseInt(C[3])||0;
if(B!=0){A--;while(A<1){A+=B;}while(A>=B){A-=B;}}else{B=A;D="index";}switch(D){case"n":C={a:B,b:A,special:"n"};break;case"odd":C={a:2,b:0,special:"n"};
break;case"even":C={a:2,b:1,special:"n"};break;case"first":C={a:0,special:"index"};break;case"last":C={special:"last-child"};break;case"only":C={special:"only-child"};
break;default:C={a:(B-1),special:"index"};}return Selectors.Cache.nth[F]=C;},parseSelector:function(E){if(Selectors.Cache.parsed[E]){return Selectors.Cache.parsed[E];
}var D,H={classes:[],pseudos:[],attributes:[]};while((D=Selectors.RegExps.combined.exec(E))){var I=D[1],G=D[2],F=D[3],B=D[4],C=D[5],J=D[6];if(I){H.classes.push(I);
}else{if(C){var A=Selectors.Pseudo.get(C);if(A){H.pseudos.push({parser:A,argument:J});}else{H.attributes.push({name:C,operator:"=",value:J});}}else{if(G){H.attributes.push({name:G,operator:F,value:B});
}}}}if(!H.classes.length){delete H.classes;}if(!H.attributes.length){delete H.attributes;}if(!H.pseudos.length){delete H.pseudos;}if(!H.classes&&!H.attributes&&!H.pseudos){H=null;
}return Selectors.Cache.parsed[E]=H;},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(F,C,E){var D;if(C.classes){for(D=C.classes.length;D--;D){var G=C.classes[D];if(!Selectors.Filters.byClass(F,G)){return false;}}}if(C.attributes){for(D=C.attributes.length;
D--;D){var B=C.attributes[D];if(!Selectors.Filters.byAttribute(F,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(F,A.parser,A.argument,E)){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(J,I,O){var B=[];var C=I.trim().replace(Selectors.RegExps.splitter,function(Z,Y,X){B.push(Y);
return":)"+X;}).split(":)");var K,F,E,V;for(var U=0,Q=C.length;U<Q;U++){var T=C[U];if(U==0&&Selectors.RegExps.quick.test(T)){K=J.getElementsByTagName(T);
continue;}var A=B[U-1];var L=Selectors.Utils.parseTagAndID(T);var W=L[0],M=L[1];if(U==0){K=Selectors.Utils.getByTagAndID(J,W,M);}else{var D={},H=[];for(var S=0,R=K.length;
S<R;S++){H=Selectors.Getters[A](H,K[S],W,M,D);}K=H;}var G=Selectors.Utils.parseSelector(T);if(G){E=[];for(var P=0,N=K.length;P<N;P++){V=K[P];if(Selectors.Utils.filter(V,G,O)){E.push(V);
}}K=E;}}return K;}};Selectors.Getters={" ":function(H,G,I,A,E){var D=Selectors.Utils.getByTagAndID(G,I,A);for(var C=0,B=D.length;C<B;C++){var F=D[C];if(Selectors.Utils.chk(F,E)){H.push(F);
}}return H;},">":function(H,G,I,A,F){var C=Selectors.Utils.getByTagAndID(G,I,A);for(var E=0,D=C.length;E<D;E++){var B=C[E];if(B.parentNode==G&&Selectors.Utils.chk(B,F)){H.push(B);
}}return H;},"+":function(C,B,A,E,D){while((B=B.nextSibling)){if(B.nodeType==1){if(Selectors.Utils.chk(B,D)&&Selectors.Filters.byTag(B,A)&&Selectors.Filters.byID(B,E)){C.push(B);
}break;}}return C;},"~":function(C,B,A,E,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,E)){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(A," "));},byPseudo:function(A,D,C,B){return D.call(A,C,B);},byAttribute:function(C,D,B,E){var A=Element.prototype.getProperty.call(C,D);
if(!A){return false;}if(!B||E==undefined){return true;}switch(B){case"=":return(A==E);case"*=":return(A.contains(E));case"^=":return(A.substr(0,E.length)==E);
case"$=":return(A.substr(A.length-E.length)==E);case"!=":return(A!=E);case"~=":return A.contains(E," ");case"|=":return A.contains(E,"-");}return false;
}};Selectors.Pseudo=new Hash({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(G,E){G=(G==undefined)?"n":G;var C=Selectors.Utils.parseNthArgument(G);if(C.special!="n"){return Selectors.Pseudo[C.special].call(this,C.a,E);
}var F=0;E.positions=E.positions||{};var D=$uid(this);if(!E.positions[D]){var B=this;while((B=B.previousSibling)){if(B.nodeType!=1){continue;}F++;var A=E.positions[$uid(B)];
if(A!=undefined){F=A+F;break;}}E.positions[D]=F;}return(E.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);
}});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");};switch(Browser.Engine.name){case"webkit":(function(){(["loaded","complete"].contains(document.readyState))?B():arguments.callee.delay(50);
})();break;case"trident":var A=document.createElement("div");(function(){($try(function(){A.doScroll("left");return $(A).inject(document.body).set("html","temp").dispose();
}))?B():arguments.callee.delay(50);})();break;default:window.addEvent("load",B);document.addEvent("DOMContentLoaded",B);}})();var JSON=new Hash({encode:function(B){switch($type(B)){case"string":return'"'+B.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';
case"array":return"["+String(B.map(JSON.encode).filter($defined))+"]";case"object":case"hash":var A=[];Hash.each(B,function(E,D){var C=JSON.encode(E);if(C){A.push(JSON.encode(D)+":"+C);
}});return"{"+A+"}";case"number":case"boolean":return String(B);case false:return"null";}return null;},$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);
},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+")");}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this);}});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();};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(L,M){this.instance="Swiff_"+$time();this.setOptions(M);M=this.options;var B=this.id=M.id||this.instance;var A=$(M.container);Swiff.CallBacks[this.instance]={};
var E=M.params,G=M.vars,F=M.callBacks;var H=$extend({height:M.height,width:M.width},M.properties);var K=this;for(var D in F){Swiff.CallBacks[this.instance][D]=(function(N){return function(){return N.apply(K.object,arguments);
};})(F[D]);G[D]="Swiff.CallBacks."+this.instance+"."+D;}E.flashVars=Hash.toQueryString(G);if(Browser.Engine.trident){H.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
E.movie=L;}else{H.type="application/x-shockwave-flash";H.data=L;}var J='<object id="'+B+'"';for(var I in H){J+=" "+I+'="'+H[I]+'"';}J+=">";for(var C in E){if(E[C]){J+='<param name="'+C+'" value="'+E[C]+'" />';
}}J+="</object>";this.object=((A)?A.empty():new Element("div")).set("html",J).firstChild;},replaces:function(A){A=$(A,true);A.parentNode.replaceChild(this.toElement(),A);
return this;},inject:function(A){$(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);};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore",transition:function(A){return -(Math.cos(Math.PI*A)-1)/2;
}},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";}},step:function(){var A=$time();if(A<this.time+this.options.duration){var B=this.options.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(A){if(!this.timer){return true;}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));
return false;}return false;},start:function(B,A){if(!this.check(arguments.callee,B,A)){return this;}this.from=B;this.to=A;this.time=0;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,E,B){B=$splat(B);var C=B[1];if(!$chk(C)){B[1]=B[0];
B[0]=D.getStyle(E);}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(F,E){if(B){return ;}var D=F.parse(C);if($chk(D)){B={value:D,parser:F};}});
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(E){A.push({value:D[E].parser.compute(D[E].value,C[E].value,B),parser:D[E].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(E,D){var C=E.href;
if(C&&C.contains("://")&&!C.contains(document.domain)){return ;}var F=E.rules||E.cssRules;Array.each(F,function(I,G){if(!I.style){return ;}var H=(I.selectorText)?I.selectorText.replace(/^\w+/,function(J){return J.toLowerCase();
}):null;if(!H||!H.test("^"+A+"$")){return ;}Element.Styles.each(function(K,J){if(!I.style[J]||Element.ShortStyles[J]){return ;}K=String(I.style[J]);B[J]=(K.test(/^rgb/))?K.rgbToHex():K;
});});});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(E,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.Tween=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(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,E,D){if(!this.check(arguments.callee,C,E,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 E=this.get("tween"),D="opacity",A;
C=$pick(C,"toggle");switch(C){case"in":E.start(D,1);break;case"out":E.start(D,0);break;case"show":E.set(D,1);break;case"hide":E.set(D,0);break;case"toggle":var B=this.retrieve("fade:flag",this.get("opacity")==1);
E.start(D,(B)?0:1);this.store("fade:flag",!B);A=true;break;default:E.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;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(B,A){this.element=this.subject=$(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(E,D,C){var A={};for(var B in E){A[B]=this.parent(E[B],D[B],C);
}return A;},start:function(B){if(!this.check(arguments.callee,B)){return this;}if(typeof B=="string"){B=this.search(B);}var E={},D={};for(var C in B){var A=this.prepare(this.element,C,B[C]);
E[C]=A.from;D[C]=A.to;}return this.parent(E,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;}});(function(){var A=Fx.prototype.initialize;
Fx.prototype.initialize=function(B){A.call(this,B);var C=this.options.transition;if(typeof C=="string"&&(C=C.split(":"))){var D=Fx.Transitions;D=D[C[0]]||D[C[0].capitalize()];
if(C[1]){D=D["ease"+C[1].capitalize()+(C[2]?C[2].capitalize():"")];}this.options.transition=D;}};})();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(D){var C;for(var B=0,A=1;1;B+=A,A/=2){if(D>=(7-4*B)/11){C=-Math.pow((11-6*B-11*D)/4,2)+A*A;
break;}}return C;},Elastic:function(B,A){return Math.pow(2,10*--B)*Math.cos(20*B*Math.PI*(A[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(B,A){Fx.Transitions[B]=new Fx.Transition(function(C){return Math.pow(C,[A+2]);
});});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},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));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();}this.xhr.onreadystatechange=$empty;},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(A){if(!this.running){return true;
}switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(A.bind(this,Array.slice(arguments,1)));return false;}return false;
},send:function(I){if(!this.check(arguments.callee,I)){return this;}this.running=true;var G=$type(I);if(G=="string"||G=="element"){I={data:I};}var D=this.options;
I=$extend({data:D.data,url:D.url,method:D.method},I);var E=I.data,B=I.url,A=I.method;switch($type(E)){case"element":E=$(E).toQueryString();break;case"object":case"hash":E=Hash.toQueryString(E);
}if(this.options.format){var H="format="+this.options.format;E=(E)?H+"&"+E:H;}if(this.options.emulation&&["put","delete"].contains(A)){var F="_method="+A;
E=(E)?F+"&"+E:F;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(E&&A=="get"){B=B+(B.contains("?")?"&":"?")+E;E=null;}this.xhr.open(A.toUpperCase(),B,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);
this.headers.each(function(K,J){if(!$try(function(){this.xhr.setRequestHeader(J,K);return true;}.bind(this))){this.fireEvent("exception",[J,K]);}},this);
this.fireEvent("request");this.xhr.send(E);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.toLowerCase()}));};});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,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>",G;if(Browser.Engine.trident){G=new ActiveXObject("Microsoft.XMLDOM");
G.async=false;G.loadXML(D);}else{G=new DOMParser().parseFromString(D,"text/xml");}D=G.getElementsByTagName("root")[0];for(var F=0,E=D.childNodes.length;
F<E;F++){var H=Element.clone(D.childNodes[F],true,true);if(H){A.grab(H);}}return A;})||A.set("html",C);},success:function(D){var C=this.options,B=this.response;
B.html=D.stripScripts(function(E){B.javascript=E;});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){$(C.update).empty().adopt(B.tree);}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){send.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;}});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);}});//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical"},initialize:function(B,A){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper);}},true);this.element=this.subject=$(B);this.parent(A);var C=this.element.retrieve("wrapper");
this.wrapper=C||new Element("div",{styles:$extend(this.element.getStyles("margin","position"),{overflow:"hidden"})}).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(E,D,C){var B=[];var A=2;A.times(function(F){B[F]=Fx.compute(E[F],D[F],C);});return B;},start:function(B,E){if(!this.check(arguments.callee,B,E)){return this;
}this[E||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 G=[[D,C],[-this.offset,0]];var F;switch(B){case"in":F=A;break;case"out":F=G;break;case"toggle":F=(this.wrapper["offset"+this.layout.capitalize()]==0)?A:G;
}return this.parent(F[0],F[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,E){D=D||"toggle";var B=this.get("slide"),A;switch(D){case"hide":B.hide(E);break;case"show":B.show(E);
break;case"toggle":var C=this.retrieve("slide:flag",B.open);B[(C)?"slideOut":"slideIn"](E);this.store("slide:flag",!C);A=true;break;default:B.start(D,E);
}if(!A){this.eliminate("slide:flag");}return this;}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(B,A){this.element=this.subject=$(B);
this.parent(A);var D=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=$(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);this.element.scrollTo(A[0],A[1]);},compute:function(E,D,C){var B=[];var A=2;A.times(function(F){B.push(Fx.compute(E[F],D[F],C));
});return B;},start:function(C,H){if(!this.check(arguments.callee,C,H)){return this;}var E=this.element.getSize(),F=this.element.getScrollSize();var B=this.element.getScroll(),D={x:C,y:H};
for(var G in D){var A=F[G]-E[G];if($chk(D[G])){D[G]=($type(D[G])=="number")?D[G].limit(0,A):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=$(B).getPosition(this.element);return this.start(A.x,A.y);}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(B,A){this.elements=this.subject=$$(B);
this.parent(A);},compute:function(G,H,I){var C={};for(var D in G){var A=G[D],E=H[D],F=C[D]={};for(var B in A){F[B]=this.parent(A[B],E[B],I);}}return C;
},set:function(B){for(var C in B){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(arguments.callee,C)){return this;
}var H={},I={};for(var D in C){var F=C[D],A=H[D]={},G=I[D]={};for(var B in F){var E=this.prepare(this.elements[D],B,F[B]);A[B]=E.from;G[B]=E.to;}}return this.parent(H,I);
}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:"left",y:"top"}},initialize:function(){var B=Array.link(arguments,{options:Object.type,element:$defined});
this.element=$(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):$(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(C){if(this.options.preventDefault){C.preventDefault();}this.fireEvent("beforeStart",this.element);this.mouse.start=C.page;
var A=this.options.limit;this.limit={x:[],y:[]};for(var D in this.options.modifiers){if(!this.options.modifiers[D]){continue;}if(this.options.style){this.value.now[D]=this.element.getStyle(this.options.modifiers[D]).toInt();
}else{this.value.now[D]=this.element[this.options.modifiers[D]];}if(this.options.invert){this.value.now[D]*=-1;}this.mouse.pos[D]=C.page[D]-this.value.now[D];
if(A&&A[D]){for(var B=2;B--;B){if($chk(A[D][B])){this.limit[D][B]=$lambda(A[D][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).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.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.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);},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);}}});Element.implement({makeResizable:function(A){return new Drag(this,$merge({modifiers:{x:"width",y:"height"}},A));
}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false},initialize:function(C,B){this.parent(C,B);this.droppables=$$(this.options.droppables);
this.container=$(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=$(this.container.getDocument().body);}C=this.element;
var D=C.getStyle("position");var A=(D!="static")?D:"absolute";if(C.getStyle("left")=="auto"||C.getStyle("top")=="auto"){C.position(C.getPosition(C.offsetParent));
}C.setStyle("position",A);this.addEvent("start",function(){this.checkDroppables();},true);},start:function(B){if(this.container){var D=this.element,J=this.container,E=J.getCoordinates(D.offsetParent),F={},A={};
["top","right","bottom","left"].each(function(K){F[K]=J.getStyle("padding-"+K).toInt();A[K]=D.getStyle("margin-"+K).toInt();},this);var C=D.offsetWidth+A.left+A.right,I=D.offsetHeight+A.top+A.bottom;
var H=[E.left+F.left,E.right-F.right-C];var G=[E.top+F.top,E.bottom-F.bottom-I];this.options.limit={x:H,y:G};}this.parent(B);},checkAgainst:function(B){B=B.getCoordinates();
var A=this.mouse.now;return(A.x>B.left&&A.x<B.right&&A.y<B.bottom&&A.y>B.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.overed=A;this.fireEvent("enter",[this.element,A]);}else{this.overed=null;
}}},drag:function(A){this.parent(A);if(this.droppables.length){this.checkDroppables();}},stop:function(A){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed]);
this.overed=null;return this.parent(A);}});Element.implement({makeDraggable:function(A){return new Drag.Move(this,A);}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(B,A){this.parent(B,A);
this.load();},save:function(){var A=JSON.encode(this.hash);if(!A||A.length>4096){return false;}if(A=="{}"){this.dispose();}else{this.write(A);}return true;
},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this;}});Hash.Cookie.implement((function(){var A={};Hash.each(Hash.prototype,function(C,B){A[B]=function(){var D=C.apply(this.hash,arguments);
if(this.options.autoSave){this.save();}return D;};});return A;})());var Color=new Native({initialize:function(B,C){if(arguments.length>=3){C="rgb";B=Array.slice(arguments,0,3);
}else{if(typeof B=="string"){if(B.match(/rgb/)){B=B.rgbToHex().hexToRgb(true);}else{if(B.match(/hsb/)){B=B.hsbToRgb();}else{B=B.hexToRgb(true);}}}}C=C||"rgb";
switch(C){case"hsb":var A=B;B=B.hsbToRgb();B.hsb=A;break;case"hex":B=B.hexToRgb(true);break;}B.rgb=B.slice(0,3);B.hsb=B.hsb||B.rgbToHsb();B.hex=B.rgbToHex();
return $extend(B,this);}});Color.implement({mix:function(){var A=Array.slice(arguments);var C=($type(A.getLast())=="number")?A.pop():50;var B=this.slice();
A.each(function(D){D=new Color(D);for(var E=0;E<3;E++){B[E]=Math.round((B[E]/100*(100-C))+(D[E]/100*C));}});return new Color(B,"rgb");},invert:function(){return new Color(this.map(function(A){return 255-A;
}));},setHue:function(A){return new Color([A,this.hsb[1],this.hsb[2]],"hsb");},setSaturation:function(A){return new Color([this.hsb[0],A,this.hsb[2]],"hsb");
},setBrightness:function(A){return new Color([this.hsb[0],this.hsb[1],A],"hsb");}});function $RGB(C,B,A){return new Color([C,B,A],"rgb");}function $HSB(C,B,A){return new Color([C,B,A],"hsb");
}function $HEX(A){return new Color(A,"hex");}Array.implement({rgbToHsb:function(){var B=this[0],C=this[1],J=this[2];var G,F,H;var I=Math.max(B,C,J),E=Math.min(B,C,J);
var K=I-E;H=I/255;F=(I!=0)?K/I:0;if(F==0){G=0;}else{var D=(I-B)/K;var A=(I-C)/K;var L=(I-J)/K;if(B==I){G=L-A;}else{if(C==I){G=2+D-L;}else{G=4+A-D;}}G/=6;
if(G<0){G++;}}return[Math.round(G*360),Math.round(F*100),Math.round(H*100)];},hsbToRgb:function(){var C=Math.round(this[2]/100*255);if(this[1]==0){return[C,C,C];
}else{var A=this[0]%360;var E=A%60;var F=Math.round((this[2]*(100-this[1]))/10000*255);var D=Math.round((this[2]*(6000-this[1]*E))/600000*255);var B=Math.round((this[2]*(6000-this[1]*(60-E)))/600000*255);
switch(Math.floor(A/60)){case 0:return[C,B,F];case 1:return[D,C,F];case 2:return[F,C,B];case 3:return[F,D,C];case 4:return[B,F,C];case 5:return[C,F,D];
}}return false;}});String.implement({rgbToHsb:function(){var A=this.match(/\d{1,3}/g);return(A)?hsb.rgbToHsb():null;},hsbToRgb:function(){var A=this.match(/\d{1,3}/g);
return(A)?A.hsbToRgb():null;}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={};},addEvent:function(B,A){this.checker[B]=this.checker[B]||{};
this.events[B]=this.events[B]||[];if(this.events[B].contains(A)){return false;}else{this.events[B].push(A);}this.instances.each(function(C,D){C.addEvent(B,this.check.bind(this,[B,C,D]));
},this);return this;},check:function(C,A,B){this.checker[C][B]=true;var D=this.instances.every(function(F,E){return this.checker[C][E]||false;},this);if(!D){return ;
}this.checker[C]={};this.events[C].each(function(E){E.call(this,this.instances,A);},this);}});var Asset=new Hash({javascript:function(F,D){D=$extend({onload:$empty,document:document,check:$lambda(true)},D);
var B=new Element("script",{src:F,type:"text/javascript"});var E=D.onload.bind(B),A=D.check,G=D.document;delete D.onload;delete D.check;delete D.document;
B.addEvents({load:E,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){E();}}}).setProperties(D);if(Browser.Engine.webkit419){var C=(function(){if(!$try(A)){return ;
}$clear(C);E();}).periodical(50);}return B.inject(G.head);},css:function(B,A){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=$(D)||new Element("img");["load","abort","error"].each(function(E){var F="on"+E;
var G=B[F];delete B[F];D[F]=function(){if(!D){return ;}if(!A.parentNode){A.width=D.width;A.height=D.height;}D=D.onload=D.onabort=D.onerror=null;G.delay(1,A,A);
A.fireEvent(E,A,1);};});D.src=A.src=C;if(D&&D.complete){D.onload.delay(1);}return A.setProperties(B);},images:function(D,C){C=$merge({onComplete:$empty,onProgress:$empty},C);
if(!D.push){D=[D];}var A=[];var B=0;D.each(function(F){var E=new Asset.image(F,{onload:function(){C.onProgress.call(this,B,D.indexOf(F));B++;if(B==D.length){C.onComplete();
}}});A.push(E);});return new Elements(A);}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(A,B){this.setOptions(B);
this.elements=[];this.lists=[];this.idle=true;this.addLists($$($(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(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.elements.erase(B);var C=B.retrieve("sortables:start");(this.options.handle?B.getElement(this.options.handle)||B:B).removeEvent("mousedown",C);
},this);return $$(A);},removeLists:function(){var A=[];Array.flatten(arguments).each(function(B){A.push(B);this.lists.erase(B);this.removeItems(B.getChildren());
},this);return $$(A);},getClone:function(B,A){if(!this.options.clone){return new Element("div").inject(document.body);}if($type(this.options.clone)=="function"){return this.options.clone.call(this,B,A,this.list);
}return A.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:A.getStyle("width")}).inject(this.list).position(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){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,{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.offsetParent));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(E){return E.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 Tips=new Class({Implements:[Events,Options],options:{onShow:function(A){A.setStyle("visibility","visible");
},onHide:function(A){A.setStyle("visibility","hidden");},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var C=Array.link(arguments,{options:Object.type,elements:$defined});
this.setOptions(C.options||null);this.tip=new Element("div").inject(document.body);if(this.options.className){this.tip.addClass(this.options.className);
}var B=new Element("div",{"class":"tip-top"}).inject(this.tip);this.container=new Element("div",{"class":"tip"}).inject(this.tip);var A=new Element("div",{"class":"tip-bottom"}).inject(this.tip);
this.tip.setStyles({position:"absolute",top:0,left:0,visibility:"hidden"});if(C.elements){this.attach(C.elements);}},attach:function(A){$$(A).each(function(D){var G=D.retrieve("tip:title",D.get("title"));
var F=D.retrieve("tip:text",D.get("rel")||D.get("href"));var E=D.retrieve("tip:enter",this.elementEnter.bindWithEvent(this,D));var C=D.retrieve("tip:leave",this.elementLeave.bindWithEvent(this,D));
D.addEvents({mouseenter:E,mouseleave:C});if(!this.options.fixed){var B=D.retrieve("tip:move",this.elementMove.bindWithEvent(this,D));D.addEvent("mousemove",B);
}D.store("tip:native",D.get("title"));D.erase("title");},this);return this;},detach:function(A){$$(A).each(function(C){C.removeEvent("mouseenter",C.retrieve("tip:enter")||$empty);
C.removeEvent("mouseleave",C.retrieve("tip:leave")||$empty);C.removeEvent("mousemove",C.retrieve("tip:move")||$empty);C.eliminate("tip:enter").eliminate("tip:leave").eliminate("tip:move");
var B=C.retrieve("tip:native");if(B){C.set("title",B);}});return this;},elementEnter:function(B,A){$A(this.container.childNodes).each(Element.dispose);
var D=A.retrieve("tip:title");if(D){this.titleElement=new Element("div",{"class":"tip-title"}).inject(this.container);this.fill(this.titleElement,D);}var C=A.retrieve("tip:text");
if(C){this.textElement=new Element("div",{"class":"tip-text"}).inject(this.container);this.fill(this.textElement,C);}this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);
this.position((!this.options.fixed)?B:{page:A.getPosition()});},elementLeave:function(A){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this);
},elementMove:function(A){this.position(A);},position:function(D){var B=window.getSize(),A=window.getScroll();var E={x:this.tip.offsetWidth,y:this.tip.offsetHeight};
var C={x:"left",y:"top"};for(var F in C){var G=D.page[F]+this.options.offsets[F];if((G+E[F]-A[F])>B[F]){G=D.page[F]-this.options.offsets[F]-E[F];}this.tip.setStyle(C[F],G);
}},fill:function(A,B){(typeof B=="string")?A.set("html",B):A.adopt(B);},show:function(){this.fireEvent("show",this.tip);},hide:function(){this.fireEvent("hide",this.tip);
}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(B,C){C=C||document;var E=C.getDocument(),D=C.getWindow();this.parent(E,B);this.links=(this.options.links)?$$(this.options.links):$$(E.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&&$(F)){this.useLink(G,F);
}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){D.location.hash=this.anchor;},true);}},useLink:function(B,A){B.addEvent("click",function(C){this.anchor=A;
this.toElement(A);C.stop();}.bind(this));}});var Slider=new Class({Implements:[Events,Options],options:{onTick:function(A){if(this.options.snap){A=this.toPosition(this.step);
}this.knob.setStyle(this.property,A);},snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(E,A,D){this.setOptions(D);
this.element=$(E);this.knob=$(A);this.previousChange=this.previousEnd=this.step=-1;this.element.addEvent("mousedown",this.clickedElement.bind(this));if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement.bindWithEvent(this));
}var F,B={},C={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";this.property="top";F="offsetHeight";break;case"horizontal":this.axis="x";
this.property="left";F="offsetWidth";}this.half=this.knob[F]/2;this.full=this.element[F]-this.knob[F]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;
this.max=$chk(this.options.range[1])?this.options.range[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.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);C[this.axis]=this.property;
B[this.axis]=[-this.options.offset,this.full-this.options.offset];this.drag=new Drag(this.knob,{snap:0,limit:B,modifiers:C,onDrag:this.draggedKnob.bind(this),onStart:this.draggedKnob.bind(this),onComplete:function(){this.draggedKnob();
this.end();}.bind(this)});if(this.options.snap){this.drag.options.grid=Math.ceil(this.stepWidth);this.drag.options.limit[this.axis][1]=this.full;}},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.end();this.fireEvent("tick",this.toPosition(this.step));return this;
},clickedElement:function(C){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.end();this.fireEvent("tick",A);},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 Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(A,B){this.element.scrollTo(A,B);}},initialize:function(B,A){this.setOptions(A);
this.element=$(B);this.listener=($type(this.element)!="element")?$(this.element.getDocument().body):this.element;this.timer=null;this.coord=this.getCoords.bind(this);
},start:function(){this.listener.addEvent("mousemove",this.coord);},stop:function(){this.listener.removeEvent("mousemove",this.coord);this.timer=$clear(this.timer);
},getCoords:function(A){this.page=(this.listener.get("tag")=="body")?A.client:A.page;if(!this.timer){this.timer=this.scroll.periodical(50,this);}},scroll:function(){var B=this.element.getSize(),A=this.element.getScroll(),E=this.element.getPosition(),D={x:0,y:0};
for(var C in this.page){if(this.page[C]<(this.options.area+E[C])&&A[C]!=0){D[C]=(this.page[C]-this.options.area-E[C])*this.options.velocity;}else{if(this.page[C]+this.options.area>(B[C]+E[C])&&B[C]+B[C]!=A[C]){D[C]=(this.page[C]-B[C]+this.options.area-E[C])*this.options.velocity;
}}}if(D.y||D.x){this.fireEvent("change",[A.x+D.x,A.y+D.y]);}}});var Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},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.container=$(C.container);this.previous=-1;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(E,D){if(this.options.show===D){this.fireEvent("active",[this.togglers[D],E]);}else{for(var F in this.effects){E.setStyle(F,0);
}}},this);if($chk(this.options.display)){this.display(this.options.display);}},addSection:function(E,C,G){E=$(E);C=$(C);var F=this.togglers.contains(E);
var B=this.togglers.length;this.togglers.include(E);this.elements.include(C);if(B&&(!F||G)){G=$pick(G,B-1);E.inject(this.togglers[G],"before");C.inject(E,"after");
}else{if(this.container&&!F){E.inject(this.container);C.inject(this.container);}}var A=this.togglers.indexOf(E);E.addEvent("click",this.display.bind(this,A));
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(!F){for(var D in this.effects){C.setStyle(D,0);}}return this;},display:function(A){A=($type(A)=="element")?this.elements.indexOf(A):A;if((this.timer&&this.options.wait)||(A===this.previous&&!this.options.alwaysHide)){return this;
}this.previous=A;var B={};this.elements.each(function(E,D){B[D]={};var C=(D!=A)||(this.options.alwaysHide&&(E.offsetHeight>0));this.fireEvent(C?"background":"active",[this.togglers[D],E]);
for(var F in this.effects){B[D][F]=C?0:E[this.effects[F]];}},this);return this.start(B);}});var toolTips={
	current: null,
	init:function(){
		$$('.toolTip').each(function(item,index){
			if(item.title != ""){
				item.set("rel",item.title);
				item.title="";
				item.addEvent('mouseenter',function(event){
					if(toolTips.current != this){
						toolTips.current = this;
						if($('tip')){
							$('tip').destroy();	
						}
						var type 	= this.get("rel").split(":");
						var pos  	= this.getPosition();
						var size 	= this.getSize();
						if(type[2]){
							pos  	= $(type[2]).getPosition();
							size 	= $(type[2]).getSize();
						}
						var message = type[1] || type[0];
						type 		= type[0] || "tip";
						var HTML = "<div class='tipTop'></div><div class='tipText'>" + message + "</div><div class='tipBottom'></div>";
						var elm  = new Element("div",{
											  'id': 'tip',
											  'class': type,
											  'html' : HTML, 
											  'opacity' : 0,
											  'styles' : 
												{
												  'position': 'absolute',
												  'z-index': 9999,
												  'left' : pos.x + size.x - 5,
												  'top' : (pos.y + 5)
												  }
											  });
						$(elm).injectInside(document.body);
						switch(type){
							case "lb":
								$(elm).style.top = (pos.y -  $(elm).getSize().y) + "px";
							break;
						}
						if(!Browser.Engine.trident){
							$(elm).fade("in");
						}else{
							$(elm).set("opacity",1); //Opacity(1);	
						}
					}
				});
				item.addEvent('mouseleave',function(){
					if(!Browser.Engine.trident){
						$('tip').fade("out");
					}else{
						$('tip').destroy();	
					}
					toolTips.current = null;
				});
			}
		});
	}
};
window.addEvent('domready',toolTips.init);

var staffTips={
	current: null,
	descriptions: Array(),
	init:function(){
		$$('td').each(function(item,index){
				var staff = $(item).getElement('img');				  
				var description = $(item).getElement('.description');
				if(staff && description){
					staffTips.descriptions[index] = $(description).get("html");
					item.set("rel",index);
					$(description).addClass("hide");
					item.addEvent('mouseenter',function(){
						if(staffTips.descriptions[this.get("rel")]){
							if($('stafftip')){
								$('stafftip').destroy();	
							}
							var pos  	= this.getPosition();
							var size 	= this.getSize();
							var HTML = "<div class='tipTop'></div><div class='tipText'>" + staffTips.descriptions[this.get("rel")] + "</div><div class='tipBottom'></div>";
							var elm  = new Element("div",{
												  'id': 'stafftip',
												  'class': 'stafftip',
												  'html' : HTML, 
												  'opacity' : 0,
												  'styles' : 
													{
													  'position': 'absolute',
													  'z-index': 9999,
													  'left' : pos.x + (size.x/2),
													  'top' : (pos.y)
													  }
												  });
							$(elm).injectInside(document.body);
							$(elm).style.top = ((pos.y - $(elm).getSize().y) + 10)+ "px";
							if(!Browser.Engine.trident){
								$(elm).fade("in");
							}else{
								$(elm).set("opacity",1); //Opacity(1);	
							}
						}
					});
					item.addEvent('mouseleave',function(){
						if(!Browser.Engine.trident){
							$('stafftip').fade("out");
						}else{
							$('stafftip').destroy();	
						}
						staffTips.current = null;
					});
				}
		});
	}
};
window.addEvent('domready',staffTips.init);var accord = new Class({
	initialize: function(){
		this.curr 		= null;
		this.showElm 	= 0;
		$$('.accordian').each(function(item,index){
			if(accord.curr==null || accord.curr != item){
				accord.curr = item;
				accord.showElm = 0;
			}
			var headings = $(item).getElements('.accord_title');
			var bodys	 = $(item).getElements('.accord_body');
			headings.each(function(head,i){
				if(head.hasClass('show')){
					accord.showElm = i;
				}
			});
			var setAccordian = new Accordion(headings,bodys,{
				display: 0,
				opacity: false,
				show: accord.showElm,
				alwaysHide: true
			},$(item));
			headings.each(function(heading,index){
				heading.removeEvents('mouseenter');
				heading.removeEvents('mouseleave');
				heading.addEvent('mouseenter',function(){
					heading.removeClass("accord_title");
					heading.addClass("accord_titleOvr");
				});
				heading.addEvent('mouseleave',function(){
					heading.removeClass("accord_titleOvr");
					heading.addClass("accord_title");
				});
			});
		});
	}
});
var pageAccord;								// Global accordian object
window.addEvent('domready', function(){
		pageAccord = new accord();
});var validate={
	allforms:Array(),
	ajax:Array(),
	hider:Array(),
	titles: Array(),
	unloading: false,
	decimal:function(objText){
		var cleanedInt='';
		var decimalPlaces = 2;
		var options = objText.alt.split(',');
		if(options[2] != "" && !isNaN(options[2])){
			decimalPlaces = parseInt(options[2]);
		}
		objText.value=objText.value.replace(/ /g,'');
		for(var i=0;i<objText.value.length;i++){
			if(!isNaN(objText.value.charAt(i))||objText.value.charAt(i)=="."){
				cleanedInt+=objText.value.charAt(i);
			}
		}
		if(cleanedInt.indexOf('.')!=-1){
			cleanedInt=cleanedInt.substring(0,cleanedInt.indexOf('.')+1+parseInt(decimalPlaces));
		}
		objText.value=cleanedInt;
	},
	phone:function(objText){
		// No checking for this yet
	},
	integer:function(objText){
		var cleanedInt='';
		objText.value=objText.value.replace(/ /g,'');
		for(var i=0;i<objText.value.length;i++){
			if(!isNaN(objText.value.charAt(i))){
				cleanedInt+=objText.value.charAt(i);
			}
		}
		objText.value=cleanedInt;
	},
	changeStyles: function(obj){
		obj.removeClass("error");
		obj.removeClass("input");
		obj.addClass("focus");
		if(DisplayDate.calender){
			DisplayDate.removeCalender();	
		}
	},
	init:function(){
		$$('input.required').each(function(item,index){
			item.removeEvents();
			item.addEvent('blur',function(){this.removeClass("focus"); this.addClass("input");});
			item.addEvent('focus',function(){validate.changeStyles(this);});
		});
		$$('textarea.required').each(function(item,index){
			item.removeEvents();
			item.addEvent('blur',function(){this.removeClass("focus"); this.addClass("input");});
			item.addEvent('focus',function(){validate.changeStyles(this);});							   
		});
		$$('select.required').each(function(item,index){
			item.removeEvents();
			item.addEvent('blur',function(){this.removeClass("focus"); this.addClass("input");});
			item.addEvent('focus',function(){validate.changeStyles(this);});							   
		});
		$$('input.integer').each(function(item,index){
			item.removeEvents('keyup');
			item.removeEvents('keydown');
			item.addEvent('keyup',function(event){validate.integer(this);});
			item.addEvent('blur',function(){validate.integer(this);});
			item.addEvent('keydown',function(event){
				var ev = new Event(event); 
				if((ev.code < 48 || ev.code > 57)
				&& (ev.code < 96 || ev.code > 105)
				&& (ev.code < 37 || ev.code > 40)
				&& ev.code != 46
				&& ev.code != 8
				&& ev.code != 9
				&& ev.code != 13){ 
						ev.stop();
					}
			});
		});
		$$('input.decimal').each(function(item,index){
			item.removeEvents('keyup');
			item.removeEvents('keydown');
			item.addEvent('keyup',function(){validate.decimal(this);});
			item.addEvent('blur',function(){validate.decimal(this);});
			item.addEvent('keydown',function(event){
				var ev = new Event(event); 
				if((ev.code < 48 || ev.code > 57)
				&& (ev.code < 96 || ev.code > 105)
				&& (ev.code < 37 || ev.code > 40)
				&& ev.code != 46
				&& ev.code != 8
				&& ev.code != 9
				&& ev.code != 90
				&& ev.code != 13){ 
						ev.stop();
					}
			});
		});
		$$('input.credit').each(function(item,index){
			item.removeEvents('keyup');
			item.removeEvents('keydown');
			item.addEvent('keyup',function(){validate.integer(this);});
			item.addEvent('keydown',function(event){var ev = new Event(event); if(ev.code=="32"){ ev.stop();}});
		});
		$$('input.email').each(function(item,index){
			item.removeEvents('keydown');
			item.addEvent('keydown',function(event){var ev = new Event(event); if(ev.code=="32"){ ev.stop();}});
		});
		$$('textarea.required').each(function(item,index){
			item.removeEvents('keydown');
			var option=item.title.split(',');
			if($defined(option[2])){
				item.addEvent('keydown',function(event){							 
					var ev = new Event(event);
					if(this.value.length>=option[2] && (ev.code!=37 && ev.code!=38 && ev.code!=39 && ev.code!=40 && ev.code!=8)){
						ev.stop();
						if($defined($(this.name))){
							return false;
						}
						var elem=new Element('span',{'class':'validateError','id':this.name});
						$(elem).setOpacity(0);
						if($defined(option[1])){
							switch(option[1]){
								case"after":
									$(elem).innerHTML="You cannot enter more than "+option[2]+" characters";
									$(elem).injectAfter($(this));
									var myFx=new Fx.Tween($(elem)).start('opacity',1);
									break;
								case"before":
									$(elem).innerHTML="You cannot enter more than "+option[2]+" characters";
									$(elem).injectBefore($(this));
									$(elem).style.position="relative";
									var myFx=new Fx.Tween($(elem)).start('opacity',1);
									break;
							}
						}else{
							alert("You cannot enter more than "+option[2]+" characters");
						}
					}
				});
			}
		});

		$$('form.required').each(function(item,index){
			item.removeEvents('submit');
			item.removeEvents('reset');
			item.addEvent('submit',function(event){if(!validate.forms(this)){event=new Event(event).stop();}});
			item.addEvent('reset',function(){
				var displayError=$(this).getElement('input[name=errorout]');
				if($defined($(displayError))){
					$(displayError.value).set("html","");
					$(displayError.value).set('class','hide');	
				}
				$(this).getElements('.error').each(function(item,index){
					$(item).removeClass("error");
					$(item).addClass("input");
				});
				$(this).getElements('.validateError').each(function(item,index){
					$(item).destroy();
				});
			});
		});
			$$('.button').each(function(item,index){
				item.removeEvents();
				item.addEvent('mouseenter',function(){
					this.removeClass("button");
					this.removeClass("buttonDwn");
					this.addClass("buttonOvr");
				});
				item.addEvent('mousedown',function(){
					this.removeClass("button");
					this.removeClass("buttonOvr");
					this.addClass("buttonDwn");
				});
				item.addEvent('mouseup',function(){
					this.removeClass("buttonDwn");
					this.removeClass("buttonOvr");
					this.addClass("button");
				});
				item.addEvent('mouseleave',function(){
					this.removeClass("buttonDwn");
					this.removeClass("buttonOvr");
					this.addClass("button");
				});
			});
		},
		checkEmailAddr:function(objText){
			var emailAddress=escape(objText.value);
			if(emailAddress.indexOf('%20')!=-1||emailAddress.indexOf('@')==-1||emailAddress.indexOf('.')==-1){
				return false;
			}
			return true;
		},
		checkCreditNumber:function(objText){
			var checksum=0;
			var validVisa=new RegExp(/^(4\d{3}\d{4}\d{4}\d{4})|(4\d{3}\d{4}\d{4}\d{1})$/);
			var validDinersMaster=new RegExp(/^(5[1-5]\d{2}\d{4}\d{4}\d{4})|(3[0,6,8]\d{2}\d{4}\d{4}\d{2})$/);
			var validAmexDiscover=new RegExp(/^(3[4,7]\d{2}\d{4}\d{4}\d{1})|(6011\d{4}\d{4}\d{4})$/);
			if(validVisa.test(objText.value)==false){
				if(validDinersMaster.test(objText.value)==false){
					if(validAmexDiscover.test(objText.value)==false){
						return false;
					}
				}
			}
			for(var i=(2-(objText.value.length%2));i<=objText.value.length;i+=2){
				checksum+=parseInt(objText.value.charAt(i-1));
			}
			for(var i=(objText.value.length%2)+1;i<objText.value.length;i+=2){
				var digit=parseInt(objText.value.charAt(i-1))*2;
				if(digit<10){
					checksum+=digit;
				}else{
					checksum+=(digit-9);
				}
			}
			if((checksum%10)==0){
				return true;
			}else{
				return false;
			}
		},
		showMessage:function(obj,noError){
			var options;
			if(obj.alt){
				options=obj.alt.split(",");
			}else{
				options=obj.title.split(",");
			}
			var elem=new Element('span',{'class':'validateError','id':obj.name});
			$(elem).setOpacity(0);
			if(noError!="no"){
				$(obj).addClass('error');
				$(obj).removeClass('input');
			}
			if($defined(options[1])){
				switch(options[1]){
					case"after":
						$(elem).innerHTML=options[0];
						$(elem).injectAfter($(obj));
						var myFx=new Fx.Tween($(elem)).start('opacity',1);
						break;
					case"before":
						$(elem).innerHTML=options[0];
						$(elem).injectBefore($(obj));
						$(elem).style.position="relative";
						var myFx=new Fx.Tween($(elem)).start('opacity',1);
						break;
					default:
						if($defined(options[0])){
							return options[0]+"<br />";
						}
				}
				return "";
			}else{
				return options[0]+"<br />";
			}
		},
		forms:function(objForm){
			var self=validate;
			var displayError,requestType,outputResult,formElements;
			var errorMessage="";
			var isFormValid=true;
			requestType=$(objForm).getElement('input[name=ajax]');
			displayError=$(objForm).getElement('input[name=errorout]');
			outputResult=$(objForm).getElement('input[name=output]');
			formElements=$(objForm).getElements('input.required');
			requestType=(requestType)?requestType.value:null;
			displayError=(displayError)?displayError.value:null;
			outputResult=(outputResult)?outputResult.value:null;
			if(displayError != "" && displayError != null && $defined($(displayError))){
				$(displayError).addClass("hide");
			}
			$(objForm).getElements('.validateError').each(function(item,index){item.destroy();});
			var radioGroup=Array();var isTrue=Array();
			$(objForm).getElements("select.required").each(function(item,index){
				$(item).removeClass("error");
				$(item).addClass("select");
				if(item.value==""){
					if(item.title!=""){
						errorMessage+=validate.showMessage(item);
					}else{
						errorMessage+="Please Select an Option From: "+item.name+"<br />";
					}
					$(item).addClass("error");
					$(item).removeClass("select");
					isFormValid=false;
				}
			});
			$(objForm).getElements("textarea.required").each(function(item,index){
				$(item).addClass("select");
				$(item).removeClass("error");
				if($defined(item.value)){
					if(item.value.length<3){
						if($defined(item.title)&&item.title!=""){
							errorMessage+=validate.showMessage(item);
						}else{
							errorMessage+="Please Fill in: "+item.name+"<br />";
							$(item).addClass("error");$(item).removeClass("select");
						}
						isFormValid=false;
					}
				}
			});
			$(objForm).getElements("input.required").each(function(item,index){
				$(item).removeClass("error");
				$(item).addClass("input");
				var option = item.alt.split(',');
				if(item.hasClass('minlen') && !isNaN(option[2]) && item.value != ""){
					var itemname = item.name.split('_');
					var cleanName = "";
					itemname.each(function(item,index){
						if(cleanName != ""){
							cleanName += " ";
						}
						cleanName += item;				   
					});
					if(item.value.length < parseInt(option[2])){
						isFormValid=false;
						$(item).addClass("error");
						$(item).removeClass("input");
						var elem=new Element('span',{'class':'validateError','id':item.name});
						$(elem).setOpacity(0);
						if($defined(option[1])){
							switch(option[1]){
								case"after":
									$(elem).innerHTML="Too few letters for: " + cleanName + ", it must be "+ option[2] +" letters or more";
									$(elem).injectAfter($(item));
									var myFx=new Fx.Tween($(elem)).start('opacity',1);
									break;
								case"before":
									$(elem).innerHTML="Too few letters for: " + cleanName + ", it must be "+ option[2] +" letters or more";
									$(elem).injectBefore($(item));
									$(elem).style.position="relative";
									var myFx=new Fx.Tween($(elem)).start('opacity',1);
									break;
								default:
									errorMessage+= "Too few letters for: " + cleanName + ", it must be "+ option[2] +" letters or more<br />";
							}
						}else{
							errorMessage+= "Too few letters for: " + cleanName + ", it must be "+ option[2] +" letters or more<br />";
						}
					}
				}
				if(item.value.trim()==""		&&
				   !$(item).hasClass("email")	&&
				   !$(item).hasClass("credit")	&&
				   !$(item).hasClass("search")	&&
				   $(item).type!="checkbox"		&&
				   !$(item).hasClass("group")){
					if($defined(item.alt)&&item.alt!=""){
						errorMessage+=validate.showMessage(item);
					}else{
						errorMessage+="Please Fill in: "+item.name+"<br />";
						$(item).addClass("error");
						$(item).removeClass("input");
					}
					isFormValid=false;
				}
				if($(item).hasClass("search")){
					if(item.value.length<2){
						if($defined(item.alt)&&item.alt!=""){
							errorMessage+=validate.showMessage(item);
						}else{
							errorMessage+="Search Critera Needed For: "+item.name+"<br />";
							$(item).addClass("error");
							$(item).removeClass("input");
						}
					}
					isFormValid=false;
				}
				if($(item).type=="checkbox"){
					if(!item.checked){
						if($defined(item.alt)&&item.alt!=""){
							errorMessage+=validate.showMessage(item);
						}else{
							errorMessage+="You must Accept the Option of: "+item.name+"<br />";
							$(item).addClass("error");
							$(item).removeClass("input");
						}
						isFormValid=false;
					}
				}
				if($(item).hasClass("email")){
					if(!validate.checkEmailAddr(item)){
						if($defined(item.alt)&&item.alt!=""){
							errorMessage+=validate.showMessage(item);
						}else{
							errorMessage+="Please check the Email address in: "+item.name+"<br />";
							$(item).addClass("error");
							$(item).removeClass("input");
						}
						isFormValid=false;
					}
				}
				if($(item).hasClass("credit")){
					if(!validate.checkCreditNumber(item)){
						if($defined(item.alt)&&item.alt!=""){
							errorMessage+=validate.showMessage(item);
						}else{
							errorMessage+="Please check the Card Number for: "+item.name+"<br />";
							$(item).addClass("error");
							$(item).removeClass("input");
						}
						isFormValid=false;
					}
				}
			});
			var allRadioGroups=$(objForm).getElements("input[type=radio]");
			var tmp=Array();
			var currentRadio="";
			allRadioGroups.each(function(item,index){
				$(objForm).getElements('input[name='+item.name+']').each(function(singleGroup){
					if(singleGroup.getProperty('checked')){
						tmp[item.name]=true;
					}
				});
				if(tmp[item.name]!=true&&item.name!=currentRadio){
					if(item.alt!=""){
						errorMessage+=validate.showMessage(item,"no");
					}else{
						errorMessage+="Please select an option for: "+item.name+"<br />";
					}
					isFormValid=false;
					currentRadio=item.name;
				}
			});
			if(isFormValid&&(requestType=="ajax"||requestType=="json"||requestType=='extra')){
				if(requestType=='extra'){
					try{
						var tmp=$(objForm).getElement('input[name=extra]');
						tmp=tmp.value;tmp=eval(tmp);tmp(objForm);
					}catch(e){}
					$(objForm).reset();
					return false;
				}
				if($defined(validate.ajax[objForm])){
					validate.ajax[objForm].cancel();
					validate.ajax[objForm]=null;
				}
				if(requestType=="json"){
					var tempForm=objForm;
					validate.greyForm(tempForm);
					var useAjax=$(tempForm).getElement('input[name=ajax]');
					useAjax.value="usingJson";
					validate.ajax[objForm] = new Request.JSON({
						url:objForm.action,
						method:(objForm.method)?objForm.method:"post",
						onSuccess:function(res){
							validate.restoreForm(tempForm.id);
							useAjax.value="json";
							var tmp=$(tempForm).getElement('input[name=extra]');
							tmp=tmp.value;
							tmp=eval(tmp);
							tmp(res);
							validate.updateFormHiders();
						},
						onFailure:function(){
							if(validate.unloading==false){
								useAjax.value="json";
								validate.restoreForm(tempForm.id);
								alert("Im Sorry, I could not send The Information");
							}
						},
						onException:function(){
							if(validate.unloading==false){
								useAjax.value="json";
								validate.restoreForm(tempForm.id);
								alert("Im Sorry, I could not send The Information");
							}
						}
					}).post(objForm);
					return false;
				}
				if(requestType=="ajax"){
					var tempForm=objForm;
					var showResult=outputResult;
					var useAjax=$(tempForm).getElement('input[name=ajax]');
					var noAlert=$(tempForm).getElement('input[name=noalert]');
					var noHide=$(tempForm).getElement('input[name=nohide]');
					if(!$defined(noHide)){
						noHide=true;validate.greyForm(tempForm);
					}else{
						noHide=false;
					}
					if(!$defined(noAlert)){
						noAlert=true;
					}else{
						noAlert=false;
					}
					useAjax.value="usingAjax";
					validate.ajax[objForm] = new Request.HTML({
						url:objForm.action,
						method:(objForm.method)?objForm.method:"post",
						onSuccess:function(response,elements,html,scripts){
							if(noHide){
								validate.restoreForm(tempForm.id);
							}
							useAjax.value="ajax";
							if($type($(showResult))=='element'){
								$(showResult).set("html",html);
								try{validate.init();}catch(e){}
								try{editInPlace.init();}catch(e){}
								try{displayPopUp.init();}catch(e){}
								try{DisplayDate.init();}catch(e){}
								try{
									$(showResult).getElements('input[type=file]').each(function(item,index){
										var newup = new uploader(item);
										uploaders.push(newup);				// Add uploader to the upload array								  
									});
								}catch(e){}
							}else{
								if(noAlert){
									alert(html);
								}
							}
							validate.updateFormHiders();
						},
						onFailure:function(){
							useAjax.value="ajax";
							if(validate.unloading==false){
								validate.restoreForm(tempForm.id);
								alert("Im sorry, I could not complete your request");
							}
						},
						onException:function(){
							if(validate.unloading==false){
								useAjax.value="ajax";
								validate.restoreForm(tempForm.id);
								alert("Im Sorry, I could not send The Information");
							}
						}
					}).post($(objForm));
					return false;
				}
			}
			if (!isFormValid && errorMessage != '') {
				if($defined($(displayError))) {
					$(displayError).removeClass("hide");
					$(displayError).addClass("error");
					$(displayError).set("html", errorMessage);
					validate.updateFormHiders();
				}
				else {
					var trimmed = errorMessage.replace(/<br \/>/g, '');
					trimmed = trimmed.replace(/ /g, '');
					errorMessage = errorMessage.replace(/<br \/>/g, '\r\n');
					if (trimmed.trim() != "") {
						alert(errorMessage);
					}
				}
			}
			return isFormValid;
		},
		greyForm:function(objFormName){
			if(Browser.Engine.trident && Browser.Engine.version < 5){
				$(document.body).getElements('select').each(function(item,index){
					item.fade('out');
				});
			}
			var pos=$(objFormName).getPosition();
			var size=$(objFormName).getSize();
			var formHider=new Element('div',{
				'styles':{
					'top':pos.y+"px",
					'left':pos.x+"px",
					'height':size.y+"px",
					'width':size.x+"px"
				},
				'class':'formHider',
				'id':'formHider'+objFormName.id
			});
			$(formHider).setOpacity(0);
			$(formHider).injectInside($(document.body));
			var FX=new Fx.Tween($(formHider)).start('opacity',0.7);
		},
		restoreForm:function(objID){
			$("formHider"+objID).destroy();
			if(Browser.Engine.trident && Browser.Engine.version < 5){
				$(document.body).getElements('select').each(function(item,index){
					item.fade('in');
				});
			}
		},
		updateFormHiders:function(){
			var pos,size;
			$$('form.required').each(function(item,index){
				if($type($('formHider'+item.id))=='element'){
					pos=$(item).getPosition();
					size=$(item).getSize();
					$('formHider'+item.id).style.left=pos.x+'px';
					$('formHider'+item.id).style.top=pos.y+'px';
					$('formHider'+item.id).style.height=size.y+'px';
					$('formHider'+item.id).style.width=size.x+'px';
				}
			});
		},
		unloader: function(){
			validate.unloading = true;										// Let the AJAX objects check the unload valued
			$$('forms.required').each(function(item,index){
				if(validate.ajax[item]){
					validate.ajax[item].cancel();							// Cancel any open Ajax requests
				}
			});
		}
	};
window.addEvent('domready',validate.init);
window.addEvent('beforeunload',validate.unloader);/* Created by Kevin Dibble 
 * Uses Mootools
 * Add a class of "calender" to input feilds - thats all!!
 * <input name="date" type="text" class="required calender" size="12" />
 */
var DisplayDate={
	textObj:null,
	calender:null,
	format:"d-m-y",
	offset:50,
	calenderLeft:0,
	calenderTop:0,
	fx: null,
	allMonths:Array('January','February','March','April','May','June','July','August','September','October','November','December'),
	theDate:new Date(),
	selectedDate:this.theDate,
	displayCalender:function(ev,callingElement){
		DisplayDate.removeCalender();
		DisplayDate.textObj=callingElement;
		if(DisplayDate.textObj.value!=""){			// If the date feild has a date - set the calender to it
			var initialDate=DisplayDate.textObj.value.split('-');
			if (!isNaN(initialDate[1]) && !isNaN(initialDate[1])) {
				DisplayDate.setInitialDate(initialDate[1], initialDate[2]);
			}
		}
		var pos = callingElement.getPosition();
		var size = callingElement.getSize();
		DisplayDate.calenderLeft = pos.x;
		DisplayDate.calenderTop  = pos.y;
		if(DisplayDate.calender==null){
			DisplayDate.calender=new Element("div",{
				'styles': {
					'position': "absolute",
					'z-index': 999999,
					'top': (DisplayDate.calenderTop+size.y) + "px",
					'left': DisplayDate.calenderLeft + "px"
				}
			});
			DisplayDate.buildCalender();
		}
	},
	setInitialDate:function(theMonth,theYear){			/* Set the Date for the calender */
		DisplayDate.theDate.setMonth(theMonth-1);
		this.theDate.setYear(theYear);
	},
	buildCalender:function(visible){					/* Build and create the calender for the page */			
		if(Browser.Engine.trident && Browser.Engine.version < 5) {
			$(document.body).getElements('select').each(function(item,index){
				item.fade('out');
			});
		}										
		var DisplayMonth="<table cellpadding='0' cellspacing='0' border='0' class='dateTable'><tr>";
		DisplayMonth+="<td colspan='2' id='calenderPreviousYear'>&lt;&lt;&lt;</td>";
		DisplayMonth+="<td colspan='3'><select id='calenderSelect' class='calSelect'>";
		for(var i=this.theDate.getFullYear()-70;i<this.theDate.getFullYear()+20;i++){
			if(i==this.theDate.getFullYear()){
				DisplayMonth+="<option selected='selected' value='"+i+"'>"+i+"</option>";
			}else{
				DisplayMonth+="<option value='"+i+"'>"+i+"</option>";
			}
		}
		DisplayMonth+="</select></td>";
		DisplayMonth+="<td colspan='2' id='calenderYearAdvance'>&gt;&gt;&gt;</td></tr>";
		DisplayMonth+="<td colspan='2' id='monthPrevious'>&lt;&lt;&lt;</td>";
		DisplayMonth+="<td colspan='3'>"+this.allMonths[this.theDate.getMonth()]+"</td>";
		DisplayMonth+="<td colspan='2' id='monthAdvance'>&gt;&gt;&gt;</td></tr>";
		DisplayMonth+="<tr class='light'><td>S</td><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td></tr><tr>";
		this.theDate.setDate(1);
		var DaysInMonth=32-new Date(this.theDate.getYear(),this.theDate.getMonth(),32).getDate();
		var startfrom=this.theDate.getDay();
		var goTo=DaysInMonth+startfrom+1;DaysInMonth+=startfrom;
		if(DaysInMonth<35)DaysInMonth=34;
		if(DaysInMonth>34)DaysInMonth=41;
		for(var i=0;i<=DaysInMonth;i++){
			if(i%7==0){
				DisplayMonth+="</tr><tr>";
			}
			if(i>startfrom&&i<goTo){
				DisplayMonth+="<td align='center' title='"+(i-startfrom)+"' class='day'>"+(i-startfrom)+"</td>";
			}else{
				DisplayMonth+="<td></td>";
			}
		}
		DisplayMonth+="</tr><tr><td colspan='6'></td><td title='0' id='calenderCloser' class='day'>X</td>";
		DisplayMonth+="</tr></table>";
		$(this.calender).set("html",DisplayMonth);
		if (!visible) {
			$(this.calender).setOpacity(0);
		}
		$(this.calender).injectInside($(document.body));
		var allTDElems = $(this.calender).getElements('.day');
		allTDElems.each(function(item,index){
			item.addEvent('click',function(event){DisplayDate.returnDate(item.title)})
		});
		if (!visible) {
				var fx = new Fx.Tween(this.calender);
				fx.start('opacity',0.8);
		}
		$('calenderSelect').removeEvents();
		$('calenderSelect').addEvent('change',function(event){DisplayDate.setDateYear($('calenderSelect').value);});
		$('calenderYearAdvance').addEvent('click',function(){DisplayDate.setDateYear(DisplayDate.theDate.getFullYear()+1);});
		$('calenderPreviousYear').addEvent('click',function(){DisplayDate.setDateYear(DisplayDate.theDate.getFullYear()-1);});
		$('monthAdvance').addEvent('click',  function(){DisplayDate.setDateMonth((DisplayDate.theDate.getMonth()+1));});
		$('monthPrevious').addEvent('click', function(){DisplayDate.setDateMonth((DisplayDate.theDate.getMonth()-1));});
	},
	removeCalender:function(){				/* Remove the Calender from the page */
		var self = DisplayDate;
		if($defined($('calenderSelect'))){
			$$('td.day',self.calender).each(function(item,index){
				item.removeEvents();
			});
			$('calenderSelect').removeEvents();
			$(self.calender).destroy();
			self.textObj=null;
			self.calender=null;
			if (Browser.Engine.trident && Browser.Engine.version < 5) {
				$(document.body).getElements('select').each(function(item,index){
					item.fade('in');
				});
			}
		}
		if(DisplayDate.fx){
			DisplayDate.fx.cancel();			// Stop hiding animation
		}
	},
	hideCalender:function(){				/* Hide the calender */
		if(DisplayDate.calender!=null){
			DisplayDate.fx = new Fx.Tween(DisplayDate.calender,{onComplete: DisplayDate.removeCalender});
			DisplayDate.fx.start('opacity',0);
		}
	},
	setDateMonth:function(theMonth){		/* Set the Month */
		this.theDate.setMonth(theMonth);
		this.buildCalender(true);			/* Build the Calender to show the new month */
	},
	setDateYear:function(theYear){			/* Set the year */
		this.theDate.setYear(theYear);
		this.buildCalender(true);			/* Build the Calender to show the new year */
	},
	returnDate:function(theDay){			/* Return the Day clicked on */
		if (theDay != 0) {
			this.theDate.setDate(theDay);
			this.textObj.value = this.theDate.getDate() + "-" + (this.theDate.getMonth() + 1) + "-" + this.theDate.getFullYear();
		}	
		this.hideCalender(); 				/* hide the calender */
	},										
	init:function(){
		$$("input.calender").each(function(item,index){
			item.addEvent('click',function(event){
				if(DisplayDate.calender==null){
					DisplayDate.displayCalender(event,item);
				}
			});
			item.addEvent('keydown',function(event){		// Dont allow manual input
				var ev = new Event(event).stop();								 
			});
			item.addEvent('keypress',function(event){
				var ev = new Event(event);
				if(ev.code!=9){
					ev.stop();
				}else{
					if(DisplayDate.calender){
						DisplayDate.removeCalender();
					}
				}
			});
		});
	}
};
window.addEvent('domready', DisplayDate.init);/* Created by Kevin Dibble 
 * Uses Mootools 1.2
 * Expects page elements to be:
 * class "popInPage" must be entered (Supports multiple classes. e.g: class="linkStyle popInPage anotherStyle")
 * href = path to file (absolute or Relative)
 * rel Option 1	= "Caption"   		Enter the text to appear
 * rel Option 2 = "call type"		ajax, json, image, id
 * rel option 3 = "image Libray"    the name to group images by or null
 * rel option 4 = "width"			the desired width
 * rel option 5 = "height"			the desired height
 * 
 * SAMPLE IMAGE LIBRARY CALL
 * <a href="http://localhost/javascript/images/m1.jpg"  rel="Adventure in Paint,image,lib1,400,300" class="popInPage"><img src="../lib/thumbs/m1.jpg" /></a>
 * <a href="../lib/images/m2.jpg" 								rel="Horsey Ride! Horsey Ride,image,lib1,400,300" class="popInPage"><img src="../lib/thumbs/m2.jpg" /></a>
 * 
 * SIMPLE (STANDARD) popup
 * <a href="../lib/page1.php"  								rel="Window Name,ajax,null,400,300" class="simplePop">A simple Link</a>
 * Option 2 can be ajax, json or left empty
 * if it is ajax or json - then it will open inside the page if the user has popup windows blocked
 * if it is nothing - then the popup will not open if the person has popups blocked
 * 
 * SAMPLE PAGE ELEMENT CALL - displays text inside the element to appear
 * <a href="../lib/intent1" rel="Page call,intent1,null,400,300" class="popInPage">PAGE ID CALL</a>
 * 
 * SAMPLE AJAX CALL
 * <a href="../lib/page1.php" rel="Whole Self Journey,ajax,null,500,400" class="popInPage">Page One</a>
 * 
 * AJAX WITH SCRIPT EVALULATED
 * <a href="../lib/json.php" rel="Ajax Call,ajax,eval" class="popInPage">ajax Request - with script eval</a>
 * 
 * SAMPLE JSON CALL
 * <a href="http://localhost/javascript/json.php" title="json" class="popInPage">JSON Request - No JSON Object</a>
 * Script must be in the page between <script> </script> tags
 * 
 * JSON CALL WITH CUSTOM FUNCTION TO HANDLE JSON RESULT
 * <a href="../lib/getChat.php" rel="Json Call,json,<function name>" class="popInPage">JSON Request - Returns a JSON object</a>
 * function must accept a single obj function(obj){}
 */
var displayPopUp={
	imagePreloader: null,
	imageLibrary:	"",
	caption: 		null,
	URL: 			null,
	callType:		null,
	scripts : 		null,			// the scripts called back from the ajax page to eval
	width:			300,			// The default width
	height:			200,			// The Default height
	contentTop:		0,				// The default location for the top
	contentLeft:	0,				// The default location for the left
	hideBG:			null,			// The background hider
	bodyWidth:		null,
	bodyHeight:		null,
	content: 		null,
	popTop: 		null,
	popTopClose: 	null,
	theWindow:		null,
	popImageNav:	null,
	popImage:		null,
	imageNum:		null,
	direction:		"next",
	fxMoveTop:		null,
	fxMoveLeft: 	null,
	ajax:			null,
	jsonResult:		null,
	jsonFunction:	null,
	canMove: 		true,
	isAdmin:		false,
	reset: function(){
		$$('a.popInPage').each(function(item,index){
			$(item).removeEvents('click');
		});
		$$("a.simplePop").each(function(item,index){
			$(item).removeEvents('click');
		});
	},
	init: function(){
		var self = displayPopUp;
		self.reset();
		self.imagePreloader = Array();						// Create the preloader Array
		$$('.popInPage').each(function(item,index){		// GET ALL ANCHOR TAGS
			item.addEvent('click',function(event){
				event = new Event(event).stop();			// CANCEL ON CLICK EVENT
				displayPopUp.showPopUp(item);
			});
			var tmp = $(item).get("rel");
			if(tmp.contains("#")){
				tmp = tmp.split("#");	
			}else{
				tmp = tmp.split(",");					// Split the REL Tag
			}
			if(tmp[1]=="image"){							// Create the image preloader
				var details = Array();
				details['image'] 	 = new Asset.image(item.href,{id:'thePopImage'}); // Pre-Load Image
				details['obj'] 		 = $(item).get("rel");			// Save image options
				if(!$defined(displayPopUp.imagePreloader[tmp[2]])){
					displayPopUp.imagePreloader[tmp[2]] = Array();
				}
				displayPopUp.imagePreloader[tmp[2]].push(details); // Save image library
			}
		});
		$$("a.simplePop").each(function(item,index){
			item.addEvent('click',function(event){
				event = new Event(event).stop();			// CANCEL ON CLICK EVENT
				displayPopUp.simplePop(item);
			});
		});
	},
	showPopUp: function(obj){								// Show POP Function
		var self 			= displayPopUp;
		var objValues 		= $(obj).get("rel");
		if(objValues.contains("#")){
			 objValues = objValues.split("#");	
		}else{
			objValues = objValues.split(",");					// Split the REL Tag
		}
		self.URL			= obj.href;
		self.caption		= objValues[0] 	|| "Window";
		self.callType		= objValues[1]	|| "ajax";
		self.imageLibrary 	= objValues[2]	|| null;
		self.width			= (objValues[3])?	objValues[3] : self.width;  
		self.height 		= (objValues[4])?	objValues[4] : self.height; // Height = 300;
		self.isAdmin		= (objValues[5])?	false : true;
		self.hideBackground(); 	
	},
	simplePop: function(obj){								// DO Simple Popup Function
		var self		= displayPopUp;
		var options 	= $(obj).get("rel").split(",");
		self.url 		= obj.href;
		var thisName 	= options[1]	|| "popup";
		var thisWidth	= options[3]	|| self.width;
		var thisHeight 	= options[4] 	|| self.height;
		var windowSize 	= window.getSize();
		var left		= (windowSize.x/2)-(thisWidth/2);
		var top 		= (windowSize.y/2)-(thisHeight/2);
		if($defined(self.theWindow)){
			try{self.theWindow.close();}catch(e){}
			self.theWindow = null;
		}
		try{
			self.theWindow = window.open(self.url, thisName, "left = "+left+", top = "+top +", status = 0, height = "+parseInt(thisHeight)+", width = "+ parseInt(thisWidth) +", resizable = 0, scrollbars = 1");
			self.theWindow.focus();
		}catch(e){
			if (options[2] == "ajax" || options[2] == "json") {
				self.showPopUp(obj);
			}else{
				alert("Please Enable popups in your browser");
			}
		}	
	},
	getSize: function(){
		var self 			= displayPopUp;
		var windowSize 		= window.getSize();
		var scrollSize		= window.getScroll();
		var bodySize 		= $(document.body).getSize();
		var bodyScroll		= $(document.body).getScrollSize();
		self.contentLeft 	= ((windowSize.x)/2) - (self.width/2) + scrollSize.x;
		self.contentTop 	= (windowSize.y/2)-(self.height/2) + scrollSize.y;
		self.bodyWidth 		= (bodyScroll.x);
		self.bodyHeight 	= (bodyScroll.y);
	},
	hideBackground: function(){
		var self 			= displayPopUp;
		self.getSize();
		
		// hide select Boxes
		try{
			if(Browser.Engine.trident && Browser.Engine.version < 5) {
				$(document.body).getElements('select').each(function(item,index){
					item.style.display = "none";
				});
			}
		}catch(e){}
		// hide image loader
		try{
			$$('.uploaderWrapper').each(function(item,index){
				item.style.display = "none";									 
			});
		}catch(e){}
		if (self.hideBG == null) {
			self.hideBG = new Element('div', {
				'styles': {	'top'	: "0px", 
							'left'	: "0px",
							'height': self.bodyHeight 	+ "px",
							'width'	: self.bodyWidth 	+ "px"},
				'class': 'hideBG',
				'id': 'hideBG'
			});
			self.hideBG.setOpacity(0.9);
			$(self.hideBG).injectInside($(document.body));
			window.addEvent('resize', displayPopUp.resize);
			window.addEvent('scroll', displayPopUp.resize);
			$$('select').each(function(item,index){
				item.setOpacity(0);
			});
			var myFx = new Fx.Tween('hideBG',{onComplete: function(){
				displayPopUp.displayContent();
			}}).start('opacity',0.9);
		}else{
			if(self.callType =="ajax" || self.callType=="json"){
				self.closeContent();
				self.displayContent();
			}
		}
	},
	resize: function(fx){									// resize function - to control the moving functions
		var self=displayPopUp;							// It is possible to add a delay to this call here
		if (self.hideBG != null){
			if (self.canMove == true) {
				self.moveit();
			}
		}
	},
	moveit: function(){									// Function to move the popup to the middle of the page
		var self 	= displayPopUp;
		if(self.isAdmin){
			self.getSize();									// Get the new size of the document
			displayPopUp.canMove = false;
			if(self.contentTop < 0){
				self.contentTop = 0;
			}
			if(self.contentLeft < 0){
				self.contentLeft = 0;
			}
			self.hideBG.style.height=self.bodyHeight + "px";
			self.hideBG.style.width=self.bodyWidth + "px";
			var top =0;
			var left = 0;
			if(self.height < self.bodyHeight){
				top = self.contentTop;
			}
			if(self.width < self.bodyWidth){
				left = self.contentLeft;
			}
			if(self.fxMoveLeft){
				self.fxMoveLeft.cancel();	
			}
			self.fxMoveLeft = new Fx.Morph(self.content,{duration: 'long',onComplete: function(){
				displayPopUp.canMove = true;
				displayPopUp.resize();
			}});
			self.fxMoveLeft.start({
				'left': left,
				'top' : top
			});
		}
	},
	closeContent: function(){
		var self = displayPopUp;
			if (self.callType == "image") {
				$(self.popImage).destroy();
				$(self.popImageNav).destroy();
			}else {
				$(self.popText).destroy();
			}
			$(self.popTopClose).removeEvent('click', displayPopUp.popupClose);
			$(self.popTopClose).removeEvent('mouseover', function(){
				this.className = "popOver";
			});
			$(self.popTopClose).removeEvent('mousedown', function(){
				this.className = "popDown";
			});
			$(self.popTopClose).removeEvent('mouseout', function(){
				this.className = "popClose";
			});
			$(self.popTopClose).destroy();
			$(self.popTop).destroy();
			$(self.content).destroy();
			self.content 	= null;
			self.popImage 	= null;
			self.popText 	= null;
			self.popTop 	= null;
			self.popBtm 	= null;
			self.popTopClose= null;
	},
	displayContent: function(){							// Function to display the popup content for the page
		var self = displayPopUp;
		var temp = "";
		self.content = new Element('div', {
				'id': "popContent",
				'class': "popContent",
				'styles': {
					'position': "absolute",
					'top': self.contentTop + "px",
					'left': self.contentLeft + "px",
					'height': "0px",
					'width': "0px"
				}
			});
			self.popTop = new Element('div', {
				'id': "popTop",
				'class': "popTop"
			});
			var theText = self.caption.split(';');
			var popInner = new Element('div', {
				'id': "popCaption",
				'class': "popCaption",
				'html' : theText[0]
			});
			self.popTopClose = new Element('div', {
				'id': "popClose",
				'class': "popClose",
				'html' : "close"
			});
			$(popInner).injectInside(self.popTop);
			$(self.popTopClose).addEvent('click', displayPopUp.popupClose);
			$(self.popTopClose).addEvent('mouseover', function(){
				this.className = "popOver";
			});
			$(self.popTopClose).addEvent('mousedown', function(){
				this.className = "popDown";
			});
			$(self.popTopClose).addEvent('mouseout', function(){
				this.className = "popClose";
			});
			$(self.content).setOpacity(0);
			$(self.content).injectInside($(document.body));
			$(self.popTop).injectInside(self.content);
			$(self.popTopClose).injectInside(self.popTop);
			var adjustedHeight = false;
			var imageSrc = "";
			if (self.callType == "image") {
				if ($defined(self.imagePreloader[self.imageLibrary])) {
					var tempArray = self.imagePreloader[self.imageLibrary];
					tempArray.each(function(item, index){
						if (item.image.src == self.URL) {
							self.imageNum = index;
						}
					});
					self.popImageNav = new Element('div', {
						'class': "popImageNavContainer",
						'id': "popImageNavContainer",
						'html' : "<div id='popImageNum' class='popImageNum'>Image " +(self.imageNum + 1) +" of " +
								self.imagePreloader[self.imageLibrary].length +
								"</div><div class='popImageNav' id='popImageNav'>" +
								"<a href='javascript: void(0)' id='popImageBack' class='popImageBack'" +
								" title='" + self.imageArrayName + "'>Back</a>" +
								" | <a href='javascript: void(0);' id='popImageNext' class='popImageNext' title='" +
								self.imageLibrary + "'>Next</a></div>"
					});	
					imageSrc = self.imagePreloader[self.imageLibrary][self.imageNum]['image'].src;
				}else{
					self.popImageNav = new Element('div');
					imageSrc = self.URL;
					adjustedHeight = true;
				}
				self.popImage = new Element('div', {
					'class': "popImage",
					'id': "popImage",
					'styles': {
						'height': 'auto',
						'width':  parseInt(self.width)  + "px",
						'text-align': 'center'
					}
				});
				var imageCenterTrick = "<table border='0' cellpadding='0' cellspacing='0' width='100%'>" +
				"<tr><td align='center' valign='top' id='popImageContainer'><img src='" +
				imageSrc +
				"' alt='" +
				self.caption +
				"' border='0' class='thePopImage' id='thePopImage'/></td></tr>" +
				" <tr><td class='popTextArea' id='popTextArea'>"+ theText[1]  +"</td></tr>" +
				"</table>";
				$(self.popImage).innerHTML = imageCenterTrick;
				$(self.popImageNav).injectInside(self.content);
				$(self.popImage).injectInside(self.content);
				try{
					$('popImageBack').addEvent('click', function(){
						displayPopUp.swapImage("back");
					});
					$('popImageNext').addEvent('click', function(){
						displayPopUp.swapImage("next");
					});
				}catch(e){}
				var height = parseInt(self.height) + $(self.popTop).getSize().y + $('popTextArea').getSize().y;
				if(Browser.Engine.trident){				 // If Is IE
					if(adjustedHeight){
						self.height = parseInt(height) + 8;
					}else{
						self.height = parseInt(height) + 20;
					}
				}
				self.width = parseInt(self.width) + 14;
				if(adjustedHeight){
					self.height = parseInt(height) + 14;
				}else{
					self.height = parseInt(height) + 36;
				}
			}else {
				var height = $(self.popTop).getSize().y;
				if(Browser.Engine.trident){				 // If Is IE
					height =  20;
				}
				self.popText = new Element('div', {
					'id': "popText",
					'class': "popText popAnimation",
					'styles': {
						'width': (self.width - 14),
						'height': (self.height - height - 14)
					}
				});
				if (self.callType != "ajax" && self.callType != "json") {
					if ($defined($(self.callType))){						
						var clone = $(self.callType).clone();   // Get all the elements
						$(clone).injectInside(self.popText);
						$(clone).removeClass("hide");
					}
					$(self.popText).className="popText"; 
				}else {
					if (self.callType == "json") {
						if (self.imageLibrary != null) {
							try{
								self.jsonFunction = eval(self.imageLibrary);
							}catch(e){}
						}
						self.Ajax = new Request.JSON({
							onSuccess: function(response){
								displayPopUp.showJsonResult(response);
								$(displayPopUp.popText).className = "popText"; // Remove Animation Effect
							},
							onFailure: function(){
								$(displayPopUp.popText).className = "popText"; // Remove Animation Effect
								$(displayPopUp.popText).removeEvents();
								var ElmResponse = new Element("div",{
										"id": "ajaxResponseHTML",
										"html" : "Json Call Failed",
										"class" : "error"
									});
								$(ElmResponse).injectInside($(displayPopUp.popText));
							},
							onException : function(){
								$(displayPopUp.popText).className = "popText"; // Remove Animation Effect
								var ElmResponse = new Element("div",{
										"id": "ajaxResponseHTML",
										"html" : "Sorry - An Exception has occured",
										"class" : "error"
									});
								$(ElmResponse).injectInside($(displayPopUp.popText));
							}
						}).get(self.URL);
					}
					if (self.callType == 'ajax') {
						self.Ajax = new Request.HTML({
							onSuccess: function(response,elements,html,scripts){
								displayPopUp.showAjaxResult(response,elements,html,scripts);
							},
							onFailure: function(){
								$(displayPopUp.popText).className = "popText"; // Remove Animation Effect
								var ElmResponse = new Element("div",{
										"id": "ajaxResponseHTML",
										"html" : "Sorry, The Request has failed. Please Try Again Later",
										"class" : "error"
									});
								$(ElmResponse).injectInside($(displayPopUp.popText));
							},
							onException : function(){
								$(displayPopUp.popText).className = "popText"; // Remove Animation Effect
								var ElmResponse = new Element("div",{
										"id": "ajaxResponseHTML",
										"html" : "Sorry, An Exception has occured for the request",
										"class" : "error"
									});
								$(ElmResponse).injectInside($(displayPopUp.popText));
							},
							evalScripts: false
						}).get(self.URL);
					}
				}
			}
			self.getSize();
			self.moveit();
			var fxOpen = new Fx.Morph('popContent',{onComplete: function(){
				if($defined(self.popText)){
					$(self.popText).injectInside(self.content);
				}
			}});
			fxOpen.start({
				'opacity':1,
				'height': displayPopUp.height + "px",
				'width':  displayPopUp.width + "px"});	
	},
	showJsonResult: function(response){
		var self = displayPopUp;
		$(self.popText).className = "popText";
		if (self.jsonFunction != null) {
			self.jsonFunction(response);
		}
	},
	showAjaxResult: function(response,elements,html,scripts){
		var self = displayPopUp;
		if($(self.popText)){
			$(self.popText).removeEvents();
			var ElmResponse = new Element("div",{
						"id": "ajaxResponseHTML",
						"html" : html
					});
			$(ElmResponse).setOpacity(0);
			$(ElmResponse).injectInside($(self.popText));
		}
		displayPopUp.scripts = scripts;
		displayPopUp.evalScripts.delay(1000); 
	},
	evalScripts: function(){
		try{
			eval(displayPopUp.scripts);
		}catch(e){}
		try{validate.init();}catch(e){}
		try{editInPlace.init();}catch(e){}
		try{displayPopUp.init();}catch(e){}
		try{DisplayDate.init();}catch(e){}
		if(displayPopUp.popText){
			$(displayPopUp.popText).removeClass("popAnimation");
			var myFx= new Fx.Tween($('ajaxResponseHTML'));
			myFx.start('opacity',1);
		}
		try{
			$(displayPopUp.popText).getElements('input[type=file]').each(function(item,index){
				var newup = new uploader(item);
				uploaders.push(newup);								// Add uploader to the upload array								  
			});
		}catch(e){}
	},
	swapImage: function(direction){
		var self 		= displayPopUp;
		var nextImage 	= (direction=="next")? self.imageNum+1 : self.imageNum-1;
		if(!$defined(self.imagePreloader[self.imageLibrary][nextImage])){
			if(nextImage > 0){
				nextImage = 0;
			}else{
				nextImage = self.imagePreloader[self.imageLibrary].length -1;
			}
		}
		self.imageNum 	= nextImage;
		var values		= self.imagePreloader[self.imageLibrary][self.imageNum]['obj'];//.split(",");
		if(values.contains("#")){
			values= values.split("#");	
		}else{
			values= values.split(",");					// Split the REL Tag
		}
		self.width		= (parseInt(values[3])>0)?parseInt(values[3]): self.width;
		self.height 	= (parseInt(values[4])>0)?parseInt(values[4]): self.height;
		self.width		= self.width + 14;
		var theText 	= values[0].split(';');
		$('popCaption').set("html",theText[0]);
		//$('popTextArea').set("html",theText[1]);
		self.fadeout(theText[1]);
	},
	fadeout: function(tmpText){
		var fx = new Fx.Tween('popImage',{duration: 'short', onComplete: function(){
				if($(displayPopUp.content)){
					var self 	  = displayPopUp;
					$('popImageNum').innerHTML = "Image " + ((self.imageNum+1)+" of "+self.imagePreloader[self.imageLibrary].length);
					$('thePopImage').destroy();																								// Removes the image								
					$(self.imagePreloader[self.imageLibrary][self.imageNum]['image']).injectInside($('popImageContainer'));				// Inserts the new image
					$('popTextArea').set("html",tmpText);																					// Set the text
					displayPopUp.fadein();
				}
			}
		}).start('opacity',0);
	},
	fadein: function(){
		var self 	  = displayPopUp;
		var durationnum = 1500;
		var height = self.height;
		if($('popTextArea')){
			height += 2.5 * parseInt($('popTextArea').getSize().y);
		}
		if($(self.content)){
			if($(self.content).getSize().x > (self.width-10) && $(self.content).getSize().y > (self.height-10) && $(self.content).getSize().x < (self.width+10)){
				durationnum = 'short';
			}
			var sizeFx = new Fx.Morph($(self.content),{duration: durationnum,onComplete: function(){
					if($(displayPopUp.content)){
						var fx = new Fx.Tween($('popImage'),{duration: 'short'}).start('opacity',1);
					}
				}}).start({
					'width'  : (self.width) + "px",
					'height' : (height)+ "px"
			});
			self.popImage.style.width = (self.width - 14) + "px";
			height = 0;
			if($('popTextArea')){
				height = 2.5 * parseInt($('popTextArea').getSize().y);
			}
			self.popImage.style.height= (self.height - $(self.popTop).getSize().y - 14 - 22) + height +  "px";
			self.getSize();
			self.resize();
		}
	},
	popupClose: function(){
		var self = displayPopUp;
		var fxContent = new Fx.Tween($('popContent')).start('opacity',0);
		var fxBG = new Fx.Tween($('hideBG'),{onComplete: displayPopUp.popupRemove}).start('opacity',0);
		if(self.Ajax){
			self.Ajax.cancel();
		}
	},
	popupRemove: function(){
		var self 	= displayPopUp;
		$(self.hideBG).destroy();
		$$('select').each(function(item,index){
			item.setOpacity(1);
		});
		self.closeContent();
		try{
			if(Browser.Engine.trident && Browser.Engine.version < 5) {
				$(document.body).getElements('select').each(function(item,index){
					item.style.display = "inherit";
				});
			}
		}catch(e){}
		// hide image loader
		try{
			$$('.uploaderWrapper').each(function(item,index){
				item.style.display = "inherit";									 
			});
		}catch(e){}
		self.hideBG		= null;
	},
	unloader: function(){
		if(displayPopUp.Ajax){
			displayPopUp.Ajax.cancel();			// Stop loading requests.	
		}
	}
};
window.addEvent('domready', displayPopUp.init);
window.addEvent('beforeunload',displayPopUp.unloader);var sorter = {
	Ajax: null,
	url : "ajax_pages/sort_pages.php",
	constrain: true,
	clone: true,
	init: function(){
		var sorts = $$(".sortable");
		var mySortables = new Sortables(sorts, {
			onComplete: function(){
				sorter.unloader();
				var order = '';
				mySortables.serialize(false,function(item,index){
					order += $(item).get('rel') +':'+index+'|';			   
				}); 
				sorter.Ajax = new Request.HTML({  
				   	url:sorter.url,  
				   	method:'post',  
				 	autoCancel:true,  
					data:'order=' + order,
					onFailure: function(){
						alert("Sorry, The Sortable List could not be updated at this time\r\nPlease try again later");
					}
				}).send();  
			},
			revert		: true,
			constrain	: sorter.constrain,
			clone		: sorter.clone,
			handle		: 'mover'
		});
	},
	unloader: function(){
		if(sorter.Ajax){
			sorter.Ajax.cancel();			// Stop loading requests.	
		}
	}
}
window.addEvent('domready',sorter.init);
window.addEvent('beforeunload',sorter.unloader);/**
 * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
 *
 * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/
 *
 * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */


/* ******************* */
/* Constructor & Init  */
/* ******************* */

var SWFUpload = function (settings) {
	this.initSWFUpload(settings);
};

SWFUpload.prototype.initSWFUpload = function (settings) {
	try {
		this.customSettings = {};	// A container where developers can place their own settings associated with this instance.
		this.settings = settings;
		this.eventQueue = [];
		this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
		this.movieElement = null;

		// Setup global control tracking
		SWFUpload.instances[this.movieName] = this;

		// Load the settings.  Load the Flash movie.
		this.initSettings();
		this.loadFlash();
		this.displayDebugInfo();
	} catch (ex) {
		delete SWFUpload.instances[this.movieName];
		throw ex;
	}
};

/* *************** */
/* Static Members  */
/* *************** */
SWFUpload.instances = {};
SWFUpload.movieCount = 0;
SWFUpload.version = "2.2.0 Alpha";
SWFUpload.QUEUE_ERROR = {
	QUEUE_LIMIT_EXCEEDED	  		: -100,
	FILE_EXCEEDS_SIZE_LIMIT  		: -110,
	ZERO_BYTE_FILE			  		: -120,
	INVALID_FILETYPE		  		: -130
};
SWFUpload.UPLOAD_ERROR = {
	HTTP_ERROR				  		: -200,
	MISSING_UPLOAD_URL	      		: -210,
	IO_ERROR				  		: -220,
	SECURITY_ERROR			  		: -230,
	UPLOAD_LIMIT_EXCEEDED	  		: -240,
	UPLOAD_FAILED			  		: -250,
	SPECIFIED_FILE_ID_NOT_FOUND		: -260,
	FILE_VALIDATION_FAILED	  		: -270,
	FILE_CANCELLED			  		: -280,
	UPLOAD_STOPPED					: -290
};
SWFUpload.FILE_STATUS = {
	QUEUED		 : -1,
	IN_PROGRESS	 : -2,
	ERROR		 : -3,
	COMPLETE	 : -4,
	CANCELLED	 : -5
};
SWFUpload.BUTTON_ACTION = {
	SELECT_FILE  : -100,
	SELECT_FILES : -110,
	START_UPLOAD : -120
};

/* ******************** */
/* Instance Members  */
/* ******************** */

// Private: initSettings ensures that all the
// settings are set, getting a default value if one was not assigned.
SWFUpload.prototype.initSettings = function () {
	this.ensureDefault = function (settingName, defaultValue) {
		this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName];
	};
	
	// Upload backend settings
	this.ensureDefault("upload_url", "");
	this.ensureDefault("file_post_name", "Filedata");
	this.ensureDefault("post_params", {});
	this.ensureDefault("use_query_string", false);
	this.ensureDefault("requeue_on_error", false);
	
	// File Settings
	this.ensureDefault("file_types", "*.*");
	this.ensureDefault("file_types_description", "All Files");
	this.ensureDefault("file_size_limit", 0);	// Default zero means "unlimited"
	this.ensureDefault("file_upload_limit", 0);
	this.ensureDefault("file_queue_limit", 0);

	// Flash Settings
	this.ensureDefault("flash_url", "swfupload.swf");
	this.ensureDefault("prevent_swf_caching", true);
	
	// Button Settings
	this.ensureDefault("button_image_url", "");
	this.ensureDefault("button_width", 1);
	this.ensureDefault("button_height", 1);
	this.ensureDefault("button_text", "");
	this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;");
	this.ensureDefault("button_text_top_padding", 0);
	this.ensureDefault("button_text_left_padding", 0);
	this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES);
	this.ensureDefault("button_disabled", false);
	this.ensureDefault("button_placeholder_id", null);
	
	// Debug Settings
	this.ensureDefault("debug", false);
	this.settings.debug_enabled = this.settings.debug;	// Here to maintain v2 API
	
	// Event Handlers
	this.settings.return_upload_start_handler = this.returnUploadStart;
	this.ensureDefault("swfupload_loaded_handler", null);
	this.ensureDefault("file_dialog_start_handler", null);
	this.ensureDefault("file_queued_handler", null);
	this.ensureDefault("file_queue_error_handler", null);
	this.ensureDefault("file_dialog_complete_handler", null);
	
	this.ensureDefault("upload_start_handler", null);
	this.ensureDefault("upload_progress_handler", null);
	this.ensureDefault("upload_error_handler", null);
	this.ensureDefault("upload_success_handler", null);
	this.ensureDefault("upload_complete_handler", null);
	
	this.ensureDefault("debug_handler", this.debugMessage);

	this.ensureDefault("custom_settings", {});

	// Other settings
	this.customSettings = this.settings.custom_settings;
	
	// Update the flash url if needed
	if (this.settings.prevent_swf_caching) {
		this.settings.flash_url = this.settings.flash_url + "?swfuploadrnd=" + Math.floor(Math.random() * 999999999);
	}
	
	delete this.ensureDefault;
};

SWFUpload.prototype.loadFlash = function () {
	if (this.settings.button_placeholder_id !== "") {
		this.replaceWithFlash();
	} else {
		this.appendFlash();
	}
};

// Private: appendFlash gets the HTML tag for the Flash
// It then appends the flash to the body
SWFUpload.prototype.appendFlash = function () {
	var targetElement, container;

	// Make sure an element with the ID we are going to use doesn't already exist
	if (document.getElementById(this.movieName) !== null) {
		throw "ID " + this.movieName + " is already in use. The Flash Object could not be added";
	}

	// Get the body tag where we will be adding the flash movie
	targetElement = document.getElementsByTagName("body")[0];

	if (targetElement == undefined) {
		throw "Could not find the 'body' element.";
	}

	// Append the container and load the flash
	container = document.createElement("div");
	container.style.width = "1px";
	container.style.height = "1px";
	container.style.overflow = "hidden";

	targetElement.appendChild(container);
	container.innerHTML = this.getFlashHTML();	// Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
};

// Private: replaceWithFlash replaces the button_placeholder element with the flash movie.
SWFUpload.prototype.replaceWithFlash = function () {
	var targetElement, tempParent;

	// Make sure an element with the ID we are going to use doesn't already exist
	if (document.getElementById(this.movieName) !== null) {
		throw "ID " + this.movieName + " is already in use. The Flash Object could not be added";
	}

	// Get the element where we will be placing the flash movie
	targetElement = document.getElementById(this.settings.button_placeholder_id);

	if (targetElement == undefined) {
		throw "Could not find the placeholder element.";
	}

	// Append the container and load the flash
	tempParent = document.createElement("div");
	tempParent.innerHTML = this.getFlashHTML();	// Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
	targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement);

};

// Private: getFlashHTML generates the object tag needed to embed the flash in to the document
SWFUpload.prototype.getFlashHTML = function () {
	var transparent = this.settings.button_image_url === "" ? true : false;
	
	// Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
	return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
				'<param name="wmode" value="', transparent ? "transparent" : "window", '" />',
				'<param name="movie" value="', this.settings.flash_url, '" />',
				'<param name="quality" value="high" />',
				'<param name="menu" value="false" />',
				'<param name="allowScriptAccess" value="always" />',
				'<param name="flashvars" value="' + this.getFlashVars() + '" />',
				'</object>'].join("");
};

// Private: getFlashVars builds the parameter string that will be passed
// to flash in the flashvars param.
SWFUpload.prototype.getFlashVars = function () {
	// Build a string from the post param object
	var paramString = this.buildParamString();

	// Build the parameter string
	return ["movieName=", encodeURIComponent(this.movieName),
			"&amp;uploadURL=", encodeURIComponent(this.settings.upload_url),
			"&amp;useQueryString=", encodeURIComponent(this.settings.use_query_string),
			"&amp;requeueOnError=", encodeURIComponent(this.settings.requeue_on_error),
			"&amp;params=", encodeURIComponent(paramString),
			"&amp;filePostName=", encodeURIComponent(this.settings.file_post_name),
			"&amp;fileTypes=", encodeURIComponent(this.settings.file_types),
			"&amp;fileTypesDescription=", encodeURIComponent(this.settings.file_types_description),
			"&amp;fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit),
			"&amp;fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit),
			"&amp;fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit),
			"&amp;debugEnabled=", encodeURIComponent(this.settings.debug_enabled),
			"&amp;buttonImageURL=", encodeURIComponent(this.settings.button_image_url),
			"&amp;buttonWidth=", encodeURIComponent(this.settings.button_width),
			"&amp;buttonHeight=", encodeURIComponent(this.settings.button_height),
			"&amp;buttonText=", encodeURIComponent(this.settings.button_text),
			"&amp;buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding),
			"&amp;buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding),
			"&amp;buttonTextStyle=", encodeURIComponent(this.settings.button_text_style),
			"&amp;buttonAction=", encodeURIComponent(this.settings.button_action),
			"&amp;buttonDisabled=", encodeURIComponent(this.settings.button_disabled)
		].join("");
};

// Public: getMovieElement retrieves the DOM reference to the Flash element added by SWFUpload
// The element is cached after the first lookup
SWFUpload.prototype.getMovieElement = function () {
	if (this.movieElement == undefined) {
		this.movieElement = document.getElementById(this.movieName);
	}

	if (this.movieElement === null) {
		throw "Could not find Flash element";
	}
	
	return this.movieElement;
};

// Private: buildParamString takes the name/value pairs in the post_params setting object
// and joins them up in to a string formatted "name=value&amp;name=value"
SWFUpload.prototype.buildParamString = function () {
	var postParams = this.settings.post_params; 
	var paramStringPairs = [];

	if (typeof(postParams) === "object") {
		for (var name in postParams) {
			if (postParams.hasOwnProperty(name)) {
				paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString()));
			}
		}
	}

	return paramStringPairs.join("&amp;");
};

// Public: Used to remove a SWFUpload instance from the page. This method strives to remove
// all references to the SWF, and other objects so memory is properly freed.
// Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state.
SWFUpload.prototype.destroy = function () {
	try {
		// Make sure Flash is done before we try to remove it
		this.stopUpload();
		
		// Remove the SWFUpload DOM nodes
		var movieElement = null;
		try {
			movieElement = this.getMovieElement();
		} catch (ex) {
		}
		
		if (movieElement != undefined && movieElement.parentNode != undefined && typeof movieElement.parentNode.removeChild === "function") {
			var container = movieElement.parentNode;
			if (container != undefined) {
				container.removeChild(movieElement);
				if (container.parentNode != undefined && typeof container.parentNode.removeChild === "function") {
					container.parentNode.removeChild(container);
				}
			}
		}
		
		// Destroy references
		SWFUpload.instances[this.movieName] = null;
		delete SWFUpload.instances[this.movieName];

		delete this.movieElement;
		delete this.settings;
		delete this.customSettings;
		delete this.eventQueue;
		delete this.movieName;
		
		delete window[this.movieName];
		
		return true;
	} catch (ex1) {
		return false;
	}
};

// Public: displayDebugInfo prints out settings and configuration
// information about this SWFUpload instance.
// This function (and any references to it) can be deleted when placing
// SWFUpload in production.
SWFUpload.prototype.displayDebugInfo = function () {
	this.debug(
		[
			"---SWFUpload Instance Info---\n",
			"Version: ", SWFUpload.version, "\n",
			"Movie Name: ", this.movieName, "\n",
			"Settings:\n",
			"\t", "upload_url:               ", this.settings.upload_url, "\n",
			"\t", "flash_url:                ", this.settings.flash_url, "\n",
			"\t", "use_query_string:         ", this.settings.use_query_string.toString(), "\n",
			"\t", "file_post_name:           ", this.settings.file_post_name, "\n",
			"\t", "post_params:              ", this.settings.post_params.toString(), "\n",
			"\t", "file_types:               ", this.settings.file_types, "\n",
			"\t", "file_types_description:   ", this.settings.file_types_description, "\n",
			"\t", "file_size_limit:          ", this.settings.file_size_limit, "\n",
			"\t", "file_upload_limit:        ", this.settings.file_upload_limit, "\n",
			"\t", "file_queue_limit:         ", this.settings.file_queue_limit, "\n",
			"\t", "debug:                    ", this.settings.debug.toString(), "\n",

			"\t", "prevent_swf_caching:      ", this.settings.prevent_swf_caching.toString(), "\n",

			"\t", "button_placeholder_id:    ", this.settings.button_placeholder_id.toString(), "\n",
			"\t", "button_image_url:         ", this.settings.button_image_url.toString(), "\n",
			"\t", "button_width:             ", this.settings.button_width.toString(), "\n",
			"\t", "button_height:            ", this.settings.button_height.toString(), "\n",
			"\t", "button_text:              ", this.settings.button_text.toString(), "\n",
			"\t", "button_text_style:        ", this.settings.button_text_style.toString(), "\n",
			"\t", "button_text_top_padding:  ", this.settings.button_text_top_padding.toString(), "\n",
			"\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n",
			"\t", "button_action:            ", this.settings.button_action.toString(), "\n",
			"\t", "button_disabled:          ", this.settings.button_disabled.toString(), "\n",

			"\t", "custom_settings:          ", this.settings.custom_settings.toString(), "\n",
			"Event Handlers:\n",
			"\t", "swfupload_loaded_handler assigned:  ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n",
			"\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n",
			"\t", "file_queued_handler assigned:       ", (typeof this.settings.file_queued_handler === "function").toString(), "\n",
			"\t", "file_queue_error_handler assigned:  ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n",
			"\t", "upload_start_handler assigned:      ", (typeof this.settings.upload_start_handler === "function").toString(), "\n",
			"\t", "upload_progress_handler assigned:   ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n",
			"\t", "upload_error_handler assigned:      ", (typeof this.settings.upload_error_handler === "function").toString(), "\n",
			"\t", "upload_success_handler assigned:    ", (typeof this.settings.upload_success_handler === "function").toString(), "\n",
			"\t", "upload_complete_handler assigned:   ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n",
			"\t", "debug_handler assigned:             ", (typeof this.settings.debug_handler === "function").toString(), "\n"
		].join("")
	);
};

/* Note: addSetting and getSetting are no longer used by SWFUpload but are included
	the maintain v2 API compatibility
*/
// Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used.
SWFUpload.prototype.addSetting = function (name, value, default_value) {
    if (value == undefined) {
        return (this.settings[name] = default_value);
    } else {
        return (this.settings[name] = value);
	}
};

// Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found.
SWFUpload.prototype.getSetting = function (name) {
    if (this.settings[name] != undefined) {
        return this.settings[name];
	}

    return "";
};



// Private: callFlash handles function calls made to the Flash element.
// Calls are made with a setTimeout for some functions to work around
// bugs in the ExternalInterface library.
SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
	argumentArray = argumentArray || [];
	
	var movieElement = this.getMovieElement();
	var returnValue;

	if (typeof movieElement[functionName] === "function") {
		// We have to go through all this if/else stuff because the Flash functions don't have apply() and only accept the exact number of arguments.
		if (argumentArray.length === 0) {
			returnValue = movieElement[functionName]();
		} else if (argumentArray.length === 1) {
			returnValue = movieElement[functionName](argumentArray[0]);
		} else if (argumentArray.length === 2) {
			returnValue = movieElement[functionName](argumentArray[0], argumentArray[1]);
		} else if (argumentArray.length === 3) {
			returnValue = movieElement[functionName](argumentArray[0], argumentArray[1], argumentArray[2]);
		} else {
			throw "Too many arguments";
		}
		
		// Unescape file post param values
		if (returnValue != undefined && typeof returnValue.post === "object") {
			returnValue = this.unescapeFilePostParams(returnValue);
		}
		
		return returnValue;
	} else {
		throw "Invalid function name: " + functionName;
	}
};


/* *****************************
	-- Flash control methods --
	Your UI should use these
	to operate SWFUpload
   ***************************** */

// Public: selectFile causes a File Selection Dialog window to appear.  This
// dialog only allows 1 file to be selected. WARNING: this function does not work in Flash Player 10
SWFUpload.prototype.selectFile = function () {
	this.callFlash("SelectFile");
};

// Public: selectFiles causes a File Selection Dialog window to appear/ This
// dialog allows the user to select any number of files
// Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names.
// If the selection name length is too long the dialog will fail in an unpredictable manner.  There is no work-around
// for this bug.  WARNING: this function does not work in Flash Player 10
SWFUpload.prototype.selectFiles = function () {
	this.callFlash("SelectFiles");
};


// Public: startUpload starts uploading the first file in the queue unless
// the optional parameter 'fileID' specifies the ID 
SWFUpload.prototype.startUpload = function (fileID) {
	this.callFlash("StartUpload", [fileID]);
};

/* Cancels a the file upload.  You must specify a file_id */
// Public: cancelUpload cancels any queued file.  The fileID parameter
// must be specified.
SWFUpload.prototype.cancelUpload = function (fileID) {
	this.callFlash("CancelUpload", [fileID]);
};

// Public: stopUpload stops the current upload and requeues the file at the beginning of the queue.
// If nothing is currently uploading then nothing happens.
SWFUpload.prototype.stopUpload = function () {
	this.callFlash("StopUpload");
};

/* ************************
 * Settings methods
 *   These methods change the SWFUpload settings.
 *   SWFUpload settings should not be changed directly on the settings object
 *   since many of the settings need to be passed to Flash in order to take
 *   effect.
 * *********************** */

// Public: getStats gets the file statistics object.
SWFUpload.prototype.getStats = function () {
	return this.callFlash("GetStats");
};

// Public: setStats changes the SWFUpload statistics.  You shouldn't need to 
// change the statistics but you can.  Changing the statistics does not
// affect SWFUpload accept for the successful_uploads count which is used
// by the upload_limit setting to determine how many files the user may upload.
SWFUpload.prototype.setStats = function (statsObject) {
	this.callFlash("SetStats", [statsObject]);
};

// Public: getFile retrieves a File object by ID or Index.  If the file is
// not found then 'null' is returned.
SWFUpload.prototype.getFile = function (fileID) {
	if (typeof(fileID) === "number") {
		return this.callFlash("GetFileByIndex", [fileID]);
	} else {
		return this.callFlash("GetFile", [fileID]);
	}
};

// Public: addFileParam sets a name/value pair that will be posted with the
// file specified by the Files ID.  If the name already exists then the
// exiting value will be overwritten.
SWFUpload.prototype.addFileParam = function (fileID, name, value) {
	return this.callFlash("AddFileParam", [fileID, name, value]);
};

// Public: removeFileParam removes a previously set (by addFileParam) name/value
// pair from the specified file.
SWFUpload.prototype.removeFileParam = function (fileID, name) {
	this.callFlash("RemoveFileParam", [fileID, name]);
};

// Public: setUploadUrl changes the upload_url setting.
SWFUpload.prototype.setUploadURL = function (url) {
	this.settings.upload_url = url.toString();
	this.callFlash("SetUploadURL", [url]);
};

// Public: setPostParams changes the post_params setting
SWFUpload.prototype.setPostParams = function (paramsObject) {
	this.settings.post_params = paramsObject;
	this.callFlash("SetPostParams", [paramsObject]);
};

// Public: addPostParam adds post name/value pair.  Each name can have only one value.
SWFUpload.prototype.addPostParam = function (name, value) {
	this.settings.post_params[name] = value;
	this.callFlash("SetPostParams", [this.settings.post_params]);
};

// Public: removePostParam deletes post name/value pair.
SWFUpload.prototype.removePostParam = function (name) {
	delete this.settings.post_params[name];
	this.callFlash("SetPostParams", [this.settings.post_params]);
};

// Public: setFileTypes changes the file_types setting and the file_types_description setting
SWFUpload.prototype.setFileTypes = function (types, description) {
	this.settings.file_types = types;
	this.settings.file_types_description = description;
	this.callFlash("SetFileTypes", [types, description]);
};

// Public: setFileSizeLimit changes the file_size_limit setting
SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) {
	this.settings.file_size_limit = fileSizeLimit;
	this.callFlash("SetFileSizeLimit", [fileSizeLimit]);
};

// Public: setFileUploadLimit changes the file_upload_limit setting
SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) {
	this.settings.file_upload_limit = fileUploadLimit;
	this.callFlash("SetFileUploadLimit", [fileUploadLimit]);
};

// Public: setFileQueueLimit changes the file_queue_limit setting
SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) {
	this.settings.file_queue_limit = fileQueueLimit;
	this.callFlash("SetFileQueueLimit", [fileQueueLimit]);
};

// Public: setFilePostName changes the file_post_name setting
SWFUpload.prototype.setFilePostName = function (filePostName) {
	this.settings.file_post_name = filePostName;
	this.callFlash("SetFilePostName", [filePostName]);
};

// Public: setUseQueryString changes the use_query_string setting
SWFUpload.prototype.setUseQueryString = function (useQueryString) {
	this.settings.use_query_string = useQueryString;
	this.callFlash("SetUseQueryString", [useQueryString]);
};

// Public: setRequeueOnError changes the requeue_on_error setting
SWFUpload.prototype.setRequeueOnError = function (requeueOnError) {
	this.settings.requeue_on_error = requeueOnError;
	this.callFlash("SetRequeueOnError", [requeueOnError]);
};

// Public: setDebugEnabled changes the debug_enabled setting
SWFUpload.prototype.setDebugEnabled = function (debugEnabled) {
	this.settings.debug_enabled = debugEnabled;
	this.callFlash("SetDebugEnabled", [debugEnabled]);
};

// Public: setButtonImageURL loads a button image sprite
SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) {
	if (buttonImageURL == undefined) {
		buttonImageURL = "";
	}
	
	this.settings.button_image_url = buttonImageURL;
	this.callFlash("SetButtonImageURL", [buttonImageURL]);
};

// Public: setButtonDimensions resizes the Flash Movie and button
SWFUpload.prototype.setButtonDimensions = function (width, height) {
	this.settings.button_width = width;
	this.settings.button_height = height;
	
	var movie = this.getMovieElement();
	if (movie != undefined) {
		movie.style.width = width + "px";
		movie.style.height = height + "px";
	}
	
	this.callFlash("SetButtonDimensions", [width, height]);
};
// Public: setButtonText Changes the text overlaid on the button
SWFUpload.prototype.setButtonText = function (html) {
	this.settings.button_text = html;
	this.callFlash("SetButtonText", [html]);
};
// Public: setButtonTextPadding changes the top and left padding of the text overlay
SWFUpload.prototype.setButtonTextPadding = function (left, top) {
	this.settings.button_text_top_padding = top;
	this.settings.button_text_left_padding = left;
	this.callFlash("SetButtonTextPadding", [left, top]);
};

// Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button
SWFUpload.prototype.setButtonTextStyle = function (css) {
	this.settings.button_text_style = css;
	this.callFlash("SetButtonTextStyle", [css]);
};
// Public: setButtonDisabled disables/enables the button
SWFUpload.prototype.setButtonDisabled = function (isDisabled) {
	this.settings.button_disabled = isDisabled;
	this.callFlash("SetButtonDisabled", [isDisabled]);
};
// Public: setButtonAction sets the action that occurs when the button is clicked
SWFUpload.prototype.setButtonAction = function (buttonAction) {
	this.settings.button_action = buttonAction;
	this.callFlash("SetButtonAction", [buttonAction]);
};

/* *******************************
	Flash Event Interfaces
	These functions are used by Flash to trigger the various
	events.
	
	All these functions a Private.
	
	Because the ExternalInterface library is buggy the event calls
	are added to a queue and the queue then executed by a setTimeout.
	This ensures that events are executed in a determinate order and that
	the ExternalInterface bugs are avoided.
******************************* */

SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) {
	// Warning: Don't call this.debug inside here or you'll create an infinite loop
	
	if (argumentArray == undefined) {
		argumentArray = [];
	} else if (!(argumentArray instanceof Array)) {
		argumentArray = [argumentArray];
	}
	
	var self = this;
	if (typeof this.settings[handlerName] === "function") {
		// Queue the event
		this.eventQueue.push(function () {
			this.settings[handlerName].apply(this, argumentArray);
		});
		
		// Execute the next queued event
		setTimeout(function () {
			self.executeNextEvent();
		}, 0);
		
	} else if (this.settings[handlerName] !== null) {
		throw "Event handler " + handlerName + " is unknown or is not a function";
	}
};

// Private: Causes the next event in the queue to be executed.  Since events are queued using a setTimeout
// we must queue them in order to garentee that they are executed in order.
SWFUpload.prototype.executeNextEvent = function () {
	// Warning: Don't call this.debug inside here or you'll create an infinite loop

	var  f = this.eventQueue ? this.eventQueue.shift() : null;
	if (typeof(f) === "function") {
		f.apply(this);
	}
};

// Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have
// properties that contain characters that are not valid for JavaScript identifiers. To work around this
// the Flash Component escapes the parameter names and we must unescape again before passing them along.
SWFUpload.prototype.unescapeFilePostParams = function (file) {
	var reg = /[$]([0-9a-f]{4})/i;
	var unescapedPost = {};
	var uk;

	if (file != undefined) {
		for (var k in file.post) {
			if (file.post.hasOwnProperty(k)) {
				uk = k;
				var match;
				while ((match = reg.exec(uk)) !== null) {
					uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16)));
				}
				unescapedPost[uk] = file.post[k];
			}
		}

		file.post = unescapedPost;
	}

	return file;
};

SWFUpload.prototype.flashReady = function () {
	// Check that the movie element is loaded correctly with its ExternalInterface methods defined
	var movieElement = this.getMovieElement();
	if (typeof movieElement.StartUpload !== "function") {
		throw "ExternalInterface methods failed to initialize.";
	}

	// Fix IE Flash/Form bug
	if (window[this.movieName] == undefined) {
		window[this.movieName] = movieElement;
	}
	
	this.queueEvent("swfupload_loaded_handler");
};


/* This is a chance to do something before the browse window opens */
SWFUpload.prototype.fileDialogStart = function () {
	this.queueEvent("file_dialog_start_handler");
};


/* Called when a file is successfully added to the queue. */
SWFUpload.prototype.fileQueued = function (file) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("file_queued_handler", file);
};


/* Handle errors that occur when an attempt to queue a file fails. */
SWFUpload.prototype.fileQueueError = function (file, errorCode, message) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("file_queue_error_handler", [file, errorCode, message]);
};

/* Called after the file dialog has closed and the selected files have been queued.
	You could call startUpload here if you want the queued files to begin uploading immediately. */
SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued) {
	this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued]);
};

SWFUpload.prototype.uploadStart = function (file) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("return_upload_start_handler", file);
};

SWFUpload.prototype.returnUploadStart = function (file) {
	var returnValue;
	if (typeof this.settings.upload_start_handler === "function") {
		file = this.unescapeFilePostParams(file);
		returnValue = this.settings.upload_start_handler.call(this, file);
	} else if (this.settings.upload_start_handler != undefined) {
		throw "upload_start_handler must be a function";
	}

	// Convert undefined to true so if nothing is returned from the upload_start_handler it is
	// interpretted as 'true'.
	if (returnValue === undefined) {
		returnValue = true;
	}
	
	returnValue = !!returnValue;
	
	this.callFlash("ReturnUploadStart", [returnValue]);
};



SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]);
};

SWFUpload.prototype.uploadError = function (file, errorCode, message) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_error_handler", [file, errorCode, message]);
};

SWFUpload.prototype.uploadSuccess = function (file, serverData) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_success_handler", [file, serverData]);
};

SWFUpload.prototype.uploadComplete = function (file) {
	file = this.unescapeFilePostParams(file);
	this.queueEvent("upload_complete_handler", file);
};

/* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the
   internal debug console.  You can override this event and have messages written where you want. */
SWFUpload.prototype.debug = function (message) {
	this.queueEvent("debug_handler", message);
};


/* **********************************
	Debug Console
	The debug console is a self contained, in page location
	for debug message to be sent.  The Debug Console adds
	itself to the body if necessary.

	The console is automatically scrolled as messages appear.
	
	If you are using your own debug handler or when you deploy to production and
	have debug disabled you can remove these functions to reduce the file size
	and complexity.
********************************** */
   
// Private: debugMessage is the default debug_handler.  If you want to print debug messages
// call the debug() function.  When overriding the function your own function should
// check to see if the debug setting is true before outputting debug information.
SWFUpload.prototype.debugMessage = function (message) {
	if (this.settings.debug) {
		var exceptionMessage, exceptionValues = [];

		// Check for an exception object and print it nicely
		if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") {
			for (var key in message) {
				if (message.hasOwnProperty(key)) {
					exceptionValues.push(key + ": " + message[key]);
				}
			}
			exceptionMessage = exceptionValues.join("\n") || "";
			exceptionValues = exceptionMessage.split("\n");
			exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: ");
			SWFUpload.Console.writeLine(exceptionMessage);
		} else {
			SWFUpload.Console.writeLine(message);
		}
	}
};

SWFUpload.Console = {};
SWFUpload.Console.writeLine = function (message) {
	var console, documentForm;

	try {
		console = document.getElementById("SWFUpload_Console");

		if (!console) {
			documentForm = document.createElement("form");
			document.getElementsByTagName("body")[0].appendChild(documentForm);

			console = document.createElement("textarea");
			console.id = "SWFUpload_Console";
			console.style.fontFamily = "monospace";
			console.setAttribute("wrap", "off");
			console.wrap = "off";
			console.style.overflow = "auto";
			console.style.width = "700px";
			console.style.height = "350px";
			console.style.margin = "5px";
			documentForm.appendChild(console);
		}

		console.value += message + "\n";

		console.scrollTop = console.scrollHeight - console.clientHeight;
	} catch (ex) {
		alert("Exception: " + ex.name + " Message: " + ex.message);
	}
};
// Author Kevin Dibble
// EXAMPLE /////////////////////////////////////////////////////////////////////////////////////////////
/*

<link href="../lib/styles/validate.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../lib/jsv2/scripts.php"></script>
<script type="text/javascript" src="../lib/jsv2/swfupload.js"></script>
<script type="text/javascript" src="../lib/jsv2/uploader.js"></script>
</head>
<body>
<form action="../lib/showDetails.php" method="post" enctype="multipart/form-data" name="userForm" id="userForm">
	<input name="thumbnail" type="file" title="uploadfiles:upload.php:e858epn28tlumvvpcp933itv94"/>
</form>

<form action="../lib/showDetails.php" method="post" enctype="multipart/form-data" name="fileForm" id="fileForm">
 <input name="filename" type="file" title="uploadfiles/swfupload.swf;uploadfiles/upload.php:e858epn28tlumvvpcp933itv94;idtoupdate" />
</form>
</body>
</html>
*/

// NOTES:
// Use the Title field to point to the location of the PHP processing file (it must be relative from the flash file location)
var uploader = new Class({
	ani 	: null,					// Used to keep track of the progress animations
	initialize: function(obj){
		this.name = obj.name;
		this.wrapper = new Element('div',{
				'class' : 'uploaderWrapper'
		});
		this.FileBtn = new Element('div',{
				'id'	 : obj.name +'select',
				'styles' : {
							'width'  : '20px',
							'height' : '20px'
				}
			});
		this.myTmp  = new Element('div', {
				'id'	: obj.name+ "FileUploadSection",
				'class'	: "FileUploadSection",
				'html' 	: '<div class="FileUploadName" id="'+ obj.name +'FileUploadName">[Click Folder to Select File]</div>'+
						  '<div class="FileUploadProgress" id="'+ obj.name +'FileUploadProgress"></div>'
		});
		$(this.wrapper).injectBefore(obj);
		$(this.myTmp).injectInside(this.wrapper);
		$(this.FileBtn).injectInside(this.wrapper);
		this.paths			= obj.title.split(';');
		var swfURL = window.location.toString();
		swfURL = swfURL.substring(0,swfURL.lastIndexOf('/'));
		var fileString = "*.jpg;*.gif;*.png;*.pdf;*.doc;*.ppt;*.flv;*.swf;*.mp3;*.wav";
		if(this.paths[4]){
			fileString = this.paths[4].replace(/\|/g,';');
		}
		this.settings 		= {
			flash_url 		: swfURL + "/" + this.paths[0],
			upload_url		: swfURL + "/" + this.paths[1],				// Relative to the SWF file
			post_params		: {"PHPSESSID" : this.paths[2],"filename" : this.name},
			file_post_name	: this.name,
			file_size_limit : "100 MB",
			file_types 		: fileString,
			file_types_description : "All Files",
			file_upload_limit : 100,									// Allow lots of file attempts
			file_queue_limit : 1,										// Only allow one file in the que
			debug: false,
			
			// Custom Settings
			custom_settings : {
				animation		: obj.name,
				showImage		: this.paths[3] || false
			},
			// Button settings
			button_image_url: "uploadfiles/folder.png",	
			button_width: "20",
			button_height: "20",
			button_placeholder_id: obj.name + 'select',
				
			// The event Functions
			file_queued_handler 	: this.fileQueued,
			file_queue_error_handler: this.queueError,
			file_dialog_start_handler: this.fileDialogStart,
			file_dialog_complete_handler : this.fileDialogComplete,
			upload_start_handler 	: this.uploadStart,
			upload_progress_handler : this.uploadProgress,
			upload_error_handler 	: this.uploadError,
			upload_success_handler  : this.success,
			upload_complete_handler : this.uploadFinished
			//queue_complete_handler : queueComplete					// Queue plugin event
		}
		this.swfu = new SWFUpload(this.settings);						// Create SWF Uploader object
		var uploadFunction = this.startUpload.bind(this);
		this.UploadBtn = new Element('div',{
			'id'     : obj.name + 'FileUploadBtn',
			'class'	 : 'upload',
			'events' : {
					'click' 	: uploadFunction,
					'mouseenter': function(){this.className="uploadOvr";},
					'mouseleave': function(){this.className="upload";}
			}
		});
		$(this.UploadBtn).setOpacity(0);
		$(this.UploadBtn).injectBefore($(this.myTmp));
		$(obj).destroy();												// Remove the file feild from the form
	},
	queueError: function(){
		$(this.customSettings.animation+'FileUploadName').set("html","");					// Remove the last file text 
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadFinished');
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadSuccess');
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadFailed');
		$(this.customSettings.animation+'FileUploadName').addClass('Uploading');
		this.cancelUpload();
	},
	fileDialogStart: function(){
		new Fx.Tween($(this.customSettings.animation + 'FileUploadBtn')).start('opacity',0); // Hide the upload button
		$(this.customSettings.animation+'FileUploadName').set("html","");					 // Remove the last file text 
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadFinished');
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadSuccess');
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadFailed');
		$(this.customSettings.animation+'FileUploadName').addClass('Uploading');
		this.cancelUpload();																 // Cancel the current file going up
	},
	fileDialogComplete: function(){
		var btn = this.customSettings.animation;
		new Fx.Tween($(btn + 'FileUploadBtn'),{onComplete: function(){
			if($(btn+'FileUploadName').get('html')==""){
				$(btn+'FileUploadName').set("html","<div class='error' style='border:none; padding:0px; margin:0px'>Please select only one file</div>");
				$(btn+'FileUploadBtn').fade('hide');
			}
		}}).start('opacity',1);  // Show the upload button
	},
	success: function(file,response){
		var tempAmount="";
		var amount= "" + (file.size / 1024 / 1024);					// Get the file size in MB
		if(amount.indexOf('.')!=-1){
			amount=amount.substring(0,amount.indexOf('.')+1+parseInt(3));
		}
		for(var i=0;i<amount.length;i++){
			if(!isNaN(amount.charAt(i))||amount.charAt(i)=="."){
				tempAmount+=""+amount.charAt(i);
			}
		}
		if(this.customSettings.showImage){
			var location = this.customSettings.showImage;
			var swfURL = window.location.toString();
			swfURL = swfURL.substring(0,swfURL.lastIndexOf('/'));
			var simpleAjax= new Request.HTML({
				url: swfURL+'/uploadfiles/showThumb.php',
				onSuccess: function(response,elements,html,scripts){
					if($(location)){
						$(location).set("html",html);
					}
				}
			}).send('filename=' + this.customSettings.animation);
		}
		$(this.customSettings.animation+'FileUploadName').removeClass('Uploading');
		$(this.customSettings.animation+'FileUploadName').addClass('UploadSuccess');
		$(this.customSettings.animation+'FileUploadName').set("html",file.name + " : " + tempAmount + "MB : 100%");
		new Fx.Morph($(this.customSettings.animation+'FileUploadProgress')).start({
				'width' : $(this.customSettings.animation+'FileUploadName').getSize().x + "px",
				'background-color': '#009900'
		});
		$(this.customSettings.animation + 'FileUploadBtn').setOpacity(0);
		$$('input[type=submit]').each(function(item,index){
			$(item).disabled=false;
		});
	},
	fileQueued: function(file){											// Queue and Show the file
		$(this.customSettings.animation+'FileUploadProgress').style.width=0+"px";
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadSuccess');
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadFailed');
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadFinished');
		$(this.customSettings.animation+'FileUploadName').set("html","");
		var tempAmount="";
		var amount= "" + (file.size / 1024 / 1024);					// Get the file size in MB
		if(amount.indexOf('.')!=-1){
			amount=amount.substring(0,amount.indexOf('.')+1+parseInt(3));
		}
		for(var i=0;i<amount.length;i++){
			if(!isNaN(amount.charAt(i))||amount.charAt(i)=="."){
				tempAmount+=""+amount.charAt(i);
			}
		}
		$(this.customSettings.animation+'FileUploadName').set("html",file.name + ": " + tempAmount + "MB");
		this.startUpload();											// modified for fletcher
	},
	startUpload: function(){
		this.swfu.startUpload();
		new Fx.Tween($(this.swfu.customSettings.animation + 'FileUploadBtn')).start('opacity',0);
	},
	uploadProgress: function(file,loaded,total){
		if (this.ani) {
			this.ani.cancel();
		}
		var percentage = (loaded / total) * 100;
		var size = $(this.customSettings.animation + 'FileUploadName').getSize();
		percentage = parseInt(((size.x - 2) / 100) * percentage);
		var tempAmount = "";
		var offset = 3;
		var amount = "" + (file.size / 1024 / 1024); // Get the file size in MB
		if (amount.indexOf('.') != -1) {
			amount = amount.substring(0, amount.indexOf('.') + 1 + parseInt(3));
		}
		for (var i = 0; i < amount.length; i++) {
			if (!isNaN(amount.charAt(i)) || amount.charAt(i) == ".") {
				tempAmount += "" + amount.charAt(i);
			}
		}
		if (parseInt(percentage) <= 3) {
			offset = 0;
		}
		$(this.customSettings.animation + 'FileUploadName').set("html", file.name + " : " + tempAmount + "MB : " + parseInt(((loaded / total) * 100) - offset) + "%");
		this.ani = new Fx.Morph($(this.customSettings.animation + 'FileUploadProgress')).start({
			'width': parseInt(percentage - offset) + "px",
			'background-color': '#009900'
		});
	},
	uploadStart: function(){
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadFinished');
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadSuccess');
		$(this.customSettings.animation+'FileUploadName').removeClass('UploadFailed');
		$(this.customSettings.animation+'FileUploadName').addClass('Uploading');
		$(this.customSettings.animation+'FileUploadProgress').setOpacity(1);
		$(this.customSettings.animation+'FileUploadProgress').style.visibility='visible';
		$(this.customSettings.animation+'FileUploadProgress').style.display='block';
		$(this.customSettings.animation+'FileUploadProgress').style.width="1px";
		$$('input[type=submit]').each(function(item,index){
			$(item).disabled=true;
		});
		return true;
	},
	uploadFinished: function(file){
		var animation = this.customSettings.animation;
		new Fx.Tween($(animation+'FileUploadProgress'),{
			onComplete: function(){
				$(animation+'FileUploadName').removeClass('Uploading');
				$(animation+'FileUploadName').addClass('UploadFinished');
			}
		}).start('opacity',0);
		$$('input[type=submit]').each(function(item,index){
			$(item).disabled=false;
		});
	},
	uploadError : function(file, errorCode, message) {
		switch (errorCode) {
			case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
				alert("HTTP Error, File name: " + file.name + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
				alert("Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.IO_ERROR:
				alert("IO Error, File name: " + file.name + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
				alert("Security Error, File name: " + file.name + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
				alert("Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
				alert("File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
			case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
				break;
			case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
				break;
			default:
				alert("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
				break;
		}
	}
});
var uploaders = Array();								// Global uploaders object array
window.addEvent('domready',function(){
	$$('input[type=file]').each(function(item,index){ 	// Get all file feilds on the form
		uploaders[index] = new uploader(item);
	});
});