

/*=========== 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){message("AJAX Error, please contact your administrator","msgerror");return false;}

/*  Prototype JavaScript framework, version 1.5.1.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}('C 12={5A:\'1.5.1.1\',1Z:{3X:!!(1j.3Y&&!1j.4C),5B:!!1j.4C,3r:3Z.41.3s(\'9n/\')>-1,4D:3Z.41.3s(\'4D\')>-1&&3Z.41.3s(\'6Y\')==-1},3b:{5C:!!11.25,42:!!1j.43,5D:(11.2y(\'2e\').44!==11.2y(\'5E\').44)},4E:\'<5F[^>]*>([\\\\S\\\\s]*?)<\\/5F>\',6Z:/^\\/\\*-9o-([\\s\\S]*)\\*\\/\\s*$/,2J:o(){},K:o(x){B x}};C 1C={1D:o(){B o(){7.26.2m(7,17)}}};C 1O=V N();N.M=o(a,b){J(C c 1u b){a[c]=b[c]}B a};N.M(N,{1H:o(a){1P{D(a===1l)B\'1l\';D(a===18)B\'18\';B a.1H?a.1H():a.28()}1V(e){D(e 5G 9p)B\'...\';2z e;}},1Q:o(a){C b=1m a;45(b){1I\'1l\':1I\'o\':1I\'9q\':B;1I\'9r\':B a.28()}D(a===18)B\'18\';D(a.1Q)B a.1Q();D(a.5H===11)B;C c=[];J(C d 1u a){C e=N.1Q(a[d]);D(e!==1l)c.O(d.1Q()+\': \'+e)}B\'{\'+c.1R(\', \')+\'}\'},70:o(a){C b=[];J(C c 1u a)b.O(c);B b},3t:o(a){C b=[];J(C c 1u a)b.O(a[c]);B b},2o:o(a){B N.M({},a)}});71.U.1J=o(){C a=7,2p=$A(17),47=2p.4F();B o(){B a.2m(47,2p.1v($A(17)))}};71.U.9s=o(b){C c=7,2p=$A(17),b=2p.4F();B o(a){B c.2m(b,[a||1j.9t].1v(2p))}};N.M(3u.U,{9u:o(){B 7.2K(2,16)},5I:o(){B 7+1},4G:o(a){$R(0,7,1c).1e(a);B 7},2K:o(a,b){C c=7.28(b||10);B\'0\'.4G(a-c.I)+c},1Q:o(){B 9v(7)?7.28():\'18\'}});9w.U.1Q=o(){B\'"\'+7.9x()+\'-\'+(7.9y()+1).2K(2)+\'-\'+7.9z().2K(2)+\'T\'+7.9A().2K(2)+\':\'+7.9B().2K(2)+\':\'+7.9C().2K(2)+\'"\'};C 72={73:o(){C a;J(C i=0,I=17.I;i<I;i++){C b=17[i];1P{a=b();1y}1V(e){}}B a}};C 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*5J)},5K:o(){D(!7.3w)B;9D(7.3w);7.3w=18},3e:o(){D(!7.4H){1P{7.4H=1c;7.3v(7)}9E{7.4H=1d}}}};N.M(1S,{5L: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){C c=\'\',2L=7,1f;b=17.5M.5N(b);1o(2L.I>0){D(1f=2L.1f(a)){c+=2L.3x(0,1f.4I);c+=1S.5L(b(1f));2L=2L.3x(1f.4I+1f[0].I)}1b{c+=2L,2L=\'\'}}B c},77:o(b,c,d){c=7.29.5N(c);d=d===1l?1:d;B 7.29(b,o(a){D(--d<0)B a[0];B c(a)})},78:o(a,b){7.29(a,b);B 7},9F: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.1q(/^\\s+/,\'\').1q(/\\s+$/,\'\')},79:o(){B 7.1q(/<\\/?[^>]+>/5O,\'\')},2q:o(){B 7.1q(V 1W(12.4E,\'7a\'),\'\')},7b:o(){C b=V 1W(12.4E,\'7a\');C c=V 1W(12.4E,\'9G\');B(7.1f(b)||[]).20(o(a){B(a.1f(c)||[\'\',\'\'])[1]})},3y:o(){B 7.7b().20(o(a){B 4J(a)})},4K:o(){C a=17.5M;a.2r.9H=7;B a.2e.2s},7c:o(){C c=11.2y(\'2e\');c.2s=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){C f=7.3f().1f(/([^?#]*)(#.*)?$/);D(!f)B{};B f[1].3z(e||\'&\').2A({},o(a,b){D((b=b.3z(\'=\'))[0]){C c=7d(b.4F());C d=b.I>1?b.1R(\'=\'):b[0];D(d!=1l)d=7d(d);D(c 1u a){D(a[c].3g!=1E)a[c]=[a[c]];a[c].O(d)}1b a[c]=d}B a})},2b:o(){B 7.3z(\'\')},5I:o(){B 7.3x(0,7.I-1)+1S.9I(7.7e(7.I-1)+1)},4G:o(a){C b=\'\';J(C i=0;i<a;i++)b+=7;B b},4M:o(){C a=7.3z(\'-\'),5P=a.I;D(5P==1)B a[0];C b=7.4N(0)==\'-\'?a[0].4N(0).1X()+a[0].49(1):a[0];J(C i=1;i<5P;i++)b+=a[i].4N(0).1X()+a[i].49(1);B b},5Q:o(){B 7.4N(0).1X()+7.49(1).21()},9J: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()},9K:o(){B 7.29(/4a/,\'-\')},1H:o(c){C d=7.29(/[\\9L-\\9M\\\\]/,o(a){C b=1S.76[a[0]];B b?b:\'\\\\9N\'+a[0].7e().2K(2,16)});D(c)B\'"\'+d.1q(/"/g,\'\\\\"\')+\'"\';B"\'"+d.1q(/\'/g,\'\\\\\\\'\')+"\'"},1Q:o(){B 7.1H(1c)},5R:o(a){B 7.77(a||12.6Z,\'#{1}\')},7f:o(){C a=7.1q(/\\\\./g,\'@\').1q(/"[^"\\\\\\n\\r]*"/g,\'\');B(/^[,:{}\\[\\]0-9.\\-+9O-u \\n\\r\\t]*$/).2M(a)},4O:o(a){C b=7.5R();1P{D(!a||b.7f())B 4J(\'(\'+b+\')\')}1V(e){}2z V 9P(\'9Q 9R 7g 2B: \'+7.1H());},1p:o(a){B 7.3s(a)>-1},7h:o(a){B 7.3s(a)===0},7i:o(a){C d=7.I-a.I;B d>=0&&7.9S(a)===d},4b:o(){B 7==\'\'},7j:o(){B/^\\s*$/.2M(7)}});D(12.1Z.3r||12.1Z.3X){N.M(1S.U,{4K:o(){B 7.1q(/&/g,\'&7k;\').1q(/</g,\'&7l;\').1q(/>/g,\'&7m;\')},7c:o(){B 7.1q(/&7k;/g,\'&\').1q(/&7l;/g,\'<\').1q(/&7m;/g,\'>\')}})}1S.U.29.5N=o(b){D(1m b==\'o\')B b;C c=V 22(b);B o(a){B c.25(a)}};1S.U.9T=1S.U.4L;N.M(1S.U.4K,{2e:11.2y(\'2e\'),2r:11.9U(\'\')});7n(1S.U.4K)2e.5S(2r);C 22=1C.1D();22.7o=/(^|.|\\r|\\n)(#\\{(.*?)\\})/;22.U={26:o(a,b){7.7p=a.28();7.4P=b||22.7o},25:o(c){B 7.7p.29(7.4P,o(a){C b=a[1];D(b==\'\\\\\')B a[2];B b+1S.5L(c[a[3]])})}};C $1y={};C $2c=V 9V(\'"2z $2c" 9W 9X, 9Y "B" 9Z\');C 23={1e:o(b){C c=0;1P{7.2f(o(a){b(a,c++)})}1V(e){D(e!=$1y)2z e;}B 7},7q:o(a,b){C c=-a,5T=[],5U=7.2b();1o((c+=a)<5U.I)5T.O(5U.3x(c,c+a));B 5T.20(b)},a0:o(c){C d=1c;7.1e(o(a,b){d=d&&!!(c||12.K)(a,b);D(!d)2z $1y;});B d},a1:o(c){C d=1d;7.1e(o(a,b){D(d=!!(c||12.K)(a,b))2z $1y;});B d},7r:o(c){C d=[];7.1e(o(a,b){d.O((c||12.K)(a,b))});B d},7s:o(c){C d;7.1e(o(a,b){D(c(a,b)){d=a;2z $1y;}});B d},7t:o(c){C d=[];7.1e(o(a,b){D(c(a,b))d.O(a)});B d},a2:o(d,e){C f=[];7.1e(o(a,b){C c=a.28();D(c.1f(d))f.O((e||12.K)(a,b))});B f},1p:o(b){C c=1d;7.1e(o(a){D(a==b){c=1c;2z $1y;}});B c},a3: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},5V:o(b){C c=$A(17).3x(1);B 7.20(o(a){B a[b].2m(a,c)})},a4:o(c){C d;7.1e(o(a,b){a=(c||12.K)(a,b);D(d==1l||a>=d)d=a});B d},a5:o(c){C d;7.1e(o(a,b){a=(c||12.K)(a,b);D(d==1l||a<d)d=a});B d},a6:o(c){C d=[],5W=[];7.1e(o(a,b){((c||12.K)(a,b)?d:5W).O(a)});B[d,5W]},4c:o(c){C d=[];7.1e(o(a,b){d.O(a[c])});B d},a7:o(c){C d=[];7.1e(o(a,b){D(!c(a,b))d.O(a)});B d},a8:o(e){B 7.20(o(a,b){B{1w:a,4d:e(a,b)}}).a9(o(c,d){C a=c.4d,b=d.4d;B a<b?-1:a>b?1:0}).4c(\'1w\')},2b:o(){B 7.20()},aa:o(){C c=12.K,2p=$A(17);D(1m 2p.1z()==\'o\')c=2p.ab();C d=[7].1v(2p).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,ac:23.1p,ad:23.2b});C $A=1E.7w=o(a){D(!a)B[];D(a.2b){B a.2b()}1b{C b=[];J(C i=0,I=a.I;i<I;i++)b.O(a[i]);B b}};D(12.1Z.3r){$A=1E.7w=o(a){D(!a)B[];D(!(1m a==\'o\'&&a==\'[47 ae]\')&&a.2b){B a.2b()}1b{C b=[];J(C i=0,I=a.I;i<I;i++)b.O(a[i]);B b}}}N.M(1E.U,23);D(!1E.U.5X)1E.U.5X=1E.U.4Q;N.M(1E.U,{2f:o(a){J(C 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]},af:o(){B 7.2g(o(a){B a!=18})},7y:o(){B 7.2A([],o(a,b){B a.1v(b&&b.3g==1E?b.7y():[b])})},5Y:o(){C b=$A(17);B 7.2g(o(a){B!b.1p(a)})},3s:o(a){J(C i=0,I=7.I;i<I;i++)D(7[i]==a)B i;B-1},4Q:o(a){B(a!==1d?7:7.2b()).5X()},ag:o(){B 7.I>1?7:7[0]},ah:o(d){B 7.2A([],o(a,b,c){D(0==c||(d?a.1z()!=b:!a.1p(b)))a.O(b);B a})},2o:o(){B[].1v(7)},7u:o(){B 7.I},1H:o(){B\'[\'+7.20(N.1H).1R(\', \')+\']\'},1Q:o(){C c=[];7.1e(o(a){C b=N.1Q(a);D(b!==1l)c.O(b)});B\'[\'+c.1R(\', \')+\']\'}});1E.U.2b=1E.U.2o;o $w(a){a=a.3f();B a?a.3z(/\\s+/):[]}D(12.1Z.5B){1E.U.1v=o(){C a=[];J(C i=0,I=7.I;i<I;i++)a.O(7[i]);J(C i=0,I=17.I;i<I;i++){D(17[i].3g==1E){J(C j=0,7z=17[i].I;j<7z;j++)a.O(17[i][j])}1b{a.O(17[i])}}B a}}C 1F=o(a){D(a 5G 1F)7.7A(a);1b N.M(7,a||{})};N.M(1F,{3h:o(d){C e=[];e.3A=17.5M.7B;7.U.2f.5Z(d,o(b){D(!b.2i)B;C c=b.1w;D(c&&1m c==\'47\'){D(c.3g==1E)c.1e(o(a){e.3A(b.2i,a)});B}e.3A(b.2i,c)});B e.1R(\'&\')},1Q:o(c){C d=[];7.U.2f.5Z(c,o(a){C b=N.1Q(a.1w);D(b!==1l)d.O(a.2i.1Q()+\': \'+b)});B\'{\'+d.1R(\', \')+\'}\'}});1F.3h.7B=o(a,b,c){a=7C(a);D(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(C b 1u 7){C c=7[b];D(c&&c==1F.U[b])2c;C 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(){C a;J(C i=0,I=17.I;i<I;i++){C b=7[17[i]];D(b!==1l){D(a===1l)a=b;1b{D(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){D(a 5G 1F)B a;B V 1F(a)};D(o(){C i=0,60=o(a){7.2i=a};60.U.2i=\'ai\';J(C b 1u V 60(\'aj\'))i++;B i>1}())1F.U.2f=o(a){C b=[];J(C c 1u 7){C d=7[c];D((d&&d==1F.U[c])||b.1p(c))2c;b.O(c);C e=[c,d];e.2i=c;e.1w=d;a(e)}};4R=1C.1D();N.M(4R.U,23);N.M(4R.U,{26:o(a,b,c){7.4f=a;7.61=b;7.7E=c},2f:o(a){C b=7.4f;1o(7.1p(b)){a(b);b=b.5I()}},1p:o(a){D(a<7.4f)B 1d;D(7.7E)B a<7.61;B a<=7.61}});C $R=o(a,b,c){B V 4R(a,b,c)};C 1h={62:o(){B 72.73(o(){B V 7F()},o(){B V 7G(\'ak.7H\')},o(){B V 7G(\'al.7H\')})||1d},63:0};1h.3B={4g:[],2f:o(a){7.4g.2f(a)},7I:o(a){D(!7.1p(a))7.4g.O(a)},am:o(a){7.4g=7.4g.5Y(a)},4S:o(b,c,d,f){7.1e(o(a){D(1m a[b]==\'o\'){1P{a[b].2m(a,[c,d,f])}1V(e){}}})}};N.M(1h.3B,23);1h.3B.7I({4T:o(){1h.63++},2t:o(){1h.63--}});1h.4U=o(){};1h.4U.U={4V:o(a){7.14={1K:\'4h\',4W:1c,7J:\'64/x-an-5E-ao\',65:\'ap-8\',2C:\'\'};N.M(7.14,a||{});7.14.1K=7.14.1K.21();D(1m 7.14.2C==\'2B\')7.14.2C=7.14.2C.4L()}};1h.3C=1C.1D();1h.3C.7K=[\'aq\',\'ar\',\'as\',\'at\',\'66\'];1h.3C.U=N.M(V 1h.4U(),{67:1d,26:o(a,b){7.1r=1h.62();7.4V(b);7.4X(a)},4X:o(a){7.3D=a;7.1K=7.14.1K;C b=N.2o(7.14.2C);D(![\'7L\',\'4h\'].1p(7.1K)){b[\'au\']=7.1K;7.1K=\'4h\'}7.2C=b;D(b=1F.3h(b)){D(7.1K==\'7L\')7.3D+=(7.3D.1p(\'?\')?\'&\':\'?\')+b;1b D(/av|aw|6Y/.2M(3Z.41))b+=\'&4a=\'}1P{D(7.14.4T)7.14.4T(7.1r);1h.3B.4S(\'4T\',7,7.1r);7.1r.ax(7.1K.1X(),7.3D,7.14.4W);D(7.14.4W)3i(o(){7.68(1)}.1J(7),10);7.1r.7M=7.69.1J(7);7.7N();7.1T=7.1K==\'4h\'?(7.14.ay||b):18;7.1r.az(7.1T);D(!7.14.4W&&7.1r.7O)7.69()}1V(e){7.4i(e)}},69:o(){C a=7.1r.7P;D(a>1&&!((a==4)&&7.67))7.68(7.1r.7P)},7N:o(){C b={\'X-aA-aB\':\'7F\',\'X-12-5A\':12.5A,\'aC\':\'2r/aD, 2r/aE, 64/7Q, 2r/7Q, */*\'};D(7.1K==\'4h\'){b[\'7R-1g\']=7.14.7J+(7.14.65?\'; aF=\'+7.14.65:\'\');D(7.1r.7O&&(3Z.41.1f(/4D\\/(\\d{4})/)||[0,7S])[1]<7S)b[\'aG\']=\'aH\'}D(1m 7.14.7T==\'47\'){C c=7.14.7T;D(1m c.O==\'o\')J(C 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(C d 1u b)7.1r.aI(d,b[d])},2N:o(){B!7.1r.4Y||(7.1r.4Y>=aJ&&7.1r.4Y<aK)},68:o(a){C b=1h.3C.7K[a];C c=7.1r,4Z=7.4O();D(b==\'66\'){1P{7.67=1c;(7.14[\'3E\'+7.1r.4Y]||7.14[\'3E\'+(7.2N()?\'aL\':\'aM\')]||12.2J)(c,4Z)}1V(e){7.4i(e)}C d=7.6a(\'7R-1g\');D(d&&d.3f().1f(/^(2r|64)\\/(x-)?(aN|aO)5F(;.*)?$/i))7.7U()}1P{(7.14[\'3E\'+b]||12.2J)(c,4Z);1h.3B.4S(\'3E\'+b,7,c,4Z)}1V(e){7.4i(e)}D(b==\'66\'){7.1r.7M=12.2J}},6a:o(a){1P{B 7.1r.aP(a)}1V(e){B 18}},4O:o(){1P{C a=7.6a(\'X-7g\');B a?a.4O():18}1V(e){B 18}},7U:o(){1P{B 4J((7.1r.50||\'\').5R())}1V(e){7.4i(e)}},4i:o(a){(7.14.7V||12.2J)(7,a);1h.3B.4S(\'7V\',7,a)}});1h.6b=1C.1D();N.M(N.M(1h.6b.U,1h.3C.U),{26:o(c,d,e){7.51={2N:(c.2N||c),6c:(c.6c||(c.2N?18:c))};7.1r=1h.62();7.4V(e);C f=7.14.2t||12.2J;7.14.2t=(o(a,b){7.7W();f(a,b)}).1J(7);7.4X(d)},7W:o(){C a=7.51[7.2N()?\'2N\':\'6c\'];C b=7.1r.50;D(!7.14.3y)b=b.2q();D(a=$(a)){D(7.14.7X)V 7.14.7X(a,b);1b a.6d(b)}D(7.2N()){D(7.2t)3i(7.2t.1J(7),10)}}});1h.7Y=1C.1D();1h.7Y.U=N.M(V 1h.4U(),{26:o(a,b,c){7.4V(c);7.2t=7.14.2t;7.3c=(7.14.3c||2);7.3j=(7.14.3j||1);7.6e={};7.51=a;7.3D=b;7.4f()},4f:o(){7.14.2t=7.7Z.1J(7);7.3e()},5K:o(){7.6e.14.2t=1l;aQ(7.3w);(7.2t||12.2J).2m(7,17)},7Z:o(a){D(7.14.3j){7.3j=(a.50==7.80?7.3j*7.14.3j:1);7.80=a.50}7.3w=3i(7.3e.1J(7),7.3j*7.3c*5J)},3e:o(){7.6e=V 1h.6b(7.51,7.3D,7.14)}});o $(a){D(17.I>1){J(C i=0,6f=[],I=17.I;i<I;i++)6f.O($(17[i]));B 6f}D(1m a==\'2B\')a=11.aR(a);B G.M(a)}D(12.3b.5C){11.6g=o(a,b){C c=[];C d=11.25(a,$(b)||11,18,aS.aT,18);J(C i=0,I=d.aU;i<I;i++)c.O(d.aV(i));B c};11.52=o(a,b){C q=".//*[4j(1v(\' \', @6h, \' \'), \' "+a+" \')]";B 11.6g(q,b)}}1b{11.52=o(a,b){C c=($(b)||11.1T).2D(\'*\');C d=[],1i,4P=V 1W("(^|\\\\s)"+a+"(\\\\s|$)");J(C i=0,I=c.I;i<I;i++){1i=c[i];C e=1i.2j;D(e.I==0)2c;D(e==a||e.1f(4P))d.O(G.M(1i))}B d}}D(!1j.G)C G={};G.M=o(a){C F=12.3b;D(!a||!a.1k||a.2u==3||a.81||F.5D||a==1j)B a;C b={},1k=a.1k,4k=G.M.4k,T=G.19.2E;D(!F.42){N.M(b,G.19),N.M(b,G.19.53)}D(T[1k])N.M(b,T[1k]);J(C c 1u b){C d=b[c];D(1m d==\'o\'&&!(c 1u 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.2m(18,[7].1v($A(17)))}}};G.19={6j:o(a){B $(a).Y.2F!=\'54\'},82:o(a){a=$(a);G[G.6j(a)?\'83\':\'84\'](a);B a},83:o(a){$(a).Y.2F=\'54\';B a},84:o(a){$(a).Y.2F=\'\';B a},4e:o(a){a=$(a);a.1L.6k(a);B a},6d:o(a,b){b=1m b==\'1l\'?\'\':b.28();$(a).2s=b.2q();3i(o(){b.3y()},10);B a},1q:o(a,b){a=$(a);b=1m b==\'1l\'?\'\':b.28();D(a.85){a.85=b.2q()}1b{C c=a.5H.86();c.6l(a);a.1L.aW(c.87(b.2q()),a)}3i(o(){b.3y()},10);B a},1H:o(d){d=$(d);C e=\'<\'+d.1k.21();$H({\'2O\':\'2O\',\'2j\':\'6h\'}).1e(o(a){C b=a.2h(),88=a.1z();C c=(d[b]||\'\').28();D(c)e+=\' \'+88+\'=\'+c.1H(1c)});B e+\'>\'},55:o(a,b){a=$(a);C c=[];1o(a=a[b])D(a.2u==1)c.O(G.M(a));B c},89:o(a){B $(a).55(\'1L\')},8a:o(a){B $A($(a).2D(\'*\')).1e(G.M)},8b:o(a){a=$(a).3F;1o(a&&a.2u!=1)a=a.3G;B $(a)},8c:o(a){D(!(a=$(a).3F))B[];1o(a&&a.2u!=1)a=a.3G;D(a)B[a].1v($(a).4l());B[]},6m:o(a){B $(a).55(\'8d\')},4l:o(a){B $(a).55(\'3G\')},aX:o(a){a=$(a);B a.6m().4Q().1v(a.4l())},1f:o(a,b){D(1m b==\'2B\')b=V L(b);B b.1f($(a))},aY:o(a,b,c){a=$(a);D(17.I==1)B $(a.1L);C d=a.89();B b?L.3H(d,b,c):d[c||0]},aZ:o(a,b,c){a=$(a);D(17.I==1)B a.8b();C d=a.8a();B b?L.3H(d,b,c):d[c||0]},b0:o(a,b,c){a=$(a);D(17.I==1)B $(L.1s.4m(a));C d=a.6m();B b?L.3H(d,b,c):d[c||0]},b1:o(a,b,c){a=$(a);D(17.I==1)B $(L.1s.4n(a));C d=a.4l();B b?L.3H(d,b,c):d[c||0]},b2:o(){C a=$A(17),15=$(a.4F());B L.6n(15,a)},52:o(a,b){B 11.52(b,a)},6o:o(a,b){a=$(a);D(12.1Z.3X){D(!a.8e)B 18;C t=G.56;D(t.3t[b])B t.3t[b](a,b);D(t.57[b])b=t.57[b];C c=a.8e[b];B c?c.48:18}B a.8f(b)},b3:o(a){B $(a).6p().2P},b4:o(a){B $(a).6p().2Q},58:o(a){B V G.59(a)},8g:o(a,b){D(!(a=$(a)))B;C c=a.2j;D(c.I==0)B 1d;D(c==b||c.1f(V 1W("(^|\\\\s)"+b+"(\\\\s|$)")))B 1c;B 1d},b5:o(a,b){D(!(a=$(a)))B;G.58(a).3A(b);B a},b6:o(a,b){D(!(a=$(a)))B;G.58(a).4e(b);B a},b7:o(a,b){D(!(a=$(a)))B;G.58(a)[a.8g(b)?\'4e\':\'3A\'](b);B a},3I:o(){1x.3I.2m(1x,17);B $A(17).2h()},5a:o(){1x.5a.2m(1x,17);B $A(17).2h()},b8:o(a){a=$(a);C b=a.3F;1o(b){C c=b.3G;D(b.2u==3&&!/\\S/.2M(b.48))a.6k(b);b=c}B a},4b:o(a){B $(a).2s.7j()},5b:o(a,b){a=$(a),b=$(b);1o(a=a.1L)D(a==b)B 1c;B 1d},8h:o(a){a=$(a);C b=2G.4o(a);1j.8h(b[0],b[1]);B a},1M:o(a,b){a=$(a);b=b==\'6q\'?\'5c\':b.4M();C c=a.Y[b];D(!c){C d=11.b9.ba(a,18);c=d?d[b]:18}D(b==\'2R\')B c?3J(c):1.0;B c==\'5d\'?18:c},bb:o(a){B $(a).1M(\'2R\')},bc:o(a,b,c){a=$(a);C d=a.Y;J(C e 1u b)D(e==\'2R\')a.5e(b[e]);1b d[(e==\'6q\'||e==\'5c\')?(d.6r===1l?\'5c\':\'6r\'):(c?e:e.4M())]=b[e];B a},5e:o(a,b){a=$(a);a.Y.2R=(b==1||b===\'\')?\'\':(b<0.6s)?0:b;B a},6p:o(a){a=$(a);C b=$(a).1M(\'2F\');D(b!=\'54\'&&b!=18)B{2Q:a.3K,2P:a.3L};C c=a.Y;C d=c.6t;C e=c.1A;C f=c.2F;c.6t=\'5f\';c.1A=\'3k\';c.2F=\'bd\';C g=a.8i;C h=a.8j;c.2F=f;c.1A=e;c.6t=d;B{2Q:g,2P:h}},be:o(a){a=$(a);C b=G.1M(a,\'1A\');D(b==\'6u\'||!b){a.6v=1c;a.Y.1A=\'5g\';D(1j.4C){a.Y.2S=0;a.Y.2T=0}}B a},bf:o(a){a=$(a);D(a.6v){a.6v=1l;a.Y.1A=a.Y.2S=a.Y.2T=a.Y.8k=a.Y.8l=\'\'}B a},bg:o(a){a=$(a);D(a.3M)B a;a.3M=a.Y.5h||\'5d\';D((G.1M(a,\'5h\')||\'6j\')!=\'5f\')a.Y.5h=\'5f\';B a},bh:o(a){a=$(a);D(!a.3M)B a;a.Y.5h=a.3M==\'5d\'?\'\':a.3M;a.3M=18;B a}};N.M(G.19,{bi:G.19.5b,bj:G.19.8c});D(12.1Z.5B){G.19.6w=G.19.1M;G.19.1M=o(a,b){45(b){1I\'2T\':1I\'2S\':1I\'8l\':1I\'8k\':D(G.6w(a,\'1A\')==\'6u\')B 18;6x:B G.6w(a,b)}}}1b D(12.1Z.3X){G.19.1M=o(a,b){a=$(a);b=(b==\'6q\'||b==\'5c\')?\'6r\':b.4M();C c=a.Y[b];D(!c&&a.8m)c=a.8m[b];D(b==\'2R\'){D(c=(a.1M(\'5i\')||\'\').1f(/5j\\(2R=(.*)\\)/))D(c[1])B 3J(c[1])/8n;B 1.0}D(c==\'5d\'){D((b==\'2Q\'||b==\'2P\')&&(a.1M(\'2F\')!=\'54\'))B a[\'24\'+b.5Q()]+\'2k\';B 18}B c};G.19.5e=o(a,b){a=$(a);C c=a.1M(\'5i\'),Y=a.Y;D(b==1||b===\'\'){Y.5i=c.1q(/5j\\([^\\)]*\\)/5O,\'\');B a}1b D(b<0.6s)b=0;Y.5i=c.1q(/5j\\([^\\)]*\\)/5O,\'\')+\'5j(2R=\'+(b*8n)+\')\';B a};G.19.6d=o(b,c){b=$(b);c=1m c==\'1l\'?\'\':c.28();C d=b.1k.1X();D([\'6y\',\'5k\',\'5l\',\'6z\'].1p(d)){C e=11.2y(\'2e\');45(d){1I\'6y\':1I\'5k\':e.2s=\'<2U><2V>\'+c.2q()+\'</2V></2U>\';5m=2;1y;1I\'5l\':e.2s=\'<2U><2V><5n>\'+c.2q()+\'</5n></2V></2U>\';5m=3;1y;1I\'6z\':e.2s=\'<2U><2V><5n><8o>\'+c.2q()+\'</8o></5n></2V></2U>\';5m=4}$A(b.2a).1e(o(a){b.6k(a)});5m.4G(o(){e=e.3F});$A(e.2a).1e(o(a){b.5S(a)})}1b{b.2s=c.2q()}3i(o(){c.3y()},10);B b}}1b D(12.1Z.4D){G.19.5e=o(a,b){a=$(a);a.Y.2R=(b==1)?0.bk:(b===\'\')?\'\':(b<0.6s)?0:b;B a}}G.56={57:{bl:"bm",bn:"bo",bp:"bq",br:"bs",bt:"bu",bv:"bw",bx:"by",bz:"bA",8p:"bB",bC:"bD"},3t:{5o:o(a,b){B a.8f(b,2)},4p:o(a,b){B $(a).2H(b)?b:18},Y:o(a){B a.Y.bE.21()},8q:o(a){C b=a.8r(\'8q\');B b.8s?b.48:18}}};(o(){N.M(7,{bF:7.5o,bG:7.5o,1g:7.5o,2d:7.4p,3l:7.4p,8p:7.4p,bH:7.4p})}).5Z(G.56.3t);G.19.53={2H:o(a,b){C t=G.56,E;b=t.57[b]||b;E=$(a).8r(b);B E&&E.8s}};G.19.2E={};N.M(G,G.19);D(!12.3b.42&&11.2y(\'2e\').44){1j.43={};1j.43.U=11.2y(\'2e\').44;12.3b.42=1c}G.2H=o(a,b){D(a.2H)B a.2H(b);B G.19.53.2H(a,b)};G.8t=o(g){C F=12.3b,T=G.19.2E;D(!g){N.M(1a,1a.19);N.M(1a.G,1a.G.19);N.M(G.19.2E,{"bI":N.2o(1a.19),"bJ":N.2o(1a.G.19),"bK":N.2o(1a.G.19),"8u":N.2o(1a.G.19)})}D(17.I==2){C h=g;g=17[1]}D(!h)N.M(G.19,g||{});1b{D(h.3g==1E)h.1e(M);1b M(h)}o M(a){a=a.1X();D(!G.19.2E[a])G.19.2E[a]={};N.M(G.19.2E[a],g)}o 5p(a,b,c){c=c||1d;C d=G.M.4k;J(C e 1u a){C f=a[e];D(!c||!(e 1u b))b[e]=d.6i(f)}}o 8v(a){C b;C c={"bL":"bM","8u":"bN","P":"bO","bP":"bQ","bR":"bS","bT":"bU","bV":"bW","bX":"bY","bZ":"3N","c0":"3N","c1":"3N","c2":"3N","c3":"3N","c4":"3N","Q":"c5","c6":"8w","c7":"8w","A":"c8","c9":"ca","cb":"cc","cd":"8x","ce":"8x","6y":"6A","cf":"6A","5k":"6A","5l":"cg","ch":"8y","6z":"8y","ci":"cj","ck":"cl"};D(c[a])b=\'6B\'+c[a]+\'G\';D(1j[b])B 1j[b];b=\'6B\'+a+\'G\';D(1j[b])B 1j[b];b=\'6B\'+a.5Q()+\'G\';D(1j[b])B 1j[b];1j[b]={};1j[b].U=11.2y(a).44;B 1j[b]}D(F.42){5p(G.19,43.U);5p(G.19.53,43.U,1c)}D(F.5D){J(C i 1u G.19.2E){C j=8v(i);D(1m j=="1l")2c;5p(T[i],j.U)}}N.M(G,G.19);7D G.2E};C cm={2F:G.82};1O.1U=o(a){7.6C=a};1O.1U.U={26:o(a,b){7.15=$(a);7.5q=b.2q();D(7.6C&&7.15.8z){1P{7.15.8z(7.6C,7.5q)}1V(e){C c=7.15.1k.1X();D([\'5k\',\'5l\'].1p(c)){7.3O(7.8A())}1b{2z e;}}}1b{7.2W=7.15.5H.86();D(7.3P)7.3P();7.3O([7.2W.87(7.5q)])}3i(o(){b.3y()},10)},8A:o(){C a=11.2y(\'2e\');a.2s=\'<2U><2V>\'+7.5q+\'</2V></2U>\';B $A(a.2a[0].2a[0].2a)}};C 1U=V N();1U.8B=1C.1D();1U.8B.U=N.M(V 1O.1U(\'cn\'),{3P:o(){7.2W.co(7.15)},3O:o(b){b.1e((o(a){7.15.1L.6D(a,7.15)}).1J(7))}});1U.8C=1C.1D();1U.8C.U=N.M(V 1O.1U(\'cp\'),{3P:o(){7.2W.6l(7.15);7.2W.8D(1c)},3O:o(b){b.4Q(1d).1e((o(a){7.15.6D(a,7.15.3F)}).1J(7))}});1U.8E=1C.1D();1U.8E.U=N.M(V 1O.1U(\'cq\'),{3P:o(){7.2W.6l(7.15);7.2W.8D(7.15)},3O:o(b){b.1e((o(a){7.15.5S(a)}).1J(7))}});1U.8F=1C.1D();1U.8F.U=N.M(V 1O.1U(\'cr\'),{3P:o(){7.2W.cs(7.15)},3O:o(b){b.1e((o(a){7.15.1L.6D(a,7.15.3G)}).1J(7))}});G.59=1C.1D();G.59.U={26:o(a){7.15=$(a)},2f:o(b){7.15.2j.3z(/\\s+/).2g(o(a){B a.I>0}).2f(b)},6E:o(a){7.15.2j=a},3A:o(a){D(7.1p(a))B;7.6E($A(7).1v(a).1R(\' \'))},4e:o(a){D(!7.1p(a))B;7.6E($A(7).5Y(a).1R(\' \'))},28:o(){B $A(7).1R(\' \')}};N.M(G.59.U,23);C L=1C.1D();L.U={26:o(a){7.2X=a.3f();7.8G()},8G:o(){D(12.3b.5C&&!(/\\[[\\w-]*?:/).2M(7.2X))B 7.8H();C e=7.2X,3Q=L.5r,h=L.1s,c=L.4d,2I,p,m;D(L.3m[e]){7.2l=L.3m[e];B}7.2l=["7.2l = o(8I) {","C r = 8I, h = L.1s, c = 1d, n;"];1o(e&&2I!=e&&(/\\S/).2M(e)){2I=e;J(C i 1u 3Q){p=3Q[i];D(m=e.1f(p)){7.2l.O(1m c[i]==\'o\'?c[i](m):V 22(c[i]).25(m));e=e.1q(m[0],\'\');1y}}}7.2l.O("B h.6F(n);\\n}");4J(7.2l.1R(\'\\n\'));L.3m[7.2X]=7.2l},8H:o(){C e=7.2X,3Q=L.5r,x=L.1B,2I,m;D(L.3m[e]){7.1B=L.3m[e];B}7.2l=[\'.//*\'];1o(e&&2I!=e&&(/\\S/).2M(e)){2I=e;J(C i 1u 3Q){D(m=e.1f(3Q[i])){7.2l.O(1m x[i]==\'o\'?x[i](m):V 22(x[i]).25(m));e=e.1q(m[0],\'\');1y}}}7.1B=7.2l.1R(\'\');L.3m[7.2X]=7.1B},4q:o(a){a=a||11;D(7.1B)B 11.6g(7.1B,a);B 7.2l(a)},1f: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){D(m[1]==\'*\')B\'\';B"[8J-3n()=\'"+m[1].21()+"\' 6G 8J-3n()=\'"+m[1].1X()+"\']"},2j:"[4j(1v(\' \', @6h, \' \'), \' #{1} \')]",2O:"[@2O=\'#{1}\']",4t:"[@#{1}]",4u:o(m){m[3]=m[5]||m[6];B V 22(L.1B.5s[m[2]]).25(m)},4v:o(m){C h=L.1B.1t[m[1]];D(!h)B\'\';D(1m h===\'o\')B h(m);B V 22(L.1B.1t[m[1]]).25(m)},5s:{\'=\':"[@#{1}=\'#{3}\']",\'!=\':"[@#{1}!=\'#{3}\']",\'^=\':"[ct-7n(@#{1}, \'#{3}\')]",\'$=\':"[49(@#{1}, (2B-I(@#{1}) - 2B-I(\'#{3}\') + 1))=\'#{3}\']",\'*=\':"[4j(@#{1}, \'#{3}\')]",\'~=\':"[4j(1v(\' \', @#{1}, \' \'), \' #{3} \')]",\'|=\':"[4j(1v(\'-\', @#{1}, \'-\'), \'-#{3}-\')]"},1t:{\'2h-1i\':\'[31(6H-2Z::*)]\',\'1z-1i\':\'[31(4r-2Z::*)]\',\'4w-1i\':\'[31(6H-2Z::* 6G 4r-2Z::*)]\',\'4b\':"[5t(*) = 0 6I (5t(2r()) = 0 6G cu(2r(), \' \\t\\r\\n\', \'\') = \'\')]",\'3l\':"[@3l]",\'2d\':"[@2d]",\'8K\':"[31(@2d)]",\'31\':o(m){C e=m[6],p=L.5r,x=L.1B,2I,m,v;C a=[];1o(e&&2I!=e&&(/\\S/).2M(e)){2I=e;J(C i 1u p){D(m=e.1f(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.1q(m[0],\'\');1y}}}B"[31("+a.1R(" 6I ")+")]"},\'1n-1i\':o(m){B L.1B.1t.1n("(5t(./6H-2Z::*) + 1) ",m)},\'1n-1z-1i\':o(m){B L.1B.1t.1n("(5t(./4r-2Z::*) + 1) ",m)},\'1n-1G-1g\':o(m){B L.1B.1t.1n("1A() ",m)},\'1n-1z-1G-1g\':o(m){B L.1B.1t.1n("(1z() + 1 - 1A()) ",m)},\'2h-1G-1g\':o(m){m[6]="1";B L.1B.1t[\'1n-1G-1g\'](m)},\'1z-1G-1g\':o(m){m[6]="1";B L.1B.1t[\'1n-1z-1G-1g\'](m)},\'4w-1G-1g\':o(m){C p=L.1B.1t;B p[\'2h-1G-1g\'](m)+p[\'1z-1G-1g\'](m)},1n:o(c,m){C d,3o=m[6],6J;D(3o==\'8L\')3o=\'2n+0\';D(3o==\'8M\')3o=\'2n+1\';D(d=3o.1f(/^(\\d+)$/))B\'[\'+c+"= "+d[1]+\']\';D(d=3o.1f(/^(-?\\d*)?n(([+-])(\\d+))?/)){D(d[1]=="-")d[1]=-1;C a=d[1]?3u(d[1]):1;C b=d[2]?3u(d[2]):0;6J="[((#{6K} - #{b}) cv #{a} = 0) 6I "+"((#{6K} - #{b}) 2e #{a} >= 0)]";B V 22(6J).25({6K:c,a:a,b:b})}}}},4d:{1k:\'n = h.1k(n, r, "#{1}", c);   c = 1d;\',2j:\'n = h.2j(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){D(m[6])m[6]=m[6].1q(/"/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";\'},5r:{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|$)\'),2j:V 1W(\'^\\\\.([\\\\w\\\\-\\\\\'+\'*]+)(\\\\b|$)\'),4v:V 1W(\'^:((2h|1z|1n|1n-1z|4w)(-1i|-1G-1g)|4b|3l|(cw|cx)cy|31)(\\\\((.*?)\\\\))?(\\\\b|$|\\\\s|(?=:))\'),4t:V 1W(\'^\\\\[([\\\\w]+)\\\\]\'),4u:V 1W(\'\\\\[((?:[\\\\w-]*:)?[\\\\w-]+)\\\\s*(?:([!^$*~|]?=)\\\\s*(([\\\'"])([^\\\\]]*?)\\\\4|([^\\\'"][^\\\\]]*?)))?\\\\]\')},1s:{1v:o(a,b){J(C i=0,E;E=b[i];i++)a.O(E);B a},5u:o(a){J(C i=0,E;E=a[i];i++)E.2v=1c;B a},3S:o(a){J(C i=0,E;E=a[i];i++)E.2v=1l;B a},4I:o(a,b,c){a.2v=1c;D(b){J(C d=a.2a,i=d.I-1,j=1;i>=0;i--){E=d[i];D(E.2u==1&&(!c||E.2v))E.5v=j++}}1b{J(C i=0,j=1,d=a.2a;E=d[i];i++)D(E.2u==1&&(!c||E.2v))E.5v=j++}},6F:o(a){D(a.I==0)B a;C b=[],n;J(C i=0,l=a.I;i<l;i++)D(!(n=a[i]).2v){n.2v=1c;b.O(G.M(n))}B L.1s.3S(b)},2Y:o(a){C h=L.1s;J(C i=0,W=[],E;E=a[i];i++)h.1v(W,E.2D(\'*\'));B W},1i:o(a){C h=L.1s;J(C i=0,W=[],E;E=a[i];i++){J(C j=0,cz=[],1i;1i=E.2a[j];j++)D(1i.2u==1&&1i.1k!=\'!\')W.O(1i)}B W},3R:o(a){J(C i=0,W=[],E;E=a[i];i++){C b=7.4n(E);D(b)W.O(b)}B W},4s:o(a){C h=L.1s;J(C i=0,W=[],E;E=a[i];i++)h.1v(W,G.4l(E));B W},4n:o(a){1o(a=a.3G)D(a.2u==1)B a;B 18},4m:o(a){1o(a=a.8d)D(a.2u==1)B a;B 18},1k:o(a,b,c,d){c=c.1X();C e=[],h=L.1s;D(a){D(d){D(d=="2Y"){J(C i=0,E;E=a[i];i++)h.1v(e,E.2D(c));B e}1b a=7[d](a);D(c=="*")B a}J(C i=0,E;E=a[i];i++)D(E.1k.1X()==c)e.O(E);B e}1b B b.2D(c)},2O:o(a,b,c,d){C e=$(c),h=L.1s;D(!a&&b==11)B e?[e]:[];D(a){D(d){D(d==\'1i\'){J(C i=0,E;E=a[i];i++)D(e.1L==E)B[e]}1b D(d==\'2Y\'){J(C i=0,E;E=a[i];i++)D(G.5b(e,E))B[e]}1b D(d==\'3R\'){J(C i=0,E;E=a[i];i++)D(L.1s.4m(e)==E)B[e]}1b a=h[d](a)}J(C i=0,E;E=a[i];i++)D(E==e)B[e];B[]}B(e&&G.5b(e,b))?[e]:[]},2j:o(a,b,c,d){D(a&&d)a=7[d](a);B L.1s.8N(a,b,c)},8N:o(a,b,c){D(!a)a=L.1s.2Y([b]);C d=\' \'+c+\' \';J(C i=0,W=[],E,4x;E=a[i];i++){4x=E.2j;D(4x.I==0)2c;D(4x==c||(\' \'+4x+\' \').1p(d))W.O(E)}B W},4t:o(a,b,c){C d=[];J(C i=0,E;E=a[i];i++)D(G.2H(E,c))d.O(E);B d},4u:o(a,b,c,d,e){D(!a)a=b.2D("*");C f=L.5s[e],W=[];J(C i=0,E;E=a[i];i++){C g=G.6o(E,c);D(g===18)2c;D(f(g,d))W.O(E)}B W},4v:o(a,b,c,d,e){D(a&&e)a=7[e](a);D(!a)a=d.2D("*");B L.1t[b](a,c,d)}},1t:{\'2h-1i\':o(a,b,c){J(C i=0,W=[],E;E=a[i];i++){D(L.1s.4m(E))2c;W.O(E)}B W},\'1z-1i\':o(a,b,c){J(C i=0,W=[],E;E=a[i];i++){D(L.1s.4n(E))2c;W.O(E)}B W},\'4w-1i\':o(a,b,c){C h=L.1s;J(C i=0,W=[],E;E=a[i];i++)D(!h.4m(E)&&!h.4n(E))W.O(E);B W},\'1n-1i\':o(a,b,c){B L.1t.1n(a,b,c)},\'1n-1z-1i\':o(a,b,c){B L.1t.1n(a,b,c,1c)},\'1n-1G-1g\':o(a,b,c){B L.1t.1n(a,b,c,1d,1c)},\'1n-1z-1G-1g\':o(a,b,c){B L.1t.1n(a,b,c,1c,1c)},\'2h-1G-1g\':o(a,b,c){B L.1t.1n(a,"1",c,1d,1c)},\'1z-1G-1g\':o(a,b,c){B L.1t.1n(a,"1",c,1c,1c)},\'4w-1G-1g\':o(a,b,c){C p=L.1t;B p[\'1z-1G-1g\'](p[\'2h-1G-1g\'](a,b,c),b,c)},8O:o(a,b,d){D(a==0)B b>0?[b]:[];B $R(1,d).2A([],o(c,i){D(0==(i-b)%a&&(i-b)/a>=0)c.O(i);B c})},1n:o(c,d,e,f,g){D(c.I==0)B[];D(d==\'8L\')d=\'2n+0\';D(d==\'8M\')d=\'2n+1\';C h=L.1s,W=[],6L=[],m;h.5u(c);J(C i=0,E;E=c[i];i++){D(!E.1L.2v){h.4I(E.1L,f,g);6L.O(E.1L)}}D(d.1f(/^\\d+$/)){d=3u(d);J(C i=0,E;E=c[i];i++)D(E.5v==d)W.O(E)}1b D(m=d.1f(/^(-?\\d*)?n(([+-])(\\d+))?/)){D(m[1]=="-")m[1]=-1;C a=m[1]?3u(m[1]):1;C b=m[2]?3u(m[2]):0;C k=L.1t.8O(a,b,c.I);J(C i=0,E,l=k.I;E=c[i];i++){J(C j=0;j<l;j++)D(E.5v==k[j])W.O(E)}}h.3S(c);h.3S(6L);B W},\'4b\':o(a,b,c){J(C i=0,W=[],E;E=a[i];i++){D(E.1k==\'!\'||(E.3F&&!E.2s.1f(/^\\s*$/)))2c;W.O(E)}B W},\'31\':o(a,b,c){C h=L.1s,cA,m;C d=V L(b).4q(c);h.5u(d);J(C i=0,W=[],E;E=a[i];i++)D(!E.2v)W.O(E);h.3S(d);B W},\'8K\':o(a,b,c){J(C i=0,W=[],E;E=a[i];i++)D(!E.2d)W.O(E);B W},\'2d\':o(a,b,c){J(C i=0,W=[],E;E=a[i];i++)D(E.2d)W.O(E);B W},\'3l\':o(a,b,c){J(C i=0,W=[],E;E=a[i];i++)D(E.3l)W.O(E);B W}},5s:{\'=\':o(a,v){B a==v},\'!=\':o(a,v){B a!=v},\'^=\':o(a,v){B a.7h(v)},\'$=\':o(a,v){B a.7i(v)},\'*=\':o(a,v){B a.1p(v)},\'~=\':o(a,v){B(\' \'+a+\' \').1p(\' \'+v+\' \')},\'|=\':o(a,v){B(\'-\'+a.1X()+\'-\').1p(\'-\'+v.1X()+\'-\')}},8P:o(a,b){C c=V L(b).4q(),h=L.1s;h.5u(c);J(C i=0,W=[],15;15=a[i];i++)D(15.2v)W.O(15);h.3S(c);B W},3H:o(a,b,c){D(1m b==\'cB\'){c=b;b=1d}B L.8P(a,b||\'*\')[c||0]},6n:o(a,b){C c=b.1R(\',\'),b=[];c.78(/(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)/,o(m){b.O(m[1].3f())});C d=[],h=L.1s;J(C i=0,l=b.I,6M;i<l;i++){6M=V L(b[i].3f());h.1v(d,6M.4q(a))}B(l>1)?h.6F(d):d}});o $$(){B L.6n(11,$A(17))}C 1a={6N:o(a){$(a).6N();B a},8Q:o(d,e){C f=d.2A({},o(a,b){D(!b.2d&&b.3n){C c=b.3n,1w=$(b).1Y();D(1w!=18){D(c 1u a){D(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.8Q(1a.3T(a),b)},3T:o(c){B $A($(c).2D(\'*\')).2A([],o(a,b){D(1a.G.4z[b.1k.21()])a.O(G.M(b));B a})},cC:o(a,b,c){a=$(a);C d=a.2D(\'5w\');D(!b&&!c)B $A(d).20(G.M);J(C i=0,6O=[],I=d.I;i<I;i++){C e=d[i];D((b&&e.1g!=b)||(c&&e.3n!=c))2c;6O.O(G.M(e))}B 6O},6P:o(a){a=$(a);1a.3T(a).5V(\'6P\');B a},6Q:o(a){a=$(a);1a.3T(a).5V(\'6Q\');B a},8R:o(b){B $(b).3T().7v(o(a){B a.1g!=\'5f\'&&!a.2d&&[\'5w\',\'2g\',\'6R\'].1p(a.1k.21())})},cD:o(a){a=$(a);a.8R().8S();B a},4X:o(a,b){a=$(a),b=N.2o(b||{});C c=b.2C;b.2C=a.4y(1c);D(c){D(1m c==\'2B\')c=c.4L();N.M(b.2C,c)}D(a.2H(\'1K\')&&!b.1K)b.1K=a.1K;B V 1h.3C(a.6o(\'cE\'),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);D(!a.2d&&a.3n){C b=a.1Y();D(b!=1l){C c={};c[a.3n]=b;B 1F.3h(c)}}B\'\'},1Y:o(a){a=$(a);C b=a.1k.21();B 1a.G.4z[b](a)},7x:o(a){$(a).1w=\'\';B a},cF:o(a){B $(a).1w!=\'\'},8S:o(a){a=$(a);1P{a.6S();D(a.2g&&(a.1k.21()!=\'5w\'||![\'6T\',\'6N\',\'cG\'].1p(a.1g)))a.2g()}1V(e){}B a},6P:o(a){a=$(a);a.cH();a.2d=1c;B a},6Q:o(a){a=$(a);a.2d=1d;B a}};C cI=1a.G;C $F=1a.G.19.1Y;1a.G.4z={5w:o(a){45(a.1g.21()){1I\'8T\':1I\'8U\':B 1a.G.4z.8V(a);6x:B 1a.G.4z.6R(a)}},8V:o(a){B a.3l?a.1w:18},6R:o(a){B a.1w},2g:o(a){B 7[a.1g==\'2g-cJ\'?\'8W\':\'8X\'](a)},8W:o(a){C b=a.cK;B b>=0?7.6U(a.14[b]):18},8X:o(a){C b,I=a.I;D(!I)B 18;J(C i=0,b=[];i<I;i++){C c=a.14[i];D(c.cL)b.O(7.6U(c))}B b},6U:o(a){B G.M(a).2H(\'1w\')?a.1w:a.2r}};1O.5x=o(){};1O.5x.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*5J)},3e:o(){C a=7.1Y();C b=(\'2B\'==1m 7.32&&\'2B\'==1m a?7.32!=a:1S(7.32)!=1S(a));D(b){7.3v(7.15,a);7.32=a}}};1a.G.5y=1C.1D();1a.G.5y.U=N.M(V 1O.5x(),{1Y:o(){B 1a.G.1Y(7.15)}});1a.5y=1C.1D();1a.5y.U=N.M(V 1O.5x(),{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();D(7.15.1k.21()==\'5E\')7.8Y();1b 7.3d(7.15)},6V:o(){C a=7.1Y();D(7.32!=a){7.3v(7.15,a);7.32=a}},8Y:o(){1a.3T(7.15).1e(7.3d.1J(7))},3d:o(a){D(a.1g){45(a.1g.21()){1I\'8T\':1I\'8U\':1x.3I(a,\'cM\',7.6V.1J(7));1y;6x:1x.3I(a,\'cN\',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)}});D(!1j.1x){C 1x=V N()}N.M(1x,{cO:8,cP:9,cQ:13,cR:27,cS:37,cT:38,cU:39,cV:40,cW:46,cX:36,cY:35,cZ:33,d0:34,15:o(a){B $(a.d1||a.d2)},d3:o(a){B(((a.8Z)&&(a.8Z==1))||((a.6T)&&(a.6T==1)))},d4:o(a){B a.d5||(a.d6+(11.5z.3U||11.1T.3U))},d7:o(a){B a.d8||(a.d9+(11.5z.3V||11.1T.3V))},5K:o(a){D(a.90){a.90();a.da()}1b{a.db=1d;a.dc=1c}},3H:o(a,b){C c=1x.15(a);1o(c.1L&&(!c.1k||(c.1k.1X()!=b.1X())))c=c.1L;B c},2w:1d,91:o(a,b,c,d){D(!7.2w)7.2w=[];D(a.92){7.2w.O([a,b,c,d]);a.92(b,c,d)}1b D(a.3Y){7.2w.O([a,b,c,d]);a.3Y(\'3E\'+b,c)}},93:o(){D(!1x.2w)B;J(C i=0,I=1x.2w.I;i<I;i++){1x.5a.2m(7,1x.2w[i]);1x.2w[i][0]=18}1x.2w=1d},3I:o(a,b,c,d){a=$(a);d=d||1d;D(b==\'94\'&&(12.1Z.3r||a.3Y))b=\'95\';1x.91(a,b,c,d)},5a:o(a,b,c,d){a=$(a);d=d||1d;D(b==\'94\'&&(12.1Z.3r||a.3Y))b=\'95\';D(a.96){a.96(b,c,d)}1b D(a.97){1P{a.97(\'3E\'+b,c)}1V(e){}}}});D(12.1Z.3X)1x.3I(1j,\'dd\',1x.93,1d);C 2G={98:1d,6W:o(){7.99=1j.de||11.5z.3U||11.1T.3U||0;7.9a=1j.df||11.5z.3V||11.1T.3V||0},9b:o(a){C b=0,1N=0;3W{b+=a.3V||0;1N+=a.3U||0;a=a.1L}1o(a);B[1N,b]},4o:o(a){C b=0,1N=0;3W{b+=a.3p||0;1N+=a.3q||0;a=a.2x}1o(a);B[1N,b]},9c:o(a){C b=0,1N=0;3W{b+=a.3p||0;1N+=a.3q||0;a=a.2x;D(a){D(a.1k==\'9d\')1y;C p=G.1M(a,\'1A\');D(p==\'5g\'||p==\'3k\')1y}}1o(a);B[1N,b]},2x:o(a){D(a.2x)B a.2x;D(a==11.1T)B a;1o((a=a.1L)&&a!=11.1T)D(G.1M(a,\'1A\')!=\'6u\')B a;B 11.1T},dg:o(a,x,y){D(7.98)B 7.9e(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)},9e:o(a,x,y){C b=7.9b(a);7.4A=x+b[0]-7.99;7.4B=y+b[1]-7.9a;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)},dh:o(a,b){D(!a)B 0;D(a==\'di\')B((7.24[1]+b.3L)-7.4B)/b.3L;D(a==\'dj\')B((7.24[0]+b.3K)-7.4A)/b.3K},6X:o(a){C b=0,1N=0;C c=a;3W{b+=c.3p||0;1N+=c.3q||0;D(c.2x==11.1T)D(G.1M(c,\'1A\')==\'3k\')1y}1o(c=c.2x);c=a;3W{D(!1j.4C||c.1k==\'9d\'){b-=c.3V||0;1N-=c.3U||0}}1o(c=c.1L);B[1N,b]},2o:o(a,b){C c=N.M({9f:1c,9g:1c,9h:1c,9i:1c,3p:0,3q:0},17[2]||{});a=$(a);C p=2G.6X(a);b=$(b);C d=[0,0];C e=18;D(G.1M(b,\'1A\')==\'3k\'){e=2G.2x(b);d=2G.6X(e)}D(e==11.1T){d[0]-=11.1T.3q;d[1]-=11.1T.3p}D(c.9f)b.Y.2T=(p[0]-d[0]+c.3q)+\'2k\';D(c.9g)b.Y.2S=(p[1]-d[1]+c.3p)+\'2k\';D(c.9h)b.Y.2Q=a.3K+\'2k\';D(c.9i)b.Y.2P=a.3L+\'2k\'},dk:o(a){a=$(a);D(a.Y.1A==\'3k\')B;2G.6W();C b=2G.9c(a);C c=b[1];C d=b[0];C e=a.8i;C f=a.8j;a.9j=d-3J(a.Y.2T||0);a.9k=c-3J(a.Y.2S||0);a.9l=a.Y.2Q;a.9m=a.Y.2P;a.Y.1A=\'3k\';a.Y.2S=c+\'2k\';a.Y.2T=d+\'2k\';a.Y.2Q=e+\'2k\';a.Y.2P=f+\'2k\'},dl:o(a){a=$(a);D(a.Y.1A==\'5g\')B;2G.6W();a.Y.1A=\'5g\';C b=3J(a.Y.2S||0)-(a.9k||0);C c=3J(a.Y.2T||0)-(a.9j||0);a.Y.2S=b+\'2k\';a.Y.2T=c+\'2k\';a.Y.2P=a.9m;a.Y.2Q=a.9l}};D(12.1Z.3r){2G.4o=o(a){C b=0,1N=0;3W{b+=a.3p||0;1N+=a.3q||0;D(a.2x==11.1T)D(G.1M(a,\'1A\')==\'3k\')1y;a=a.2x}1o(a);B[1N,b]}}G.8t();',62,828,'|||||||this|||||||||||||||||function|||||||||||||return|var|if|node||Element||length|for||Selector|extend|Object|push||||||prototype|new|results||style|||document|Prototype||options|element||arguments|null|Methods|Form|else|true|false|each|match|type|Ajax|child|window|tagName|undefined|typeof|nth|while|include|replace|transport|handlers|pseudos|in|concat|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|continue|disabled|div|_each|select|first|key|className|px|matcher|apply||clone|args|stripScripts|text|innerHTML|onComplete|nodeType|_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|pattern|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|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|isJSON|JSON|startsWith|endsWith|blank|amp|lt|gt|with|Pattern|template|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|hasClassName|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|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,{}))


function initAjaxLoader(){
	Ajax.Responders.register({onCreate: function() {StartLoading();},onComplete: function(){StopLoading();}});
}

// script.aculo.us effects.js v1.7.1_beta2, Sat Apr 28 15:20:12 CEST 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();
