

/*=========== ROOT =========*/
var ROOT='';
/*==========================*/
var started=false;		
function StartLoading()
{
	if(!started)
	{
		var objLoading=document.createElement("div");
		objLoading.setAttribute('id','load');
		var fileLoadingImage=ROOT+"/functions/ajax/img/ajax-loader.gif";
		var objLoadingImage=document.createElement("img");
		objLoadingImage.setAttribute('src',fileLoadingImage);
		objLoading.appendChild(objLoadingImage);
		window.document.body.appendChild(objLoading);
		started=true;
		var pagesize=TB_getPageSize();
		var arrayPageScroll=TB_getPageScrollTop();
		$("load").setStyle({top:(arrayPageScroll[1]+((pagesize[1])/2))+"px"});
	}	
}
		
function StopLoading()
{
	if(started){
		objLoadingImage=document.getElementById('load');
		objLoadingImage.parentNode.replaceChild(document.createTextNode(''),objLoadingImage);
		started=false;
	}
}

function knackerEvent(eventObject){if(eventObject&&eventObject.stopPropagation)eventObject.stopPropagation();if(window.event&&window.event.cancelBubble)window.event.cancelBubble=true;if(eventObject&&eventObject.preventDefault)eventObject.preventDefault();if(window.event)window.event.returnValue=false;}

function message(text,c){
	var d=document;
	if(d.getElementById('ajaxmessage')!=null)
	{
		var am=d.getElementById('ajaxmessage')
		if(c)am.childNodes[0].className=c;
		am.childNodes[0].innerHTML=text;
	}
	else if(d.createTextNode)
	{
		var objLightbox=d.createElement("div");
		objLightbox.setAttribute('id','ajaxmessage');
		objLightbox.style.display='none';
		var mytext=d.createElement('p');
		if(c)mytext.className=c;
		var mytextvalue=d.createTextNode(text);
		mytext.appendChild(mytextvalue);
		objLightbox.appendChild(mytext);
		d.body.appendChild(objLightbox);
	}
	var pagesize=TB_getPageSize();
	var arrayPageScroll=TB_getPageScrollTop();
	
	$("ajaxmessage").setStyle({top:(arrayPageScroll[1]+((pagesize[1]-100)/2))+"px"});
	if(typeof(Effect)!="undefined"){
		setTimeout('new Effect.Appear(\'ajaxmessage\',{duration:0.5})',1);
		setTimeout('new Effect.Fade(\'ajaxmessage\',{duration:0.5})',2000);
	}
	else{
		setTimeout('$("ajaxmessage").show();',1);
		setTimeout('$("ajaxmessage").hide();',2000);
	}
}
	
function TB_getPageSize(){var de=document.documentElement;var w=window.innerWidth||self.innerWidth||(de&&de.clientWidth)||document.body.clientWidth;var h=window.innerHeight||self.innerHeight||(de&&de.clientHeight)||document.body.clientHeight;arrayPageSize=new Array(w,h);return arrayPageSize;}
function TB_getPageScrollTop(){var yScrolltop;var xScrollleft;if(self.pageYOffset||self.pageXOffset){yScrolltop=self.pageYOffset;xScrollleft=self.pageXOffset;}else if(document.documentElement&&document.documentElement.scrollTop||document.documentElement.scrollLeft){yScrolltop=document.documentElement.scrollTop;xScrollleft=document.documentElement.scrollLeft;}else if(document.body){yScrolltop=document.body.scrollTop;xScrollleft=document.body.scrollLeft;}arrayPageScroll=new Array(xScrollleft,yScrolltop);return arrayPageScroll;}

function deleteFailure(t){StopLoading();message("AJAX Error, please contact your administrator","msgerror");return false;}

/*  Prototype JavaScript framework, version 1.5.1*/
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('D 12={5z:\'1.5.1\',1Z:{3X:!!(1j.3Y&&!1j.4C),5A:!!1j.4C,3r:3Z.41.3s(\'9m/\')>-1,4D:3Z.41.3s(\'4D\')>-1&&3Z.41.3s(\'6Y\')==-1},3b:{5B:!!11.25,42:!!1j.43,5C:(11.2y(\'2d\').44!==11.2y(\'5D\').44)},4E:\'<5E[^>]*>([\\9n-\\9o]*?)</5E>\',6Z:/^\\/\\*-9p-\\s*(.*)\\s*\\*\\/\\s*$/,2J:o(){},K:o(x){B x}};D 1C={1D:o(){B o(){7.26.2l(7,17)}}};D 1O=V N();N.M=o(a,b){J(D c 1t b){a[c]=b[c]}B a};N.M(N,{1H:o(a){1P{C(a===1l)B\'1l\';C(a===18)B\'18\';B a.1H?a.1H():a.28()}1V(e){C(e 5F 9q)B\'...\';2z e;}},1Q:o(a){D b=1m a;45(b){1I\'1l\':1I\'o\':1I\'9r\':B;1I\'9s\':B a.28()}C(a===18)B\'18\';C(a.1Q)B a.1Q();C(a.5G===11)B;D c=[];J(D d 1t a){D e=N.1Q(a[d]);C(e!==1l)c.O(d.1Q()+\': \'+e)}B\'{\'+c.1R(\', \')+\'}\'},70:o(a){D b=[];J(D c 1t a)b.O(c);B b},3t:o(a){D b=[];J(D c 1t a)b.O(a[c]);B b},2m:o(a){B N.M({},a)}});71.U.1J=o(){D a=7,2o=$A(17),47=2o.4F();B o(){B a.2l(47,2o.1u($A(17)))}};71.U.9t=o(b){D c=7,2o=$A(17),b=2o.4F();B o(a){B c.2l(b,[a||1j.9u].1u(2o))}};N.M(3u.U,{9v:o(){B 7.2K(2,16)},5H:o(){B 7+1},4G:o(a){$R(0,7,1c).1e(a);B 7},2K:o(a,b){D c=7.28(b||10);B\'0\'.4G(a-c.I)+c},1Q:o(){B 9w(7)?7.28():\'18\'}});9x.U.1Q=o(){B\'"\'+7.9y()+\'-\'+(7.9z()+1).2K(2)+\'-\'+7.9A().2K(2)+\'T\'+7.9B().2K(2)+\':\'+7.9C().2K(2)+\':\'+7.9D().2K(2)+\'"\'};D 72={73:o(){D a;J(D i=0,I=17.I;i<I;i++){D b=17[i];1P{a=b();1y}1V(e){}}B a}};D 74=1C.1D();74.U={26:o(a,b){7.3v=a;7.3c=b;7.4H=1d;7.3d()},3d:o(){7.3w=75(7.3e.1J(7),7.3c*5I)},5J:o(){C(!7.3w)B;9E(7.3w);7.3w=18},3e:o(){C(!7.4H){1P{7.4H=1c;7.3v(7)}9F{7.4H=1d}}}};N.M(1S,{5K:o(a){B a==18?\'\':1S(a)},76:{\'\\b\':\'\\\\b\',\'\\t\':\'\\\\t\',\'\\n\':\'\\\\n\',\'\\f\':\'\\\\f\',\'\\r\':\'\\\\r\',\'\\\\\':\'\\\\\\\\\'}});N.M(1S.U,{29:o(a,b){D c=\'\',2L=7,1g;b=17.5L.5M(b);1o(2L.I>0){C(1g=2L.1g(a)){c+=2L.3x(0,1g.4I);c+=1S.5K(b(1g));2L=2L.3x(1g.4I+1g[0].I)}1b{c+=2L,2L=\'\'}}B c},77:o(b,c,d){c=7.29.5M(c);d=d===1l?1:d;B 7.29(b,o(a){C(--d<0)B a[0];B c(a)})},78:o(a,b){7.29(a,b);B 7},9G:o(a,b){a=a||30;b=b===1l?\'...\':b;B 7.I>a?7.3x(0,a-b.I)+b:7},3f:o(){B 7.1v(/^\\s+/,\'\').1v(/\\s+$/,\'\')},79:o(){B 7.1v(/<\\/?[^>]+>/5N,\'\')},2p:o(){B 7.1v(V 1W(12.4E,\'7a\'),\'\')},7b:o(){D b=V 1W(12.4E,\'7a\');D c=V 1W(12.4E,\'9H\');B(7.1g(b)||[]).20(o(a){B(a.1g(c)||[\'\',\'\'])[1]})},3y:o(){B 7.7b().20(o(a){B 4J(a)})},4K:o(){D a=17.5L;a.2q.9I=7;B a.2d.2r},7c:o(){D c=11.2y(\'2d\');c.2r=7.79();B c.2a[0]?(c.2a.I>1?$A(c.2a).2A(\'\',o(a,b){B a+b.48}):c.2a[0].48):\'\'},4L:o(e){D f=7.3f().1g(/([^?#]*)(#.*)?$/);C(!f)B{};B f[1].3z(e||\'&\').2A({},o(a,b){C((b=b.3z(\'=\'))[0]){D c=7d(b.4F());D d=b.I>1?b.1R(\'=\'):b[0];C(d!=1l)d=7d(d);C(c 1t a){C(a[c].3g!=1E)a[c]=[a[c]];a[c].O(d)}1b a[c]=d}B a})},2b:o(){B 7.3z(\'\')},5H:o(){B 7.3x(0,7.I-1)+1S.9J(7.7e(7.I-1)+1)},4G:o(a){D b=\'\';J(D i=0;i<a;i++)b+=7;B b},4M:o(){D a=7.3z(\'-\'),5O=a.I;C(5O==1)B a[0];D b=7.4N(0)==\'-\'?a[0].4N(0).1X()+a[0].49(1):a[0];J(D i=1;i<5O;i++)b+=a[i].4N(0).1X()+a[i].49(1);B b},5P:o(){B 7.4N(0).1X()+7.49(1).21()},9K:o(){B 7.29(/::/,\'/\').29(/([A-Z]+)([A-Z][a-z])/,\'#{1}4a#{2}\').29(/([a-z\\d])([A-Z])/,\'#{1}4a#{2}\').29(/-/,\'4a\').21()},9L:o(){B 7.29(/4a/,\'-\')},1H:o(c){D d=7.29(/[\\9M-\\9N\\\\]/,o(a){D b=1S.76[a[0]];B b?b:\'\\\\9O\'+a[0].7e().2K(2,16)});C(c)B\'"\'+d.1v(/"/g,\'\\\\"\')+\'"\';B"\'"+d.1v(/\'/g,\'\\\\\\\'\')+"\'"},1Q:o(){B 7.1H(1c)},5Q:o(a){B 7.77(a||12.6Z,\'#{1}\')},4O:o(a){D b=7.5Q();1P{C(!a||(V 1W(\'^("(\\\\\\\\.|[^"\\\\\\\\\\\\n\\\\r])\'+\'*\'+\'?"|[,:{}\\\\[\\\\]0-9.\\\\-+9P-u \\\\n\\\\r\\\\t])+?$\').2M(b))){B 4J(\'(\'+b+\')\')}}1V(e){}2z V 9Q(\'9R 9S 7f 2B: \'+7.1H());},1p:o(a){B 7.3s(a)>-1},7g:o(a){B 7.3s(a)===0},7h:o(a){D d=7.I-a.I;B d>=0&&7.9T(a)===d},4b:o(){B 7==\'\'},7i:o(){B/^\\s*$/.2M(7)}});C(12.1Z.3r||12.1Z.3X){N.M(1S.U,{4K:o(){B 7.1v(/&/g,\'&7j;\').1v(/</g,\'&7k;\').1v(/>/g,\'&7l;\')},7c:o(){B 7.1v(/&7j;/g,\'&\').1v(/&7k;/g,\'<\').1v(/&7l;/g,\'>\')}})}1S.U.29.5M=o(b){C(1m b==\'o\')B b;D c=V 22(b);B o(a){B c.25(a)}};1S.U.9U=1S.U.4L;N.M(1S.U.4K,{2d:11.2y(\'2d\'),2q:11.9V(\'\')});7m(1S.U.4K)2d.5R(2q);D 22=1C.1D();22.7n=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;22.U={26:o(a,b){7.7o=a.28();7.7p=b||22.7n},25:o(c){B 7.7o.29(7.7p,o(a){D b=a[1];C(b==\'\\\\\')B a[2];B b+1S.5K(c[a[3]])})}};D $1y={};D $2e=V 9W(\'"2z $2e" 9X 9Y, 9Z "B" a0\');D 23={1e:o(b){D c=0;1P{7.2f(o(a){b(a,c++)})}1V(e){C(e!=$1y)2z e;}B 7},7q:o(a,b){D c=-a,5S=[],5T=7.2b();1o((c+=a)<5T.I)5S.O(5T.3x(c,c+a));B 5S.20(b)},a1:o(c){D d=1c;7.1e(o(a,b){d=d&&!!(c||12.K)(a,b);C(!d)2z $1y;});B d},a2:o(c){D d=1d;7.1e(o(a,b){C(d=!!(c||12.K)(a,b))2z $1y;});B d},7r:o(c){D d=[];7.1e(o(a,b){d.O((c||12.K)(a,b))});B d},7s:o(c){D d;7.1e(o(a,b){C(c(a,b)){d=a;2z $1y;}});B d},7t:o(c){D d=[];7.1e(o(a,b){C(c(a,b))d.O(a)});B d},a3:o(d,e){D f=[];7.1e(o(a,b){D c=a.28();C(c.1g(d))f.O((e||12.K)(a,b))});B f},1p:o(b){D c=1d;7.1e(o(a){C(a==b){c=1c;2z $1y;}});B c},a4:o(b,c){c=c===1l?18:c;B 7.7q(b,o(a){1o(a.I<b)a.O(c);B a})},2A:o(c,d){7.1e(o(a,b){c=d(c,a,b)});B c},5U:o(b){D c=$A(17).3x(1);B 7.20(o(a){B a[b].2l(a,c)})},a5:o(c){D d;7.1e(o(a,b){a=(c||12.K)(a,b);C(d==1l||a>=d)d=a});B d},a6:o(c){D d;7.1e(o(a,b){a=(c||12.K)(a,b);C(d==1l||a<d)d=a});B d},a7:o(c){D d=[],5V=[];7.1e(o(a,b){((c||12.K)(a,b)?d:5V).O(a)});B[d,5V]},4c:o(c){D d=[];7.1e(o(a,b){d.O(a[c])});B d},a8:o(c){D d=[];7.1e(o(a,b){C(!c(a,b))d.O(a)});B d},a9:o(e){B 7.20(o(a,b){B{1w:a,4d:e(a,b)}}).aa(o(c,d){D a=c.4d,b=d.4d;B a<b?-1:a>b?1:0}).4c(\'1w\')},2b:o(){B 7.20()},ab:o(){D c=12.K,2o=$A(17);C(1m 2o.1z()==\'o\')c=2o.ac();D d=[7].1u(2o).20($A);B 7.20(o(a,b){B c(d.4c(b))})},7u:o(){B 7.2b().I},1H:o(){B\'#<23:\'+7.2b().1H()+\'>\'}};N.M(23,{20:23.7r,7v:23.7s,2g:23.7t,ad:23.1p,ae:23.2b});D $A=1E.7w=o(a){C(!a)B[];C(a.2b){B a.2b()}1b{D b=[];J(D i=0,I=a.I;i<I;i++)b.O(a[i]);B b}};C(12.1Z.3r){$A=1E.7w=o(a){C(!a)B[];C(!(1m a==\'o\'&&a==\'[47 af]\')&&a.2b){B a.2b()}1b{D b=[];J(D i=0,I=a.I;i<I;i++)b.O(a[i]);B b}}}N.M(1E.U,23);C(!1E.U.5W)1E.U.5W=1E.U.4P;N.M(1E.U,{2f:o(a){J(D i=0,I=7.I;i<I;i++)a(7[i])},7x:o(){7.I=0;B 7},2h:o(){B 7[0]},1z:o(){B 7[7.I-1]},ag:o(){B 7.2g(o(a){B a!=18})},7y:o(){B 7.2A([],o(a,b){B a.1u(b&&b.3g==1E?b.7y():[b])})},5X:o(){D b=$A(17);B 7.2g(o(a){B!b.1p(a)})},3s:o(a){J(D i=0,I=7.I;i<I;i++)C(7[i]==a)B i;B-1},4P:o(a){B(a!==1d?7:7.2b()).5W()},ah:o(){B 7.I>1?7:7[0]},ai:o(d){B 7.2A([],o(a,b,c){C(0==c||(d?a.1z()!=b:!a.1p(b)))a.O(b);B a})},2m:o(){B[].1u(7)},7u:o(){B 7.I},1H:o(){B\'[\'+7.20(N.1H).1R(\', \')+\']\'},1Q:o(){D c=[];7.1e(o(a){D b=N.1Q(a);C(b!==1l)c.O(b)});B\'[\'+c.1R(\', \')+\']\'}});1E.U.2b=1E.U.2m;o $w(a){a=a.3f();B a?a.3z(/\\s+/):[]}C(12.1Z.5A){1E.U.1u=o(){D a=[];J(D i=0,I=7.I;i<I;i++)a.O(7[i]);J(D i=0,I=17.I;i<I;i++){C(17[i].3g==1E){J(D j=0,7z=17[i].I;j<7z;j++)a.O(17[i][j])}1b{a.O(17[i])}}B a}}D 1F=o(a){C(a 5F 1F)7.7A(a);1b N.M(7,a||{})};N.M(1F,{3h:o(d){D e=[];e.3A=17.5L.7B;7.U.2f.5Y(d,o(b){C(!b.2i)B;D c=b.1w;C(c&&1m c==\'47\'){C(c.3g==1E)c.1e(o(a){e.3A(b.2i,a)});B}e.3A(b.2i,c)});B e.1R(\'&\')},1Q:o(c){D d=[];7.U.2f.5Y(c,o(a){D b=N.1Q(a.1w);C(b!==1l)d.O(a.2i.1Q()+\': \'+b)});B\'{\'+d.1R(\', \')+\'}\'}});1F.3h.7B=o(a,b,c){a=7C(a);C(b===1l)7.O(a);1b 7.O(a+\'=\'+(b==18?\'\':7C(b)))};N.M(1F.U,23);N.M(1F.U,{2f:o(a){J(D b 1t 7){D c=7[b];C(c&&c==1F.U[b])2e;D d=[b,c];d.2i=b;d.1w=c;a(d)}},70:o(){B 7.4c(\'2i\')},3t:o(){B 7.4c(\'1w\')},7A:o(c){B $H(c).2A(7,o(a,b){a[b.2i]=b.1w;B a})},4e:o(){D a;J(D i=0,I=17.I;i<I;i++){D b=7[17[i]];C(b!==1l){C(a===1l)a=b;1b{C(a.3g!=1E)a=[a];a.O(b)}}7D 7[17[i]]}B a},3h:o(){B 1F.3h(7)},1H:o(){B\'#<1F:{\'+7.20(o(a){B a.20(N.1H).1R(\': \')}).1R(\', \')+\'}>\'},1Q:o(){B 1F.1Q(7)}});o $H(a){C(a 5F 1F)B a;B V 1F(a)};C(o(){D i=0,5Z=o(a){7.2i=a};5Z.U.2i=\'aj\';J(D b 1t V 5Z(\'ak\'))i++;B i>1}())1F.U.2f=o(a){D b=[];J(D c 1t 7){D d=7[c];C((d&&d==1F.U[c])||b.1p(c))2e;b.O(c);D e=[c,d];e.2i=c;e.1w=d;a(e)}};4Q=1C.1D();N.M(4Q.U,23);N.M(4Q.U,{26:o(a,b,c){7.4f=a;7.60=b;7.7E=c},2f:o(a){D b=7.4f;1o(7.1p(b)){a(b);b=b.5H()}},1p:o(a){C(a<7.4f)B 1d;C(7.7E)B a<7.60;B a<=7.60}});D $R=o(a,b,c){B V 4Q(a,b,c)};D 1h={61:o(){B 72.73(o(){B V 7F()},o(){B V 7G(\'al.7H\')},o(){B V 7G(\'am.7H\')})||1d},62:0};1h.3B={4g:[],2f:o(a){7.4g.2f(a)},7I:o(a){C(!7.1p(a))7.4g.O(a)},an:o(a){7.4g=7.4g.5X(a)},4R:o(b,c,d,f){7.1e(o(a){C(1m a[b]==\'o\'){1P{a[b].2l(a,[c,d,f])}1V(e){}}})}};N.M(1h.3B,23);1h.3B.7I({4S:o(){1h.62++},2s:o(){1h.62--}});1h.4T=o(){};1h.4T.U={4U:o(a){7.14={1K:\'4h\',4V:1c,7J:\'63/x-ao-5D-ap\',64:\'aq-8\',2C:\'\'};N.M(7.14,a||{});7.14.1K=7.14.1K.21();C(1m 7.14.2C==\'2B\')7.14.2C=7.14.2C.4L()}};1h.3C=1C.1D();1h.3C.7K=[\'ar\',\'as\',\'at\',\'au\',\'65\'];1h.3C.U=N.M(V 1h.4T(),{66:1d,26:o(a,b){7.1q=1h.61();7.4U(b);7.4W(a)},4W:o(a){7.3D=a;7.1K=7.14.1K;D b=N.2m(7.14.2C);C(![\'7L\',\'4h\'].1p(7.1K)){b[\'av\']=7.1K;7.1K=\'4h\'}7.2C=b;C(b=1F.3h(b)){C(7.1K==\'7L\')7.3D+=(7.3D.1p(\'?\')?\'&\':\'?\')+b;1b C(/aw|ax|6Y/.2M(3Z.41))b+=\'&4a=\'}1P{C(7.14.4S)7.14.4S(7.1q);1h.3B.4R(\'4S\',7,7.1q);7.1q.ay(7.1K.1X(),7.3D,7.14.4V);C(7.14.4V)3i(o(){7.67(1)}.1J(7),10);7.1q.7M=7.68.1J(7);7.7N();7.1T=7.1K==\'4h\'?(7.14.az||b):18;7.1q.aA(7.1T);C(!7.14.4V&&7.1q.7O)7.68()}1V(e){7.4i(e)}},68:o(){D a=7.1q.7P;C(a>1&&!((a==4)&&7.66))7.67(7.1q.7P)},7N:o(){D b={\'X-aB-aC\':\'7F\',\'X-12-5z\':12.5z,\'aD\':\'2q/aE, 2q/aF, 63/7Q, 2q/7Q, */*\'};C(7.1K==\'4h\'){b[\'7R-1f\']=7.14.7J+(7.14.64?\'; aG=\'+7.14.64:\'\');C(7.1q.7O&&(3Z.41.1g(/4D\\/(\\d{4})/)||[0,7S])[1]<7S)b[\'aH\']=\'aI\'}C(1m 7.14.7T==\'47\'){D c=7.14.7T;C(1m c.O==\'o\')J(D i=0,I=c.I;i<I;i+=2)b[c[i]]=c[i+1];1b $H(c).1e(o(a){b[a.2i]=a.1w})}J(D d 1t b)7.1q.aJ(d,b[d])},2N:o(){B!7.1q.4X||(7.1q.4X>=aK&&7.1q.4X<aL)},67:o(a){D b=1h.3C.7K[a];D c=7.1q,4Y=7.4O();C(b==\'65\'){1P{7.66=1c;(7.14[\'3E\'+7.1q.4X]||7.14[\'3E\'+(7.2N()?\'aM\':\'aN\')]||12.2J)(c,4Y)}1V(e){7.4i(e)}D d=7.69(\'7R-1f\');C(d&&d.3f().1g(/^(2q|63)\\/(x-)?(aO|aP)5E(;.*)?$/i))7.7U()}1P{(7.14[\'3E\'+b]||12.2J)(c,4Y);1h.3B.4R(\'3E\'+b,7,c,4Y)}1V(e){7.4i(e)}C(b==\'65\'){7.1q.7M=12.2J}},69:o(a){1P{B 7.1q.aQ(a)}1V(e){B 18}},4O:o(){1P{D a=7.69(\'X-7f\');B a?a.4O():18}1V(e){B 18}},7U:o(){1P{B 4J((7.1q.4Z||\'\').5Q())}1V(e){7.4i(e)}},4i:o(a){(7.14.7V||12.2J)(7,a);1h.3B.4R(\'7V\',7,a)}});1h.6a=1C.1D();N.M(N.M(1h.6a.U,1h.3C.U),{26:o(c,d,e){7.50={2N:(c.2N||c),6b:(c.6b||(c.2N?18:c))};7.1q=1h.61();7.4U(e);D f=7.14.2s||12.2J;7.14.2s=(o(a,b){7.7W();f(a,b)}).1J(7);7.4W(d)},7W:o(){D a=7.50[7.2N()?\'2N\':\'6b\'];D b=7.1q.4Z;C(!7.14.3y)b=b.2p();C(a=$(a)){C(7.14.7X)V 7.14.7X(a,b);1b a.6c(b)}C(7.2N()){C(7.2s)3i(7.2s.1J(7),10)}}});1h.7Y=1C.1D();1h.7Y.U=N.M(V 1h.4T(),{26:o(a,b,c){7.4U(c);7.2s=7.14.2s;7.3c=(7.14.3c||2);7.3j=(7.14.3j||1);7.6d={};7.50=a;7.3D=b;7.4f()},4f:o(){7.14.2s=7.7Z.1J(7);7.3e()},5J:o(){7.6d.14.2s=1l;aR(7.3w);(7.2s||12.2J).2l(7,17)},7Z:o(a){C(7.14.3j){7.3j=(a.4Z==7.80?7.3j*7.14.3j:1);7.80=a.4Z}7.3w=3i(7.3e.1J(7),7.3j*7.3c*5I)},3e:o(){7.6d=V 1h.6a(7.50,7.3D,7.14)}});o $(a){C(17.I>1){J(D i=0,6e=[],I=17.I;i<I;i++)6e.O($(17[i]));B 6e}C(1m a==\'2B\')a=11.aS(a);B G.M(a)}C(12.3b.5B){11.6f=o(a,b){D c=[];D d=11.25(a,$(b)||11,18,aT.aU,18);J(D i=0,I=d.aV;i<I;i++)c.O(d.aW(i));B c};11.51=o(a,b){D q=".//*[4j(1u(\' \', @6g, \' \'), \' "+a+" \')]";B 11.6f(q,b)}}1b{11.51=o(a,b){D c=($(b)||11.1T).2D(\'*\');D d=[],1i;J(D i=0,I=c.I;i<I;i++){1i=c[i];C(G.6h(1i,a))d.O(G.M(1i))}B d}}C(!1j.G)D G={};G.M=o(a){D F=12.3b;C(!a||!a.1k||a.2t==3||a.81||F.5C||a==1j)B a;D b={},1k=a.1k,4k=G.M.4k,T=G.19.2E;C(!F.42){N.M(b,G.19),N.M(b,G.19.52)}C(T[1k])N.M(b,T[1k]);J(D c 1t b){D d=b[c];C(1m d==\'o\'&&!(c 1t a))a[c]=4k.6i(d)}a.81=12.2J;B a};G.M.4k={6i:o(a){B 7[a]=7[a]||o(){B a.2l(18,[7].1u($A(17)))}}};G.19={6j:o(a){B $(a).Y.2F!=\'53\'},82:o(a){a=$(a);G[G.6j(a)?\'83\':\'84\'](a);B a},83:o(a){$(a).Y.2F=\'53\';B a},84:o(a){$(a).Y.2F=\'\';B a},4e:o(a){a=$(a);a.1L.6k(a);B a},6c:o(a,b){b=1m b==\'1l\'?\'\':b.28();$(a).2r=b.2p();3i(o(){b.3y()},10);B a},1v:o(a,b){a=$(a);b=1m b==\'1l\'?\'\':b.28();C(a.85){a.85=b.2p()}1b{D c=a.5G.86();c.6l(a);a.1L.aX(c.87(b.2p()),a)}3i(o(){b.3y()},10);B a},1H:o(d){d=$(d);D e=\'<\'+d.1k.21();$H({\'2O\':\'2O\',\'2u\':\'6g\'}).1e(o(a){D b=a.2h(),88=a.1z();D c=(d[b]||\'\').28();C(c)e+=\' \'+88+\'=\'+c.1H(1c)});B e+\'>\'},54:o(a,b){a=$(a);D c=[];1o(a=a[b])C(a.2t==1)c.O(G.M(a));B c},89:o(a){B $(a).54(\'1L\')},8a:o(a){B $A($(a).2D(\'*\')).1e(G.M)},8b:o(a){a=$(a).3F;1o(a&&a.2t!=1)a=a.3G;B $(a)},8c:o(a){C(!(a=$(a).3F))B[];1o(a&&a.2t!=1)a=a.3G;C(a)B[a].1u($(a).4l());B[]},6m:o(a){B $(a).54(\'8d\')},4l:o(a){B $(a).54(\'3G\')},aY:o(a){a=$(a);B a.6m().4P().1u(a.4l())},1g:o(a,b){C(1m b==\'2B\')b=V L(b);B b.1g($(a))},aZ:o(a,b,c){a=$(a);C(17.I==1)B $(a.1L);D d=a.89();B b?L.3H(d,b,c):d[c||0]},b0:o(a,b,c){a=$(a);C(17.I==1)B a.8b();D d=a.8a();B b?L.3H(d,b,c):d[c||0]},b1:o(a,b,c){a=$(a);C(17.I==1)B $(L.1r.4m(a));D d=a.6m();B b?L.3H(d,b,c):d[c||0]},b2:o(a,b,c){a=$(a);C(17.I==1)B $(L.1r.4n(a));D d=a.4l();B b?L.3H(d,b,c):d[c||0]},b3:o(){D a=$A(17),15=$(a.4F());B L.6n(15,a)},51:o(a,b){B 11.51(b,a)},6o:o(a,b){a=$(a);C(12.1Z.3X){C(!a.8e)B 18;D t=G.55;C(t.3t[b])B t.3t[b](a,b);C(t.56[b])b=t.56[b];D c=a.8e[b];B c?c.48:18}B a.8f(b)},b4:o(a){B $(a).6p().2P},b5:o(a){B $(a).6p().2Q},57:o(a){B V G.58(a)},6h:o(a,b){C(!(a=$(a)))B;D c=a.2u;C(c.I==0)B 1d;C(c==b||c.1g(V 1W("(^|\\\\s)"+b+"(\\\\s|$)")))B 1c;B 1d},b6:o(a,b){C(!(a=$(a)))B;G.57(a).3A(b);B a},b7:o(a,b){C(!(a=$(a)))B;G.57(a).4e(b);B a},b8:o(a,b){C(!(a=$(a)))B;G.57(a)[a.6h(b)?\'4e\':\'3A\'](b);B a},3I:o(){1x.3I.2l(1x,17);B $A(17).2h()},59:o(){1x.59.2l(1x,17);B $A(17).2h()},b9:o(a){a=$(a);D b=a.3F;1o(b){D c=b.3G;C(b.2t==3&&!/\\S/.2M(b.48))a.6k(b);b=c}B a},4b:o(a){B $(a).2r.7i()},5a:o(a,b){a=$(a),b=$(b);1o(a=a.1L)C(a==b)B 1c;B 1d},8g:o(a){a=$(a);D b=2G.4o(a);1j.8g(b[0],b[1]);B a},1M:o(a,b){a=$(a);b=b==\'6q\'?\'5b\':b.4M();D c=a.Y[b];C(!c){D d=11.ba.bb(a,18);c=d?d[b]:18}C(b==\'2R\')B c?3J(c):1.0;B c==\'5c\'?18:c},bc:o(a){B $(a).1M(\'2R\')},bd:o(a,b,c){a=$(a);D d=a.Y;J(D e 1t b)C(e==\'2R\')a.5d(b[e]);1b d[(e==\'6q\'||e==\'5b\')?(d.6r===1l?\'5b\':\'6r\'):(c?e:e.4M())]=b[e];B a},5d:o(a,b){a=$(a);a.Y.2R=(b==1||b===\'\')?\'\':(b<0.6s)?0:b;B a},6p:o(a){a=$(a);D b=$(a).1M(\'2F\');C(b!=\'53\'&&b!=18)B{2Q:a.3K,2P:a.3L};D c=a.Y;D d=c.6t;D e=c.1A;D f=c.2F;c.6t=\'5e\';c.1A=\'3k\';c.2F=\'be\';D g=a.8h;D h=a.8i;c.2F=f;c.1A=e;c.6t=d;B{2Q:g,2P:h}},bf:o(a){a=$(a);D b=G.1M(a,\'1A\');C(b==\'6u\'||!b){a.6v=1c;a.Y.1A=\'5f\';C(1j.4C){a.Y.2S=0;a.Y.2T=0}}B a},bg:o(a){a=$(a);C(a.6v){a.6v=1l;a.Y.1A=a.Y.2S=a.Y.2T=a.Y.8j=a.Y.8k=\'\'}B a},bh:o(a){a=$(a);C(a.3M)B a;a.3M=a.Y.5g||\'5c\';C((G.1M(a,\'5g\')||\'6j\')!=\'5e\')a.Y.5g=\'5e\';B a},bi:o(a){a=$(a);C(!a.3M)B a;a.Y.5g=a.3M==\'5c\'?\'\':a.3M;a.3M=18;B a}};N.M(G.19,{bj:G.19.5a,bk:G.19.8c});C(12.1Z.5A){G.19.6w=G.19.1M;G.19.1M=o(a,b){45(b){1I\'2T\':1I\'2S\':1I\'8k\':1I\'8j\':C(G.6w(a,\'1A\')==\'6u\')B 18;6x:B G.6w(a,b)}}}1b C(12.1Z.3X){G.19.1M=o(a,b){a=$(a);b=(b==\'6q\'||b==\'5b\')?\'6r\':b.4M();D c=a.Y[b];C(!c&&a.8l)c=a.8l[b];C(b==\'2R\'){C(c=(a.1M(\'5h\')||\'\').1g(/5i\\(2R=(.*)\\)/))C(c[1])B 3J(c[1])/8m;B 1.0}C(c==\'5c\'){C((b==\'2Q\'||b==\'2P\')&&(a.1M(\'2F\')!=\'53\'))B a[\'24\'+b.5P()]+\'2j\';B 18}B c};G.19.5d=o(a,b){a=$(a);D c=a.1M(\'5h\'),Y=a.Y;C(b==1||b===\'\'){Y.5h=c.1v(/5i\\([^\\)]*\\)/5N,\'\');B a}1b C(b<0.6s)b=0;Y.5h=c.1v(/5i\\([^\\)]*\\)/5N,\'\')+\'5i(2R=\'+(b*8m)+\')\';B a};G.19.6c=o(b,c){b=$(b);c=1m c==\'1l\'?\'\':c.28();D d=b.1k.1X();C([\'6y\',\'5j\',\'5k\',\'6z\'].1p(d)){D e=11.2y(\'2d\');45(d){1I\'6y\':1I\'5j\':e.2r=\'<2U><2V>\'+c.2p()+\'</2V></2U>\';5l=2;1y;1I\'5k\':e.2r=\'<2U><2V><5m>\'+c.2p()+\'</5m></2V></2U>\';5l=3;1y;1I\'6z\':e.2r=\'<2U><2V><5m><8n>\'+c.2p()+\'</8n></5m></2V></2U>\';5l=4}$A(b.2a).1e(o(a){b.6k(a)});5l.4G(o(){e=e.3F});$A(e.2a).1e(o(a){b.5R(a)})}1b{b.2r=c.2p()}3i(o(){c.3y()},10);B b}}1b C(12.1Z.4D){G.19.5d=o(a,b){a=$(a);a.Y.2R=(b==1)?0.bl:(b===\'\')?\'\':(b<0.6s)?0:b;B a}}G.55={56:{bm:"bn",bo:"bp",bq:"br",bs:"bt",bu:"bv",bw:"bx",by:"bz",bA:"bB",8o:"bC",bD:"bE"},3t:{5n:o(a,b){B a.8f(b,2)},4p:o(a,b){B $(a).2H(b)?b:18},Y:o(a){B a.Y.bF.21()},8p:o(a){D b=a.8q(\'8p\');B b.8r?b.48:18}}};(o(){N.M(7,{bG:7.5n,bH:7.5n,1f:7.5n,2c:7.4p,3l:7.4p,8o:7.4p,bI:7.4p})}).5Y(G.55.3t);G.19.52={2H:o(a,b){D t=G.55,E;b=t.56[b]||b;E=$(a).8q(b);B E&&E.8r}};G.19.2E={};N.M(G,G.19);C(!12.3b.42&&11.2y(\'2d\').44){1j.43={};1j.43.U=11.2y(\'2d\').44;12.3b.42=1c}G.2H=o(a,b){C(a.2H)B a.2H(b);B G.19.52.2H(a,b)};G.8s=o(g){D F=12.3b,T=G.19.2E;C(!g){N.M(1a,1a.19);N.M(1a.G,1a.G.19);N.M(G.19.2E,{"bJ":N.2m(1a.19),"bK":N.2m(1a.G.19),"bL":N.2m(1a.G.19),"8t":N.2m(1a.G.19)})}C(17.I==2){D h=g;g=17[1]}C(!h)N.M(G.19,g||{});1b{C(h.3g==1E)h.1e(M);1b M(h)}o M(a){a=a.1X();C(!G.19.2E[a])G.19.2E[a]={};N.M(G.19.2E[a],g)}o 5o(a,b,c){c=c||1d;D d=G.M.4k;J(D e 1t a){D f=a[e];C(!c||!(e 1t b))b[e]=d.6i(f)}}o 8u(a){D b;D c={"bM":"bN","8t":"bO","P":"bP","bQ":"bR","bS":"bT","bU":"bV","bW":"bX","bY":"bZ","c0":"3N","c1":"3N","c2":"3N","c3":"3N","c4":"3N","c5":"3N","Q":"c6","c7":"8v","c8":"8v","A":"c9","ca":"cb","cc":"cd","ce":"8w","cf":"8w","6y":"6A","cg":"6A","5j":"6A","5k":"ch","ci":"8x","6z":"8x","cj":"ck","cl":"cm"};C(c[a])b=\'6B\'+c[a]+\'G\';C(1j[b])B 1j[b];b=\'6B\'+a+\'G\';C(1j[b])B 1j[b];b=\'6B\'+a.5P()+\'G\';C(1j[b])B 1j[b];1j[b]={};1j[b].U=11.2y(a).44;B 1j[b]}C(F.42){5o(G.19,43.U);5o(G.19.52,43.U,1c)}C(F.5C){J(D i 1t G.19.2E){D j=8u(i);C(1m j=="1l")2e;5o(T[i],j.U)}}N.M(G,G.19);7D G.2E};D cn={2F:G.82};1O.1U=o(a){7.6C=a};1O.1U.U={26:o(a,b){7.15=$(a);7.5p=b.2p();C(7.6C&&7.15.8y){1P{7.15.8y(7.6C,7.5p)}1V(e){D c=7.15.1k.1X();C([\'5j\',\'5k\'].1p(c)){7.3O(7.8z())}1b{2z e;}}}1b{7.2W=7.15.5G.86();C(7.3P)7.3P();7.3O([7.2W.87(7.5p)])}3i(o(){b.3y()},10)},8z:o(){D a=11.2y(\'2d\');a.2r=\'<2U><2V>\'+7.5p+\'</2V></2U>\';B $A(a.2a[0].2a[0].2a)}};D 1U=V N();1U.8A=1C.1D();1U.8A.U=N.M(V 1O.1U(\'co\'),{3P:o(){7.2W.cp(7.15)},3O:o(b){b.1e((o(a){7.15.1L.6D(a,7.15)}).1J(7))}});1U.8B=1C.1D();1U.8B.U=N.M(V 1O.1U(\'cq\'),{3P:o(){7.2W.6l(7.15);7.2W.8C(1c)},3O:o(b){b.4P(1d).1e((o(a){7.15.6D(a,7.15.3F)}).1J(7))}});1U.8D=1C.1D();1U.8D.U=N.M(V 1O.1U(\'cr\'),{3P:o(){7.2W.6l(7.15);7.2W.8C(7.15)},3O:o(b){b.1e((o(a){7.15.5R(a)}).1J(7))}});1U.8E=1C.1D();1U.8E.U=N.M(V 1O.1U(\'cs\'),{3P:o(){7.2W.ct(7.15)},3O:o(b){b.1e((o(a){7.15.1L.6D(a,7.15.3G)}).1J(7))}});G.58=1C.1D();G.58.U={26:o(a){7.15=$(a)},2f:o(b){7.15.2u.3z(/\\s+/).2g(o(a){B a.I>0}).2f(b)},6E:o(a){7.15.2u=a},3A:o(a){C(7.1p(a))B;7.6E($A(7).1u(a).1R(\' \'))},4e:o(a){C(!7.1p(a))B;7.6E($A(7).5X(a).1R(\' \'))},28:o(){B $A(7).1R(\' \')}};N.M(G.58.U,23);D L=1C.1D();L.U={26:o(a){7.2X=a.3f();7.8F()},8F:o(){C(12.3b.5B&&!(/\\[[\\w-]*?:/).2M(7.2X))B 7.8G();D e=7.2X,3Q=L.5q,h=L.1r,c=L.4d,2I,p,m;C(L.3m[e]){7.2k=L.3m[e];B}7.2k=["7.2k = o(8H) {","D r = 8H, h = L.1r, c = 1d, n;"];1o(e&&2I!=e&&(/\\S/).2M(e)){2I=e;J(D i 1t 3Q){p=3Q[i];C(m=e.1g(p)){7.2k.O(1m c[i]==\'o\'?c[i](m):V 22(c[i]).25(m));e=e.1v(m[0],\'\');1y}}}7.2k.O("B h.6F(n);\\n}");4J(7.2k.1R(\'\\n\'));L.3m[7.2X]=7.2k},8G:o(){D e=7.2X,3Q=L.5q,x=L.1B,2I,m;C(L.3m[e]){7.1B=L.3m[e];B}7.2k=[\'.//*\'];1o(e&&2I!=e&&(/\\S/).2M(e)){2I=e;J(D i 1t 3Q){C(m=e.1g(3Q[i])){7.2k.O(1m x[i]==\'o\'?x[i](m):V 22(x[i]).25(m));e=e.1v(m[0],\'\');1y}}}7.1B=7.2k.1R(\'\');L.3m[7.2X]=7.1B},4q:o(a){a=a||11;C(7.1B)B 11.6f(7.1B,a);B 7.2k(a)},1g:o(a){B 7.4q(11).1p(a)},28:o(){B 7.2X},1H:o(){B"#<L:"+7.2X.1H()+">"}};N.M(L,{3m:{},1B:{2Y:"//*",1i:"/*",3R:"/4r-2Z::*[1]",4s:\'/4r-2Z::*\',1k:o(m){C(m[1]==\'*\')B\'\';B"[8I-3n()=\'"+m[1].21()+"\' 6G 8I-3n()=\'"+m[1].1X()+"\']"},2u:"[4j(1u(\' \', @6g, \' \'), \' #{1} \')]",2O:"[@2O=\'#{1}\']",4t:"[@#{1}]",4u:o(m){m[3]=m[5]||m[6];B V 22(L.1B.5r[m[2]]).25(m)},4v:o(m){D h=L.1B.1s[m[1]];C(!h)B\'\';C(1m h===\'o\')B h(m);B V 22(L.1B.1s[m[1]]).25(m)},5r:{\'=\':"[@#{1}=\'#{3}\']",\'!=\':"[@#{1}!=\'#{3}\']",\'^=\':"[cu-7m(@#{1}, \'#{3}\')]",\'$=\':"[49(@#{1}, (2B-I(@#{1}) - 2B-I(\'#{3}\') + 1))=\'#{3}\']",\'*=\':"[4j(@#{1}, \'#{3}\')]",\'~=\':"[4j(1u(\' \', @#{1}, \' \'), \' #{3} \')]",\'|=\':"[4j(1u(\'-\', @#{1}, \'-\'), \'-#{3}-\')]"},1s:{\'2h-1i\':\'[31(6H-2Z::*)]\',\'1z-1i\':\'[31(4r-2Z::*)]\',\'4w-1i\':\'[31(6H-2Z::* 6G 4r-2Z::*)]\',\'4b\':"[5s(*) = 0 6I (5s(2q()) = 0 6G cv(2q(), \' \\t\\r\\n\', \'\') = \'\')]",\'3l\':"[@3l]",\'2c\':"[@2c]",\'8J\':"[31(@2c)]",\'31\':o(m){D e=m[6],p=L.5q,x=L.1B,2I,m,v;D a=[];1o(e&&2I!=e&&(/\\S/).2M(e)){2I=e;J(D i 1t p){C(m=e.1g(p[i])){v=1m x[i]==\'o\'?x[i](m):V 22(x[i]).25(m);a.O("("+v.49(1,v.I-1)+")");e=e.1v(m[0],\'\');1y}}}B"[31("+a.1R(" 6I ")+")]"},\'1n-1i\':o(m){B L.1B.1s.1n("(5s(./6H-2Z::*) + 1) ",m)},\'1n-1z-1i\':o(m){B L.1B.1s.1n("(5s(./4r-2Z::*) + 1) ",m)},\'1n-1G-1f\':o(m){B L.1B.1s.1n("1A() ",m)},\'1n-1z-1G-1f\':o(m){B L.1B.1s.1n("(1z() + 1 - 1A()) ",m)},\'2h-1G-1f\':o(m){m[6]="1";B L.1B.1s[\'1n-1G-1f\'](m)},\'1z-1G-1f\':o(m){m[6]="1";B L.1B.1s[\'1n-1z-1G-1f\'](m)},\'4w-1G-1f\':o(m){D p=L.1B.1s;B p[\'2h-1G-1f\'](m)+p[\'1z-1G-1f\'](m)},1n:o(c,m){D d,3o=m[6],6J;C(3o==\'8K\')3o=\'2n+0\';C(3o==\'8L\')3o=\'2n+1\';C(d=3o.1g(/^(\\d+)$/))B\'[\'+c+"= "+d[1]+\']\';C(d=3o.1g(/^(-?\\d*)?n(([+-])(\\d+))?/)){C(d[1]=="-")d[1]=-1;D a=d[1]?3u(d[1]):1;D b=d[2]?3u(d[2]):0;6J="[((#{6K} - #{b}) cw #{a} = 0) 6I "+"((#{6K} - #{b}) 2d #{a} >= 0)]";B V 22(6J).25({6K:c,a:a,b:b})}}}},4d:{1k:\'n = h.1k(n, r, "#{1}", c);   c = 1d;\',2u:\'n = h.2u(n, r, "#{1}", c); c = 1d;\',2O:\'n = h.2O(n, r, "#{1}", c);        c = 1d;\',4t:\'n = h.4t(n, r, "#{1}"); c = 1d;\',4u:o(m){m[3]=(m[5]||m[6]);B V 22(\'n = h.4u(n, r, "#{1}", "#{3}", "#{2}"); c = 1d;\').25(m)},4v:o(m){C(m[6])m[6]=m[6].1v(/"/g,\'\\\\"\');B V 22(\'n = h.4v(n, "#{1}", "#{6}", r, c); c = 1d;\').25(m)},2Y:\'c = "2Y";\',1i:\'c = "1i";\',3R:\'c = "3R";\',4s:\'c = "4s";\'},5q:{4s:V 1W(\'^\\\\s\'+\'*\'+\'~\\\\s*\'),1i:V 1W(\'^\\\\s\'+\'*\'+\'>\\\\s*\'),3R:V 1W(\'^\\\\s\'+\'*\'+\'\\\\+\\\\s*\'),2Y:/^\\s/,1k:V 1W(\'^\\\\s*\'+\'(\\\\\'+\'*|[\\\\w\\\\-]+)(\\\\b|$)?\'),2O:V 1W(\'^#([\\\\w\\\\-\\\\\'+\'*]+)(\\\\b|$)\'),2u:V 1W(\'^\\\\.([\\\\w\\\\-\\\\\'+\'*]+)(\\\\b|$)\'),4v:V 1W(\'^:((2h|1z|1n|1n-1z|4w)(-1i|-1G-1f)|4b|3l|(cx|cy)cz|31)(\\\\((.*?)\\\\))?(\\\\b|$|\\\\s||(?=:))\'),4t:V 1W(\'^\\\\[([\\\\w]+)\\\\]\'),4u:V 1W(\'\\\\[((?:[\\\\w-]*:)?[\\\\w-]+)\\\\s*(?:([!^$*~|]?=)\\\\s*(([\\\'"])([^\\\\]]*?)\\\\4|([^\\\'"][^\\\\]]*?)))?\\\\]\')},1r:{1u:o(a,b){J(D i=0,E;E=b[i];i++)a.O(E);B a},5t:o(a){J(D i=0,E;E=a[i];i++)E.2v=1c;B a},3S:o(a){J(D i=0,E;E=a[i];i++)E.2v=1l;B a},4I:o(a,b,c){a.2v=1c;C(b){J(D d=a.2a,i=d.I-1,j=1;i>=0;i--){E=d[i];C(E.2t==1&&(!c||E.2v))E.5u=j++}}1b{J(D i=0,j=1,d=a.2a;E=d[i];i++)C(E.2t==1&&(!c||E.2v))E.5u=j++}},6F:o(a){C(a.I==0)B a;D b=[],n;J(D i=0,l=a.I;i<l;i++)C(!(n=a[i]).2v){n.2v=1c;b.O(G.M(n))}B L.1r.3S(b)},2Y:o(a){D h=L.1r;J(D i=0,W=[],E;E=a[i];i++)h.1u(W,E.2D(\'*\'));B W},1i:o(a){D h=L.1r;J(D i=0,W=[],E;E=a[i];i++){J(D j=0,cA=[],1i;1i=E.2a[j];j++)C(1i.2t==1&&1i.1k!=\'!\')W.O(1i)}B W},3R:o(a){J(D i=0,W=[],E;E=a[i];i++){D b=7.4n(E);C(b)W.O(b)}B W},4s:o(a){D h=L.1r;J(D i=0,W=[],E;E=a[i];i++)h.1u(W,G.4l(E));B W},4n:o(a){1o(a=a.3G)C(a.2t==1)B a;B 18},4m:o(a){1o(a=a.8d)C(a.2t==1)B a;B 18},1k:o(a,b,c,d){c=c.1X();D e=[],h=L.1r;C(a){C(d){C(d=="2Y"){J(D i=0,E;E=a[i];i++)h.1u(e,E.2D(c));B e}1b a=7[d](a);C(c=="*")B a}J(D i=0,E;E=a[i];i++)C(E.1k.1X()==c)e.O(E);B e}1b B b.2D(c)},2O:o(a,b,c,d){D e=$(c),h=L.1r;C(!a&&b==11)B e?[e]:[];C(a){C(d){C(d==\'1i\'){J(D i=0,E;E=a[i];i++)C(e.1L==E)B[e]}1b C(d==\'2Y\'){J(D i=0,E;E=a[i];i++)C(G.5a(e,E))B[e]}1b C(d==\'3R\'){J(D i=0,E;E=a[i];i++)C(L.1r.4m(e)==E)B[e]}1b a=h[d](a)}J(D i=0,E;E=a[i];i++)C(E==e)B[e];B[]}B(e&&G.5a(e,b))?[e]:[]},2u:o(a,b,c,d){C(a&&d)a=7[d](a);B L.1r.8M(a,b,c)},8M:o(a,b,c){C(!a)a=L.1r.2Y([b]);D d=\' \'+c+\' \';J(D i=0,W=[],E,4x;E=a[i];i++){4x=E.2u;C(4x.I==0)2e;C(4x==c||(\' \'+4x+\' \').1p(d))W.O(E)}B W},4t:o(a,b,c){D d=[];J(D i=0,E;E=a[i];i++)C(G.2H(E,c))d.O(E);B d},4u:o(a,b,c,d,e){C(!a)a=b.2D("*");D f=L.5r[e],W=[];J(D i=0,E;E=a[i];i++){D g=G.6o(E,c);C(g===18)2e;C(f(g,d))W.O(E)}B W},4v:o(a,b,c,d,e){C(a&&e)a=7[e](a);C(!a)a=d.2D("*");B L.1s[b](a,c,d)}},1s:{\'2h-1i\':o(a,b,c){J(D i=0,W=[],E;E=a[i];i++){C(L.1r.4m(E))2e;W.O(E)}B W},\'1z-1i\':o(a,b,c){J(D i=0,W=[],E;E=a[i];i++){C(L.1r.4n(E))2e;W.O(E)}B W},\'4w-1i\':o(a,b,c){D h=L.1r;J(D i=0,W=[],E;E=a[i];i++)C(!h.4m(E)&&!h.4n(E))W.O(E);B W},\'1n-1i\':o(a,b,c){B L.1s.1n(a,b,c)},\'1n-1z-1i\':o(a,b,c){B L.1s.1n(a,b,c,1c)},\'1n-1G-1f\':o(a,b,c){B L.1s.1n(a,b,c,1d,1c)},\'1n-1z-1G-1f\':o(a,b,c){B L.1s.1n(a,b,c,1c,1c)},\'2h-1G-1f\':o(a,b,c){B L.1s.1n(a,"1",c,1d,1c)},\'1z-1G-1f\':o(a,b,c){B L.1s.1n(a,"1",c,1c,1c)},\'4w-1G-1f\':o(a,b,c){D p=L.1s;B p[\'1z-1G-1f\'](p[\'2h-1G-1f\'](a,b,c),b,c)},8N:o(a,b,d){C(a==0)B b>0?[b]:[];B $R(1,d).2A([],o(c,i){C(0==(i-b)%a&&(i-b)/a>=0)c.O(i);B c})},1n:o(c,d,e,f,g){C(c.I==0)B[];C(d==\'8K\')d=\'2n+0\';C(d==\'8L\')d=\'2n+1\';D h=L.1r,W=[],6L=[],m;h.5t(c);J(D i=0,E;E=c[i];i++){C(!E.1L.2v){h.4I(E.1L,f,g);6L.O(E.1L)}}C(d.1g(/^\\d+$/)){d=3u(d);J(D i=0,E;E=c[i];i++)C(E.5u==d)W.O(E)}1b C(m=d.1g(/^(-?\\d*)?n(([+-])(\\d+))?/)){C(m[1]=="-")m[1]=-1;D a=m[1]?3u(m[1]):1;D b=m[2]?3u(m[2]):0;D k=L.1s.8N(a,b,c.I);J(D i=0,E,l=k.I;E=c[i];i++){J(D j=0;j<l;j++)C(E.5u==k[j])W.O(E)}}h.3S(c);h.3S(6L);B W},\'4b\':o(a,b,c){J(D i=0,W=[],E;E=a[i];i++){C(E.1k==\'!\'||(E.3F&&!E.2r.1g(/^\\s*$/)))2e;W.O(E)}B W},\'31\':o(a,b,c){D h=L.1r,cB,m;D d=V L(b).4q(c);h.5t(d);J(D i=0,W=[],E;E=a[i];i++)C(!E.2v)W.O(E);h.3S(d);B W},\'8J\':o(a,b,c){J(D i=0,W=[],E;E=a[i];i++)C(!E.2c)W.O(E);B W},\'2c\':o(a,b,c){J(D i=0,W=[],E;E=a[i];i++)C(E.2c)W.O(E);B W},\'3l\':o(a,b,c){J(D i=0,W=[],E;E=a[i];i++)C(E.3l)W.O(E);B W}},5r:{\'=\':o(a,v){B a==v},\'!=\':o(a,v){B a!=v},\'^=\':o(a,v){B a.7g(v)},\'$=\':o(a,v){B a.7h(v)},\'*=\':o(a,v){B a.1p(v)},\'~=\':o(a,v){B(\' \'+a+\' \').1p(\' \'+v+\' \')},\'|=\':o(a,v){B(\'-\'+a.1X()+\'-\').1p(\'-\'+v.1X()+\'-\')}},8O:o(a,b){D c=V L(b).4q(),h=L.1r;h.5t(c);J(D i=0,W=[],15;15=a[i];i++)C(15.2v)W.O(15);h.3S(c);B W},3H:o(a,b,c){C(1m b==\'cC\'){c=b;b=1d}B L.8O(a,b||\'*\')[c||0]},6n:o(a,b){D c=b.1R(\',\'),b=[];c.78(/(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)/,o(m){b.O(m[1].3f())});D d=[],h=L.1r;J(D i=0,l=b.I,6M;i<l;i++){6M=V L(b[i].3f());h.1u(d,6M.4q(a))}B(l>1)?h.6F(d):d}});o $$(){B L.6n(11,$A(17))}D 1a={6N:o(a){$(a).6N();B a},8P:o(d,e){D f=d.2A({},o(a,b){C(!b.2c&&b.3n){D c=b.3n,1w=$(b).1Y();C(1w!=18){C(c 1t a){C(a[c].3g!=1E)a[c]=[a[c]];a[c].O(1w)}1b a[c]=1w}}B a});B e?f:1F.3h(f)}};1a.19={4y:o(a,b){B 1a.8P(1a.3T(a),b)},3T:o(c){B $A($(c).2D(\'*\')).2A([],o(a,b){C(1a.G.4z[b.1k.21()])a.O(G.M(b));B a})},cD:o(a,b,c){a=$(a);D d=a.2D(\'5v\');C(!b&&!c)B $A(d).20(G.M);J(D i=0,6O=[],I=d.I;i<I;i++){D e=d[i];C((b&&e.1f!=b)||(c&&e.3n!=c))2e;6O.O(G.M(e))}B 6O},6P:o(a){a=$(a);1a.3T(a).5U(\'6P\');B a},6Q:o(a){a=$(a);1a.3T(a).5U(\'6Q\');B a},8Q:o(b){B $(b).3T().7v(o(a){B a.1f!=\'5e\'&&!a.2c&&[\'5v\',\'2g\',\'6R\'].1p(a.1k.21())})},cE:o(a){a=$(a);a.8Q().8R();B a},4W:o(a,b){a=$(a),b=N.2m(b||{});D c=b.2C;b.2C=a.4y(1c);C(c){C(1m c==\'2B\')c=c.4L();N.M(b.2C,c)}C(a.2H(\'1K\')&&!b.1K)b.1K=a.1K;B V 1h.3C(a.6o(\'cF\'),b)}};1a.G={6S:o(a){$(a).6S();B a},2g:o(a){$(a).2g();B a}};1a.G.19={4y:o(a){a=$(a);C(!a.2c&&a.3n){D b=a.1Y();C(b!=1l){D c={};c[a.3n]=b;B 1F.3h(c)}}B\'\'},1Y:o(a){a=$(a);D b=a.1k.21();B 1a.G.4z[b](a)},7x:o(a){$(a).1w=\'\';B a},cG:o(a){B $(a).1w!=\'\'},8R:o(a){a=$(a);1P{a.6S();C(a.2g&&(a.1k.21()!=\'5v\'||![\'6T\',\'6N\',\'cH\'].1p(a.1f)))a.2g()}1V(e){}B a},6P:o(a){a=$(a);a.cI();a.2c=1c;B a},6Q:o(a){a=$(a);a.2c=1d;B a}};D cJ=1a.G;D $F=1a.G.19.1Y;1a.G.4z={5v:o(a){45(a.1f.21()){1I\'8S\':1I\'8T\':B 1a.G.4z.8U(a);6x:B 1a.G.4z.6R(a)}},8U:o(a){B a.3l?a.1w:18},6R:o(a){B a.1w},2g:o(a){B 7[a.1f==\'2g-cK\'?\'8V\':\'8W\'](a)},8V:o(a){D b=a.cL;B b>=0?7.6U(a.14[b]):18},8W:o(a){D b,I=a.I;C(!I)B 18;J(D i=0,b=[];i<I;i++){D c=a.14[i];C(c.cM)b.O(7.6U(c))}B b},6U:o(a){B G.M(a).2H(\'1w\')?a.1w:a.2q}};1O.5w=o(){};1O.5w.U={26:o(a,b,c){7.3c=b;7.15=$(a);7.3v=c;7.32=7.1Y();7.3d()},3d:o(){75(7.3e.1J(7),7.3c*5I)},3e:o(){D a=7.1Y();D b=(\'2B\'==1m 7.32&&\'2B\'==1m a?7.32!=a:1S(7.32)!=1S(a));C(b){7.3v(7.15,a);7.32=a}}};1a.G.5x=1C.1D();1a.G.5x.U=N.M(V 1O.5w(),{1Y:o(){B 1a.G.1Y(7.15)}});1a.5x=1C.1D();1a.5x.U=N.M(V 1O.5w(),{1Y:o(){B 1a.4y(7.15)}});1O.3a=o(){};1O.3a.U={26:o(a,b){7.15=$(a);7.3v=b;7.32=7.1Y();C(7.15.1k.21()==\'5D\')7.8X();1b 7.3d(7.15)},6V:o(){D a=7.1Y();C(7.32!=a){7.3v(7.15,a);7.32=a}},8X:o(){1a.3T(7.15).1e(7.3d.1J(7))},3d:o(a){C(a.1f){45(a.1f.21()){1I\'8S\':1I\'8T\':1x.3I(a,\'cN\',7.6V.1J(7));1y;6x:1x.3I(a,\'cO\',7.6V.1J(7));1y}}}};1a.G.3a=1C.1D();1a.G.3a.U=N.M(V 1O.3a(),{1Y:o(){B 1a.G.1Y(7.15)}});1a.3a=1C.1D();1a.3a.U=N.M(V 1O.3a(),{1Y:o(){B 1a.4y(7.15)}});C(!1j.1x){D 1x=V N()}N.M(1x,{cP:8,cQ:9,cR:13,cS:27,cT:37,cU:38,cV:39,cW:40,cX:46,cY:36,cZ:35,d0:33,d1:34,15:o(a){B $(a.d2||a.d3)},d4:o(a){B(((a.8Y)&&(a.8Y==1))||((a.6T)&&(a.6T==1)))},d5:o(a){B a.d6||(a.d7+(11.5y.3U||11.1T.3U))},d8:o(a){B a.d9||(a.da+(11.5y.3V||11.1T.3V))},5J:o(a){C(a.8Z){a.8Z();a.db()}1b{a.dc=1d;a.dd=1c}},3H:o(a,b){D c=1x.15(a);1o(c.1L&&(!c.1k||(c.1k.1X()!=b.1X())))c=c.1L;B c},2w:1d,90:o(a,b,c,d){C(!7.2w)7.2w=[];C(a.91){7.2w.O([a,b,c,d]);a.91(b,c,d)}1b C(a.3Y){7.2w.O([a,b,c,d]);a.3Y(\'3E\'+b,c)}},92:o(){C(!1x.2w)B;J(D i=0,I=1x.2w.I;i<I;i++){1x.59.2l(7,1x.2w[i]);1x.2w[i][0]=18}1x.2w=1d},3I:o(a,b,c,d){a=$(a);d=d||1d;C(b==\'93\'&&(12.1Z.3r||a.3Y))b=\'94\';1x.90(a,b,c,d)},59:o(a,b,c,d){a=$(a);d=d||1d;C(b==\'93\'&&(12.1Z.3r||a.3Y))b=\'94\';C(a.95){a.95(b,c,d)}1b C(a.96){1P{a.96(\'3E\'+b,c)}1V(e){}}}});C(12.1Z.3X)1x.3I(1j,\'de\',1x.92,1d);D 2G={97:1d,6W:o(){7.98=1j.df||11.5y.3U||11.1T.3U||0;7.99=1j.dg||11.5y.3V||11.1T.3V||0},9a:o(a){D b=0,1N=0;3W{b+=a.3V||0;1N+=a.3U||0;a=a.1L}1o(a);B[1N,b]},4o:o(a){D b=0,1N=0;3W{b+=a.3p||0;1N+=a.3q||0;a=a.2x}1o(a);B[1N,b]},9b:o(a){D b=0,1N=0;3W{b+=a.3p||0;1N+=a.3q||0;a=a.2x;C(a){C(a.1k==\'9c\')1y;D p=G.1M(a,\'1A\');C(p==\'5f\'||p==\'3k\')1y}}1o(a);B[1N,b]},2x:o(a){C(a.2x)B a.2x;C(a==11.1T)B a;1o((a=a.1L)&&a!=11.1T)C(G.1M(a,\'1A\')!=\'6u\')B a;B 11.1T},dh:o(a,x,y){C(7.97)B 7.9d(a,x,y);7.4A=x;7.4B=y;7.24=7.4o(a);B(y>=7.24[1]&&y<7.24[1]+a.3L&&x>=7.24[0]&&x<7.24[0]+a.3K)},9d:o(a,x,y){D b=7.9a(a);7.4A=x+b[0]-7.98;7.4B=y+b[1]-7.99;7.24=7.4o(a);B(7.4B>=7.24[1]&&7.4B<7.24[1]+a.3L&&7.4A>=7.24[0]&&7.4A<7.24[0]+a.3K)},di:o(a,b){C(!a)B 0;C(a==\'dj\')B((7.24[1]+b.3L)-7.4B)/b.3L;C(a==\'dk\')B((7.24[0]+b.3K)-7.4A)/b.3K},6X:o(a){D b=0,1N=0;D c=a;3W{b+=c.3p||0;1N+=c.3q||0;C(c.2x==11.1T)C(G.1M(c,\'1A\')==\'3k\')1y}1o(c=c.2x);c=a;3W{C(!1j.4C||c.1k==\'9c\'){b-=c.3V||0;1N-=c.3U||0}}1o(c=c.1L);B[1N,b]},2m:o(a,b){D c=N.M({9e:1c,9f:1c,9g:1c,9h:1c,3p:0,3q:0},17[2]||{});a=$(a);D p=2G.6X(a);b=$(b);D d=[0,0];D e=18;C(G.1M(b,\'1A\')==\'3k\'){e=2G.2x(b);d=2G.6X(e)}C(e==11.1T){d[0]-=11.1T.3q;d[1]-=11.1T.3p}C(c.9e)b.Y.2T=(p[0]-d[0]+c.3q)+\'2j\';C(c.9f)b.Y.2S=(p[1]-d[1]+c.3p)+\'2j\';C(c.9g)b.Y.2Q=a.3K+\'2j\';C(c.9h)b.Y.2P=a.3L+\'2j\'},dl:o(a){a=$(a);C(a.Y.1A==\'3k\')B;2G.6W();D b=2G.9b(a);D c=b[1];D d=b[0];D e=a.8h;D f=a.8i;a.9i=d-3J(a.Y.2T||0);a.9j=c-3J(a.Y.2S||0);a.9k=a.Y.2Q;a.9l=a.Y.2P;a.Y.1A=\'3k\';a.Y.2S=c+\'2j\';a.Y.2T=d+\'2j\';a.Y.2Q=e+\'2j\';a.Y.2P=f+\'2j\'},dm:o(a){a=$(a);C(a.Y.1A==\'5f\')B;2G.6W();a.Y.1A=\'5f\';D b=3J(a.Y.2S||0)-(a.9j||0);D c=3J(a.Y.2T||0)-(a.9i||0);a.Y.2S=b+\'2j\';a.Y.2T=c+\'2j\';a.Y.2P=a.9l;a.Y.2Q=a.9k}};C(12.1Z.3r){2G.4o=o(a){D b=0,1N=0;3W{b+=a.3p||0;1N+=a.3q||0;C(a.2x==11.1T)C(G.1M(a,\'1A\')==\'3k\')1y;a=a.2x}1o(a);B[1N,b]}}G.8s();',62,829,'|||||||this|||||||||||||||||function|||||||||||||return|if|var|node||Element||length|for||Selector|extend|Object|push||||||prototype|new|results||style|||document|Prototype||options|element||arguments|null|Methods|Form|else|true|false|each|type|match|Ajax|child|window|tagName|undefined|typeof|nth|while|include|transport|handlers|pseudos|in|concat|replace|value|Event|break|last|position|xpath|Class|create|Array|Hash|of|inspect|case|bind|method|parentNode|getStyle|valueL|Abstract|try|toJSON|join|String|body|Insertion|catch|RegExp|toUpperCase|getValue|Browser|map|toLowerCase|Template|Enumerable|offset|evaluate|initialize||toString|gsub|childNodes|toArray|disabled|div|continue|_each|select|first|key|px|matcher|apply|clone||args|stripScripts|text|innerHTML|onComplete|nodeType|className|_counted|observers|offsetParent|createElement|throw|inject|string|parameters|getElementsByTagName|ByTag|display|Position|hasAttribute|le|emptyFunction|toPaddedString|source|test|success|id|height|width|opacity|top|left|table|tbody|range|expression|descendant|sibling||not|lastValue||||||||EventObserver|BrowserFeatures|frequency|registerCallback|onTimerEvent|strip|constructor|toQueryString|setTimeout|decay|absolute|checked|_cache|name|formula|offsetTop|offsetLeft|WebKit|indexOf|values|Number|callback|timer|slice|evalScripts|split|add|Responders|Request|url|on|firstChild|nextSibling|findElement|observe|parseFloat|offsetWidth|offsetHeight|_overflow|Heading|insertContent|initializeRange|ps|adjacent|unmark|getElements|scrollLeft|scrollTop|do|IE|attachEvent|navigator||userAgent|ElementExtensions|HTMLElement|__proto__|switch||object|nodeValue|substring|_|empty|pluck|criteria|remove|start|responders|post|dispatchException|contains|cache|nextSiblings|previousElementSibling|nextElementSibling|cumulativeOffset|_flag|findElements|following|laterSibling|attrPresence|attr|pseudo|only|nodeClassName|serialize|Serializers|xcomp|ycomp|opera|Gecko|ScriptFragment|shift|times|currentlyExecuting|index|eval|escapeHTML|toQueryParams|camelize|charAt|evalJSON|reverse|ObjectRange|dispatch|onCreate|Base|setOptions|asynchronous|request|status|json|responseText|container|getElementsByClassName|Simulated|none|recursivelyCollect|_attributeTranslations|names|classNames|ClassNames|stopObserving|descendantOf|cssFloat|auto|setOpacity|hidden|relative|overflow|filter|alpha|TBODY|TR|depth|tr|_getAttr|copy|content|patterns|operators|count|mark|nodeIndex|input|TimedObserver|Observer|documentElement|Version|Opera|XPath|SpecificElementExtensions|form|script|instanceof|ownerDocument|succ|1000|stop|interpret|callee|prepareReplacement|gi|len|capitalize|unfilterJSON|appendChild|slices|array|invoke|falses|_reverse|without|call|Test|end|getTransport|activeRequestCount|application|encoding|Complete|_complete|respondToReadyState|onStateChange|getHeader|Updater|failure|update|updater|elements|_getElementsByXPath|class|hasClassName|findOrStore|visible|removeChild|selectNodeContents|previousSiblings|findChildElements|readAttribute|getDimensions|float|styleFloat|00001|visibility|static|_madePositioned|_getStyle|default|THEAD|TD|TableSection|HTML|adjacency|insertBefore|set|unique|or|preceding|and|predicate|fragment|indexed|selector|reset|matchingInputs|disable|enable|textarea|focus|button|optionValue|onElementEvent|prepare|page|KHTML|JSONFilter|keys|Function|Try|these|PeriodicalExecuter|setInterval|specialChar|sub|scan|stripTags|img|extractScripts|unescapeHTML|decodeURIComponent|charCodeAt|JSON|startsWith|endsWith|blank|amp|lt|gt|with|Pattern|template|pattern|eachSlice|collect|detect|findAll|size|find|from|clear|flatten|arrayLength|merge|addPair|encodeURIComponent|delete|exclusive|XMLHttpRequest|ActiveXObject|XMLHTTP|register|contentType|Events|get|onreadystatechange|setRequestHeaders|overrideMimeType|readyState|xml|Content|2005|requestHeaders|evalResponse|onException|updateContent|insertion|PeriodicalUpdater|updateComplete|lastText|_extended|toggle|hide|show|outerHTML|createRange|createContextualFragment|attribute|ancestors|descendants|firstDescendant|immediateDescendants|previousSibling|attributes|getAttribute|scrollTo|clientWidth|clientHeight|bottom|right|currentStyle|100|td|readonly|title|getAttributeNode|specified|addMethods|TEXTAREA|findDOMClass|Mod|TableCol|TableCell|insertAdjacentHTML|contentFromAnonymousTable|Before|Top|collapse|Bottom|After|compileMatcher|compileXPathMatcher|root|local|enabled|even|odd|byClassName|getIndices|matchElements|serializeElements|findFirstElement|activate|checkbox|radio|inputSelector|selectOne|selectMany|registerFormCallbacks|which|preventDefault|_observeAndCache|addEventListener|unloadCache|keypress|keydown|removeEventListener|detachEvent|includeScrollOffsets|deltaX|deltaY|realOffset|positionedOffset|BODY|withinIncludingScrolloffsets|setLeft|setTop|setWidth|setHeight|_originalLeft|_originalTop|_originalWidth|_originalHeight|AppleWebKit|u0001|uFFFF|secure|RangeError|unknown|boolean|bindAsEventListener|event|toColorPart|isFinite|Date|getFullYear|getMonth|getDate|getHours|getMinutes|getSeconds|clearInterval|finally|truncate|im|data|fromCharCode|underscore|dasherize|x00|x1f|u00|Eaeflnr|SyntaxError|Badly|formed|lastIndexOf|parseQuery|createTextNode|Error|is|deprecated|use|instead|all|any|grep|inGroupsOf|max|min|partition|reject|sortBy|sort|zip|pop|member|entries|NodeList|compact|reduce|uniq|foo|bar|Msxml2|Microsoft|unregister|www|urlencoded|UTF|Uninitialized|Loading|Loaded|Interactive|_method|Konqueror|Safari|open|postBody|send|Requested|With|Accept|javascript|html|charset|Connection|close|setRequestHeader|200|300|Success|Failure|java|ecma|getResponseHeader|clearTimeout|getElementById|XPathResult|ORDERED_NODE_SNAPSHOT_TYPE|snapshotLength|snapshotItem|replaceChild|siblings|up|down|previous|next|getElementsBySelector|getHeight|getWidth|addClassName|removeClassName|toggleClassName|cleanWhitespace|defaultView|getComputedStyle|getOpacity|setStyle|block|makePositioned|undoPositioned|makeClipping|undoClipping|childOf|childElements|999999|colspan|colSpan|rowspan|rowSpan|valign|vAlign|datetime|dateTime|accesskey|accessKey|tabindex|tabIndex|enctype|encType|maxlength|maxLength|readOnly|longdesc|longDesc|cssText|href|src|multiple|FORM|INPUT|SELECT|OPTGROUP|OptGroup|TextArea|Paragraph|FIELDSET|FieldSet|UL|UList|OL|OList|DL|DList|DIR|Directory|H1|H2|H3|H4|H5|H6|Quote|INS|DEL|Anchor|IMG|Image|CAPTION|TableCaption|COL|COLGROUP|TFOOT|TableRow|TH|FRAMESET|FrameSet|IFRAME|IFrame|Toggle|beforeBegin|setStartBefore|afterBegin|beforeEnd|afterEnd|setStartAfter|starts|translate|mod|en|dis|abled|children|selectorType|number|getInputs|focusFirstElement|action|present|submit|blur|Field|one|selectedIndex|selected|click|change|KEY_BACKSPACE|KEY_TAB|KEY_RETURN|KEY_ESC|KEY_LEFT|KEY_UP|KEY_RIGHT|KEY_DOWN|KEY_DELETE|KEY_HOME|KEY_END|KEY_PAGEUP|KEY_PAGEDOWN|target|srcElement|isLeftClick|pointerX|pageX|clientX|pointerY|pageY|clientY|stopPropagation|returnValue|cancelBubble|unload|pageXOffset|pageYOffset|within|overlap|vertical|horizontal|absolutize|relativize'.split('|'),0,{}))

// script.aculo.us effects.js v1.7.1_beta3, Fri May 25 17:19:41 +0200 2007

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor = function() {  
  var color = '#';
  if(this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if(this.slice(0,1) == '#') {  
      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if(this.length==7) color = this.toLowerCase();  
    }  
  }  
  return(color.length==7 ? color : (arguments[0] || this));  
}

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
}

Element.collectTextNodesIgnoreClass = function(element, className) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
}

Element.setContentZoom = function(element, percent) {
  element = $(element);  
  element.setStyle({fontSize: (percent/100) + 'em'});   
  if(Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
}

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
}

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

Array.prototype.call = function() {
  var args = arguments;
  this.each(function(f){ f.apply(this, args) });
}

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  tagifyText: function(element) {
    if(typeof Builder == 'undefined')
      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
      
    var tagifyStyle = 'position:relative';
    if(Prototype.Browser.IE) tagifyStyle += ';zoom:1';
    
    element = $(element);
    $A(element.childNodes).each( function(child) {
      if(child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            Builder.node('span',{style: tagifyStyle},
              character == ' ' ? String.fromCharCode(160) : character), 
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if(((typeof element == 'object') || 
        (typeof element == 'function')) && 
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;
      
    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || {});
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || {});
    Effect[element.visible() ? 
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

var Effect2 = Effect; // deprecated

/* ------------- transitions ------------- */

Effect.Transitions = {
  linear: Prototype.K,
  sinoidal: function(pos) {
    return (-Math.cos(pos*Math.PI)/2) + 0.5;
  },
  reverse: function(pos) {
    return 1-pos;
  },
  flicker: function(pos) {
    var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
    return (pos > 1 ? 1 : pos);
  },
  wobble: function(pos) {
    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
  },
  pulse: function(pos, pulses) { 
    pulses = pulses || 5; 
    return (
      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
      );
  },
  none: function(pos) {
    return 0;
  },
  full: function(pos) {
    return 1;
  }
};

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create();
Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
  initialize: function() {
    this.effects  = [];
    this.interval = null;    
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();
    
    var position = (typeof effect.options.queue == 'string') ? 
      effect.options.queue : effect.options.queue.position;
    
    switch(position) {
      case 'front':
        // move unstarted effects after this effect  
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }
    
    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);
    
    if(!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if(this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++) 
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if(typeof queueName != 'string') return queueName;
    
    if(!this.instances[queueName])
      this.instances[queueName] = new Effect.ScopedQueue();
      
    return this.instances[queueName];
  }
}
Effect.Queue = Effect.Queues.get('global');

Effect.DefaultOptions = {
  transition: Effect.Transitions.sinoidal,
  duration:   1.0,   // seconds
  fps:        100,   // 100= assume 66fps max.
  sync:       false, // true for combining
  from:       0.0,
  to:         1.0,
  delay:      0.0,
  queue:      'parallel'
}

Effect.Base = function() {};
Effect.Base.prototype = {
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if(options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;
    
    eval('this.render = function(pos){ '+
      'if(this.state=="idle"){this.state="running";'+
      codeForEvent(options,'beforeSetup')+
      (this.setup ? 'this.setup();':'')+ 
      codeForEvent(options,'afterSetup')+
      '};if(this.state=="running"){'+
      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
      'this.position=pos;'+
      codeForEvent(options,'beforeUpdate')+
      (this.update ? 'this.update(pos);':'')+
      codeForEvent(options,'afterUpdate')+
      '}}');
    
    this.event('beforeStart');
    if(!this.options.sync)
      Effect.Queues.get(typeof this.options.queue == 'string' ? 
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if(timePos >= this.startOn) {
      if(timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if(this.finish) this.finish(); 
        this.event('afterFinish');
        return;  
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = Math.round(pos * this.totalFrames);
      if(frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if(!this.options.sync)
      Effect.Queues.get(typeof this.options.queue == 'string' ? 
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if(this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if(typeof this[property] != 'function') data[property] = this[property];
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
}

Effect.Parallel = Class.create();
Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if(effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Event = Class.create();
Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
  initialize: function() {
    var options = Object.extend({
      duration: 0
    }, arguments[0] || {});
    this.start(options);
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create();
Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || {});
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create();
Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    // Bug in Opera: Opera returns the "real" position of a static element or
    // relative element that does not have top/left explicitly set.
    // ==> Always set top and left for position relative elements in your stylesheets 
    // (to 0 if you do not need them) 
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if(this.options.mode == 'absolute') {
      // absolute movement, so we need to calc deltaX and deltaY
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element, 
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
};

Effect.Scale = Class.create();
Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
  initialize: function(element, percent) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || {});
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');
    
    this.originalStyle = {};
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));
      
    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    
    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if(fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));
    
    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
    
    this.dims = null;
    if(this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if(/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if(!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if(this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = {};
    if(this.options.scaleX) d.width = Math.round(width) + 'px';
    if(this.options.scaleY) d.height = Math.round(height) + 'px';
    if(this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if(this.elementPositioning == 'absolute') {
        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if(this.options.scaleY) d.top = -topd + 'px';
        if(this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create();
Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = {};
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if(!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if(!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = Class.create();
Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    this.start(arguments[1] || {});
  },
  setup: function() {
    Position.prepare();
    var offsets = Position.cumulativeOffset(this.element);
    if(this.options.offset) offsets[1] += this.options.offset;
    var max = window.innerHeight ? 
      window.height - window.innerHeight :
      document.body.scrollHeight - 
        (document.documentElement.clientHeight ? 
          document.documentElement.clientHeight : document.body.clientHeight);
    this.scrollStart = Position.deltaY;
    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
  },
  update: function(position) {
    Position.prepare();
    window.scrollTo(Position.deltaX, 
      this.scrollStart + (position*this.delta));
  }
});

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
  from: element.getOpacity() || 1.0,
  to:   0.0,
  afterFinishInternal: function(effect) { 
    if(effect.options.to!=0) return;
    effect.element.hide().setStyle({opacity: oldOpacity}); 
  }}, arguments[1] || {});
  return new Effect.Opacity(element,options);
}

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show(); 
  }}, arguments[1] || {});
  return new Effect.Opacity(element,options);
}

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || {})
   );
}

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false, 
      scaleX: false, 
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      } 
    }, arguments[1] || {})
  );
}

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || {}));
}

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, { 
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) { 
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      })
    }
  }, arguments[1] || {}));
}

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned(); 
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        } 
      }, arguments[1] || {}));
}

Effect.Shake = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element, 
      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}) }}) }}) }}) }}) }});
}

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || {})
  );
}

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    restoreAfterFinish: true,
    beforeStartInternal: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
      effect.element.down().undoPositioned();
    }
   }, arguments[1] || {})
  );
}

// Bug in opera makes the TD containing this element expand for a instance after finish 
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, { 
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping(); 
    }
  });
}

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || {});
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();    
  var initialMoveX, initialMoveY;
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0; 
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }
  
  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01, 
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show(); 
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
             }
           }, options)
      )
    }
  });
}

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || {});
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':  
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }
  
  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({            
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping(); 
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
}

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || {};
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
}

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({   
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, { 
      scaleContent: false, 
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || {}));
};

Effect.Morph = Class.create();
Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: {}
    }, arguments[1] || {});
    if (typeof options.style == 'string') {
      if(options.style.indexOf(':') == -1) {
        var cssText = '', selector = '.' + options.style;
        $A(document.styleSheets).reverse().each(function(styleSheet) {
          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
          else if (styleSheet.rules) cssRules = styleSheet.rules;
          $A(cssRules).reverse().each(function(rule) {
            if (selector == rule.selectorText) {
              cssText = rule.style.cssText;
              throw $break;
            }
          });
          if (cssText) throw $break;
        });
        this.style = cssText.parseStyle();
        options.afterFinishInternal = function(effect){
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            if(transform.style != 'opacity')
              effect.element.style[transform.style] = '';
          });
        }
      } else this.style = options.style.parseStyle();
    } else this.style = $H(options.style)
    this.start(options);
  },
  setup: function(){
    function parseColor(color){
      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if(property == 'opacity') {
        value = parseFloat(value);
        if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if(Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return { 
        style: property.camelize(), 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = {}, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] = 
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        transform.originalValue + Math.round(
          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create();
Object.extend(Effect.Transform.prototype, {
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || {};
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      var data = $H(track).values().first();
      this.tracks.push($H({
        ids:     $H(track).keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var elements = [$(track.ids) || $$(track.ids)].flatten();
        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.prototype.parseStyle = function(){
  var element = document.createElement('div');
  element.innerHTML = '<div style="' + this + '"></div>';
  var style = element.childNodes[0].style, styleRules = $H();
  
  Element.CSS_PROPERTIES.each(function(property){
    if(style[property]) styleRules[property] = style[property]; 
  });
  if(Prototype.Browser.IE && this.indexOf('opacity') > -1) {
    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
  }
  return styleRules;
};

Element.morph = function(element, style) {
  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
  return element;
};

['getInlineOpacity','forceRerendering','setContentZoom',
 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
  function(f) { Element.Methods[f] = Element[f]; }
);

Element.Methods.visualEffect = function(element, effect, options) {
  s = effect.dasherize().camelize();
  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
  new Effect[effect_class](element, options);
  return $(element);
};

Element.addMethods();

Element.observe(window, 'load',initLiveSearch,false); 
var nb_limit=3;var text='';var lock=0;
function initLiveSearch()
{
	lock=0;
	var search_box=document.createElement('DIV');
	search_box.id='livesearch_results';
	document.body.appendChild(search_box);
	$('livesearch_results').setStyle({position:'absolute',display:'none',visibility:'visible'});
	moveSearchBox();
	search_box.innerHTML='<p id="search_title">Results:</p><div id="results"></div><a id="close_tab" href="javascript:void(0)" title="close search"/>&nbsp;</a>';
	$('livesearch_field').onkeyup=getResults;
	$('close_tab').onclick=hideResults;
	
	// Hide useless element 
	//$$('#livesearch label').first().innerHTML='Live Search';
	/*$$('#livesearch input[type=submit]').first().hide();*/
}


function moveSearchBox()
{
	var pos=Position.cumulativeOffset($('livesearch_box')) ;
	results=$('livesearch_results');
	box=$('livesearch_box');
	// Get Style of the Result Box for an optimal positioning
	var pl=results.getStyle('padding-left');
	var pr=results.getStyle('padding-right');
	var padding=parseFloat(pl)+parseFloat(pr);
	var border= parseFloat(results.getStyle('border-left-width')) + parseFloat(results.getStyle('border-right-width'));
	var minus= padding + border;

	var dimensions =box.getDimensions();
	results.setStyle({top: (pos[1]+dimensions.height - 1)+'px',left: pos[0]+'px',width:(dimensions.width - minus )+'px',zIndex:999});

}

function getResults(){if(this.value.length>=nb_limit){if(lock==0){setTimeout("doSearch()",800);lock=1;}}}

function unlock(){lock=0;}

function doSearch(){
	var url = ROOT+'/functions/livesearch/index.php';
	var pars = 'search='+$('livesearch_field').value;
	displayLiveSearch();
	$('results').innerHTML='<p><img src="'+ROOT+'/functions/ajax/img/ajax-loader2.gif" alt=" Loading " /></p>';
	var myAjax = new Ajax.Updater(  {success: 'results'},  url, {method: 'post', parameters: pars, onFailure: reportError});
	unlock();
}

function hideResults(){if(typeof(Effect)!="undefined"){setTimeout('new Effect.SlideUp(\'livesearch_results\',{duration:0.2})',1);} else $('livesearch_results').hide();	}
function displayLiveSearch(){moveSearchBox();if(typeof(Effect)!="undefined"){setTimeout('new Effect.SlideDown(\'livesearch_results\',{duration:0.2})',1);}else $('livesearch_results').show();}
function reportError(request){alert('Sorry. There was an error.');}
