﻿//for mootools 1.2 compatibility:
$A=function(a,b,c){if(Browser.Engine.trident&&$type(a)=='collection'){b=b||0;if(b<0)b=a.length+b;c=c||(a.length-b);var d=[];for(var i=0;i<c;i++)d[i]=a[b++];return d}b=(b||0)+((b<0)?a.length:0);var e=((!$chk(c))?a.length:c)+b;return Array.prototype.slice.call(a,b,e)};(function(){var a=[Array,Function,String,RegExp,Number];for(var i=0,l=a.length;i<l;i++)a[i].extend=a[i].implement})();window.extend=document.extend=function(a){for(var b in a)this[b]=a[b]};window[Browser.Engine.name]=window[Browser.Engine.name+Browser.Engine.version]=true;window.ie=window.trident;window.ie6=window.trident4;window.ie7=window.trident5;Class.empty=$empty;Class.prototype.extend=function(a){a.Extends=this;return new Class(a)};Array.implement({copy:function(a,b){return $A(this,a,b)}});Array.alias({erase:'remove',combine:'merge'});Function.extend({bindAsEventListener:function(a,b){return this.create({'bind':a,'event':true,'arguments':b})}});Function.empty=$empty;Hash.alias({getKeys:'keys',getValues:'values',has:'hasKey',combine:'merge'});var Abstract=Hash;Element.extend=Element.implement;Elements.extend=Elements.implement;Element.implement({getFormElements:function(){return this.getElements('input, textarea, select')},replaceWith:function(a){a=$(a);this.parentNode.replaceChild(a,this);return a},removeElements:function(){return this.dispose()}});Element.alias({'dispose':'remove','getLast':'getLastChild'});Element.implement({getText:function(){return this.get('text')},setText:function(a){return this.set('text',a)},setHTML:function(){return this.set('html',arguments)},getHTML:function(){return this.get('html')},getTag:function(){return this.get('tag')}});Event.keys=Event.Keys;Element.implement({setOpacity:function(a){return this.set('opacity',a)}});Object.toQueryString=Hash.toQueryString;var XHR=new Class({Extends:Request,options:{update:false},initialize:function(a,b){this.parent(b);this.url=a},request:function(a){return this.send(this.url,a||this.options.data)},send:function(a,b){if(!this.check(arguments.callee,a,b))return this;return this.parent({url:a,data:b})},success:function(a,b){a=this.processScripts(a);if(this.options.update)$(this.options.update).empty().set('html',a);this.onSuccess(a,b)},failure:function(){this.fireEvent('failure',this.xhr)}});var Ajax=XHR;JSON.Remote=new Class({options:{key:'json'},Extends:Request.JSON,initialize:function(a,b){this.parent(b);this.onComplete=$empty;this.url=a},send:function(a){if(!this.check(arguments.callee,a))return this;return this.parent({url:this.url,data:{json:Json.encode(a)}})},failure:function(){this.fireEvent('failure',this.xhr)}});Fx.implement({custom:function(a,b){return this.start(a,b)},clearTimer:function(){return this.cancel()},stop:function(){return this.cancel()}});Fx.Base=Fx;Fx.Style=function(a,b,c){return new Fx.Tween(a,$extend({property:b},c))};Element.implement({effect:function(a,b){return new Fx.Tween(this,$extend({property:a},b))}});Fx.Styles=Fx.Morph;Element.implement({effects:function(a){return new Fx.Morph(this,a)}});Native.implement([Element,Document],{getElementsByClassName:function(a){return this.getElements('.'+a)},getElementsBySelector:function(a){return this.getElements(a)}});Elements.implement({filterByTag:function(a){return this.filter(a)},filterByClass:function(a){return this.filter('.'+a)},filterById:function(a){return this.filter('#'+a)},filterByAttribute:function(a,b,c){return this.filter('['+a+(b||'')+(c||'')+']')}});var $E=function(a,b){return($(b)||document).getElement(a)};var $ES=function(a,b){return($(b)||document).getElements(a)};var Json=JSON;JSON.toString=JSON.encode;JSON.evaluate=JSON.decode;Cookie.set=function(a,b,c){return new Cookie(a,c).write(b)};Cookie.get=function(a){return new Cookie(a).read()};Cookie.remove=function(a,b){return new Cookie(a,b).dispose()};
var $extend = function(){ var args = arguments; if (!args[1]) args = [this, args[0]]; for (var property in args[1]) args[0][property] = args[1][property]; return args[0]; };

/*** HistoryManager 1.0rc2, MIT License, Harald Kirschner <mail [at] digitarald.de>, copyright 2007 ***/
var HistoryManager={options:{observeDelay:100,stateSeparator:';',iframeSrc:'/js/blank.html',onStart:Class.empty,onRegister:Class.empty,onUnregister:Class.empty,onStart:Class.empty,onUpdate:Class.empty,onStateChange:Class.empty,onObserverChange:Class.empty},dataOptions:{skipDefaultMatch:true,defaults:[],regexpParams:''},initialize:function(a){if(this.modules)return this;this.setOptions(a);this.modules=$H({});this.count=history.length;this.states=[];this.states[this.count]=this.getHash();this.state=null;return this},start:function(){this.observe.periodical(this.options.observeDelay,this);this.started=true;this.observe();this.update();this.fireEvent('onStart',[this.state]);return this},register:function(c,d,e,f,g,h){if(!this.modules)this.initialize();var i=$merge(this.dataOptions,h||{},{defaults:d,onMatch:e,onGenerate:f,regexp:g});i.regexp=i.regexp||c+'([\\w_-]*)';if(typeof i.regexp=='string')i.regexp=new RegExp(i.regexp,i.regexpParams);i.onGenerate=i.onGenerate||function(a){return c+''+a[0]};i.values=i.defaults.copy();this.modules.set(c,i);this.fireEvent('onUnregister',[c,i]);return{setValues:function(a){return this.setValues(c,a)}.bind(this),setValue:function(a,b){return this.setValue(c,a,b)}.bind(this),generate:function(a){return this.generate(c,a)}.bind(this),unregister:function(){return this.unregister(c)}.bind(this)}},unregister:function(a){this.fireEvent('onRegister',[a]);this.modules.remove(a)},setValues:function(a,b){var c=this.modules.get(a);if(!c||c.values.isSimilar(b))return this;c.values=b;this.update();return this},setValue:function(a,b,c){var d=this.modules.get(a);if(!d||d.values[b]==c)return this;d.values[b]=c;this.update();return this},generate:function(a,b){var c=this.modules.get(a);var d=c.values.copy();c.values=b;var e=this.generateState();c.values=d;return'#'+e},observe:function(){if(this.timeout)return;var d=this.getState();if(this.state==d)return;if((window.ie||window.webkit419)&&(this.state!==null))this.setState(d,true);else this.state=d;this.modules.each(function(a,b){var c=d.match(a.regexp);if(c){c.splice(0,1);c.complement(a.defaults);if(!c.isSimilar(a.defaults))a.values=c}else a.values=a.defaults.copy();a.onMatch(a.values,a.defaults)});this.fireEvent('onStateChange',[d]).fireEvent('onObserverChange',[d])},generateState:function(){var c=[];this.modules.each(function(a,b){if(a.skipDefaultMatch&&a.values.isSimilar(a.defaults))return;c.push(a.onGenerate(a.values))});return c.join(this.options.stateSeparator)},update:function(){if(!this.started)return this;var a=this.generateState();if((!this.state&&!a)||(this.state==a))return this;this.setState(a);this.fireEvent('onStateChange',[a]).fireEvent('onUpdate',[a]);return this},observeTimeout:function(){if(this.timeout)this.timeout=$clear(this.timeout);else this.timeout=this.observeTimeout.delay(200,this)},getHash:function(){var a=top.location.href;var b=a.indexOf('#')+1;return(b)?a.substr(b):''},getState:function(){var a=this.getHash();if(this.iframe){var b=this.iframe.contentWindow.document;if(b&&b.body.id=='state'){var c=b.body.innerText;if(this.state==a)return c;this.istateOld=true}else return this.istate}if(window.webkit419&&history.length!=this.count){this.count=history.length;return $pick(this.states[this.count-1],a)}return a},setState:function(a,b){a=$pick(a,'');if(window.webkit419){if(!this.form)this.form=new Element('form',{method:'get'}).injectInside(document.body);this.count=history.length;this.states[this.count]=a;this.observeTimeout();this.form.setProperty('action','#'+a).submit()}else top.location.hash=a||'#';if(window.ie&&(!b||this.istateOld)){if(!this.iframe){this.iframe=new Element('iframe',{src:this.options.iframeSrc,styles:'visibility: hidden;'}).injectInside(document.body);this.istate=this.state}try{var c=this.iframe.contentWindow.document;c.open();c.write('<html><body id="state">'+a+'</body></html>');c.close();this.istateOld=false}catch(e){}}this.state=a},extend:$extend};HistoryManager.extend(Events.prototype);HistoryManager.extend(Options.prototype);Array.extend({isSimilar:function(a){return(this.toString()==a.toString())},complement:function(a){for(var i=0,j=this.length;i<j;i++)this[i]=$pick(this[i],a[i]||null);return this}});