//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.

MooTools.More={version:"1.2.4.4",build:"6f6057dc645fdb7547689183b2311063bd653ddf"};(function(){var a={language:"en-US",languages:{"en-US":{}},cascades:["en-US"]};
var b;MooTools.lang=new Events();$extend(MooTools.lang,{setLanguage:function(c){if(!a.languages[c]){return this;}a.language=c;this.load();this.fireEvent("langChange",c);
return this;},load:function(){var c=this.cascade(this.getCurrentLanguage());b={};$each(c,function(e,d){b[d]=this.lambda(e);},this);},getCurrentLanguage:function(){return a.language;
},addLanguage:function(c){a.languages[c]=a.languages[c]||{};return this;},cascade:function(e){var c=(a.languages[e]||{}).cascades||[];c.combine(a.cascades);
c.erase(e).push(e);var d=c.map(function(f){return a.languages[f];},this);return $merge.apply(this,d);},lambda:function(c){(c||{}).get=function(e,d){return $lambda(c[e]).apply(this,$splat(d));
};return c;},get:function(e,d,c){if(b&&b[e]){return(d?b[e].get(d,c):b[e]);}},set:function(d,e,c){this.addLanguage(d);langData=a.languages[d];if(!langData[e]){langData[e]={};
}$extend(langData[e],c);if(d==this.getCurrentLanguage()){this.load();this.fireEvent("langChange",d);}return this;},list:function(){return Hash.getKeys(a.languages);
}});})();(function(){var c=this;var b=function(){if(c.console&&console.log){try{console.log.apply(console,arguments);}catch(d){console.log(Array.slice(arguments));
}}else{Log.logged.push(arguments);}return this;};var a=function(){this.logged.push(arguments);return this;};this.Log=new Class({logged:[],log:a,resetLog:function(){this.logged.empty();
return this;},enableLog:function(){this.log=b;this.logged.each(function(d){this.log.apply(this,d);},this);return this.resetLog();},disableLog:function(){this.log=a;
return this;}});Log.extend(new Log).enableLog();Log.logger=function(){return this.log.apply(this,arguments);};})();Class.refactor=function(b,a){$each(a,function(e,d){var c=b.prototype[d];
if(c&&(c=c._origin)&&typeof e=="function"){b.implement(d,function(){var f=this.previous;this.previous=c;var g=e.apply(this,arguments);this.previous=f;return g;
});}else{b.implement(d,e);}});return b;};Class.Mutators.Binds=function(a){return a;};Class.Mutators.initialize=function(a){return function(){$splat(this.Binds).each(function(b){var c=this[b];
if(c){this[b]=c.bind(this);}},this);return a.apply(this,arguments);};};Class.Occlude=new Class({occlude:function(c,b){b=document.id(b||this.element);var a=b.retrieve(c||this.property);
if(a&&!$defined(this.occluded)){return this.occluded=a;}this.occluded=false;b.store(c||this.property,this);return this.occluded;}});(function(){var a={wait:function(b){return this.chain(function(){this.callChain.delay($pick(b,500),this);
}.bind(this));}};Chain.implement(a);if(window.Fx){Fx.implement(a);["Css","Tween","Elements"].each(function(b){if(Fx[b]){Fx[b].implement(a);}});}Element.implement({chains:function(b){$splat($pick(b,["tween","morph","reveal"])).each(function(c){c=this.get(c);
if(!c){return;}c.setOptions({link:"chain"});},this);return this;},pauseFx:function(c,b){this.chains(b).get($pick(b,"tween")).wait(c);return this;}});})();
Array.implement({min:function(){return Math.min.apply(null,this);},max:function(){return Math.max.apply(null,this);},average:function(){return this.length?this.sum()/this.length:0;
},sum:function(){var a=0,b=this.length;if(b){do{a+=this[--b];}while(b);}return a;},unique:function(){return[].combine(this);},shuffle:function(){for(var b=this.length;
b&&--b;){var a=this[b],c=Math.floor(Math.random()*(b+1));this[b]=this[c];this[c]=a;}return this;}});Hash.implement({getFromPath:function(a){var b=this.getClean();
a.replace(/\[([^\]]+)\]|\.([^.[]+)|[^[.]+/g,function(c){if(!b){return null;}var d=arguments[2]||arguments[1]||arguments[0];b=(d in b)?b[d]:null;return c;
});return b;},cleanValues:function(a){a=a||$defined;this.each(function(c,b){if(!a(c)){this.erase(b);}},this);return this;},run:function(){var a=arguments;
this.each(function(c,b){if($type(c)=="function"){c.run(a);}});}});(function(){var b=["À","à","Á","á","Â","â","Ã","ã","Ä","ä","Å","å","Ă","ă","Ą","ą","Ć","ć","Č","č","Ç","ç","Ď","ď","Đ","đ","È","è","É","é","Ê","ê","Ë","ë","Ě","ě","Ę","ę","Ğ","ğ","Ì","ì","Í","í","Î","î","Ï","ï","Ĺ","ĺ","Ľ","ľ","Ł","ł","Ñ","ñ","Ň","ň","Ń","ń","Ò","ò","Ó","ó","Ô","ô","Õ","õ","Ö","ö","Ø","ø","ő","Ř","ř","Ŕ","ŕ","Š","š","Ş","ş","Ś","ś","Ť","ť","Ť","ť","Ţ","ţ","Ù","ù","Ú","ú","Û","û","Ü","ü","Ů","ů","Ÿ","ÿ","ý","Ý","Ž","ž","Ź","ź","Ż","ż","Þ","þ","Ð","ð","ß","Œ","œ","Æ","æ","µ"];
var a=["A","a","A","a","A","a","A","a","Ae","ae","A","a","A","a","A","a","C","c","C","c","C","c","D","d","D","d","E","e","E","e","E","e","E","e","E","e","E","e","G","g","I","i","I","i","I","i","I","i","L","l","L","l","L","l","N","n","N","n","N","n","O","o","O","o","O","o","O","o","Oe","oe","O","o","o","R","r","R","r","S","s","S","s","S","s","T","t","T","t","T","t","U","u","U","u","U","u","Ue","ue","U","u","Y","y","Y","y","Z","z","Z","z","Z","z","TH","th","DH","dh","ss","OE","oe","AE","ae","u"];
var d={"[\xa0\u2002\u2003\u2009]":" ","\xb7":"*","[\u2018\u2019]":"'","[\u201c\u201d]":'"',"\u2026":"...","\u2013":"-","\u2014":"--","\uFFFD":"&raquo;"};
var c=function(e,f){e=e||"";var g=f?"<"+e+"[^>]*>([\\s\\S]*?)</"+e+">":"</?"+e+"([^>]+)?>";reg=new RegExp(g,"gi");return reg;};String.implement({standardize:function(){var e=this;
b.each(function(g,f){e=e.replace(new RegExp(g,"g"),a[f]);});return e;},repeat:function(e){return new Array(e+1).join(this);},pad:function(f,h,e){if(this.length>=f){return this;
}var g=(h==null?" ":""+h).repeat(f-this.length).substr(0,f-this.length);if(!e||e=="right"){return this+g;}if(e=="left"){return g+this;}return g.substr(0,(g.length/2).floor())+this+g.substr(0,(g.length/2).ceil());
},getTags:function(e,f){return this.match(c(e,f))||[];},stripTags:function(e,f){return this.replace(c(e,f),"");},tidy:function(){var e=this.toString();
$each(d,function(g,f){e=e.replace(new RegExp(f,"g"),g);});return e;}});})();String.implement({parseQueryString:function(){var b=this.split(/[&;]/),a={};
if(b.length){b.each(function(g){var c=g.indexOf("="),d=c<0?[""]:g.substr(0,c).match(/[^\]\[]+/g),e=decodeURIComponent(g.substr(c+1)),f=a;d.each(function(j,h){var k=f[j];
if(h<d.length-1){f=f[j]=k||{};}else{if($type(k)=="array"){k.push(e);}else{f[j]=$defined(k)?[k,e]:e;}}});});}return a;},cleanQueryString:function(a){return this.split("&").filter(function(e){var b=e.indexOf("="),c=b<0?"":e.substr(0,b),d=e.substr(b+1);
return a?a.run([c,d]):$chk(d);}).join("&");}});var URI=new Class({Implements:Options,options:{},regex:/^(?:(\w+):)?(?:\/\/(?:(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,parts:["scheme","user","password","host","port","directory","file","query","fragment"],schemes:{http:80,https:443,ftp:21,rtsp:554,mms:1755,file:0},initialize:function(b,a){this.setOptions(a);
var c=this.options.base||URI.base;if(!b){b=c;}if(b&&b.parsed){this.parsed=$unlink(b.parsed);}else{this.set("value",b.href||b.toString(),c?new URI(c):false);
}},parse:function(c,b){var a=c.match(this.regex);if(!a){return false;}a.shift();return this.merge(a.associate(this.parts),b);},merge:function(b,a){if((!b||!b.scheme)&&(!a||!a.scheme)){return false;
}if(a){this.parts.every(function(c){if(b[c]){return false;}b[c]=a[c]||"";return true;});}b.port=b.port||this.schemes[b.scheme.toLowerCase()];b.directory=b.directory?this.parseDirectory(b.directory,a?a.directory:""):"/";
return b;},parseDirectory:function(b,c){b=(b.substr(0,1)=="/"?"":(c||"/"))+b;if(!b.test(URI.regs.directoryDot)){return b;}var a=[];b.replace(URI.regs.endSlash,"").split("/").each(function(d){if(d==".."&&a.length>0){a.pop();
}else{if(d!="."){a.push(d);}}});return a.join("/")+"/";},combine:function(a){return a.value||a.scheme+"://"+(a.user?a.user+(a.password?":"+a.password:"")+"@":"")+(a.host||"")+(a.port&&a.port!=this.schemes[a.scheme]?":"+a.port:"")+(a.directory||"/")+(a.file||"")+(a.query?"?"+a.query:"")+(a.fragment?"#"+a.fragment:"");
},set:function(b,d,c){if(b=="value"){var a=d.match(URI.regs.scheme);if(a){a=a[1];}if(a&&!$defined(this.schemes[a.toLowerCase()])){this.parsed={scheme:a,value:d};
}else{this.parsed=this.parse(d,(c||this).parsed)||(a?{scheme:a,value:d}:{value:d});}}else{if(b=="data"){this.setData(d);}else{this.parsed[b]=d;}}return this;
},get:function(a,b){switch(a){case"value":return this.combine(this.parsed,b?b.parsed:false);case"data":return this.getData();}return this.parsed[a]||"";
},go:function(){document.location.href=this.toString();},toURI:function(){return this;},getData:function(c,b){var a=this.get(b||"query");if(!$chk(a)){return c?null:{};
}var d=a.parseQueryString();return c?d[c]:d;},setData:function(a,c,b){if(typeof a=="string"){data=this.getData();data[arguments[0]]=arguments[1];a=data;
}else{if(c){a=$merge(this.getData(),a);}}return this.set(b||"query",Hash.toQueryString(a));},clearData:function(a){return this.set(a||"query","");}});URI.prototype.toString=URI.prototype.valueOf=function(){return this.get("value");
};URI.regs={endSlash:/\/$/,scheme:/^(\w+):/,directoryDot:/\.\/|\.$/};URI.base=new URI(document.getElements("base[href]",true).getLast(),{base:document.location});
String.implement({toURI:function(a){return new URI(this,a);}});URI=Class.refactor(URI,{combine:function(f,e){if(!e||f.scheme!=e.scheme||f.host!=e.host||f.port!=e.port){return this.previous.apply(this,arguments);
}var a=f.file+(f.query?"?"+f.query:"")+(f.fragment?"#"+f.fragment:"");if(!e.directory){return(f.directory||(f.file?"":"./"))+a;}var d=e.directory.split("/"),c=f.directory.split("/"),g="",h;
var b=0;for(h=0;h<d.length&&h<c.length&&d[h]==c[h];h++){}for(b=0;b<d.length-h-1;b++){g+="../";}for(b=h;b<c.length-1;b++){g+=c[b]+"/";}return(g||(f.file?"":"./"))+a;
},toAbsolute:function(a){a=new URI(a);if(a){a.set("directory","").set("file","");}return this.toRelative(a);},toRelative:function(a){return this.get("value",new URI(a));
}});Element.implement({tidy:function(){this.set("value",this.get("value").tidy());},getTextInRange:function(b,a){return this.get("value").substring(b,a);
},getSelectedText:function(){if(this.setSelectionRange){return this.getTextInRange(this.getSelectionStart(),this.getSelectionEnd());}return document.selection.createRange().text;
},getSelectedRange:function(){if($defined(this.selectionStart)){return{start:this.selectionStart,end:this.selectionEnd};}var e={start:0,end:0};var a=this.getDocument().selection.createRange();
if(!a||a.parentElement()!=this){return e;}var c=a.duplicate();if(this.type=="text"){e.start=0-c.moveStart("character",-100000);e.end=e.start+a.text.length;
}else{var b=this.get("value");var d=b.length;c.moveToElementText(this);c.setEndPoint("StartToEnd",a);if(c.text.length){d-=b.match(/[\n\r]*$/)[0].length;
}e.end=d-c.text.length;c.setEndPoint("StartToStart",a);e.start=d-c.text.length;}return e;},getSelectionStart:function(){return this.getSelectedRange().start;
},getSelectionEnd:function(){return this.getSelectedRange().end;},setCaretPosition:function(a){if(a=="end"){a=this.get("value").length;}this.selectRange(a,a);
return this;},getCaretPosition:function(){return this.getSelectedRange().start;},selectRange:function(e,a){if(this.setSelectionRange){this.focus();this.setSelectionRange(e,a);
}else{var c=this.get("value");var d=c.substr(e,a-e).replace(/\r/g,"").length;e=c.substr(0,e).replace(/\r/g,"").length;var b=this.createTextRange();b.collapse(true);
b.moveEnd("character",e+d);b.moveStart("character",e);b.select();}return this;},insertAtCursor:function(b,a){var d=this.getSelectedRange();var c=this.get("value");
this.set("value",c.substring(0,d.start)+b+c.substring(d.end,c.length));if($pick(a,true)){this.selectRange(d.start,d.start+b.length);}else{this.setCaretPosition(d.start+b.length);
}return this;},insertAroundCursor:function(b,a){b=$extend({before:"",defaultMiddle:"",after:""},b);var c=this.getSelectedText()||b.defaultMiddle;var g=this.getSelectedRange();
var f=this.get("value");if(g.start==g.end){this.set("value",f.substring(0,g.start)+b.before+c+b.after+f.substring(g.end,f.length));this.selectRange(g.start+b.before.length,g.end+b.before.length+c.length);
}else{var d=f.substring(g.start,g.end);this.set("value",f.substring(0,g.start)+b.before+d+b.after+f.substring(g.end,f.length));var e=g.start+b.before.length;
if($pick(a,true)){this.selectRange(e,e+d.length);}else{this.setCaretPosition(e+f.length);}}return this;}});Elements.from=function(e,d){if($pick(d,true)){e=e.stripScripts();
}var b,c=e.match(/^\s*<(t[dhr]|tbody|tfoot|thead)/i);if(c){b=new Element("table");var a=c[1].toLowerCase();if(["td","th","tr"].contains(a)){b=new Element("tbody").inject(b);
if(a!="tr"){b=new Element("tr").inject(b);}}}return(b||new Element("div")).set("html",e).getChildren();};(function(d,e){var c=/(.*?):relay\(([^)]+)\)$/,b=/[+>~\s]/,f=function(g){var h=g.match(c);
return !h?{event:g}:{event:h[1],selector:h[2]};},a=function(m,g){var k=m.target;if(b.test(g=g.trim())){var j=this.getElements(g);for(var h=j.length;h--;
){var l=j[h];if(k==l||l.hasChild(k)){return l;}}}else{for(;k&&k!=this;k=k.parentNode){if(Element.match(k,g)){return document.id(k);}}}return null;};Element.implement({addEvent:function(j,i){var k=f(j);
if(k.selector){var h=this.retrieve("$moo:delegateMonitors",{});if(!h[j]){var g=function(m){var l=a.call(this,m,k.selector);if(l){this.fireEvent(j,[m,l],0,l);
}}.bind(this);h[j]=g;d.call(this,k.event,g);}}return d.apply(this,arguments);},removeEvent:function(j,i){var k=f(j);if(k.selector){var h=this.retrieve("events");
if(!h||!h[j]||(i&&!h[j].keys.contains(i))){return this;}if(i){e.apply(this,[j,i]);}else{e.apply(this,j);}h=this.retrieve("events");if(h&&h[j]&&h[j].keys.length==0){var g=this.retrieve("$moo:delegateMonitors",{});
e.apply(this,[k.event,g[j]]);delete g[j];}return this;}return e.apply(this,arguments);},fireEvent:function(j,h,g,k){var i=this.retrieve("events");if(!i||!i[j]){return this;
}i[j].keys.each(function(l){l.create({bind:k||this,delay:g,arguments:h})();},this);return this;}});})(Element.prototype.addEvent,Element.prototype.removeEvent);
Element.implement({measure:function(e){var g=function(h){return !!(!h||h.offsetHeight||h.offsetWidth);};if(g(this)){return e.apply(this);}var d=this.getParent(),f=[],b=[];
while(!g(d)&&d!=document.body){b.push(d.expose());d=d.getParent();}var c=this.expose();var a=e.apply(this);c();b.each(function(h){h();});return a;},expose:function(){if(this.getStyle("display")!="none"){return $empty;
}var a=this.style.cssText;this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=a;}.bind(this);
},getDimensions:function(a){a=$merge({computeSize:false},a);var f={};var d=function(g,e){return(e.computeSize)?g.getComputedSize(e):g.getSize();};var b=this.getParent("body");
if(b&&this.getStyle("display")=="none"){f=this.measure(function(){return d(this,a);});}else{if(b){try{f=d(this,a);}catch(c){}}else{f={x:0,y:0};}}return $chk(f.x)?$extend(f,{width:f.x,height:f.y}):$extend(f,{x:f.width,y:f.height});
},getComputedSize:function(a){a=$merge({styles:["padding","border"],plains:{height:["top","bottom"],width:["left","right"]},mode:"both"},a);var c={width:0,height:0};
switch(a.mode){case"vertical":delete c.width;delete a.plains.width;break;case"horizontal":delete c.height;delete a.plains.height;break;}var b=[];$each(a.plains,function(g,f){g.each(function(h){a.styles.each(function(i){b.push((i=="border")?i+"-"+h+"-width":i+"-"+h);
});});});var e={};b.each(function(f){e[f]=this.getComputedStyle(f);},this);var d=[];$each(a.plains,function(g,f){var h=f.capitalize();c["total"+h]=c["computed"+h]=0;
g.each(function(i){c["computed"+i.capitalize()]=0;b.each(function(k,j){if(k.test(i)){e[k]=e[k].toInt()||0;c["total"+h]=c["total"+h]+e[k];c["computed"+i.capitalize()]=c["computed"+i.capitalize()]+e[k];
}if(k.test(i)&&f!=k&&(k.test("border")||k.test("padding"))&&!d.contains(k)){d.push(k);c["computed"+h]=c["computed"+h]-e[k];}});});});["Width","Height"].each(function(g){var f=g.toLowerCase();
if(!$chk(c[f])){return;}c[f]=c[f]+this["offset"+g]+c["computed"+g];c["total"+g]=c[f]+c["total"+g];delete c["computed"+g];},this);return $extend(e,c);}});
(function(){var a=false;window.addEvent("domready",function(){var b=new Element("div").setStyles({position:"fixed",top:0,right:0}).inject(document.body);
a=(b.offsetTop===0);b.dispose();});Element.implement({pin:function(d){if(this.getStyle("display")=="none"){return null;}var f,b=window.getScroll();if(d!==false){f=this.getPosition();
if(!this.retrieve("pinned")){var h={top:f.y-b.y,left:f.x-b.x};if(a){this.setStyle("position","fixed").setStyles(h);}else{this.store("pinnedByJS",true);
this.setStyles({position:"absolute",top:f.y,left:f.x}).addClass("isPinned");this.store("scrollFixer",(function(){if(this.retrieve("pinned")){var i=window.getScroll();
}this.setStyles({top:h.top.toInt()+i.y,left:h.left.toInt()+i.x});}).bind(this));window.addEvent("scroll",this.retrieve("scrollFixer"));}this.store("pinned",true);
}}else{var g;if(!Browser.Engine.trident){var e=this.getParent();g=(e.getComputedStyle("position")!="static"?e:e.getOffsetParent());}f=this.getPosition(g);
this.store("pinned",false);var c;if(a&&!this.retrieve("pinnedByJS")){c={top:f.y+b.y,left:f.x+b.x};}else{this.store("pinnedByJS",false);window.removeEvent("scroll",this.retrieve("scrollFixer"));
c={top:f.y,left:f.x};}this.setStyles($merge(c,{position:"absolute"})).removeClass("isPinned");}return this;},unpin:function(){return this.pin(false);},togglepin:function(){this.pin(!this.retrieve("pinned"));
}});})();(function(){var a=Element.prototype.position;Element.implement({position:function(g){if(g&&($defined(g.x)||$defined(g.y))){return a?a.apply(this,arguments):this;
}$each(g||{},function(u,t){if(!$defined(u)){delete g[t];}});g=$merge({relativeTo:document.body,position:{x:"center",y:"center"},edge:false,offset:{x:0,y:0},returnPos:false,relFixedPosition:false,ignoreMargins:false,ignoreScroll:false,allowNegative:false},g);
var r={x:0,y:0},e=false;var c=this.measure(function(){return document.id(this.getOffsetParent());});if(c&&c!=this.getDocument().body){r=c.measure(function(){return this.getPosition();
});e=c!=document.id(g.relativeTo);g.offset.x=g.offset.x-r.x;g.offset.y=g.offset.y-r.y;}var s=function(t){if($type(t)!="string"){return t;}t=t.toLowerCase();
var u={};if(t.test("left")){u.x="left";}else{if(t.test("right")){u.x="right";}else{u.x="center";}}if(t.test("upper")||t.test("top")){u.y="top";}else{if(t.test("bottom")){u.y="bottom";
}else{u.y="center";}}return u;};g.edge=s(g.edge);g.position=s(g.position);if(!g.edge){if(g.position.x=="center"&&g.position.y=="center"){g.edge={x:"center",y:"center"};
}else{g.edge={x:"left",y:"top"};}}this.setStyle("position","absolute");var f=document.id(g.relativeTo)||document.body,d=f==document.body?window.getScroll():f.getPosition(),l=d.y,h=d.x;
var n=this.getDimensions({computeSize:true,styles:["padding","border","margin"]});var j={},o=g.offset.y,q=g.offset.x,k=window.getSize();switch(g.position.x){case"left":j.x=h+q;
break;case"right":j.x=h+q+f.offsetWidth;break;default:j.x=h+((f==document.body?k.x:f.offsetWidth)/2)+q;break;}switch(g.position.y){case"top":j.y=l+o;break;
case"bottom":j.y=l+o+f.offsetHeight;break;default:j.y=l+((f==document.body?k.y:f.offsetHeight)/2)+o;break;}if(g.edge){var b={};switch(g.edge.x){case"left":b.x=0;
break;case"right":b.x=-n.x-n.computedRight-n.computedLeft;break;default:b.x=-(n.totalWidth/2);break;}switch(g.edge.y){case"top":b.y=0;break;case"bottom":b.y=-n.y-n.computedTop-n.computedBottom;
break;default:b.y=-(n.totalHeight/2);break;}j.x+=b.x;j.y+=b.y;}j={left:((j.x>=0||e||g.allowNegative)?j.x:0).toInt(),top:((j.y>=0||e||g.allowNegative)?j.y:0).toInt()};
var i={left:"x",top:"y"};["minimum","maximum"].each(function(t){["left","top"].each(function(u){var v=g[t]?g[t][i[u]]:null;if(v!=null&&j[u]<v){j[u]=v;}});
});if(f.getStyle("position")=="fixed"||g.relFixedPosition){var m=window.getScroll();j.top+=m.y;j.left+=m.x;}if(g.ignoreScroll){var p=f.getScroll();j.top-=p.y;
j.left-=p.x;}if(g.ignoreMargins){j.left+=(g.edge.x=="right"?n["margin-right"]:g.edge.x=="center"?-n["margin-left"]+((n["margin-right"]+n["margin-left"])/2):-n["margin-left"]);
j.top+=(g.edge.y=="bottom"?n["margin-bottom"]:g.edge.y=="center"?-n["margin-top"]+((n["margin-bottom"]+n["margin-top"])/2):-n["margin-top"]);}j.left=Math.ceil(j.left);
j.top=Math.ceil(j.top);if(g.returnPos){return j;}else{this.setStyles(j);}return this;}});})();Element.implement({isDisplayed:function(){return this.getStyle("display")!="none";
},isVisible:function(){var a=this.offsetWidth,b=this.offsetHeight;return(a==0&&b==0)?false:(a>0&&b>0)?true:this.isDisplayed();},toggle:function(){return this[this.isDisplayed()?"hide":"show"]();
},hide:function(){var b;try{b=this.getStyle("display");}catch(a){}return this.store("originalDisplay",b||"").setStyle("display","none");},show:function(a){a=a||this.retrieve("originalDisplay")||"block";
return this.setStyle("display",(a=="none")?"block":a);},swapClass:function(a,b){return this.removeClass(a).addClass(b);}});if(!window.Form){window.Form={};
}(function(){Form.Request=new Class({Binds:["onSubmit","onFormValidate"],Implements:[Options,Events,Class.Occlude],options:{requestOptions:{evalScripts:true,useSpinner:true,emulation:false,link:"ignore"},extraData:{},resetForm:true},property:"form.request",initialize:function(b,c,a){this.element=document.id(b);
if(this.occlude()){return this.occluded;}this.update=document.id(c);this.setOptions(a);this.makeRequest();if(this.options.resetForm){this.request.addEvent("success",function(){$try(function(){this.element.reset();
}.bind(this));if(window.OverText){OverText.update();}}.bind(this));}this.attach();},toElement:function(){return this.element;},makeRequest:function(){this.request=new Request.HTML($merge({update:this.update,emulation:false,spinnerTarget:this.element,method:this.element.get("method")||"post"},this.options.requestOptions)).addEvents({success:function(b,a){["complete","success"].each(function(c){this.fireEvent(c,[this.update,b,a]);
},this);}.bind(this),failure:function(a){this.fireEvent("complete").fireEvent("failure",a);}.bind(this),exception:function(){this.fireEvent("failure",xhr);
}.bind(this)});},attach:function(a){a=$pick(a,true);method=a?"addEvent":"removeEvent";var b=this.element.retrieve("validator");if(b){b[method]("onFormValidate",this.onFormValidate);
}if(!b||!a){this.element[method]("submit",this.onSubmit);}},detach:function(){this.attach(false);},enable:function(){this.attach();},disable:function(){this.detach();
},onFormValidate:function(b,a,d){var c=this.element.retrieve("validator");if(b||(c&&!c.options.stopOnFailure)){if(d&&d.stop){d.stop();}this.send();}},onSubmit:function(a){if(this.element.retrieve("validator")){this.detach();
return;}a.stop();this.send();},send:function(){var b=this.element.toQueryString().trim();var a=$H(this.options.extraData).toQueryString();if(b){b+="&"+a;
}else{b=a;}this.fireEvent("send",[this.element,b.parseQueryString()]);this.request.send({data:b,url:this.element.get("action")});return this;}});Element.Properties.formRequest={set:function(){var a=Array.link(arguments,{options:Object.type,update:Element.type,updateId:String.type});
var c=a.update||a.updateId;var b=this.retrieve("form.request");if(c){if(b){b.update=document.id(c);}this.store("form.request:update",c);}if(a.options){if(b){b.setOptions(a.options);
}this.store("form.request:options",a.options);}return this;},get:function(){var a=Array.link(arguments,{options:Object.type,update:Element.type,updateId:String.type});
var b=a.update||a.updateId;if(a.options||b||!this.retrieve("form.request")){if(a.options||!this.retrieve("form.request:options")){this.set("form.request",a.options);
}if(b){this.set("form.request",b);}this.store("form.request",new Form.Request(this,this.retrieve("form.request:update"),this.retrieve("form.request:options")));
}return this.retrieve("form.request");}};Element.implement({formUpdate:function(b,a){this.get("form.request",b,a).send();return this;}});})();Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(b,a){this.elements=this.subject=$$(b);
this.parent(a);},compute:function(g,h,j){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],j);}}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(c)){return this;
}var h={},j={};for(var d in c){var f=c[d],a=h[d]={},g=j[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,j);
}});Fx.Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,alwaysHide:false,trigger:"click",initialDisplayFx:true,returnHeightToAuto:true},initialize:function(){var c=Array.link(arguments,{container:Element.type,options:Object.type,togglers:$defined,elements:$defined});
this.parent(c.elements,c.options);this.togglers=$$(c.togglers);this.previous=-1;this.internalChain=new Chain();if(this.options.alwaysHide){this.options.wait=true;
}if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show;}if(this.options.start){this.options.display=false;this.options.show=false;
}this.effects={};if(this.options.opacity){this.effects.opacity="fullOpacity";}if(this.options.width){this.effects.width=this.options.fixedWidth?"fullWidth":"offsetWidth";
}if(this.options.height){this.effects.height=this.options.fixedHeight?"fullHeight":"scrollHeight";}for(var b=0,a=this.togglers.length;b<a;b++){this.addSection(this.togglers[b],this.elements[b]);
}this.elements.each(function(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.options.initialDisplayFx===false){this.display(this.options.display,this.options.initialDisplayFx);}if(this.options.fixedHeight!==false){this.options.returnHeightToAuto=false;
}this.addEvent("complete",this.internalChain.callChain.bind(this.internalChain));},addSection:function(e,c){e=document.id(e);c=document.id(c);var f=this.togglers.contains(e);
this.togglers.include(e);this.elements.include(c);var a=this.togglers.indexOf(e);var b=this.display.bind(this,a);e.store("accordion:display",b);e.addEvent(this.options.trigger,b);
if(this.options.height){c.setStyles({"padding-top":0,"border-top":"none","padding-bottom":0,"border-bottom":"none"});}if(this.options.width){c.setStyles({"padding-left":0,"border-left":"none","padding-right":0,"border-right":"none"});
}c.fullOpacity=1;if(this.options.fixedWidth){c.fullWidth=this.options.fixedWidth;}if(this.options.fixedHeight){c.fullHeight=this.options.fixedHeight;}c.setStyle("overflow","hidden");
if(!f){for(var d in this.effects){c.setStyle(d,0);}}return this;},detach:function(){this.togglers.each(function(a){a.removeEvent(this.options.trigger,a.retrieve("accordion:display"));
},this);},display:function(a,b){if(!this.check(a,b)){return this;}b=$pick(b,true);if(this.options.returnHeightToAuto){var d=this.elements[this.previous];
if(d&&!this.selfHidden){for(var c in this.effects){d.setStyle(c,d[this.effects[c]]);}}}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 e={};this.elements.each(function(h,g){e[g]={};var f;if(g!=a){f=true;}else{if(this.options.alwaysHide&&((h.offsetHeight>0&&this.options.height)||h.offsetWidth>0&&this.options.width)){f=true;
this.selfHidden=true;}}this.fireEvent(f?"background":"active",[this.togglers[g],h]);for(var j in this.effects){e[g][j]=f?0:h[this.effects[j]];}},this);
this.internalChain.chain(function(){if(this.options.returnHeightToAuto&&!this.selfHidden){var f=this.elements[a];if(f){f.setStyle("height","auto");}}}.bind(this));
return b?this.start(e):this.set(e);}});var Accordion=new Class({Extends:Fx.Accordion,initialize:function(){this.parent.apply(this,arguments);var a=Array.link(arguments,{container:Element.type});
this.container=a.container;},addSection:function(c,b,e){c=document.id(c);b=document.id(b);var d=this.togglers.contains(c);var a=this.togglers.length;if(a&&(!d||e)){e=$pick(e,a-1);
c.inject(this.togglers[e],"before");b.inject(c,"after");}else{if(this.container&&!d){c.inject(this.container);b.inject(this.container);}}return this.parent.apply(this,arguments);
}});Fx.Move=new Class({Extends:Fx.Morph,options:{relativeTo:document.body,position:"center",edge:false,offset:{x:0,y:0}},start:function(a){return this.parent(this.element.position($merge(this.options,a,{returnPos:true})));
}});Element.Properties.move={set:function(a){var b=this.retrieve("move");if(b){b.cancel();}return this.eliminate("move").store("move:options",$extend({link:"cancel"},a));
},get:function(a){if(a||!this.retrieve("move")){if(a||!this.retrieve("move:options")){this.set("move",a);}this.store("move",new Fx.Move(this,this.retrieve("move:options")));
}return this.retrieve("move");}};Element.implement({move:function(a){this.get("move").start(a);return this;}});Fx.Reveal=new Class({Extends:Fx.Morph,options:{link:"cancel",styles:["padding","border","margin"],transitionOpacity:!Browser.Engine.trident4,mode:"vertical",display:"block",hideInputs:Browser.Engine.trident?"select, input, textarea, object, embed":false},dissolve:function(){try{if(!this.hiding&&!this.showing){if(this.element.getStyle("display")!="none"){this.hiding=true;
this.showing=false;this.hidden=true;this.cssText=this.element.style.cssText;var d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
this.element.setStyle("display",this.options.display);if(this.options.transitionOpacity){d.opacity=1;}var b={};$each(d,function(f,e){b[e]=[f,0];},this);
this.element.setStyle("overflow","hidden");var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;this.$chain.unshift(function(){if(this.hidden){this.hiding=false;
$each(d,function(f,e){d[e]=f;},this);this.element.style.cssText=this.cssText;this.element.setStyle("display","none");if(a){a.setStyle("visibility","visible");
}}this.fireEvent("hide",this.element);this.callChain();}.bind(this));if(a){a.setStyle("visibility","hidden");}this.start(b);}else{this.callChain.delay(10,this);
this.fireEvent("complete",this.element);this.fireEvent("hide",this.element);}}else{if(this.options.link=="chain"){this.chain(this.dissolve.bind(this));
}else{if(this.options.link=="cancel"&&!this.hiding){this.cancel();this.dissolve();}}}}catch(c){this.hiding=false;this.element.setStyle("display","none");
this.callChain.delay(10,this);this.fireEvent("complete",this.element);this.fireEvent("hide",this.element);}return this;},reveal:function(){try{if(!this.showing&&!this.hiding){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.showing=true;
this.hiding=this.hidden=false;var d;this.cssText=this.element.style.cssText;this.element.measure(function(){d=this.element.getComputedSize({styles:this.options.styles,mode:this.options.mode});
}.bind(this));$each(d,function(f,e){d[e]=f;});if($chk(this.options.heightOverride)){d.height=this.options.heightOverride.toInt();}if($chk(this.options.widthOverride)){d.width=this.options.widthOverride.toInt();
}if(this.options.transitionOpacity){this.element.setStyle("opacity",0);d.opacity=1;}var b={height:0,display:this.options.display};$each(d,function(f,e){b[e]=0;
});this.element.setStyles($merge(b,{overflow:"hidden"}));var a=this.options.hideInputs?this.element.getElements(this.options.hideInputs):null;if(a){a.setStyle("visibility","hidden");
}this.start(d);this.$chain.unshift(function(){this.element.style.cssText=this.cssText;this.element.setStyle("display",this.options.display);if(!this.hidden){this.showing=false;
}if(a){a.setStyle("visibility","visible");}this.callChain();this.fireEvent("show",this.element);}.bind(this));}else{this.callChain();this.fireEvent("complete",this.element);
this.fireEvent("show",this.element);}}else{if(this.options.link=="chain"){this.chain(this.reveal.bind(this));}else{if(this.options.link=="cancel"&&!this.showing){this.cancel();
this.reveal();}}}}catch(c){this.element.setStyles({display:this.options.display,visiblity:"visible",opacity:1});this.showing=false;this.callChain.delay(10,this);
this.fireEvent("complete",this.element);this.fireEvent("show",this.element);}return this;},toggle:function(){if(this.element.getStyle("display")=="none"||this.element.getStyle("visiblity")=="hidden"||this.element.getStyle("opacity")==0){this.reveal();
}else{this.dissolve();}return this;},cancel:function(){this.parent.apply(this,arguments);this.element.style.cssText=this.cssText;this.hidding=false;this.showing=false;
}});Element.Properties.reveal={set:function(a){var b=this.retrieve("reveal");if(b){b.cancel();}return this.eliminate("reveal").store("reveal:options",a);
},get:function(a){if(a||!this.retrieve("reveal")){if(a||!this.retrieve("reveal:options")){this.set("reveal",a);}this.store("reveal",new Fx.Reveal(this,this.retrieve("reveal:options")));
}return this.retrieve("reveal");}};Element.Properties.dissolve=Element.Properties.reveal;Element.implement({reveal:function(a){this.get("reveal",a).reveal();
return this;},dissolve:function(a){this.get("reveal",a).dissolve();return this;},nix:function(){var a=Array.link(arguments,{destroy:Boolean.type,options:Object.type});
this.get("reveal",a.options).dissolve().chain(function(){this[a.destroy?"destroy":"dispose"]();}.bind(this));return this;},wink:function(){var b=Array.link(arguments,{duration:Number.type,options:Object.type});
var a=this.get("reveal",b.options);a.reveal().chain(function(){(function(){a.dissolve();}).delay(b.duration||2000);});}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{x:0,y:0},wheelStops:true},initialize:function(b,a){this.element=this.subject=document.id(b);
this.parent(a);var d=this.cancel.bind(this,false);if($type(this.element)!="element"){this.element=document.id(this.element.getDocument().body);}var c=this.element;
if(this.options.wheelStops){this.addEvent("start",function(){c.addEvent("mousewheel",d);},true);this.addEvent("complete",function(){c.removeEvent("mousewheel",d);
},true);}},set:function(){var a=Array.flatten(arguments);if(Browser.Engine.gecko){a=[Math.round(a[0]),Math.round(a[1])];}this.element.scrollTo(a[0],a[1]);
},compute:function(c,b,a){return[0,1].map(function(d){return Fx.compute(c[d],b[d],a);});},start:function(c,g){if(!this.check(c,g)){return this;}var e=this.element.getScrollSize(),b=this.element.getScroll(),d={x:c,y:g};
for(var f in d){var a=e[f];if($chk(d[f])){d[f]=($type(d[f])=="number")?d[f]:a;}else{d[f]=b[f];}d[f]+=this.options.offset[f];}return this.parent([b.x,b.y],[d.x,d.y]);
},toTop:function(){return this.start(false,0);},toLeft:function(){return this.start(0,false);},toRight:function(){return this.start("right",false);},toBottom:function(){return this.start(false,"bottom");
},toElement:function(b){var a=document.id(b).getPosition(this.element);return this.start(a.x,a.y);},scrollIntoView:function(c,e,d){e=e?$splat(e):["x","y"];
var h={};c=document.id(c);var f=c.getPosition(this.element);var i=c.getSize();var g=this.element.getScroll();var a=this.element.getSize();var b={x:f.x+i.x,y:f.y+i.y};
["x","y"].each(function(j){if(e.contains(j)){if(b[j]>g[j]+a[j]){h[j]=b[j]-a[j];}if(f[j]<g[j]){h[j]=f[j];}}if(h[j]==null){h[j]=g[j];}if(d&&d[j]){h[j]=h[j]+d[j];
}},this);if(h.x!=g.x||h.y!=g.y){this.start(h.x,h.y);}return this;},scrollToCenter:function(c,e,d){e=e?$splat(e):["x","y"];c=$(c);var h={},f=c.getPosition(this.element),i=c.getSize(),g=this.element.getScroll(),a=this.element.getSize(),b={x:f.x+i.x,y:f.y+i.y};
["x","y"].each(function(j){if(e.contains(j)){h[j]=f[j]-(a[j]-i[j])/2;}if(h[j]==null){h[j]=g[j];}if(d&&d[j]){h[j]=h[j]+d[j];}},this);if(h.x!=g.x||h.y!=g.y){this.start(h.x,h.y);
}return this;}});Fx.Slide=new Class({Extends:Fx,options:{mode:"vertical",wrapper:false,hideOverflow:true},initialize:function(b,a){this.addEvent("complete",function(){this.open=(this.wrapper["offset"+this.layout.capitalize()]!=0);
if(this.open){this.wrapper.setStyle("height","");}if(this.open&&Browser.Engine.webkit419){this.element.dispose().inject(this.wrapper);}},true);this.element=this.subject=document.id(b);
this.parent(a);var d=this.element.retrieve("wrapper");var c=this.element.getStyles("margin","position","overflow");if(this.options.hideOverflow){c=$extend(c,{overflow:"hidden"});
}if(this.options.wrapper){d=document.id(this.options.wrapper).setStyles(c);}this.wrapper=d||new Element("div",{styles:c}).wraps(this.element);this.element.store("wrapper",this.wrapper).setStyle("margin",0);
this.now=[];this.open=true;},vertical:function(){this.margin="margin-top";this.layout="height";this.offset=this.element.offsetHeight;},horizontal:function(){this.margin="margin-left";
this.layout="width";this.offset=this.element.offsetWidth;},set:function(a){this.element.setStyle(this.margin,a[0]);this.wrapper.setStyle(this.layout,a[1]);
return this;},compute:function(c,b,a){return[0,1].map(function(d){return Fx.compute(c[d],b[d],a);});},start:function(b,e){if(!this.check(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=(c==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;}});var SmoothScroll=Fx.SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(b,c){c=c||document;
this.doc=c.getDocument();var d=c.getWindow();this.parent(this.doc,b);this.links=$$(this.options.links||this.doc.links);var a=d.location.href.match(/^[^#]*/)[0]+"#";
this.links.each(function(f){if(f.href.indexOf(a)!=0){return;}var e=f.href.substr(a.length);if(e){this.useLink(f,e);}},this);if(!Browser.Engine.webkit419){this.addEvent("complete",function(){d.location.hash=this.anchor;
},true);}},useLink:function(c,a){var b;c.addEvent("click",function(d){if(b!==false&&!b){b=document.id(a)||this.doc.getElement("a[name="+a+"]");}if(b){d.preventDefault();
this.anchor=a;this.toElement(b).chain(function(){this.fireEvent("scrolledTo",[c,b]);}.bind(this));c.blur();}}.bind(this));}});Fx.Sort=new Class({Extends:Fx.Elements,options:{mode:"vertical"},initialize:function(b,a){this.parent(b,a);
this.elements.each(function(c){if(c.getStyle("position")=="static"){c.setStyle("position","relative");}});this.setDefaultOrder();},setDefaultOrder:function(){this.currentOrder=this.elements.map(function(b,a){return a;
});},sort:function(e){if($type(e)!="array"){return false;}var i=0,a=0,c={},h={},d=this.options.mode=="vertical";var f=this.elements.map(function(m,j){var l=m.getComputedSize({styles:["border","padding","margin"]});
var n;if(d){n={top:i,margin:l["margin-top"],height:l.totalHeight};i+=n.height-l["margin-top"];}else{n={left:a,margin:l["margin-left"],width:l.totalWidth};
a+=n.width;}var k=d?"top":"left";h[j]={};var o=m.getStyle(k).toInt();h[j][k]=o||0;return n;},this);this.set(h);e=e.map(function(j){return j.toInt();});
if(e.length!=this.elements.length){this.currentOrder.each(function(j){if(!e.contains(j)){e.push(j);}});if(e.length>this.elements.length){e.splice(this.elements.length-1,e.length-this.elements.length);
}}var b=i=a=0;e.each(function(l,j){var k={};if(d){k.top=i-f[l].top-b;i+=f[l].height;}else{k.left=a-f[l].left;a+=f[l].width;}b=b+f[l].margin;c[l]=k;},this);
var g={};$A(e).sort().each(function(j){g[j]=c[j];});this.start(g);this.currentOrder=e;return this;},rearrangeDOM:function(a){a=a||this.currentOrder;var b=this.elements[0].getParent();
var c=[];this.elements.setStyle("opacity",0);a.each(function(d){c.push(this.elements[d].inject(b).setStyles({top:0,left:0}));},this);this.elements.setStyle("opacity",1);
this.elements=$$(c);this.setDefaultOrder();return this;},getDefaultOrder:function(){return this.elements.map(function(b,a){return a;});},forward:function(){return this.sort(this.getDefaultOrder());
},backward:function(){return this.sort(this.getDefaultOrder().reverse());},reverse:function(){return this.sort(this.currentOrder.reverse());},sortByElements:function(a){return this.sort(a.map(function(b){return this.elements.indexOf(b);
},this));},swap:function(c,b){if($type(c)=="element"){c=this.elements.indexOf(c);}if($type(b)=="element"){b=this.elements.indexOf(b);}var a=$A(this.currentOrder);
a[this.currentOrder.indexOf(c)]=b;a[this.currentOrder.indexOf(b)]=c;return this.sort(a);}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:"px",grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,stopPropagation:false,modifiers:{x:"left",y:"top"}},initialize:function(){var b=Array.link(arguments,{options:Object.type,element:$defined});
this.element=document.id(b.element);this.document=this.element.getDocument();this.setOptions(b.options||{});var a=$type(this.options.handle);this.handles=((a=="array"||a=="collection")?$$(this.options.handle):document.id(this.options.handle))||this.element;
this.mouse={now:{},pos:{}};this.value={start:{},now:{}};this.selection=(Browser.Engine.trident)?"selectstart":"mousedown";this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};
this.attach();},attach:function(){this.handles.addEvent("mousedown",this.bound.start);return this;},detach:function(){this.handles.removeEvent("mousedown",this.bound.start);
return this;},start:function(c){if(c.rightClick){return;}if(this.options.preventDefault){c.preventDefault();}if(this.options.stopPropagation){c.stopPropagation();
}this.mouse.start=c.page;this.fireEvent("beforeStart",this.element);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,a]).fireEvent("snap",this.element);
}},drag:function(a){if(this.options.preventDefault){a.preventDefault();}this.mouse.now=a.page;for(var b in this.options.modifiers){if(!this.options.modifiers[b]){continue;
}this.value.now[b]=this.mouse.now[b]-this.mouse.pos[b];if(this.options.invert){this.value.now[b]*=-1;}if(this.options.limit&&this.limit[b]){if($chk(this.limit[b][1])&&(this.value.now[b]>this.limit[b][1])){this.value.now[b]=this.limit[b][1];
}else{if($chk(this.limit[b][0])&&(this.value.now[b]<this.limit[b][0])){this.value.now[b]=this.limit[b][0];}}}if(this.options.grid[b]){this.value.now[b]-=((this.value.now[b]-(this.limit[b][0]||0))%this.options.grid[b]);
}if(this.options.style){this.element.setStyle(this.options.modifiers[b],this.value.now[b]+this.options.unit);}else{this.element[this.options.modifiers[b]]=this.value.now[b];
}}this.fireEvent("drag",[this.element,a]);},cancel:function(a){this.document.removeEvent("mousemove",this.bound.check);this.document.removeEvent("mouseup",this.bound.cancel);
if(a){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent("cancel",this.element);}},stop:function(a){this.document.removeEvent(this.selection,this.bound.eventStop);
this.document.removeEvent("mousemove",this.bound.drag);this.document.removeEvent("mouseup",this.bound.stop);if(a){this.fireEvent("complete",[this.element,a]);
}}});Element.implement({makeResizable:function(a){var b=new Drag(this,$merge({modifiers:{x:"width",y:"height"}},a));this.store("resizer",b);return b.addEvent("drag",function(){this.fireEvent("resize",b);
}.bind(this));}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false,precalculate:false,includeMargins:true,checkDroppables:true},initialize:function(b,a){this.parent(b,a);
b=this.element;this.droppables=$$(this.options.droppables);this.container=document.id(this.options.container);if(this.container&&$type(this.container)!="element"){this.container=document.id(this.container.getDocument().body);
}var c=b.getStyles("left","top","position");if(c.left=="auto"||c.top=="auto"){b.setPosition(b.getPosition(b.getOffsetParent()));}if(c.position=="static"){b.setStyle("position","absolute");
}this.addEvent("start",this.checkDroppables,true);this.overed=null;},start:function(a){if(this.container){this.options.limit=this.calculateLimit();}if(this.options.precalculate){this.positions=this.droppables.map(function(b){return b.getCoordinates();
});}this.parent(a);},calculateLimit:function(){var d=this.element.getOffsetParent(),g=this.container.getCoordinates(d),f={},c={},b={},i={},k={};["top","right","bottom","left"].each(function(o){f[o]=this.container.getStyle("border-"+o).toInt();
b[o]=this.element.getStyle("border-"+o).toInt();c[o]=this.element.getStyle("margin-"+o).toInt();i[o]=this.container.getStyle("margin-"+o).toInt();k[o]=d.getStyle("padding-"+o).toInt();
},this);var e=this.element.offsetWidth+c.left+c.right,n=this.element.offsetHeight+c.top+c.bottom,h=0,j=0,m=g.right-f.right-e,a=g.bottom-f.bottom-n;if(this.options.includeMargins){h+=c.left;
j+=c.top;}else{m+=c.right;a+=c.bottom;}if(this.element.getStyle("position")=="relative"){var l=this.element.getCoordinates(d);l.left-=this.element.getStyle("left").toInt();
l.top-=this.element.getStyle("top").toInt();h+=f.left-l.left;j+=f.top-l.top;m+=c.left-l.left;a+=c.top-l.top;if(this.container!=d){h+=i.left+k.left;j+=(Browser.Engine.trident4?0:i.top)+k.top;
}}else{h-=c.left;j-=c.top;if(this.container==d){m-=f.left;a-=f.top;}else{h+=g.left+f.left;j+=g.top+f.top;}}return{x:[h,m],y:[j,a]};},checkAgainst:function(c,b){c=(this.positions)?this.positions[b]:c.getCoordinates();
var a=this.mouse.now;return(a.x>c.left&&a.x<c.right&&a.y<c.bottom&&a.y>c.top);},checkDroppables:function(){var a=this.droppables.filter(this.checkAgainst,this).getLast();
if(this.overed!=a){if(this.overed){this.fireEvent("leave",[this.element,this.overed]);}if(a){this.fireEvent("enter",[this.element,a]);}this.overed=a;}},drag:function(a){this.parent(a);
if(this.options.checkDroppables&&this.droppables.length){this.checkDroppables();}},stop:function(a){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed,a]);
this.overed=null;return this.parent(a);}});Element.implement({makeDraggable:function(a){var b=new Drag.Move(this,a);this.store("dragger",b);return b;}});
var Slider=new Class({Implements:[Events,Options],Binds:["clickedElement","draggedKnob","scrolledElement"],options:{onTick:function(a){if(this.options.snap){a=this.toPosition(this.step);
}this.knob.setStyle(this.property,a);},initialStep:0,snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(f,a,e){this.setOptions(e);
this.element=document.id(f);this.knob=document.id(a);this.previousChange=this.previousEnd=this.step=-1;var g,b={},d={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";
this.property="top";g="offsetHeight";break;case"horizontal":this.axis="x";this.property="left";g="offsetWidth";}this.full=this.element.measure(function(){this.half=this.knob[g]/2;
return this.element[g]-this.knob[g]+(this.options.offset*2);}.bind(this));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.initialStep?this.toPosition(this.options.initialStep):-this.options.offset);
d[this.axis]=this.property;b[this.axis]=[-this.options.offset,this.full-this.options.offset];var c={snap:0,limit:b,modifiers:d,onDrag:this.draggedKnob,onStart:this.draggedKnob,onBeforeStart:(function(){this.isDragging=true;
}).bind(this),onCancel:function(){this.isDragging=false;}.bind(this),onComplete:function(){this.isDragging=false;this.draggedKnob();this.end();}.bind(this)};
if(this.options.snap){c.grid=Math.ceil(this.stepWidth);c.limit[this.axis][1]=this.full;}this.drag=new Drag(this.knob,c);this.attach();},attach:function(){this.element.addEvent("mousedown",this.clickedElement);
if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement);}this.drag.attach();return this;},detach:function(){this.element.removeEvent("mousedown",this.clickedElement);
this.element.removeEvent("mousewheel",this.scrolledElement);this.drag.detach();return this;},set:function(a){if(!((this.range>0)^(a<this.min))){a=this.min;
}if(!((this.range>0)^(a>this.max))){a=this.max;}this.step=Math.round(a);this.checkStep();this.fireEvent("tick",this.toPosition(this.step));this.end();return this;
},clickedElement:function(c){if(this.isDragging||c.target==this.knob){return;}var b=this.range<0?-1:1;var a=c.page[this.axis]-this.element.getPosition()[this.axis]-this.half;
a=a.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();this.fireEvent("tick",a);
this.end();},scrolledElement:function(a){var b=(this.options.mode=="horizontal")?(a.wheel<0):(a.wheel>0);this.set(b?this.step-this.stepSize:this.step+this.stepSize);
a.stop();},draggedKnob:function(){var b=this.range<0?-1:1;var a=this.drag.value.now[this.axis];a=a.limit(-this.options.offset,this.full-this.options.offset);
this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
this.fireEvent("change",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"");
}},toStep:function(a){var b=(a+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(b-=b%this.stepSize):b;},toPosition:function(a){return(this.full*Math.abs(this.min-a))/(this.steps*this.stepSize)-this.options.offset;
}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(a,b){this.setOptions(b);
this.elements=[];this.lists=[];this.idle=true;this.addLists($$(document.id(a)||a));if(!this.options.clone){this.options.revert=false;}if(this.options.revert){this.effect=new Fx.Morph(null,$merge({duration:250,link:"cancel"},this.options.revert));
}},attach:function(){this.addLists(this.lists);return this;},detach:function(){this.lists=this.removeLists(this.lists);return this;},addItems:function(){Array.flatten(arguments).each(function(a){this.elements.push(a);
var b=a.retrieve("sortables:start",this.start.bindWithEvent(this,a));(this.options.handle?a.getElement(this.options.handle)||a:a).addEvent("mousedown",b);
},this);return this;},addLists:function(){Array.flatten(arguments).each(function(a){this.lists.push(a);this.addItems(a.getChildren());},this);return this;
},removeItems:function(){return $$(Array.flatten(arguments).map(function(a){this.elements.erase(a);var b=a.retrieve("sortables:start");(this.options.handle?a.getElement(this.options.handle)||a:a).removeEvent("mousedown",b);
return a;},this));},removeLists:function(){return $$(Array.flatten(arguments).map(function(a){this.lists.erase(a);this.removeItems(a.getChildren());return a;
},this));},getClone:function(b,a){if(!this.options.clone){return new Element("div").inject(document.body);}if($type(this.options.clone)=="function"){return this.options.clone.call(this,b,a,this.list);
}var c=a.clone(true).setStyles({margin:"0px",position:"absolute",visibility:"hidden",width:a.getStyle("width")});if(c.get("html").test("radio")){c.getElements("input[type=radio]").each(function(d,e){d.set("name","clone_"+e);
});}return c.inject(this.list).setPosition(a.getPosition(a.getOffsetParent()));},getDroppables:function(){var a=this.list.getChildren();if(!this.options.constrain){a=this.lists.concat(a).erase(this.list);
}return a.erase(this.clone).erase(this.element);},insert:function(c,b){var a="inside";if(this.lists.contains(b)){this.list=b;this.drag.droppables=this.getDroppables();
}else{a=this.element.getAllPrevious().contains(b)?"before":"after";}this.element.inject(b,a);this.fireEvent("sort",[this.element,this.clone]);},start:function(b,a){if(!this.idle){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;}});Request.JSONP=new Class({Implements:[Chain,Events,Options,Log],options:{url:"",data:{},retries:0,timeout:0,link:"ignore",callbackKey:"callback",injectScript:document.head},initialize:function(a){this.setOptions(a);
if(this.options.log){this.enableLog();}this.running=false;this.requests=0;this.triesRemaining=[];},check:function(){if(!this.running){return true;}switch(this.options.link){case"cancel":this.cancel();
return true;case"chain":this.chain(this.caller.bind(this,arguments));return false;}return false;},send:function(c){if(!$chk(arguments[1])&&!this.check(c)){return this;
}var e=$type(c),a=this.options,b=$chk(arguments[1])?arguments[1]:this.requests++;if(e=="string"||e=="element"){c={data:c};}c=$extend({data:a.data,url:a.url},c);
if(!$chk(this.triesRemaining[b])){this.triesRemaining[b]=this.options.retries;}var d=this.triesRemaining[b];(function(){var f=this.getScript(c);this.log("JSONP retrieving script with url: "+f.get("src"));
this.fireEvent("request",f);this.running=true;(function(){if(d){this.triesRemaining[b]=d-1;if(f){f.destroy();this.send(c,b).fireEvent("retry",this.triesRemaining[b]);
}}else{if(f&&this.options.timeout){f.destroy();this.cancel().fireEvent("failure");}}}).delay(this.options.timeout,this);}).delay(Browser.Engine.trident?50:0,this);
return this;},cancel:function(){if(!this.running){return this;}this.running=false;this.fireEvent("cancel");return this;},getScript:function(c){var b=Request.JSONP.counter,d;
Request.JSONP.counter++;switch($type(c.data)){case"element":d=document.id(c.data).toQueryString();break;case"object":case"hash":d=Hash.toQueryString(c.data);
}var e=c.url+(c.url.test("\\?")?"&":"?")+(c.callbackKey||this.options.callbackKey)+"=Request.JSONP.request_map.request_"+b+(d?"&"+d:"");if(e.length>2083){this.log("JSONP "+e+" will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs");
}var a=new Element("script",{type:"text/javascript",src:e});Request.JSONP.request_map["request_"+b]=function(){this.success(arguments,a);}.bind(this);return a.inject(this.options.injectScript);
},success:function(b,a){if(a){a.destroy();}this.running=false;this.log("JSONP successfully retrieved: ",b);this.fireEvent("complete",b).fireEvent("success",b).callChain();
}});Request.JSONP.counter=0;Request.JSONP.request_map={};Request.Queue=new Class({Implements:[Options,Events],Binds:["attach","request","complete","cancel","success","failure","exception"],options:{stopOnFailure:true,autoAdvance:true,concurrent:1,requests:{}},initialize:function(a){if(a){var b=a.requests;
delete a.requests;}this.setOptions(a);this.requests=new Hash;this.queue=[];this.reqBinders={};if(b){this.addRequests(b);}},addRequest:function(a,b){this.requests.set(a,b);
this.attach(a,b);return this;},addRequests:function(a){$each(a,function(c,b){this.addRequest(b,c);},this);return this;},getName:function(a){return this.requests.keyOf(a);
},attach:function(a,b){if(b._groupSend){return this;}["request","complete","cancel","success","failure","exception"].each(function(c){if(!this.reqBinders[a]){this.reqBinders[a]={};
}this.reqBinders[a][c]=function(){this["on"+c.capitalize()].apply(this,[a,b].extend(arguments));}.bind(this);b.addEvent(c,this.reqBinders[a][c]);},this);
b._groupSend=b.send;b.send=function(c){this.send(a,c);return b;}.bind(this);return this;},removeRequest:function(b){var a=$type(b)=="object"?this.getName(b):b;
if(!a&&$type(a)!="string"){return this;}b=this.requests.get(a);if(!b){return this;}["request","complete","cancel","success","failure","exception"].each(function(c){b.removeEvent(c,this.reqBinders[a][c]);
},this);b.send=b._groupSend;delete b._groupSend;return this;},getRunning:function(){return this.requests.filter(function(a){return a.running;});},isRunning:function(){return !!(this.getRunning().getKeys().length);
},send:function(b,a){var c=function(){this.requests.get(b)._groupSend(a);this.queue.erase(c);}.bind(this);c.name=b;if(this.getRunning().getKeys().length>=this.options.concurrent||(this.error&&this.options.stopOnFailure)){this.queue.push(c);
}else{c();}return this;},hasNext:function(a){return(!a)?!!this.queue.length:!!this.queue.filter(function(b){return b.name==a;}).length;},resume:function(){this.error=false;
(this.options.concurrent-this.getRunning().getKeys().length).times(this.runNext,this);return this;},runNext:function(a){if(!this.queue.length){return this;
}if(!a){this.queue[0]();}else{var b;this.queue.each(function(c){if(!b&&c.name==a){b=true;c();}});}return this;},runAll:function(){this.queue.each(function(a){a();
});return this;},clear:function(a){if(!a){this.queue.empty();}else{this.queue=this.queue.map(function(b){if(b.name!=a){return b;}else{return false;}}).filter(function(b){return b;
});}return this;},cancel:function(a){this.requests.get(a).cancel();return this;},onRequest:function(){this.fireEvent("request",arguments);},onComplete:function(){this.fireEvent("complete",arguments);
if(!this.queue.length){this.fireEvent("end");}},onCancel:function(){if(this.options.autoAdvance&&!this.error){this.runNext();}this.fireEvent("cancel",arguments);
},onSuccess:function(){if(this.options.autoAdvance&&!this.error){this.runNext();}this.fireEvent("success",arguments);},onFailure:function(){this.error=true;
if(!this.options.stopOnFailure&&this.options.autoAdvance){this.runNext();}this.fireEvent("failure",arguments);},onException:function(){this.error=true;
if(!this.options.stopOnFailure&&this.options.autoAdvance){this.runNext();}this.fireEvent("exception",arguments);}});var Asset={javascript:function(f,d){d=$extend({onload:$empty,document:document,check:$lambda(true)},d);
if(d.onLoad){d.onload=d.onLoad;}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();}}}).set(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=document.id(d)||new Element("img");["load","abort","error"].each(function(e){var g="on"+e;
var f=e.capitalize();if(b["on"+f]){b[g]=b["on"+f];}var h=b[g];delete b[g];d[g]=function(){if(!d){return;}if(!a.parentNode){a.width=d.width;a.height=d.height;
}d=d.onload=d.onabort=d.onerror=null;h.delay(1,a,a);a.fireEvent(e,a,1);};});d.src=a.src=c;if(d&&d.complete){d.onload.delay(1);}return a.set(b);},images:function(d,c){c=$merge({onComplete:$empty,onProgress:$empty,onError:$empty,properties:{}},c);
d=$splat(d);var a=[];var b=0;return new Elements(d.map(function(e){return Asset.image(e,$extend(c.properties,{onload:function(){c.onProgress.call(this,b,d.indexOf(e));
b++;if(b==d.length){c.onComplete();}},onerror:function(){c.onError.call(this,b,d.indexOf(e));b++;if(b==d.length){c.onComplete();}}}));}));}};var IframeShim=new Class({Implements:[Options,Events,Class.Occlude],options:{className:"iframeShim",src:'javascript:false;document.write("");',display:false,zIndex:null,margin:0,offset:{x:0,y:0},browsers:(Browser.Engine.trident4||(Browser.Engine.gecko&&!Browser.Engine.gecko19&&Browser.Platform.mac))},property:"IframeShim",initialize:function(b,a){this.element=document.id(b);
if(this.occlude()){return this.occluded;}this.setOptions(a);this.makeShim();return this;},makeShim:function(){if(this.options.browsers){var c=this.element.getStyle("zIndex").toInt();
if(!c){c=1;var b=this.element.getStyle("position");if(b=="static"||!b){this.element.setStyle("position","relative");}this.element.setStyle("zIndex",c);
}c=($chk(this.options.zIndex)&&c>this.options.zIndex)?this.options.zIndex:c-1;if(c<0){c=1;}this.shim=new Element("iframe",{src:this.options.src,scrolling:"no",frameborder:0,styles:{zIndex:c,position:"absolute",border:"none",filter:"progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)"},"class":this.options.className}).store("IframeShim",this);
var a=(function(){this.shim.inject(this.element,"after");this[this.options.display?"show":"hide"]();this.fireEvent("inject");}).bind(this);if(!IframeShim.ready){window.addEvent("load",a);
}else{a();}}else{this.position=this.hide=this.show=this.dispose=$lambda(this);}},position:function(){if(!IframeShim.ready||!this.shim){return this;}var a=this.element.measure(function(){return this.getSize();
});if(this.options.margin!=undefined){a.x=a.x-(this.options.margin*2);a.y=a.y-(this.options.margin*2);this.options.offset.x+=this.options.margin;this.options.offset.y+=this.options.margin;
}this.shim.set({width:a.x,height:a.y}).position({relativeTo:this.element,offset:this.options.offset});return this;},hide:function(){if(this.shim){this.shim.setStyle("display","none");
}return this;},show:function(){if(this.shim){this.shim.setStyle("display","block");}return this.position();},dispose:function(){if(this.shim){this.shim.dispose();
}return this;},destroy:function(){if(this.shim){this.shim.destroy();}return this;}});window.addEvent("load",function(){IframeShim.ready=true;});var Mask=new Class({Implements:[Options,Events],Binds:["position"],options:{style:{},"class":"mask",maskMargins:false,useIframeShim:true,iframeShimOptions:{}},initialize:function(b,a){this.target=document.id(b)||document.id(document.body);
this.target.store("Mask",this);this.setOptions(a);this.render();this.inject();},render:function(){this.element=new Element("div",{"class":this.options["class"],id:this.options.id||"mask-"+$time(),styles:$merge(this.options.style,{display:"none"}),events:{click:function(){this.fireEvent("click");
if(this.options.hideOnClick){this.hide();}}.bind(this)}});this.hidden=true;},toElement:function(){return this.element;},inject:function(b,a){a=a||this.options.inject?this.options.inject.where:""||this.target==document.body?"inside":"after";
b=b||this.options.inject?this.options.inject.target:""||this.target;this.element.inject(b,a);if(this.options.useIframeShim){this.shim=new IframeShim(this.element,this.options.iframeShimOptions);
this.addEvents({show:this.shim.show.bind(this.shim),hide:this.shim.hide.bind(this.shim),destroy:this.shim.destroy.bind(this.shim)});}},position:function(){this.resize(this.options.width,this.options.height);
this.element.position({relativeTo:this.target,position:"topLeft",ignoreMargins:!this.options.maskMargins,ignoreScroll:this.target==document.body});return this;
},resize:function(a,e){var b={styles:["padding","border"]};if(this.options.maskMargins){b.styles.push("margin");}var d=this.target.getComputedSize(b);if(this.target==document.body){var c=window.getSize();
if(d.totalHeight<c.y){d.totalHeight=c.y;}if(d.totalWidth<c.x){d.totalWidth=c.x;}}this.element.setStyles({width:$pick(a,d.totalWidth,d.x),height:$pick(e,d.totalHeight,d.y)});
return this;},show:function(){if(!this.hidden){return this;}window.addEvent("resize",this.position);this.position();this.showMask.apply(this,arguments);
return this;},showMask:function(){this.element.setStyle("display","block");this.hidden=false;this.fireEvent("show");},hide:function(){if(this.hidden){return this;
}window.removeEvent("resize",this.position);this.hideMask.apply(this,arguments);if(this.options.destroyOnHide){return this.destroy();}return this;},hideMask:function(){this.element.setStyle("display","none");
this.hidden=true;this.fireEvent("hide");},toggle:function(){this[this.hidden?"show":"hide"]();},destroy:function(){this.hide();this.element.destroy();this.fireEvent("destroy");
this.target.eliminate("mask");}});Element.Properties.mask={set:function(b){var a=this.retrieve("mask");return this.eliminate("mask").store("mask:options",b);
},get:function(a){if(a||!this.retrieve("mask")){if(this.retrieve("mask")){this.retrieve("mask").destroy();}if(a||!this.retrieve("mask:options")){this.set("mask",a);
}this.store("mask",new Mask(this,this.retrieve("mask:options")));}return this.retrieve("mask");}};Element.implement({mask:function(a){this.get("mask",a).show();
return this;},unmask:function(){this.get("mask").hide();return this;}});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(a,b){this.element.scrollTo(a,b);
},fps:50},initialize:function(b,a){this.setOptions(a);this.element=document.id(b);this.docBody=document.id(this.element.getDocument().body);this.listener=($type(this.element)!="element")?this.docBody:this.element;
this.timer=null;this.bound={attach:this.attach.bind(this),detach:this.detach.bind(this),getCoords:this.getCoords.bind(this)};},start:function(){this.listener.addEvents({mouseover:this.bound.attach,mouseout:this.bound.detach});
},stop:function(){this.listener.removeEvents({mouseover:this.bound.attach,mouseout:this.bound.detach});this.detach();this.timer=$clear(this.timer);},attach:function(){this.listener.addEvent("mousemove",this.bound.getCoords);
},detach:function(){this.listener.removeEvent("mousemove",this.bound.getCoords);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(Math.round(1000/this.options.fps),this);}},scroll:function(){var b=this.element.getSize(),a=this.element.getScroll(),f=this.element!=this.docBody?this.element.getOffsets():{x:0,y:0},c=this.element.getScrollSize(),e={x:0,y:0};
for(var d in this.page){if(this.page[d]<(this.options.area+f[d])&&a[d]!=0){e[d]=(this.page[d]-this.options.area-f[d])*this.options.velocity;}else{if(this.page[d]+this.options.area>(b[d]+f[d])&&a[d]+b[d]!=c[d]){e[d]=(this.page[d]-b[d]+this.options.area-f[d])*this.options.velocity;
}}}if(e.y||e.x){this.fireEvent("change",[a.x+e.x,a.y+e.y]);}}});(function(){var a=function(c,b){return(c)?($type(c)=="function"?c(b):b.get(c)):"";};this.Tips=new Class({Implements:[Events,Options],options:{onShow:function(){this.tip.setStyle("display","block");
},onHide:function(){this.tip.setStyle("display","none");},title:"title",text:function(b){return b.get("rel")||b.get("href");},showDelay:100,hideDelay:100,className:"tip-wrap",offset:{x:16,y:16},windowPadding:{x:0,y:0},fixed:false},initialize:function(){var b=Array.link(arguments,{options:Object.type,elements:$defined});
this.setOptions(b.options);if(b.elements){this.attach(b.elements);}this.container=new Element("div",{"class":"tip"});},toElement:function(){if(this.tip){return this.tip;
}return this.tip=new Element("div",{"class":this.options.className,styles:{position:"absolute",top:0,left:0}}).adopt(new Element("div",{"class":"tip-top"}),this.container,new Element("div",{"class":"tip-bottom"})).inject(document.body);
},attach:function(b){$$(b).each(function(d){var f=a(this.options.title,d),e=a(this.options.text,d);d.erase("title").store("tip:native",f).retrieve("tip:title",f);
d.retrieve("tip:text",e);this.fireEvent("attach",[d]);var c=["enter","leave"];if(!this.options.fixed){c.push("move");}c.each(function(h){var g=d.retrieve("tip:"+h);
if(!g){g=this["element"+h.capitalize()].bindWithEvent(this,d);}d.store("tip:"+h,g).addEvent("mouse"+h,g);},this);},this);return this;},detach:function(b){$$(b).each(function(d){["enter","leave","move"].each(function(e){d.removeEvent("mouse"+e,d.retrieve("tip:"+e)).eliminate("tip:"+e);
});this.fireEvent("detach",[d]);if(this.options.title=="title"){var c=d.retrieve("tip:native");if(c){d.set("title",c);}}},this);return this;},elementEnter:function(c,b){this.container.empty();
["title","text"].each(function(e){var d=b.retrieve("tip:"+e);if(d){this.fill(new Element("div",{"class":"tip-"+e}).inject(this.container),d);}},this);$clear(this.timer);
this.timer=(function(){this.show(this,b);this.position((this.options.fixed)?{page:b.getPosition()}:c);}).delay(this.options.showDelay,this);},elementLeave:function(c,b){$clear(this.timer);
this.timer=this.hide.delay(this.options.hideDelay,this,b);this.fireForParent(c,b);},fireForParent:function(c,b){b=b.getParent();if(!b||b==document.body){return;
}if(b.retrieve("tip:enter")){b.fireEvent("mouseenter",c);}else{this.fireForParent(c,b);}},elementMove:function(c,b){this.position(c);},position:function(e){if(!this.tip){document.id(this);
}var c=window.getSize(),b=window.getScroll(),f={x:this.tip.offsetWidth,y:this.tip.offsetHeight},d={x:"left",y:"top"},g={};for(var h in d){g[d[h]]=e.page[h]+this.options.offset[h];
if((g[d[h]]+f[h]-b[h])>c[h]-this.options.windowPadding[h]){g[d[h]]=e.page[h]-this.options.offset[h]-f[h];}}this.tip.setStyles(g);},fill:function(b,c){if(typeof c=="string"){b.set("html",c);
}else{b.adopt(c);}},show:function(b){if(!this.tip){document.id(this);}this.fireEvent("show",[this.tip,b]);},hide:function(b){if(!this.tip){document.id(this);
}this.fireEvent("hide",[this.tip,b]);}});})();var Spinner=new Class({Extends:Mask,options:{"class":"spinner",containerPosition:{},content:{"class":"spinner-content"},messageContainer:{"class":"spinner-msg"},img:{"class":"spinner-img"},fxOptions:{link:"chain"}},initialize:function(){this.parent.apply(this,arguments);
this.target.store("spinner",this);var a=function(){this.active=false;}.bind(this);this.addEvents({hide:a,show:a});},render:function(){this.parent();this.element.set("id",this.options.id||"spinner-"+$time());
this.content=document.id(this.options.content)||new Element("div",this.options.content);this.content.inject(this.element);if(this.options.message){this.msg=document.id(this.options.message)||new Element("p",this.options.messageContainer).appendText(this.options.message);
this.msg.inject(this.content);}if(this.options.img){this.img=document.id(this.options.img)||new Element("div",this.options.img);this.img.inject(this.content);
}this.element.set("tween",this.options.fxOptions);},show:function(a){if(this.active){return this.chain(this.show.bind(this));}if(!this.hidden){this.callChain.delay(20,this);
return this;}this.active=true;return this.parent(a);},showMask:function(a){var b=function(){this.content.position($merge({relativeTo:this.element},this.options.containerPosition));
}.bind(this);if(a){this.parent();b();}else{this.element.setStyles({display:"block",opacity:0}).tween("opacity",this.options.style.opacity||0.9);b();this.hidden=false;
this.fireEvent("show");this.callChain();}},hide:function(a){if(this.active){return this.chain(this.hide.bind(this));}if(this.hidden){this.callChain.delay(20,this);
return this;}this.active=true;return this.parent(a);},hideMask:function(a){if(a){return this.parent();}this.element.tween("opacity",0).get("tween").chain(function(){this.element.setStyle("display","none");
this.hidden=true;this.fireEvent("hide");this.callChain();}.bind(this));},destroy:function(){this.content.destroy();this.parent();this.target.eliminate("spinner");
}});Spinner.implement(new Chain);if(window.Request){Request=Class.refactor(Request,{options:{useSpinner:false,spinnerOptions:{},spinnerTarget:false},initialize:function(a){this._send=this.send;
this.send=function(c){if(this.spinner){this.spinner.chain(this._send.bind(this,c)).show();}else{this._send(c);}return this;};this.previous(a);var b=document.id(this.options.spinnerTarget)||document.id(this.options.update);
if(this.options.useSpinner&&b){this.spinner=b.get("spinner",this.options.spinnerOptions);["onComplete","onException","onCancel"].each(function(c){this.addEvent(c,this.spinner.hide.bind(this.spinner));
},this);}},getSpinner:function(){return this.spinner;}});}Element.Properties.spinner={set:function(a){var b=this.retrieve("spinner");return this.eliminate("spinner").store("spinner:options",a);
},get:function(a){if(a||!this.retrieve("spinner")){if(this.retrieve("spinner")){this.retrieve("spinner").destroy();}if(a||!this.retrieve("spinner:options")){this.set("spinner",a);
}new Spinner(this,this.retrieve("spinner:options"));}return this.retrieve("spinner");}};Element.implement({spin:function(a){this.get("spinner",a).show();
return this;},unspin:function(){var a=Array.link(arguments,{options:Object.type,callback:Function.type});this.get("spinner",a.options).hide(a.callback);
return this;}});
var accord = new Class({
	Implements : [Options],
		options : {
			bodys: '.accord-body',
			titles: '.accord-title',
			display: -1,
			initialDisplayFx: false,
			alwaysHide:true,
			show: 0
		},
	initialize: function(obj){
			this.object = obj;
			$(this.object).removeClass(".accordian");
			this.setupOps = '';
			if($(this.object).get("class")){
				$splat($(this.object).get("class").split(" ")).each(function(item,index){
						if(item.contains(":")){
								this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
						}
				},this);
				if(this.setupOps != ''){
					this.setOptions(JSON.decode("{"+this.setupOps+"}"));
				}
			}
			var headings = $(this.object).getElements(this.options.titles);
			headings.each(function(item,index){
				$(item).addEvent("mouseenter",function(){ $(this).addClass("over"); });
				$(item).addEvent("mouseleave",function(){ $(this).removeClass("over");});	
			});
			var bodys	 = $(this.object).getElements(this.options.bodys);
			new Fx.Accordion(headings,bodys,{onBackground: this.background.bind(this), onActive: this.active.bind(this),display:this.options.display,alwaysHide:this.options.alwaysHide,initialDisplayFx:this.options.initialDisplayFx,show:this.options.show});
	},
	background: function(toggler,element){
		$(toggler).removeClass("open");
	},
	active: function(toggler,element){
		$(toggler).addClass("open");
	}
});
window.addEvent('domready', function(){
		$$('.accordian').each(function(item,index){
			new accord(item);
		});
});
var Ajaxlinks = new Class({
	Implements : [Options,Log],
	options : {
		url 			: "",
		value			: "",
		output			: "" 	// [lb|lt]
	},
 	initialize : function(obj,options){
		this.setOptions(options);
		this.object  = obj;
		this.setupOps = '';
		this.options.url = $(this.object).get("href");
		if(this.options.url.contains("?")){
			this.options.url += "&ajax=ajax";
		}else{
			this.options.url += "?ajax=ajax";
		}
		if($(this.object).get("class")){
			$splat($(this.object).get("class").split(" ")).each(function(item,index){
					if(item.contains(":")){
							this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
					}
			},this);
			if(this.setupOps != ''){
				this.setOptions(JSON.decode("{"+this.setupOps+"}"));
			}
		}
		$(this.object).addEvent("click",this.docall.bind(this));
	},
	unspin:function(){
		$(this.options.output).unspin();
	},
	docall:function(event){
		var ev = new Event(event).stop();
		if($(this.options.output) && this.options.url != ''){
			if($(this.options.output).getElement("form")){
				$(document.body).fireEvent("closepopup");
			}
			$(this.options.output).empty();
			var newajaxLink = $(this.options.output).clone();
			$(newajaxLink).inject($(this.options.output),"before");
			$(this.options.output).destroy();
			$(newajaxLink).set("id",this.options.output);
			$(newajaxLink).set("load",{onComplete:this.unspin.bind(this)});
			$(this.options.output).set("spinner",{"destroyOnHide":true});
			$(this.options.output).spin();
			this.options.url = $(this.object).get("href");
			if(this.options.url.contains("?")){
				this.options.url += "&ajax=ajax";
			}else{
				this.options.url += "?ajax=ajax";
			}
			$(this.options.output).load(this.options.url);
		}
	}
});
window.addEvent("domready",function(){
	$$('.ajaxlink').each(function(item,index){
			new Ajaxlinks(item);
	});
});

/* Carousel Created by Kevin Dibble
Useage: 
	Add a class of animate to the div area
	insert the elements inside the area to animate with a class of "anime"
	To have images pre-load insert a div tage with a class of "anime" and "image" and use the rel tag to point to the image path
Example:
<div class="animate" rel="{effect: 'slide', delay : 5000, effectTime : 'long', pauseButton : 'pause', nextButton : 'next', backButton : 'last'}">
 <img src="../js/quotes/quote1_03.png" width="443" height="310" alt="quote" class="anime"/>
            <p class="anime image" rel="css/images/icons/arrow_up.png">Image</p>
            <p class="anime image" rel="css/images/icons/bullet_delete.png">image</p>
            <p class="anime image" rel="css/images/icons/error.png">image</p>
            <p class="anime image" rel="css/images/icons/page_excel.png">image</p>
            <p class="anime image" rel="css/images/icons/page_word.png">image</p>
            <p class="anime ajax"  rel="index.php">some text</p>

*/

ImageScale = new Class({
	Implements 	: [Options],
	Binds		: ['scale'],
	options : {
		autoCenter 	: true,
		scaleWidth  : true,
		scaleHeight : true,
		apply		: true,
		width		: 100,
		height		: 100,
		path		: 'auto',
		container	: null
	},
	newWidth		: 100,
	newHeight		: 100,
	topMargin		: 0,
	leftMargin		: 0,
	percentage		: 1,
	initialize: function(obj,options){
		this.setOptions(options);
		this.options.path = (this.options.path!='auto')?this.options.path : $(obj).get("rel");
		if($(obj).get("tag").contains("img")){
			this.object = $(obj);
			this.scale();
		}else{
			$(obj).empty();
			this.object = new Asset.image(this.options.path,{onload: this.scale});
			$(this.object).inject($(obj),"top");
		}
	},
	scale: function(){
		if(this.options.scaleWidth){
			if ($(this.object).getSize().x > this.options.width){
				this.percentage = (this.options.width / $(this.object).getSize().x);
			}
		}
		if(this.options.scaleHeight){
			if (($(this.object).getSize().y * this.percentage) > this.options.height){
				this.percentage = (this.options.height / $(this.object).getSize().y);
			}
		}
		this.newWidth  = $(this.object).getSize().x  * this.percentage;
		this.newHeight = $(this.object).getSize().y  * this.percentage;
		if(this.options.autoCenter){
			this.center();	
		}
		if(this.options.apply){
			this.apply();	
		}
	},
	center:function(){
		this.leftMargin = (this.options.width-this.newWidth)   / 2;
		this.topMargin  = (this.options.height-this.newHeight) / 2;
	},
	apply: function(){
		$(this.object).setStyles({"width" : this.newWidth, "height":this.newHeight, "margin-left" : this.leftMargin, "margin-top" : this.topMargin});
	}
});
	
	
Animator = new Class({
	Implements 	: [Options],
	objects 	: [],
	images		: [],
	scrollZone	: null,
	options: {
		className   : 'animate',
		subClass    : 'anime',
		effect		: 'fade',   // [fade | slide | up | nothing ]
		pauseButton : null,
		nextButton  : null,
		backButton  : null,
		autoStart	: true,
		delay		: 4000,
		effectTime  : 'short',
		autoCenter	: true,
		scaleWidth  : true,
		scaleHeight : true,
		playText	: '&gt;',
		pauseText	: '||',
		playOnce	: false,
		directBtn 	: false		// Set this to a class to create direct buttons for the animation effect
	},
	initialize: function(obj,options){
		this.setOptions(options);
		this.object = obj;
		this.objects = $(this.object).getElements("."+this.options.subClass);
		if(this.objects.length <= 1){
			return false;	
		}
		this.width 	 = $(this.object).getSize().x;
		this.height  = $(this.object).getSize().y;
		this.left    = $(this.object).getPosition($(this.object).getParent()).x;
		this.top   	 = $(this.object).getPosition($(this.object).getParent()).y;
		var position = ($(this.object).getStyle("position") != "absolute")? 'relative' : "absolute";
		$(this.object).setStyles({
			'overflow':"hidden",
			'position' : position
		});
		this.aniLeft = $(this.object).getStyle("padding-left").toInt();
		this.aniTop  = $(this.object).getStyle("padding-top").toInt();
		this.width	 = this.width - ($(this.object).getStyle("padding-left").toInt() + $(this.object).getStyle("padding-right").toInt());
		this.height	 = this.height - ($(this.object).getStyle("padding-top").toInt() + $(this.object).getStyle("padding-bottom").toInt());
		this.setupOps= '';
		if($(this.object).get("class")){
			$splat($(this.object).get("class").split(" ")).each(function(item,index){
					if(item.contains(":")){
							this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
					}
			},this);
			if(this.setupOps != ''){
				this.setOptions(JSON.decode("{"+this.setupOps+"}"));
			}
		}
		if(this.options.directBtn != false){
			if($("bannerControlScroll")){
				this.scrollZone = new Fx.Scroll($("bannerControlScroll"));
			}
			var jumpToImage = this.jumpToImage.bind(this);
			$$(this.options.directBtn).each(function(item,index){
				$(item).set("rel",index);
				$(item).set("title","");
				item.addEvent("click",function(event){
					new Event(event).stop();
					jumpToImage(this.get("rel"));							   
				});
			},this);
		}
		this.timer  = null;
		this.current = 0;
		this.setUpObjects();
		if($(this.options.pauseButton)){
			var pause = this.pause.bind(this);	
			$(this.options.pauseButton).addEvent("click",pause);
			this.options.playText = ($(this.options.pauseButton).get("html").clean() != "")?$(this.options.pauseButton).get("html")  : this.options.playText;
		}
		if($(this.options.nextButton)){
			var next = this.next.bind(this);	
			$(this.options.nextButton).addEvent("click",next);
		}
		if($(this.options.backButton)){
			var last = this.last.bind(this);	
			$(this.options.backButton).addEvent("click",last);
		}
		if(this.options.autoStart){
			this.play();
		}
		this.updateIcons();
	},
	jumpToImage : function(num){
		$clear(this.timer);
		if(this.object){
			this.doEffect(this.objects[this.current],"out");
			this.current = parseInt(num);
			if(this.current > this.objects.length -1){
				this.current = 0;
			}
			this.doEffect(this.objects[this.current],"in");
		}else{
			this.remove();	
		}
		this.updateIcons();
	},
	updateIcons:function(){
		var found=false;
		$$(this.options.directBtn).each(function(item,index){
			if($(item).get("rel")){
				if((this.current == 0 || this.current == $(item).get("rel").toInt()) && found==false){
					item.removeClass("fade");
					item.addClass("current");
					found=true;
					if(this.scrollZone){
						this.scrollZone.toElement($(item));	
					}
				}else{
					item.removeClass("current");
					item.addClass("fade");
				}
			}
		},this);
	},
	remove : function(){
		$clear(this.timer);
	},
	setUpObjects: function(){
		this.objects.each(function(item,index){
			var opaque = (index==0)? 1 : 0;
			item.removeClass("hide");
			var tmpWidth   = this.width - (item.getStyle("padding-left").toInt() + item.getStyle("padding-right").toInt() + item.getStyle("margin-left").toInt() + item.getStyle("margin-right").toInt());
			var tmpHeight  = this.height - (item.getStyle("padding-top").toInt() + item.getStyle("padding-bottom").toInt() + item.getStyle("margin-top").toInt() + item.getStyle("margin-bottom").toInt());
			item.set("morph",{duration: this.options.effectTime});
			if(item.get("tag").contains("img")){
				new ImageScale(item,{
					height:		(tmpHeight - this.aniTop),
					width:		(tmpWidth - this.aniLeft),
					autoCenter: this.options.autoCenter,
					scaleWidth: this.options.scaleWidth,
					scaleHeight: this.options.scaleHeight
				});
				item.setStyles({
					position 	:'absolute',
					opacity		: opaque,
					top			: this.aniTop,
					left		: this.aniLeft,
					overflow	: "hidden"
				});
			}else{
				if(item.hasClass("image")){
					new ImageScale(item,{
						height:		(tmpHeight - this.aniTop),
						width:		(tmpWidth - this.aniLeft),
						autoCenter: this.options.autoCenter,
						scaleWidth: this.options.scaleWidth,
						scaleHeight: this.options.scaleHeight
					});	
				}
				item.setStyles({
					position 	:'absolute',
					opacity		: opaque,
					top			: this.aniTop,
					left		: this.aniLeft,
					width		: tmpWidth,
					height		: tmpHeight,
					overflow	: "hidden"
				});
			}
			if(item.hasClass("ajax")){
				var me = item;
				var rm = this.removeLoader.bind(item);
				item.set("load",{'url':item.get("rel"),"method": "post",data:{"ajax" : "yes"},onComplete:rm});
			}
		},this);
	},
	removeLoader: function(){
		this.removeClass("loader");
	},
	doNext: function(){
		if(this.object){
			this.doEffect(this.objects[this.current],"out");
			this.current++;
			if(this.current > this.objects.length -1){
				this.current = 0;
				if(this.options.playOnce == true){
					$clear(this.timer);
				}
			}
			this.doEffect(this.objects[this.current],"in");
		}else{
			this.remove();	
		}
		this.updateIcons();
	},
	next: function(event){
		if(event){
			new Event(event).stop();	
		}
		this.navPause();
		this.doNext();
	},
	last: function(event){
		if(event){
			new Event(event).stop();	
		}		
		this.navPause();
		this.doReverse(this.objects[this.current],"in");
		this.current--;
		if(this.current < 0){
			this.current = (this.objects.length -1);
		}
		this.doReverse(this.objects[this.current],"out");
		this.updateIcons();
	},
	loadAjax: function(object){
		$(object).set("html","");
		$(object).addClass("loader");
		$(object).load($(object).get("rel"));	
		$(object).removeClass("ajax");
	},
	doEffect: function(object,direction){
		var dir		= direction || "in";
		if(dir=="in" && $(object).hasClass("ajax")){
			this.loadAjax(object);
		}
		var width 	= $(object).getSize().y;
		var height 	= $(object).getSize().x;
		switch(this.options.effect){
			case "slideLeft":
			case "slide":
			case "left":
			case "horizontal":
				if(dir == "in"){
					object.morph({"left":[(this.width + this.left), this.aniLeft],"opacity":[1,1]});
				}else{
					object.morph({"left":[this.aniLeft, -(this.left + this.width)],"opacity":[1,1]});	
				}
			break;
			case "vertical":
			case "up":
			case "down":
				if(dir == "in"){
					object.morph({"top":[this.top - height, this.aniTop],"opacity":[1,1]});
				}else{
					object.morph({"top":[this.aniTop,+(this.top + this.height)],"opacity":[1,1]});	
				}
			break;
			case "nothing":
				if(dir == "in"){
					object.set("opacity",1);	
				}else{
					object.set("opacity",0);
				}
				break;
			case "fade":
			default:
				var opacity = (dir=="in")? 1 : 0;
				object.morph({"opacity" : opacity, "z-index": opacity});
			break;
		}	
	},
	doReverse: function(object,direction){
		var dir		= direction || "out";
		if(dir=="out" && $(object).hasClass("ajax")){
			this.loadAjax(object);
		}
		var width 	= $(object).getSize().y;
		var height 	= $(object).getSize().x;
		switch(this.options.effect){
			case "slideLeft":
			case "slide":
			case "left":
			case "horizontal":
				if(dir == "in"){
					object.morph({"left" : [this.aniLeft, (this.left + this.width)],"opacity" : [1,1]});
				}else{
					object.morph({"left" : [-(this.left + this.width),this.aniLeft],"opacity" :[1,1]});
				}
			break;
			case "vertical":
			case "up":
			case "down":
				if(dir == "in"){
					object.morph({"top" : [this.aniTop,-(this.top + height)],"opacity" : [1,1]});	
				}else{
					object.morph({"top" : [(this.top + this.height), this.aniTop],"opacity" :[1,1]});	
				}
			break;
			case "nothing":
				if(dir == "in"){
					object.set("opacity",0);	
				}else{
					object.set("opacity",1);
				}
				break;
			case "fade":
			default:
				var opacity = (dir=="in")? 0 : 1;
				object.morph({"opacity" : opacity});
			break;
		}	 
	},
	navPause: function(){
		$clear(this.timer);
		this.timer = null;
		if($(this.options.pauseButton)){
			$(this.options.pauseButton).removeClass('ani-play');
			$(this.options.pauseButton).addClass('ani-pause');
			$(this.options.pauseButton).set("html",this.options.playText);
		}
	},
	pause: function(){
		if(this.timer){
			this.navPause();
		}else{
			this.doNext();
			this.play();
		}
	},
	play : function(){
		this.timer = this.doNext.periodical(this.options.delay,this);
		if($(this.options.pauseButton)){
			$(this.options.pauseButton).addClass('ani-play');
			$(this.options.pauseButton).removeClass('ani-pause');
			$(this.options.pauseButton).set("html",this.options.pauseText);
		}
	}
});
var AnimatorControl = {
	animations : [],
	init: function(){
		$$('.animate').each(function(item,index){
			AnimatorControl.animations.push(new Animator(item));
			$(item).removeClass("animate");						 
		});
	},
	remove: function(){
		AnimatorControl.animations.each(function(item,index){
			item.remove();
		});	
	}
}
window.addEvent("load",function(){AnimatorControl.init.delay(1000);});/* Created by Kevin Dibble 
 * Uses Mootools
 * Add a class of "calender" to inputs
 * Give it the classes of options desired in the class 
 */
var Calender = new Class({
	Implements : [Options],
	options : {
		format		: 'j-n-Y',
		position	: 'bottomLeft',
		startAt		: 0,
		opacity		: 1,
		doDays		: true			// Set to False to only show month and year																									
	},
	getDateValue : function(){
		var objDates = $(this.object).get("value");
		var local    = '';
		if(objDates.contains("-")){
			objDates = objDates.split("-");
			local	 = this.options.format.split("-");
		}else{
			if(objDates.contains("/")){
				objDates = objDates.split("/");
				local	 = this.options.format.split("/");
			}else{
				objDates = objDates.split(" ");
				local	 = this.options.format.split(" ");
			}
		}
		if(objDates.length >= 2){
			for(var i=0;i<objDates.length;i++){
				if(!isNaN(objDates[i])){
					if(local[i]=="j" || local[i]=="l" || local[i]=="jS" || local[i]=="lS"){
						objDates[i] = objDates[i].replace(/(th|st|nd|rd)/g,"");
						this.theDate.setDate(objDates[i]);
						
					}
					if(local[i]=="Y"){
						this.theDate.setYear(objDates[i]);	
					}
					if(local[i]=="y"){
						this.theDate.setYear("20"+ objDates[i]);
					}
					if(local[i]=="n" || local[i]=="m"){
						this.theDate.setMonth(parseInt(objDates[i])-1);	
					}
					if(local[i]=="M" || local[i]=="N"){
						for(j=0;j<this.allMonths.length;j++){
							if(this.allMonths[j].test(objDates[i],"i")){
								this.theDate.setMonth(j);		
							}
						}
					}
				}
			}
		}else{
			if(!$(this.object).get("class").contains("label:")){
				$(this.object).set("value","dd-mm-yyyy");	
			}
		}
	},
 	initialize : function(obj,options){
		this.setOptions(options);	
		this.object		= $(obj);
		$(this.object).set("autocomplete","off");
		if($(this.object).getParent().getStyle("position")!="absolute"){
			$(this.object).getParent().setStyle("position","relative");
		}
		$(this.object).removeEvents();	// remove calender events
		this.timer		= null;	
		this.allMonths	= Array('january','february','march','april','may','june','july','august','september','october','november','december');
		this.allDays	= Array("sunday","monday","tuesday","wednesday","thursday","friday","saturday"); 
		this.calender 	= null;
		this.theDate 	= new Date();							// Create Date Object
		// Set the date back
		this.theDate.setYear(this.theDate.getFullYear()+this.options.startAt);
		this.getDateValue();
		this.tableCal = new Element("div",{'class':'tableCalDiv'});
		$(this.tableCal).injectAfter($(this.object));
		this.placeCal();
		$(this.object).addEvent("focus",this.placeCal.bind(this));
		$(this.tableCal).addEvent("click",this.showCalender.bind(this));
		this.keyFn 	= this.keypress.bind(this);
	},
	placeCal : function(){
		var zin = $(this.object).getStyle("z-index").toInt() + 1;
		$(this.tableCal).position({'relativeTo':$(this.object),'position':'topRight'});
		$(this.tableCal).setStyle("z-index",zin);
	},
	returnDate: function(obj){
		if (!isNaN($(obj).get("html")) || !isNaN($(obj).get("rel"))) {
			if(this.options.doDays==false){
				this.theDate.setDate(1);
			}else{
				this.theDate.setDate($(obj).get("html").toInt());
			}
			var suffix  = 'th';
			switch (this.theDate.getDate()){
				case 1: case 21: case 31:
					suffix = "st";
				break;
				case 2: case 22: case 32:
					suffix = "nd";
				break;
				case 3: case 23:
					suffix = "rd";
				break;
			}
			var tmpDate = ""+this.theDate.getFullYear();
			var cleanedDate = this.options.format.replace(/d/g,(this.theDate.getDate() < 10)? "0" + this.theDate.getDate() : this.theDate.getDate());		// Input the Date Number
			cleanedDate = cleanedDate.replace(/j/g,this.theDate.getDate());		// Input the Date Number
			cleanedDate = cleanedDate.replace(/y/g,tmpDate.substring(2,4));		// Get the Short Year
			cleanedDate = cleanedDate.replace(/Y/g,this.theDate.getFullYear());	// Get the Long Year
			cleanedDate = cleanedDate.replace(/m/g,((this.theDate.getMonth()+1) < 10)? "0" + (this.theDate.getMonth()+1): this.theDate.getMonth()+1);	// Input the Month
			cleanedDate = cleanedDate.replace(/n/g,(this.theDate.getMonth()+1));// Input the Month
			cleanedDate = cleanedDate.replace(/t/g,32-new Date(this.theDate.getYear(),this.theDate.getMonth(),32).getDate());				// Return the amount of days in a month
			cleanedDate = cleanedDate.replace(/l/g,this.allDays[this.theDate.getDay()]);					// Input the Full Day of week
			cleanedDate = cleanedDate.replace(/D/g,this.allDays[this.theDate.getDay()].substring(0,3)); 	// Input a short Day of week
			cleanedDate = cleanedDate.replace(/F/g,this.allMonths[this.theDate.getMonth()]);				// Input the Full Month
			cleanedDate = cleanedDate.replace(/M/g,this.allMonths[this.theDate.getMonth()].substring(0,3));	// Input the Short Month
			cleanedDate = cleanedDate.replace(/S/g,suffix);						// Input the suffix
			$(this.object).value = cleanedDate.capitalize().replace(/Of/g,"of");// Return the text with words placed into correct case
		}	
		this.hideCalender(); 													//hide the calender
		$(this.object).fireEvent("focus");
		//$(this.object).fireEvent("blur");
	},
	showCalender: function(){
		this.getDateValue();
		if(this.calender==null){
			var html = '<div class="calender-top"><div class="calender_tleft"></div><div class="calender_tright"></div></div>'+
						"</div><div class='calender-text'><span></span><div class='calbottom'>close</div></div><div class='calender-bottom'><div class='calender_bleft'></div><div class='calender_bright'></div></div>";	
			this.calender 		= new Element("div",{
				'class' : 'podcalender',
				'styles': {"overflow":"hidden"},
				'title' :'Use keyboard arrows:up/down to change year<br />Left right to change month',
				'html'	: html
			});
			$(this.calender).getElement('.calbottom').addEvent("click",this.hideCalender.bind(this));
			$(this.calender).set("opacity",0);					// Hide the calender to begin with
			this.buildCalender();
			this.tip = new toolTips($(this.calender),{zIndex:999999,followMouse:false,hover:false,width:165,arrow:3})
			if(!this.mask){
				this.mask = new Mask($(document.body),{useIframeShim:true,destroyOnHide:true,style:{'z-index':'99999'}});
				$(this.calender).inject($(this.mask),'top');
				this.mask.show();
			}
			this.setupFunctions();
			var i = (Browser.Engine.gecko)?  window  : $(document.body);
			i.addEvent(Browser.Engine.gecko ? "keypress" : "keydown",this.keyFn);
			$(this.calender).position({relativeTo: $(this.object),position:this.options.position});
			$(this.calender).morph({"opacity":[0,this.options.opacity],"height":[0,210],"width":[0,$(this.object).getSize().x],onComplete:this.showTip.bind(this)});
		}
		return false;															// Stop Propagation of event of focus and click
	},
	showTip: function(){
		this.tip.show();
	},
	hideCalender: function(){
		this.calender.destroy();
		this.calender = null;
		this.mask.hide();
		this.mask = null;
		var i = (Browser.Engine.gecko)?  window  : $(document.body);
		i.removeEvent(Browser.Engine.gecko ? "keypress" : "keydown",this.keyFn);
		this.tip.hide();
	},
	buildCalender: function(){
		$clear(this.timer);
		var i =0;
		this.theDate.setDate(1);												//Set the day to the first for the month
		var DaysInMonth=32-new Date(this.theDate.getYear(),this.theDate.getMonth(),32).getDate();
		var DaysInLastMonth = 32-new Date(this.theDate.getYear(),this.theDate.getMonth()-1,32).getDate();
		var startfrom=this.theDate.getDay();
		var goTo=DaysInMonth+startfrom+1;
		DaysInMonth =((DaysInMonth + startfrom)>34)? 41: 34;
		var NextMonth = 1;
		var DisplayMonth="<table cellpadding='0' cellspacing='0'><tr class='calYear'><td colspan='2' class='calenderPreviousYear'>&lt;&lt;&lt;</td><td colspan='3'><div>"+this.theDate.getFullYear();
		DisplayMonth+="</div><td colspan='2' class='calenderYearAdvance'>&gt;&gt;&gt;</td></tr><tr class='calMonth'><td colspan='2' class='monthPrevious'>&lt;&lt;&lt;</td>";
		DisplayMonth+="<td colspan='3' class='month' rel='1'>"+this.allMonths[this.theDate.getMonth()].capitalize()+"</td>";
		DisplayMonth+="<td colspan='2' class='monthAdvance'>&gt;&gt;&gt;</td></tr>";
		if(this.options.doDays){
			DisplayMonth+="<tr class='calDay'><td>S</td><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td></tr><tr>";
			for(i=0;i<=DaysInMonth;i++){
				DisplayMonth+= (i%7==0)? "</tr><tr>" : '';
				DisplayMonth+= (i>startfrom&&i<goTo)? "<td align='center' class='day'>"+(i-startfrom)+"</td>" : (i<=startfrom)? "<td class='pday'>"+(DaysInLastMonth-(startfrom-i))+"</td>" : "<td class='nday'>"+(++NextMonth)+"</td>" ;
			}
		}
		DisplayMonth+="</tr></table>";
		$(this.calender).getElement("span").set("html",DisplayMonth);	
	},
	setupFunctions: function(){
		var returnDate  = this.returnDate.bind(this);
		if(this.options.doDays==false){
			$(this.calender).getElement('.month').removeEvents();
			$(this.calender).getElement('.month').addEvent('click',function(){returnDate(this);});
		}
		$(this.calender).getElements('.day').each(function(item,index){
			item.removeEvents();
			item.addEvent('click',function(){returnDate(this)});
			item.addEvent('mouseenter',function(){this.addClass("dayOvr")});
			item.addEvent('mouseleave',function(){this.removeClass("dayOvr");});
		});
		var sety 		= this.setDateYear.bind(this);
		var setYearN 	= this.setDateYearN.bind(this);
		var setMonthN 	= this.setDateMonth.bind(this);
		$(this.calender).getElements('.monthAdvance').each(function(item){
			item.removeEvents();
			item.addEvent('click',function(){setMonthN(1);});
		});
		$(this.calender).getElements('.monthPrevious').each(function(item){
			item.removeEvents();													 
			item.addEvent('click',function(){setMonthN(-1);});
		});
		$(this.calender).getElements('.calenderYearAdvance').each(function(item){
			item.removeEvents();
			item.addEvent('click',function(){setYearN(1);});
		});
		$(this.calender).getElements('.calenderPreviousYear').each(function(item){
			item.removeEvents();
			item.addEvent('click',function(){setYearN(-1);});
		});
		$(this.calender).getElements('.pday').each(function(item,index){
			item.removeEvents();
			item.addEvent('click',function(){setMonthN(-1)});
		});
		$(this.calender).getElements('.nday').each(function(item,index){
			item.removeEvents();
			item.addEvent('click',function(){setMonthN(1)});
		});
	},
	keypress: function(event){
		var ev = new Event(event);
		switch(ev.code){
			case 37:
				ev.stop();
				this.setDateMonth(-1);
				break;
			case 39: 
				ev.stop();
				this.setDateMonth(1);
				break;
			case 38:
				ev.stop();
				this.setDateYearN(1);
				break;
			case 40:
				ev.stop();
				this.setDateYearN(-1);
				break;
			case 13: 
				ev.stop();
				var obj = new Element("div",{html : '1'});
				this.returnDate(obj);
				break;
			case 9:
				this.hideCalender();
				ev.stop();
				break;
			case 17: case 116 :		// CTRL Key or F5 Key
				break;
			default:
				ev.stop();
				break;
		}
	},
	setDateYear: function(theYear){
		var oldYear = this.theDate.getFullYear();
		this.theDate.setYear(theYear);
		this.buildCalender();
		this.setupFunctions();
	},
	setDateYearN: function(theYear){
		this.theDate.setYear(this.theDate.getFullYear()+theYear);
		this.buildCalender();
		this.setupFunctions();
	},
	setDateMonth: function(theMonth){
		this.theDate.setMonth(this.theDate.getMonth()+theMonth);
		this.buildCalender();
		this.setupFunctions();
	}
});/* Created by Kevin Dibble 
 * Uses Mootools
 * Add a class of "toolTip" to dom elements - thats all
 * To use the arrows place the class of lb or lt in the dom element for the tooltip
 * To position the tooltip the default is top right
 * add a class of centerTip = to center the tool tip 
 * add a class of bottomTip to align the til to the bottom (under) the element
 * add a class of leftTip to align the tip to the left
 */
var Magnify = new Class({
	Implements : [Options],
	options : {
		zIndex 		: 9999,
		className	: "magnify", 	// [lb|lt]
		mousePoint	: 'center',
		delay		: 500,
		inject		: $(document.body),	// Can be [auto | before | after | id]
		img			: 'auto',
		magWidth	: 200,
		magHeight	: 200
	},
 	initialize : function(obj,options){
		this.setOptions(options);
		this.object  = obj;
		this.setupOps = '';
		this.loaded	 = false;
		this.options.img = $(this.object).get("src");
		if($(this.object).get("class")){
			$splat($(this.object).get("class").split(" ")).each(function(item,index){
					if(item.contains(":")){
							this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
					}
			},this);
			if(this.setupOps != ''){
				this.setOptions(JSON.decode("{"+this.setupOps+"}"));
			}
		}
		this.pos   = $(obj).getPosition();			// Get the position of the object
		this.size  = $(obj).getSize();
		this.elm  = new Element("div",{
						'class': this.options.className,
						'opacity' : 0,
						'styles' : 
							{
							  'width'    	: this.options.magWidth,
							  'height'		: this.options.magHeight,
							  'z-index'		: this.options.zIndex,
							  'left' 		: this.pos.x + (this.size.x/2),
							  'top' 		: this.pos.y + (this.size.y/2),
							  'background-image':'url('+this.options.img+')',
							  'background-color' : '#FFFFFF',
							  'background-repeat' : 'no-repeat',
							  'border'		: '1px solid #FFFFFF',
							  'position'	: 'absolute'
							  }
						  });
		this.Imagebg = new Asset.image(this.options.img);
		$(this.elm).inject($(document.body));
		$(obj).addEvent('mouseenter',this.show.bind(this));
		$(obj).addEvent("mousemove",this.mouseStick.bind(this));
		$(this.elm).addEvent('mousemove',this.mouseStick.bind(this));
	},
	hide: function(){
		$(this.elm).setStyle("visibility","hidden");
	},
	mouseStick: function(event){
		var ev 	    = new Event(event);
		this.pos 	= ev.page;
		this.size  	= {x:2,y:2};
		$(this.elm).setStyles(this.getPosition());
	},
	newImage: function(img){
		this.options.img = img;
		this.Imagebg = new Asset.image(img);
		$(this.elm).setStyle('background-image','url('+img+')');
	},
	getPosition : function(){
		var left,top;
		top  = this.pos.y - (this.options.magHeight/2);
		left = this.pos.x - (this.options.magWidth/2);
		var pos = $(this.object).getPosition();
		var size = $(this.object).getSize();
		
		// move Image background
		var imgHeight = parseInt(((pos.y + size.y) - this.pos.y) - size.y) *-1; //	= 242    = mouseFromTop
		var imgWidth  = parseInt(((pos.x + size.x) - this.pos.x) - size.x) *-1;//   = 292	 = mouseFromLeft
		
		// Work out Ratio
		imgHeight = (imgHeight * (this.Imagebg.height /size.y)) - (this.options.magHeight/2); 
		imgWidth  = (imgWidth * (this.Imagebg.width /size.x)) - (this.options.magWidth/2);
		$(this.elm).setStyles({
			'background-position' : -parseInt(imgWidth)+'px' +' '+ -parseInt(imgHeight)+'px'	
		});
		if(top < (pos.y - (this.options.magHeight/2)) 
				|| top >( pos.y + size.y - (this.options.magHeight/2))
				|| left < (pos.x - (this.options.magWidth/2)) 
				|| left > (pos.x + size.x - (this.options.magHeight/2))){
			this.hide();	
		}else{
			this.show();	
		}
		return {'left': left, 'top':top};
	},
	show: function(){
		$(this.elm).setStyle("visibility","visible");
		$(this.elm).setOpacity(1);
	}
});

window.addEvent('domready',function(){
	$$('.magnify-me').each(function(item,index){
		new Magnify(item);							 
	});
});
 
/* Created by Kevin Dibble 
 * Uses Mootools 1.2
*/
var Popup = new Class({
	Implements : [Options],
	options : {
		pin 		: true,
		thumbnails 	: true,
		id			: 0,
		height		: 200,
		width		: 200,
		url			: '',
		opacity		: 0.7,
		closeOffsetT: 0,
		closeOffsetL: 0,
		maskWidth	: 0,
		maskHeight	: 0,
		maskOffsetT	: 0,
		maskOffsetL	: 0
	},
 	initialize : function(obj,options){
		this.setOptions(options);
		this.object  = obj;
		this.setupOps = '';
		this.currentArea = window.getScroll();
		this.options.url = $(this.object).get("href");
		$(this.object).removeClass("popup");
		if($(this.object).get("class")){
			$splat($(this.object).get("class").split(" ")).each(function(item,index){
					if(item.contains(":")){
							this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
					}
			},this);
			if(this.setupOps != ''){
				this.setOptions(JSON.decode("{"+this.setupOps+"}"));
			}
		}
		if(this.options.maskWidth==0){
			this.options.maskWidth = this.options.width;
		}
		if(this.options.maskHeight==0){
			this.options.maskHeight = this.options.height;
		}
		this.options.url = this.options.url + ((this.options.url.contains('?'))? '&ajax=ajax'  : '?ajax=ajax');
		$(this.object).addEvent("click",this.popup.bind(this));
	},
	centerPopup : function(){
		$(this.mask).setStyles({"height":$(window).getSize().y,"width":$(window).getSize().x,"position":"fixed"});	
		$(this.masterContainer).position({relativeTo:$(this.mask),"position":"center"});
		$(this.surround).setStyles({"height":$(this.mask).getSize().y});
		if($(this.closeButton)){
			$(this.closeButton).setStyles({"margin-top":0,"margin-left":0});
			$(this.closeButton).position({relativeTo:$(this.masterContainer),"position":"topRight","edge":"center"});
			$(this.closeButton).setStyles({"margin-top":this.options.closeOffsetT,"margin-left":this.options.closeOffsetL});
		}
	},
	closePopup: function(){
		if($(this.mask)){
			$(document.body).fireEvent("closepopup");
			$(document.body).removeEvents("closepopup");
			$(document.body).removeEvents("closepop");
			$(this.mask).fade("out");
			this.removePopup.bind(this).delay(1000);
		}
	},
	removePopup: function(){
		this.mask.hide();
		$(document.body).setStyle("overflow",this.overflow);
		window.scrollTo(this.currentArea.x, this.currentArea.y);
	},
	popup : function(event){
		if(event){
			new Event(event).stop();
		}
		// remove the bodys ability to scroll
		this.currentArea = window.getScroll();
		window.scrollTo(0, 0);
		//this.overflow = $(document.body).getStyle("overflow") || "auto";
		//$(document.body).setStyle("overflow","hidden");
		
		// Mask the body
		this.mask = new Mask($(document.body),{useIframeShim:true,hideOnClick:false,destroyOnHide:true,maskMargins:true});
		$(this.mask).setStyles({"z-index":999});
		this.mask.show();
		$(this.mask).pin(); 	
		// hide the body
		this.surround = new Element("div",{"class":"popup-background"});
		$(this.surround).setOpacity(this.options.opacity);
		$(this.surround).injectInside($(this.mask));
		$(this.surround).setStyles({"height":$(this.mask).getSize().y});
		
		// Add the popup Container
		this.masterContainer = new Element("div",{"class":"master-container","id":"master-container","overflow":"hidden","styles":{"width":30,"height":30}});
		this.masterContainer.setOpacity(0.01);
		$(this.masterContainer).inject($(this.mask),"top");
		$(this.masterContainer).position({relativeTo:$(this.mask),"position":"center"});
		
		// center the popups
		this.centerPopup();
		
		// Keep the mask size accurate
		$(window).addEvent("resize",this.centerPopup.bind(this));
		
		// Add the loader animation
		$(this.masterContainer).spin({"id":"popupSpinner"});
		$('popupSpinner').setStyles({"margin-left":this.options.maskOffsetL,"margin-top":this.options.maskOffsetT});
		// Create close button
		this.closeButton 	= new Element("div",{"class":"popup-closeBtn png"});
		$(this.closeButton).setOpacity(0);
		$(this.closeButton).injectInside($(this.mask),"top");
		$(this.closeButton).addEvent("click",this.closePopup.bind(this));
		
		// Load content
		$(this.masterContainer).set("load",{onComplete: this.showContent.bind(this)});
		$(this.masterContainer).load(this.options.url);
		$(document.body).addEvent("closepop",this.closePopup.bind(this));
	},
	showContent: function(){
		var maskSize 	= $(window).getSize();
		$('popupSpinner').set("morph",{onComplete:this.removeAnimation.bind(this)});
		$('popupSpinner').getElement(".spinner-content").setStyles({"top":"50%","left":"50%","margin-left":"-15px","margin-top":"-15px"});
		$('popupSpinner').morph({"left":((maskSize.x-this.options.maskWidth)/2),"top":((maskSize.y-this.options.maskHeight)/2),"width":this.options.maskWidth,"height":this.options.maskHeight});	
	},
	removeAnimation: function(){
		$(this.masterContainer).setOpacity(1);
		var maskSize 	= $(window).getSize();
		$(this.masterContainer).setStyles({"height":this.options.height+"px","width":this.options.width+"px"});
		$(this.masterContainer).position();
		$(this.closeButton).setOpacity(1);
		$(this.closeButton).position({relativeTo:$(this.masterContainer),"position":"topRight","edge":"center"});
		$(this.closeButton).setStyles({"margin-top":this.options.closeOffsetT,"margin-left":this.options.closeOffsetL});
		$(this.masterContainer).addClass("rounded");
		this.showResult.bind(this).delay(500);
	},
	showResult: function(){
		$(this.masterContainer).unspin();	
	}
});

window.addEvent("domready",function(){															
	$$(".popup").each(function(item,index){
		 new Popup(item,{'id':index});
	});																	
});/* Created by Kevin Dibble 
 * Uses Mootools
 * Add a class of "calender" to inputs
 * Give it the classes of options desired in the class 
 */
var Tab = new Class({
	Implements : [Options],
	options : {
		tabs: 			'.tab',
		boxes: 			'.box',
		hideClass:	'hide',
		boxcontainer : ''																						
	},
 	initialize : function(obj,options){
		this.setOptions(options);	
		this.object		= $(obj);
		this.setupOps = '';
		this.current 	= 0;
		this.tabs 		= Array();
		this.boxes		= Array(); 
		if($(this.object).get("class")){
			$splat($(this.object).get("class").split(" ")).each(function(item,index){
					if(item.contains(":")){
							this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
					}
			},this);
			if(this.setupOps != ''){
				this.setOptions(JSON.decode("{"+this.setupOps+"}"));
			}
		}
		if($(this.object) && $(this.options.boxcontainer)){
			this.tabs = $(this.object).getElements(this.options.tabs);
			this.boxes= $(this.options.boxcontainer).getElements(this.options.boxes);
			var change = this.change.bind(this);
			this.tabs.each(function(item,index){
				$(item).set("rel",index);
				$(item).addEvent("mouseenter",function(){$(this).addClass('over'); });
				$(item).addEvent("mouseleave",function(){$(this).removeClass('over');});
				$(item).addEvent("click",function(){change($(this).get("rel")); });	
			},this);
		}
	},
	change: function(num){
		$(this.boxes[this.current]).addClass("hide");
		$(this.tabs[this.current]).removeClass("current");
		$(this.boxes[num]).removeClass("hide");
		$(this.tabs[num]).addClass("current");
		this.current = num;
	}
});/* Created by Kevin Dibble 
 * Uses Mootools
 * Add a class of "toolTip" to dom elements - thats all
 * To use the arrows place the class of lb or lt in the dom element for the tooltip
 * To position the tooltip the default is top right
 * add a class of centerTip = to center the tool tip 
 * add a class of bottomTip to align the til to the bottom (under) the element
 * add a class of leftTip to align the tip to the left
 */
var toolTips = new Class({
	Implements : [Options],
	options : {
		zIndex 		: 99,
		className	: "tip", 	// [lb|lt]
		leftOffset	: 5,
		topOffset	: 5,
		delay		: 500,
		arrow		: 10,
		tipwidth	: 145,
		inject		: "auto",	// Can be [auto | before | after | id]
		followMouse : true,
		message		: '',
		title		:	'',
		hover		: true,
		hasArrow	: true
	},
 	initialize : function(obj,options){
		this.setOptions(options);
		this.object  = obj;
		this.setupOps = '';
		if($(this.object).get("class")){
			$splat($(this.object).get("class").split(" ")).each(function(item,index){
					if(item.contains(":")){
							this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
					}
			},this);
			if(this.setupOps != ''){
				this.setOptions(JSON.decode("{"+this.setupOps+"}"));
			}
		}
		this.timer = null;											// Set up the timer container
		this.pos   = $(obj).getPosition();			// Get the position of the object
		this.size  = $(obj).getSize();
		if(this.options.message=='' && $(this.object).get("title")){
				var title = $(this.object).get("title").split(":");
				this.options.message 	= (title[1])? title[1]  : title[0];
				this.options.title 		= (title[1])? title[0]	: '' ;
		}
		if(this.options.message==""){
			return false;
		}
		var t 		= (this.options.title!='')? "<div class='tip-heading'>"+this.options.title+"</div>" : '';
		this.html = '<div class="tip-top"><div class="tip_tleft"></div><div class="tip_tright"></div></div>'+
								"</div><div class='tip-text'>"+ t +"<div>" + this.options.message + "</div></div><div class='tip-bottom'><div class='tip_bleft'></div><div class='tip_bright'></div></div>";
		$(this.object).set("title","");
		this.elm  = new Element("div",{
						'class': this.options.className,
						'html' : this.html, 
						'opacity' : 0,
						'styles' : 
							{
							  'width'    	: this.options.tipwidth,
							  'z-index'		: this.options.zIndex,
							  'left' 		: this.pos.x + this.size.x + this.options.leftOffset,
							  'top' 		: (this.pos.y + this.options.topOffset)
							  }
						  });
		$(this.elm).injectInside($(document.body));
		this.elmLeft = this.pos.x + this.size.x + this.options.leftOffset; 
		var show = this.doShow.bind(this);
		$(obj).removeClass("tool-tip");
		if(this.options.hover==true){
			$(obj).addEvent('mouseenter',function(event){show(event)});
			$(obj).addEvent('mouseleave',this.doHide.bind(this));
		}else{
			window.addEvent("resize",this.resized.bind(this));
		}
		if(this.options.hasArrow){
			this.attachArrow();
		}
	},
	attachArrow:function(){
		var arrow = new Element("div",{'class':'tip-arrow ' +"arrow_"+this.options.arrow});
		$(arrow).injectInside(this.elm);
	},
	doHide: function(){
		$clear(this.timer);
		var hide = this.hide.bind(this);
		this.timer = hide.delay(this.options.delay);
	},
	doShow: function(event){
		$clear(this.timer);
		var show = this.show.bind(this);
		this.timer = show.delay(this.options.delay);
		this.mouseStick(event);
	},
	hide: function(){
		$clear(this.timer);
		if($(this.elm)){
			if(!Browser.Engine.trident){
				$(this.elm).fade("out");
			}else{
				$(this.elm).set("opacity",0); //Opacity(1);	
			}
			var show = this.mouseStick.bind(this);
			$(this.object).removeEvent("mousemove",function(event){show(event);});
		}
	},
	mouseStick: function(event){
		var ev 	   = new Event(event);
		this.pos 		= ev.page;
		this.size  	= {x:2,y:2};
		$(this.elm).setStyles(this.getPosition());
	},
	getPosition : function(){
		var left,top;
		switch(this.options.arrow.toString()){
			case "2":
				left = (this.pos.x - ($(this.elm).getSize().x +this.options.leftOffset));
				top  = (this.options.followMouse)? ((this.pos.y - this.options.topOffset - 18)) : ((this.pos.y - this.options.topOffset - 5));
				break;
			case "3":
				left = (this.pos.x - ($(this.elm).getSize().x +this.options.leftOffset));
				top  = ((this.pos.y - this.elm.getSize().y + (this.size.y/2)) + (this.options.topOffset));
				break;
			case "4":
				top	 = ((this.pos.y + this.size.y + this.options.topOffset - this.elm.getSize().y));
				left = (this.pos.x - ($(this.elm).getSize().x +this.options.leftOffset));
				break;
			case "5":
				top = (this.pos.y - ($(this.elm).getSize().y +this.options.topOffset));
				left = (this.pos.x - ($(this.elm).getSize().x +this.options.leftOffset) + 27);
				break;
			case "6":
				top = (this.pos.y - ($(this.elm).getSize().y +this.options.topOffset));
				left = (((this.pos.x) + (this.size.x/2)) - $(this.elm).getSize().x/2);
				break;
			case "7":
				top = (this.pos.y - ($(this.elm).getSize().y +this.options.topOffset));
				left = ((this.pos.x + this.size.x) + (this.options.leftOffset) - 27);
				break;
			case "8":
				top  = ((this.pos.y + this.size.y + this.options.topOffset - this.elm.getSize().y));
				left = (this.options.followMouse)? ((this.pos.x + this.size.x) + (this.options.leftOffset) + 18)  : ((this.pos.x + this.size.x) + (this.options.leftOffset));
				break;
			case "9":
				top  = ((this.pos.y - this.elm.getSize().y + (this.size.y/2)) + (this.options.topOffset));
				left = (this.options.followMouse)? ((this.pos.x + this.size.x) + (this.options.leftOffset) + 18)  : ((this.pos.x + this.size.x) + (this.options.leftOffset));
				break;
			case "10":
				top 	= (this.options.followMouse)? ((this.pos.y - this.options.topOffset - 18)) : ((this.pos.y - this.options.topOffset - 5));
				left 	= (this.options.followMouse)? ((this.pos.x + this.size.x) + (this.options.leftOffset) + 18)  : ((this.pos.x + this.size.x) + (this.options.leftOffset)); 
				break;
			case "11":
				top = ((this.pos.y + this.size.y + this.options.topOffset));
				left = (this.pos.x - ($(this.elm).getSize().x +this.options.leftOffset) + 27);
				break;
			case "12":
				top = ((this.pos.y + this.size.y + this.options.topOffset));
				left = (((this.pos.x) + (this.size.x/2)) - $(this.elm).getSize().x/2);
				break;
			case "1":
				top = ((this.pos.y + this.size.y + this.options.topOffset));
				left = ((this.pos.x + this.size.x) + (this.options.leftOffset) - 27);
				break;
		}
		if($(this.elm).getPosition().y < 0){
			top = 0;	
		}
		if($(this.elm).getPosition().x + $(this.elm).getSize().x > $(document.body).getSize().x){
			left =  $(this.elm).getPosition().x - (($(this.elm).getPosition().x + $(this.elm).getSize().x) - $(document.body).getSize().x);
		}
		return {'left': left, 'top':top};
	},
	resized : function(){
		this.pos   = $(this.object).getPosition();
		this.size  = $(this.object).getSize();
		$(this.elm).setStyles(this.getPosition());
	},
	show: function(){
		$clear(this.timer);
			if($(this.elm)){
			if(this.options.followMouse){
				var show = this.mouseStick.bind(this);
				$(this.object).removeEvent("mousemove",function(event){show(event);});
				$(this.object).addEvent("mousemove",function(event){show(event);});
			}else{
				this.pos   = $(this.object).getPosition();
				this.size  = $(this.object).getSize();
				$(this.elm).setStyles(this.getPosition());
			}
			$(this.elm).fade("in");
		}
	}
});

window.addEvent('domready',function(){
	$$('.tool-tip').each(function(item,index){
		new toolTips(item);							 
	});
});/* Created by Kevin Dibble 
 * Uses Mootools
 * Add a class of "required" to input fields / forms - thats all for basic options
 * use the rel="{}" to set advanced options
 * Type = integer | decimal | credit | email | password | username
 * <input name="date" type="text" class="required" size="12" />
 * Use the class tag in the form to setup the form options
 * errors: 'errorLocation', ajax : 'formcall.php', output: 'errorLocation'
 */
var InputOptions = new Class({
	Implements 	: [Options],
	options : {
		required 		: false,				// Set to false to not require [optional]
		type 	 		: 'text',  				// This can be: integer,decimal,credit,text,email,password,username
		minValue 		: 'auto',				// This is the minimum amount of text or number value
		maxValue 		: 'auto',				// This is the Maximum amount of text or number value
		valid	 		: false,				// Until checked - the input is invalid
		updates	 		: false,				// Area on the page that updates to its value on successful AJAX submit / or form submit
		message	 		: 'Please fill in [name]',
		name	 		: 'field',				// The Default Name for the field
		messageLocation	: 'alert',				// The default location for the error message (if set to After, Before, or Element ID)			
		doTiny			: false,				// The Default settings for TinyMCE being used (text areas only)	
		ajax			: false,				// THE URL to call
		group			: false,				// If the item belongs to a group (radio , checkboxes)
		showArea		: false,				// The area to show (this is an array)
		tinySettings	: false,				// The Default settings for the the TinyMCE configuration
		calOptions		: {},					// Sets up options for the calender
		messageLeft		: 'auto',
		messageTop		: 'auto',
		parent			: 'auto',
		yesClass		: false,
		noClass			: false,
		bgClass			: false,
		nomove			: false,
		label			: false					// The label used to go over the text
	},
	getObject	:function(){
		return $(this.object);
	},
	getGroup	:function(){
		return this.options.group;
	},
	isChecked	:function(){
		return $(this.object).checked;
	},
	showLabel : function(){
		if(this.options.label != false && $(this.options.label)){
			$(this.options.label).position({"relativeTo":$(this.object),'position':'topLeft','offset':{x:5,y:0}});
			var currentIndex = ($(this.object).get("value").clean() != "")? "none" : "block";
			$(this.options.label).setStyle("display",currentIndex);
		}
	},
	hideLabel : function(){
		if(this.options.label != false && $(this.options.label)){
			$(this.options.label).setStyle("display","none");
			$(this.object).focus();
		}
	},
	changeImage: function(){
		$(document.body).fireEvent("buttonsave");
		if($(this.replaceRadio)){
			// find all other checked items
			$(this.object).getParent("form").getElements('input[type=radio]').each(function(item,index){
				if($(item).name==$(this.object).name && $(item).checked){
					$(item).fireEvent('noclass');
				}
			},this);
			$(this.object).checked = !$(this.object).checked;
			if($(this.object).checked){
				$(this.replaceRadio).removeClass(this.options.noClass);
				$(this.replaceRadio).addClass(this.options.yesClass);
			}else{
				$(this.replaceRadio).addClass(this.options.noClass);
				$(this.replaceRadio).removeClass(this.options.yesClass);
			}
		}
	},
	noclass: function(){
		if($(this.replaceRadio)){
			$(this.replaceRadio).addClass(this.options.noClass);
			$(this.replaceRadio).removeClass(this.options.yesClass);
		}
	},
	createOptions : function(){
		if($(this.object).hasClass("required")){
			this.makeRequired();	
		}
		this.options.name = $(this.object).name.capitalize().clean();
		this.options.message = this.options.message.replace(/\[name\]/g,this.options.name);
		if($(this.object).hasClass("decimal")){
			this.options.type = "decimal";
		}
		if($(this.object).hasClass("integer")){
			this.options.type 	= "integer";	
		}
		if($(this.object).hasClass("calender")){
			this.options.type 	= "calender";
		}
		if($(this.object).hasClass("credit")){
			this.options.type 	= "credit";
		}
		if($(this.object).hasClass("username")){
			this.options.type 	= "username";
		}
		if($(this.object).hasClass("password") || $(this.object).type=="password"){
			this.options.type 	= "password";
		}
		if($(this.object).type=="checkbox"){
			this.options.type = "checkbox";
			if(this.options.noClass && this.options.yesClass){
				this.replaceRadio = new Element("div",{styles:{'position':'relative'}});
				$(this.object).setStyles({"visibility":"hidden","position":"absolute"});
				$(this.replaceRadio).injectAfter($(this.object));
				$(this.replaceRadio).addEvent("click", this.changeImage.bind(this));
				if($(this.object).checked){
					$(this.replaceRadio).addClass(this.options.yesClass);
				}else{
					$(this.replaceRadio).addClass(this.options.noClass);
				}
			}
		}
		if($(this.object).type.contains("select") && this.options.bgClass){
			var tmp 			= $(this.object).clone();
			this.bgdiv 		= new Element("div");
			this.innerDiv = new Element("div",{ "html":"<span>"+$(this.object).value+"</span>"});
			$(this.bgdiv).addClass(this.options.bgClass);
			$(this.bgdiv).injectAfter($(this.object));
			$(this.innerDiv).inject($(this.bgdiv));
			$(tmp).inject($(this.innerDiv),"top");
			$(this.object).destroy();
			this.object = $(tmp);
			$(this.object).setOpacity(0.01);
			$(this.object).addEvent("change",this.updatevalue.bind(this));
			this.updatevalue();
		}
		if($(this.object).type == "radio"){
			this.options.type  =  "radio";
			if(this.options.noClass && this.options.yesClass){
				this.replaceRadio = new Element("div",{styles:{'position':'relative'}});
				$(this.object).setStyles({"visibility":"hidden","position":"absolute"});
				$(this.replaceRadio).injectAfter($(this.object));
				$(this.replaceRadio).addEvent("click", this.changeImage.bind(this));
				$(this.object).addEvent("noclass",this.noclass.bind(this));
				if($(this.object).checked){
					$(this.replaceRadio).addClass(this.options.yesClass);
				}else{
					$(this.replaceRadio).addClass(this.options.noClass);
				}
			}
			this.options.group = $(this.object).name;	// Radio Groups become instantly required
		}
		if($(this.object).hasClass("email")){
			this.options.type 	= "email";
		}
		if(this.options.label != false && $(this.options.label)){
			$(this.object).addEvent("blur",this.showLabel.bind(this));
			$(this.object).addEvent("focus",this.hideLabel.bind(this));
			$(this.options.label).addEvent('click',this.hideLabel.bind(this));
			currentIndex = ($(this.object).get("value").clean() != "")? "none" : "block";
			$(this.options.label).position({"relativeTo":$(this.object),'position':'topLeft','offset':{x:5,y:0}});
			$(this.options.label).setStyles({
						"z-index"  : "99",
						"display"  : currentIndex
			});
			window.addEvent("resize",this.showLabel.bind(this));
		}
		if(this.options.ajax != false){
			this.options.ajax = (this.options.ajax == 'true' || this.options.ajax==true)? $(this.form).action : this.options.ajax;
			this.thePlace = ($(this.options.updates))? $(this.options.updates) : new Element("div");
			$(this.thePlace).set("load",{
				method				: 'post',
				evalScripts		: true,
				url 					: this.options.ajax
			});	
		} 
		if(this.options.showArea != false){
			var show = this.showArea.bind(this);
			$(this.object).addEvent('click',show);
			this.options.showArea.each(function(item){
				$(item).addClass("hide");
			});
		}
	},
	updatevalue: function(){
		var text = '';
		var me = $(this.object).options.length;
		for(var i=0;i<me; i++){
			if($(this.object).options[i].value == $(this.object).value){
				text = $(this.object).options[i].text;
			}
		}
		$(this.innerDiv).getElement("span").set("html",text);
	},
	showArea 	: function(){
		var i = null;
		this.options.showArea.each(function(item){
			if($(this.object).value == item || $(this.object).checked){
				$(item).removeClass("hide");		
			}else{
				$(item).addClass("hide");
			}
		},this);
	},
	updateAreas : function(){
		if(this.options.updates && $(this.options.updates)){
			$(this.options.updates).set("html",$(this.object).value.clean());	
		}
	},
	doAjax: function(){
		if(this.options.valid && this.options.ajax != false){
			var theValue 	= $(this.object).value.clean();
			var theName 	= $(this.object).name;
			$(this.thePlace).load({name : theName, value : theValue, object_id: $(this.object).id});	
		}
	},
	initialize : function(obj,options){
		this.object 		= obj;
		this.thePlace 		= null;
		this.replaceRadio 	= false;
		this.setOptions(options);
		this.message 		= false;	// This becomes the DOM element to show error messages
		this.setupOps 		= '';
		if($(this.object).get("class")){
			$splat($(this.object).get("class").split(" ")).each(function(item,index){
					if(item.contains(":")){
							this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
					}
			},this);
			if(this.setupOps != ''){
				this.setOptions(JSON.decode("{"+this.setupOps+"}"));
			}
		}
		if($(this.object).hasClass("validate-tip")){
			this.tip = new toolTips($(this.object),{hover:false,followMouse:false});
		}
		$(this.object).addEvent("keypress",function(){$(document.body).fireEvent("buttonsave");});
		$(this.object).addEvent("change",function(){$(document.body).fireEvent("buttonsave");});
		this.options.message = ($(this.object).get("title"))? $(this.object).get("title") :this.options.message;
		this.createOptions();
		var isValid 			= this.validate.bind(this);
		if(this.options.type == "integer" || this.options.type == "credit"){
			$(this.object).addEvent("blur",isValid);
			$(this.object).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();
				}
			});
		}
		if(this.options.type == "decimal"){
			$(this.object).addEvent("blur",isValid);
			$(this.object).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 !=190 && ev.code != 13 && ev.code!=110
				|| ($(this).value.contains('.') && ev.code ==190 && ev.code==110)){ 
					ev.stop();
				}
			});	
		}
		if(this.options.type == "username" ||  this.options.type == "password"){
			$(this.object).addEvent("blur",isValid);
			$(this.object).addEvent("keyup",function(){
				this.value = this.value.replace(/\W/gi,'');								// does not allow spacesor non word Charcters
			});	
		}
		if(this.options.type == "calender"){
			this.calender = new Calender($(this.object),this.options.calOptions);		// Setup Calender
			$(this.object).removeEvent("blur",this.showLabel.bind(this));
			$(this.object).addEvent("focus",this.hideLabel.bind(this));
		}
		if(this.options.type =="text"){
			if(!isNaN(this.options.maxValue)){
				$(this.object).set("maxlength",this.options.maxValue);
			}
			var maxValue = this.options.maxValue;
			$(this.object).addEvent("blur",isValid);
			$(this.object).addEvent("keydown",function(event){
				if(!isNaN(maxValue) && this.value.length > maxValue){
					this.value = this.value.substring(0,maxValue);
				}
			});	
		}
		if(this.options.type == "email"){
			$(this.object).addEvent("blur",isValid);
			$(this.object).addEvent("keydown",function(event){
				var ev = new Event(event); 
				if(ev.code == 32){
					ev.stop();
				}
			});	
		}
		if(this.options.doTiny==true || this.options.doTiny=='true'){						// Setup Tiny MCE for this input
			var removeMCE = this.removeMCE.bind(this);
			$(document.body).addEvent("closepopup",removeMCE);
			if($(this.object).getParent("form")){
				$(this.object).getParent("form").addEvent("removeMCE",removeMCE);
			}
			if($(this.object).getParent()){
				$(this.object).getParent().addClass("hidemce");
				$(this.object).getParent().spin();
			}
			try{
				if(this.options.tinySettings !== false){
					tinyMCE.settings = configArray[this.options.tinySettings.toInt()];
				}
				if($(this.object).get("id") != ""){
					tinyMCE.execCommand('mceAddControl', false, $(this.object).get("id"));
				}else{
					tinyMCE.execCommand('mceAddControl', false, $(this.object));
				}
				this.reveal.bind(this).delay(1000);
			}catch(e){
				$(this.object).getParent().removeClass("hidemce");	
				$(this.object).getParent().spin();
			}	
		}
	},
	reveal:function(){
		if($(this.object).getParent()){
			$(this.object).getParent().removeClass("hidemce");
			$(this.object).getParent().unspin();
		}
	},
	removeMCE: function(){
		if($(this.object)){
			if($(this.object).get("id") != ""){
				tinyMCE.execCommand('mceRemoveControl', false, $(this.object).get("id"));
			}else{
				tinyMCE.execCommand('mceRemoveControl', false, $(this.object));
			}
		}
	},
	validate    : function(){
		this.options.valid = true;
		if(this.options.doTiny){
			try{
				tinyMCE.triggerSave();
			}catch(e){}
		}
		if(this.options.required && !$(this.object).getParent('.hide')){
			switch(this.options.type){
				case 'radio':
				case 'checkbox':
					if(!$(this.object).checked){
						this.options.valid = false;
					}
				break;
				case 'decimal':
					$(this.object).value = $(this.object).value.toFloat().round(2);
					if(isNaN($(this.object).value) || $(this.object).value.clean() == ""){
						$(this.object).value = '';
						this.options.valid = false;
					}else{
						if(!isNaN(this.options.minValue) && $(this.object).value.toFloat() < this.options.minValue){
							this.options.valid = false;
							this.options.message = "Please provide a value";
						}else if(!isNaN(this.options.maxValue) && $(this.object).value.toFloat() > this.options.maxValue){
							this.options.valid = false;
							this.options.message = "Value is too high";
						}
					}
				break;
				case 'email':
					$(this.object).value = $(this.object).value.clean();
					if($(this.object).value.indexOf('@') < 2 || $(this.object).value.lastIndexOf('.') < $(this.object).value.indexOf('@')){
						this.options.valid = false;
					}
				break;
				case 'integer':
					if(isNaN($(this.object).value) || $(this.object).value.clean() == ""){
						$(this.object).value ='';
						this.options.valid = false;
					}else{
						if(!isNaN(this.options.minValue) && $(this.object).value.toInt() < this.options.minValue){
							this.options.valid = false;
							this.options.message = "Please Provide a Value";
						}else if(!isNaN(this.options.maxValue) && $(this.object).value.toInt() > this.options.maxValue){
							this.options.valid = false;
							this.options.message = "Value is too high";
						}
					}
				break;
				case 'credit':
					var checksum=0;
					var cardNo = $(this.object).value;
					if(isNaN($(this.object).value) || $(this.object).value.clean() == ""){
						$(this.object).value ='';
						this.options.valid = false;
					}else{
						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(cardNo)==false){
							if(validDinersMaster.test(cardNo)==false){
								if(validAmexDiscover.test(cardNo)==false){
									this.options.valid = false;
								}
							}
						}
						for(var i=(2-(cardNo.length%2));i<=cardNo.length;i+=2){
							checksum+=parseInt(cardNo.charAt(i-1));
						}
						for(var i=(cardNo.length%2)+1;i<cardNo.length;i+=2){
							var digit=parseInt(cardNo.charAt(i-1))*2;
							if(digit<10){
								checksum+=digit;
							}else{
								checksum+=(digit-9);
							}
						}
						if((checksum%10)!=0){
							this.options.valid =  false;
						}
					}
				break;
				case 'calender':
					if($(this.object).value.clean() < 3){
						this.options.valid= false;
					}
				break;
				default:
					var text = $(this.object).value.clean();
					$(this.object).value = text;
					if(!isNaN(this.options.minValue) && text.length < this.options.minValue){
						this.options.valid= false;
					}else if(!isNaN(this.options.maxValue) && text.length > this.options.maxValue){
						this.options.valid= false;
					}else{
						if(text.length < 1 && isNaN(this.options.minValue)){
							this.options.valid= false;
						}
					}
				break;
			}
			if(this.options.valid){
				$(this.object).removeClass("validate-error");
				$(this.object).addClass("required");
				if($(this.object).type.contains("select") && this.options.bgClass){
					$(this.object).getParent("."+this.options.bgClass).removeClass("validate-error");
				}
				if($(this.replaceRadio)){
					$(this.replaceRadio).removeClass("validate-error");
				}
			}else{
				$(this.object).removeClass("required");
				$(this.object).addClass("validate-error");
				if($(this.object).type.contains("select") && this.options.bgClass){
					$(this.object).getParent("."+this.options.bgClass).addClass("validate-error");
				}
				if($(this.replaceRadio)){
					$(this.replaceRadio).addClass("validate-error");
				}
			}
		}
		this.doAjax();
		this.getMessage();				// display inline error messages
		return this.options.valid;
	},
	hasFocus	: function(){
		$(this.object).removeClass("validate-error");
		if($(this.object).type.contains("select") && this.options.bgClass){
			$(this.object).getParent("."+this.options.bgClass).removeClass("validate-error");
		}
		if($(this.replaceRadio)){
			$(this.replaceRadio).removeClass("validate-error");
		}
		if(this.options.required){
			$(this.object).addClass("required");
		}
	},
	isRequired: function(){
		return this.options.required;
	},
	makeRequired: function(){
		this.options.required = true;
		$(this.object).addClass("required");
	},
	makeOptional: function(){
		this.options.required = false;
		$(this.object).removeClass("required");
		$(this.object).removeClass("validate-error");
	},
	getMessage: function(){
		if(this.tip){
			this.tip.hide();
		}
		if(this.options.valid==false){
			if(this.tip){
				this.tip.show();
				try{SetUpCufon();}catch(e){}
				return '';
			}else{
				return this.options.message;
			}
		}
	}
});

var Validate = new Class({
	Implements 	: [Options],
	group		: [],
	groupValid	: [],
	options 		: {
		required 		: false,		
		output	 		: false,			// Must be an element ID for the jax result to be visible
		ajax	 		: false,			// Set to the URL for the ajax request
		valid	 		: false,			// The form validation check
		errors	 		: 'alert',			// The message area for input items - error messages only
		dontSend 		: false,			// Dont send the form 
		resetform		: false,
		hide_form_match : 'auto',
		duel			: false,
		duelURL			: false,
		loading			: false
	},
 	initialize : function(form,options){
		this.setOptions(options);
		this.form 		= form;
		this.Items 		= [];
		this.groupItem	= [];
		this.message 	= '';
		this.thePlace	= null;
		this.setupOps 	= '';
		this.newmsg 	= "";
		if(!$(this.form).hasClass("required")){
			return false;	
		}
		$(this.form).addEvent("change",function(){$(document.body).fireEvent("buttonsave");});
		if($(this.form).get("class")){
			$splat($(this.form).get("class").split(" ")).each(function(item,index){
					if(item.contains(":")){
							this.setupOps += ((this.setupOps=='')?'' :',') + item;						 
					}
			},this);
			this.setOptions(JSON.decode("{"+this.setupOps+"}"));
		}
		
		if($(this.form).hasClass("required") || this.options.required==true){
			this.options.required = true;
			$(this.form).addEvent('submit',this.submitCheck.bind(this));
		}
		$(this.form).removeClass("required");
		var formItems = $(this.form).getElements('input');			// Get all inputs
		formItems.combine($(this.form).getElements('textarea'));	// Get all Text Areas
		formItems.combine($(this.form).getElements('select'));		// Get all Select Boxes
		var count 		= 0;
		var groupNames 	= [];
		formItems.each(function(item,index){		// Sets up all Inputs for this form
			if(item.type != "button" && item.type != "submit" && item.type != "hidden"){
				this.Items.push(new InputOptions(item));
			}
		},this);
		if(this.options.ajax != false){
			var fail 		= this.ajaxFail.bind(this);
			var success = this.ajaxSuccess.bind(this);
			if(this.options.ajax==true || this.options.ajax=='true'){
				this.options.ajax = $(this.form).get("action");	
			}
			//$(this.form).set('spinner',{useIframeShim:true});
			$(this.form).set("send",{onFailure: fail, onSuccess: success, evalScripts: true});
		}

	},
	ajaxFail: function(html,xml){
		this.showForm();
		alert("I'm sorry - The Request Failed\r\nPlease try again Later");
	},
	ajaxSuccess: function(html,xml){
		if($(this.options.output)){
			if($(this.options.errors)){
				$(this.options.errors).removeClass("validate-error");
			}
			$(this.options.output).getElements("form").each(function(item,index){
				$(item).fireEvent("removeMCE");
				$(item).unspin();	
			});
			$(this.options.output).set("html",html);
			$(this.options.output).getElements("form").each(function(item,index){
				if($(item.hasClass("required"))){
					new Validate($(item));
				}
			});
		}
		this.showForm();
		if(this.options.hideform){
			$(this.form).addClass('hide');		
		}
		if(this.options.resetform){
			$(this.form).reset();	
		}
	},
	submitCheck: function(event){
		var allGroups 		= [];
		var tmp						= [];
		var groupNames		= [];
		var found					= false;
		var group					= '';
		var firstGroupItem 	= [];										//Get the first item of groups for error message and setup values
		if(this.options.required){									// Check if the form is required
			this.options.valid = true;								// Its valid until something is not filled in correctly
			this.message = '';												// Set the Message box to empty
			this.Items.each(function(item,index){			// Go through each item in the form
				if(item.validate()==false){							// Is that input item valid?
					this.options.valid = false;						// Dont allow the form to submit
					this.message += (item.getMessage().clean() != "")? item.getMessage() + "<br />" : '';
				}
				if(item.getGroup()){										// Check if the item is part of a checkbox group or radio group
					found	= false;
					group 	= item.getGroup();
					allGroups.push(item);									// Make an array up of the group
					groupNames.each(function(name){
						if(name==group){
							found=true;												// check if the name is already in the array
						}
					},this);
					if(!found){
						groupNames.push(item.getGroup());		// Make an array of the group names
						firstGroupItem.push(item);					// Store the first group item for messages
					}
				}
			},this);
			groupNames.each(function(item,index){		// Loop through all group names
				found = false;							// Set the found option for the group
				allGroups.each(function(singleGroup){	// Loop through all the group items
					if(singleGroup.isChecked() && singleGroup.getGroup() == item){		// Check if the item is checked
						found = true;					// Item is checked = group is safe	
					}
				});
				if(found==false){
					firstGroupItem[index].makeRequired();	// Make the first checkbox required (necessary to get the error message)
					firstGroupItem[index].validate();	// Validate just the first checkbox / radio item
					firstGroupItem[index].message += (firstGroupItem[index].getMessage().clean() != "")? firstGroupItem[index].getMessage() + "<br />" : '';
					this.options.valid = false;
					firstGroupItem[index].makeOptional();	// Make the box optional again
				}
			},this);
			if(this.options.valid == false){
				if($(this.options.errors)){			// Check if the message area ID exists
					$(this.options.errors).set("html",this.message);
				}else{
					var msg = this.message;
					if(msg.clean() != ""){
						try{
							this.newmsg = "<div style='font-weight:bold;color:#393939'>The Following fields are required:</div><div style='color:#FF7a1b;'>" + msg + "<br /><br /></div><div>Please click OK below to return to the form</div>";
							this.alertBox.setAlertTitle("Some items were missed");
							this.alertBox.setAlertText(this.newmsg);
							$(this.form).fireEvent("doAlert");
						}catch(e){	
							var msg = this.message.replace(/<br \/>/g, '\r\n');
							alert(msg);
						}
					}
				}
			}
			if(this.options.ajax != false && this.options.valid){
				this.hideForm();
				var url = (this.options.ajax.contains("?"))? this.options.ajax+ "&ajax=ajax": this.options.ajax+"?ajax=ajax" ;
				$(this.form).send(url);
				this.updateAreas();
				return false;							// Dont let the form submit
			}else{
				if(this.options.valid){
					$(this.form).fireEvent("processing");
				}
				return this.options.valid;
			}
		}else if(this.options.dontSend){
			this.updateAreas();							// Update
			return false;								// Testing - dont send the form
		}
	},
	updateAreas : function(){
		this.Items.each(function(item,index){
			item.updateAreas();				 
		});
	},
	hideForm: function(){
		$(this.form).spin();
	},
	showForm: function(){
		$(this.form).unspin();
	}
});
window.addEvent('domready',function(){
	$$('form').each(function(item,index){
		new Validate(item);
	});
});



window.addEvent('domready',function(){
	if ($('specTable')){
		$('specTable').getElements('a').each(function(item,index){
			if ($(item).get('class') == 'CartLink'){
				$(item).addEvent('click', function(e) {
					new Event(e).stop(); 
					var data = '';
					if ($(item).search){			
						var data = $(item).search.replace(/\?/,'');
					}
					var req = new Request({
						method: 'post',
						url: "xcart.php",
						data: data + '&ajax=ajax',
						evalScripts: true,
						onSuccess: 	function(responseHTML) {
							if ($('cartItemCount')){
								$('cartItemCount').set('html', responseHTML);
							} else {
								alert("Your cart now contains " + responseHTML + ' items');
							}
							$(item).getElement('img').src='Images/Site/cart_icon_full.gif';
							$('ViewCart').setStyle('display','block');
		
						}
					}).send();
				});
			}
		});
	}
});




window.addEvent("domready",function(){
	var height = $('mainPanel').clientHeight;
	var sheight = $('sub').clientHeight;
	if (height > sheight){
		height = height -4;
		$('sub').set('tween', {transition: Fx.Transitions.linear, duration: 5});
		$('sub').tween('height', height);

	}
});

function recalc(ff){
	var country = ff[ff.selectedIndex].value;
	if (country && country != 'New Zealand'){
		$('GstRow').setStyle('display', 'none');
		$('gstGrandTotal').setStyle('display','none');
		$('noGstGrandTotal').setStyle('display','');
		
	}
	if (country == "" || country == 'New Zealand'){
		$('GstRow').setStyle('display', '');
		$('gstGrandTotal').setStyle('display','');
		$('noGstGrandTotal').setStyle('display','none');

	}
}
