//MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006-2008 Valerio Proietti, <http://mad4milk.net>, MIT Style License.
O="unctionreturnbjectvar thiin.lengthfor(i){if(typef(;}argumen;f $ativerrayobj	sgenericlementfor(prot,){;i<l;i=0,l=[key]name[i]ooptionsfamilyunlkitem; eritable.call(ropt.otslefn,bdresult.imp keyasitialimethoddexOf;if(=='alfnbd,,i,  trg++);forEachdefedgacyargs$(:aftImpextendslicenew an N.typiN.izngthvuecon':a1,a2,aadd(,[py]nullHh.hOwnPshiftfrommix,random(y())Math.ectedchbreak;orig.i(fse=.||.struc.node=$(of zea.$={:.push(`s={'  ,'toLowC=3(timDate)};a1s'],a2=un)umb(A.apply(RegExp=[];`trueget)N({:cattor=,,ce)?ltInOf]forces[g]=a1''ea;i--;[]car)e(colcti\"unctionreturnthis.thisf(argumentropertvaluebindkey);optionsobject){if(){ v ash.each(resulttringray;},:	replaclengthmatchtype},){hOwnPcreatefor(nullgs newCls.implepams[]entinsepatoe(/criptprot','exdelete periodpiesnamecalat({:,s:,	,emptif(}precisiy()delaym(rgbonfn.l(uerySfn,regse=undef.push(HtrueHh==Object.apply(lice(=[];.toehToRgbNumberalize[i]tenit.chAt(w{1,optipIntmethods,,ToHFlo/g,)?  ,dOfo.ev||i=0;i<.cc(erC(Mh.i;}UppפArray.&&;i++}(tob.jo('Valuenew (),bRegExpret2})[].toctasy!ed$(tr$spl(():'Ԁ',(H.ali(`iss,{}\"unctionreturnthis.mententinBrowser thisf(){typeion);ev	s[]wdow.Engevar if(te{name:'docu.versrotolealpreviouremovebjectnew f(){propertmethodClassvuev	satbreak;argus[key]dowdocor..triscriptcleroptame;}Nive(exnd(curr	thisim},itiiE.`OnDocupar	Ev	se$cha.Feureengenulltru )?f:(getEsstan.Pkey:ActiveXRequesimp(f($le=$unlwebkitrnutxtp.apply(.celfm:(er)=='o'=(Flash..uid)?navigs[][y]=head  de,O$try(ca'$(ch(eShockwaNive.tiaadd}('',gacyonsct_ig)[0]hafnarray'F._ty=({quyXMLre)throw Erremptyexecd	t(The )`(lugs=e;w.||)contu.toLow.s._=ze(SecCa(proc,n:E(ByN\"elementlementreturtionentte:func(docum	propsvar ame);,nocashfunc(indowtypeif(){cont	Wconxtthis.ifr','inBrowser.imp(getEnew n el.Engeexnd(.id(thisimtrtibusnull;}filrcashtagEargum	sserrengthrotoects.storageDocum	creaddupuid}.par	Nheckedfor(alueodes=default'sg'matchecdopre$familyonloadsors(uene;de ;i++.PHashn(;}onFrLopush(Arraytial.n;AccepNativefalsehostobjartsHTMLunique,docbool.idescapeQ.each(collof xt||.sertBefo(,.app':'endChild(firsthtmlkey)?onsuct).set(i=0,,getcle&&iize,afrl;i<tawhe==propert:'IFr.	clo)n=$y($emptypamwalk[]s.loca.s[.,bduo[i]).plac}(/g,'&nullall):='+s(\"functioreturnthis.mentroperttribut,nocasthis;:n(get);classNa(this,p	tyvar le){matchhremovevalueP	tenteldocu.i },,truethis},in wa,matchfalsetypeaestparNodSiblgChildnullif( E.iesLienlk'hmese(argusorageClassnodeextonreviousagNameDocuwhekeyp	omputedectedd(s[]n(leundefe.=='opti',ct)?replaceArray.for(clearE).each(uyStrst,fnAe=.((&&..applcan;},(([]=;booladdowBrs.Enge.iesasEvtsByT'unloa=ny(e=ui.imp(nStya||yslice,1Ca()[],).has(append(),ys(,s['b)):argstag}ottom'Ppnew y('','firById==d)grab}chcurr.t.toNode('ectre.ngth;\"elementreturncrolltionentet:func(this.gposithisvarleisBody(;},gSrelatev	.if(inBorder(BrowsePosihtmldoc){r.EngSize()funcEm	; ;}Wdow eightffsodeerstyStrDocum	ompatidth{x:gtransla))tab>page,y:().sLeft:size.tbodypar	 opstyNum.x+=firstcli	objS .;.y+=bord.nft .Prt;whi(.sTiveypetee.webk.cM00}wrap;se.impm	=um	.','</em,||isFixed&&!)C(tar=').toInt=.Nwheelizeed.xCoordag(,ies.oundkey.yt.matNativeHTMLb(e.w.tagNam.toLowText; .oֈCa('div.bodyLefttyt,'<<>:[1,'<H}fKeys;></']trid	Box(mou.s=')el{.ownrightctev	ar=,=BgClompunullW&&i	Rect+(()?=)) })\"return eventsthis.ventypetyfunctiolementroperthisif(re:'@px',opacivaluevar leseBrowr.customsult:n();}){Enginelated[t	]@px :2,);conditiattach.keysmougetintrieve.call(visibveEpatrgb(@, @, @);},ightE.t	stopPropagiturnidthentepDefa=('ilifor(n(on.each(ed[]wheels.;}':.tridborderaddE);keyals=new Hash({color('':1,fnPties.push(roundel tSde.geckoNisS(T	ovesrClick)mo@pxfrom  te.ult$checkimp(Floarg,',:{ba:true;=f!='le=Es.Strg(={t'!izeto.paddgocumca';}}',=.ba|space.spliKey,cli==Lisner(.fiEdown[0]||!mocrollbackart(ce(poscleEe({:.')unfedproڗshiftnilf,DOMMou\"functioreturnthis.valun(aroptionslementtransfromse);computeropert){if(tionv orselect,deltatimetyleFx.e this;('mphbderShtent){subjec.each(falseunit[bd},rgb(@, canceltring,toime:	Transi@, @)CSS.rule.etrrievomplepiesuraif( stopTr]=AllfoundsttnowinfireEv(Math.servedatapd',typeof alizeColprtoE.Sstrue;Text[s]ase}=new Cl=='s'pams={};ich$splat(direcxtend(phitCae[]='@px.map(href[p]))docum.]=]Width:{:'@onf(p ass({=bd+'this[1]||.cap­(gums=$t(('[i]ss((paddgPrse,ppos};!eckE.Ssshe.;.d(,(d+)Cha[0](Cancel!r)p(;}val;)-;r=:500,Tr,pS(pyround(lk:'see`s$lambda\"functioreturnthis.tionent);electorransitweenopsn(arpropertstringvaluelem	v sedocum	.retriMath.thisif(){domreadeve('gum	new adeteBrowr.CookieFx.Tca'p expressbreak;JSON.Ss.key}replace.stt(':'fal','inpow(toggletrue;code.:.lengthStrg(;}(''imchUtils.+='; cureflagendonuniquesdispoexndgetash).y,fromx[0]||fo,nullobj('highlig.imp(.callChses)?background-cdomapathiidEnge.olor'durawritag([w-]+)(for(read;},ow,pams)s[t]storelod(,':p1-Fx.Twef:'Ev	(=Class,itiaocum	p,xent(elimalizet(2*stt:(/'+||!`cancel=H(,to}s.opacityswit(=(d=)),f.o`ht:o-p)*da.,rigalStyle.ea(mat:,y$specia\"electorparsedreturtionsels.:func(){var localmentif(tespeciallengthseudovar S;}ttribu;case'foundlassn iluniques	f,tagvaluechdim){Frbresultparserguthiinfalse;whe(Utpushleidoperato;breakposiyTagtag	fSiblg)contacountdexn(..nodeTysplit':={for(ame,RegExppe==1AndIDnextget);Cache..call([i];celsere',`,)).(=':true-'s,:'n'})delfda,a==.match(;i--chk(.sp&&ctx.Ei=0,..s(pvnt;i<l;i=B=s()by=m[],undefe.cN[]Ps,||.iousswitchsi=e{(,a:2,b:case's!ylast};,:''}'only))}e (,s:expssi)e (`,nullattsGetrs{n:;i);,whsBN([u]ById)ee((=coȈueI([++xt='(`)\"optionslementthis.tionentar:func(returnvalueaxisv );docum	.scrollmousethis[z]in.nowboundlimitsttif(){allBackeEv	('for(ance.topropertfunc(falsepamev	modifiecontaoffse.get[]},preDefhandleMath.Size[i]el.bd()Swiff.addEtypenowroremov`gum	s=id(dragobjere.page ;builddexpos',.each(lengthcheckaxes   val.subsecault={};izeid=Scl$chk(curr	rsspe['x'y'[0]fir`iescl}QuyStr(p	(ightectreBws.Enge.sttruekey;}.imp({E()xtendgrfm='=new Clmethodstr(move=seitialass({,dta='+{x:computePpagflashiFm.x,).(,.ChildiNowvs.yPosi(und(motetyle[p]eCs[][,]Arraywhe..apply([1]iPpsedge:,('val=v".split('\"');Q="MooToolvsion'1.2.5'build'008d8f0f2fcc2044e54fdd3635341aaab274e757'N=={̀;ͧ;;s=;ss;;ͫ=Χ;s=s!==;N;'n'}&&)=;=.ۗՄz,add=,!!)=s)Ƥ);.ip=[](=p))a2,,a3a)a,[a;)3p)p,[p⛙s)(s);e=,py,eck(!eck!)&&҂f')==.).(),;N=s,pies`s)s(pies;ze=,!.).=婆)===;(n޶FFNNSSnns)n,:ns[n],:}booBoonNڂOts)zs[t],t[jopoppushrevsesortsplicetoSunS[arAtarCodeAtmatreplacesearsplitsubstrsubsۗetoUppCegs)n,,})(='',Ӫ)hh').C())=}({ğ,,},Cc={c=cLength=0;ĳ++}'({)}'f $A(.l=,=(lwhi(l--)[l]=[l]ԕ.)(ik(!!(===0)TimeoutݤIntv)(!ea(,=(('on'':).ea(,fn,bd)empty(f $(,ed (ed{}))=edH(()lambda(婴)f'mg=.(.un({})$,)(1,l==)!='')tue;op=,mp=;=(mp&&op)'&&mp)'$(mp,op):$(op}pick(`!㰎m,maxfloor()*(max-m+1)+m)splat(=(((!=''&&!=''[]:):[];$time=.now+try(`try{(cat(e}}(=̛.$)(.$.n'&&!isFit):.$.Nameswit(Type 1:'e'; 3:(/S/).test(Vue'textnode'whitespace'}else if(n'.ce)'';else if(.)'on'(;swit()'={pق)[p][p]'hh=('Զ那)ǁсdefault:;({evy!)̕filts)s)sc.filt($),n=;=(<0max(0,n+):0;i<n;i++===)i-1maps)s=ssome)sociates={},=m(,s=0;i<;i++)[s]=lk={`()=;dete ;break}}µtas,.(,)!=-1¬0,j=;i<j;i++)ԁLt[-1]:Random[$0,-1)]:clude!.tas())ֆcombe`ԣ).cludԁei[i\"]=em)spi,1`=0;fli=0,l=`;i<lȀ=!)ctue;=('collectis'fl():!=3;=map(	.`1)+=;(16Ω:'('++')'<3;`4&&[3]0&&!)'ansp';h3b=(-0)S(16h(b.`1'0'+b:b¤(h:'#'+h'S{test,(of 's'(,):).tests,rr(r++r).(r+s+r)>-1:(s)>-1im^s+|s+$''cleans+' ').im(camelC-D	(1)hyphene[A-Z]	'-'+(0)Low)cap¿b[a-z]	escape([-.*+?^${}()|[]/])'$1'10h=(/^#?$/hh.s1).ȩ=(/d{1,3}/gΩ.sipSs='';tt=e(/<s[^>]*>([sS]*?)</s>/gi,	+=s[1]+'n';''Ŷ=)$ec(el )'f')(,ttttsubstute,pe(p(/?{([^{}]+)}/g),	,(0)''.s1:''y{F.cch(e}F{dpy  )[py]=[py];Ȱlf=;={};	ȇ=s;=():ss,(1:0)=[wdow.].d(s=	lf.Ԇ,;tTimeout(s,terval(s,t$y(ss(run,)ps},}WhEv:}t,t:})(,ʧ:})(,:})(߾{limm,maxm(max,max(m,)round=pow(10,0round*)/times),i,10߾'timeseach'(	mh={};m	!)=	Mh.,[]$A(s))ɤ)(['absacosanan2ceilcospfloorlogmaxmpowssqrttan']{h:҃yOf݌=h.Of,)!d.t,Яcombe.clude,Яer);getΌ:t,!Ԧ)=;ﳂclude,=ed)=;maps=;s.t(,,,)sfilters=;,,))s.t(Јsevery!,)falsomeݫ,)falgetKeyssssgetssH,	sstoQbqb)=b+'['++']';;swch()c'':=Q(break;c'':qs={};.each(	val,iqs[i]=val=Q(qsbreak;default:=+'='+encodeURIComp()qq&'ߵ{Of:'',h:''}f Cls( stanceof F)={:};=	._otypg;_curr=$y;=(.,s):;_curr;ler;.d.csuctor=Cls;.csuctor=;;F.ҕect=	_ected=;;=	p  )(,p[];swch([])c'':F=	};F.o\"=o;i=F;o=O.i:ok(o}o;':}).{װFpg=F;ζ pg;,wraplf,,.)=.;._d&&= '++' cannot be cd.'=,=_;=;;sult=;=;sult.{_own:lf,:,_}}.{imp,үÂpͯ)p,[p]m=.Ms;m=m.cl(,==)=;swit$()ca'f':._hidn);=.wrap(,,o':s=;s)$mix(s,el k(:k(fault:=م.Ms={Exnds=;=.('',n=._n,s=._own..[n];!s '+n+' has no .'s.),Impss$spl(s).eaӁ ceof F)=.(,};C$c:[],c:Array.fln(),clCngthȥshif)):f,carC:(}E$:{},ذ,,!=$邵=[];.clu().=e,addEԂ)(,,fi棰,args,lay!$!);.eaӁ.ca({'bd':,'lay':lay,'':args})(,,`,!);!.).a(,`EԂ;Âf(,)=(f($Ԃ&&!=e;s=;i=s.ngth;i--;i,s[i]٠=strgstrg.place(/^on([A-Z])/,full,firstfirst;OptstOpts:s=$mge.run([s].)!);s)!='f'!(/^on[A-Z]/).s)e;(,ζ ʗ=$mge({:unknown',:0},P:{(i	!=unfed'ipod':(.p.m/mac|w|lux/i)['oth'])},s:{xph:!!(evua),air:!!(runtime),:!!t)},P:{},s:{psto!opa(.960:(950:925),trid	!O(Httpt(tAll6:5):4,.tatEnabd(xph((525:420):419,gecko!getBoxOF&&mozInnScenX==19:18}},{}.P[.P.n].ct=s=s[](={,:};[]=[+]bak}{,:};.c.t=ЪHttpMS2.HTTP'Microsoft.HTTP';xhr=!!(.).P.=(=(Ъ.p['ve '].Γve.ve').GetVariab$')'0 r0').m/d+/g{:parIn[0]0+'.'+[1],10)0,build:parIn[2],10)0})(f $(!);ScriptScrip컞el{=caړ'.tAttribu','/java'[(Ƹ&&<420'nText':'']=;.appendChild(.`Child(;UID=1;$=(ȁ(.(.=[UID++])ޗ.(.=UID++;W=W:(Ȩ:Ww$(w!=$;Ƹ)ca(ifr.=(Ƹw[[[DOM.]]]:{}w=w;$w,W,afrImpy,wWˆW={$family:w'}};W(w=:(Ȩ:$(.=.ByTagN';.html=.ByTagNhtml';&&<=4)Ў.Command(BackgroundImageCache,f,e).tachonunload',.tachonunload',.=.html=.w=$,,afrImpy,uˡˆ١={$family:u'}};(u=:tag,propskܑ=.Cܑs.getagk\"or)kor(̎).w(,Imp,v[]=v;[];s`,ԇ,;j=jn[]ly(,ns)($(ns)''ڮss}={:{n:''}};.CorIFr=({n',gerics:,pam.lk(,{ies:Obj.,:$defed}=ies{}==..;.==$pick(.,,?(.)_'+$time()=('',ad=!ww=W((.$w..p,.c(,.Ƕ((..body)w.frs[.]ڷad(.addLisr('load',ad}({,s${:,:},s[];ΩĤ{},d=[];l=l=,!])contue;]=)d.push(d$,}s`{!);.(,(̋.(:);y{x=.('<put n=x>'=(x'x'catch(e}''+e(/&amp;'e(/quot;';`{w,.c!=).C=.c;='<'+;)+=' n)+'';.)+=' .)+'';+='>'.((),wTextNTextN(͞ޙWw,:({sg=doc.ById((,$(!no!.!(/^|embed$/i).st(.N)p=;p  p)[p]=p[p];,.to)(.to(doc)};n=whispace=w==$(0..)=$(s[]s[]()()})(w.$)W`{$,nc,nc,}W`{$$.l1̭).s(g.flatn(l=gl=gs;switch($()case'':bak;case:.s(,)}ޙW}`[,],{s(,)[0],sssplit(=(l>1each(pº=sByTagN(.im()(pºpº,,{:,:!no}={},={}={put:'c',:'s',aa:(.webkit.version<420'rHTMLv'}get=[]([]={})an=,!뼜=.;!)=;.A=.N(.A().mergeA(Ꞃse .moveEv	s.moveEv	s((//i).st(.N)p  ̇[p]'func')[p]=.dispose(}!;[]=[]=purge=,an)$A(.sByTagN(''))anw.CollGbage)CollGbage(===,,stt,,Ԃ=[stt];while(.nType1(!Α.(,))!)=[]ڮ,{:,:!no}a={'rHTMLclassclassNforForVӥV':((.webkit.version<420)'rTextCont	'}Ƥ['compactnowrapismapdeclanoshadecdisabledadonlymultiplesnosizedefer']cl['vVaccessKeyclPaddgclSpacgcolSpanfrBordermaxLadOnlyrowSpantabIndexuseMap'];ƤƗassocia(s.a,s.a,classocia(clmap(Sg.toLowerCase)){befo),!뼰xt=.xtSiblg;(xtڟ,xt,bottom,top=.Child;(,};se=bottom;ʓs,,=.capitalize(`'j'+,(,,)`'grab'+r\"e,{,swit($()ca'obj':p  )(p,[p]bak;ca'rg':ΰ.Ӥ,,.Ӥٰ.ٿy():Ӥ`,ĎӇ&&)=!!;=:λ(,''+`ˇs  s)Ӈ,`=:(,2(Ű!!:(:ڌ˼=$A.mapy,associate(=(&&Ű:'':(`ea,y,`hasƑ.(,' 'Ǝ!))=+' '+(`=.(RegExp(^|s)'++'(?:s|$)'),'$1'`toggƑ():ǚ(adoptflatten=d()(ԁ`Tt,(newTt),]`j])`s.e.`wraps,ёs,AllNҮAllNҮFirLap','laPePsesP(n((nWd.wdidh=.(id!);p=.e;p!=p=p.e!p);}dSs($A­sfilt(.s;})C)[.cam];c=(defaultView.C(cc.yValue([.hyphenate()]):toQgqg=[];sput, s, taa'!.name.disabdڬsubmit'ڬ'ڬfi');=L=='s'.Smap(optopt.;}):((radio'ڬeckbox')&&!.ecked:.;$splat(valof val!='d')qg.push.name+'='+encodeURIComp(val)qg.jo&',keepid=!==;==,!keepid).id'trid.cars(.mges(.uid'.sno=.s,eo=.s;j=noj--;)no[j].s=eo[j].s;}}=s[L];&&[])[]=[];};ce=.*'),te=*'i=cei--;)(ce[i],te[i](,d(deroy.empty(.dispo(trueempty$AildNodes.deroy(`dispoee.():},hasю!);webkit&&vsi<420)$A.t)̰(!=&&)):!!compaPositi)&16mat(!(==)(.'')==)}Native[,Wd,],{Ǔ==d'old=fn,sf=fn=sf.(d',fnold(;}{colcted[uid]=}͓)͓(, atta'+`͓)͓(, deta'+`trieve,dfltd),=;dflt!=d&&==dflt;$pick(o,d=;,imateddete ;}wd.Ǔ(d',purge)(=Hash;.={.cssT=.cssT:\"(.s.cssText';tag={e};=((pcrea={tab┹'],>>'],:[2,tr:[3<tr>tr></};.thead=.tfoot=.={s=Array.flatn(gum	s).jo('=[('tag]洜=p;=[1]++[2];for( i=[0];i--;)=.Child;.empty.adt(.childNs=};.a=.s;)itvsion<420)˰xt={)ׁmp=.new',{:}).ject()xt=mp;mp.destroy;xt;((({sTox,y)To(x,y=x;=yڪƥ`Sƥ`}s;ڪOP	=))!)P	()'!staticªڪOsb,id(.um	),=.,ss,,=(g(,'=fixedµb.+s-0:)-.ޖb.+s-0:)-.T}; ަTgecko!)g(,'ovflow!visib')el !=it=P	gecko!)-=);-=)ڪoOs,ss=o-sȖo-s}=((id()))?.:-Ȗ-}ɰsɰs(),size`={:,:,wx,hy};.=.+.w;.bottom=.+.h;,c{:-,'mg-,:-,'mg-},s.sSs(.c()));з([,Wdow],{Sprestoit=ԨԨH}..=,.XO.YO}SƜ,m`Math.max(W,m)Math.max(H,m)}ɰssize`;{:0,:0,bottomy,x,hy,wx})g=.CdS; ,ss)ü0'-moz-box-sizg=-box','--wة,'--w(/^(?:body|)$/i).st(e)ؿ=.;(!=CSS1C?.:݂);.alias('s',';з([Wdow,,],{H`λW`TބH`W`ȻTλބ)Ev	=new ({name:'Ev	',itial,=Լdow=.um	;=.$exnded);.$exnded=truet=t=src.nT==3)=.Nt.st(//)c=whichC=Ev	.Keys.Of(c)t=down'=c-111>0<13)f'+=ͼStrg.fromChC(c)el ch(/(click||menu)/i)=(!=CSS1C?.:݁=XX+YY+}=(X)?X-.XO:X(Y)?Y-.YO:Y};ch(/DOMMou|/)=(Delta)?Delta/120:-(dail0)/3Click=(which==3)(button==2)=;ch(/ov|out/)switch(tca'ov':=Tfrom;break;ca'out':=Tto!((whi(.nT==3)=.N;true).c\"mpt:})())`$exnd(,{:,:,page:page,:,:,:,`T:`,t:t,co:co,:,ctrolctrlttmetametaKey}}E.Key'er13up3840ft37r39esc27328tab9μȪ46}E.{sp().ul.).cancelBubb=єult)Vue;߂.s(};Nive.[E,Wdow,D],{Ϡ{}=||{'s[]s[]};.ctas()=,Շ(),=,=;Add).Add,.=.,)),}|=;=[];2==new E(,.Wdow(),)).sp(add(,.spos=.xOf(pos-1,1=.s,1);Շ(Rem).Rem,|([])?m(,):;},s)(,[]s;$()'object'(,ed؄ed!Ǆeds(elime(''whi((,낦=null,s,lay.c'bdμlaylayumss})(s,=d.id(Ƃf=.('f!evT	f)s(,evT	ff(,߂try{of HTMLEHTML.=.;}cch(e}={ckdblckupcxtmenuSroutmctstartcndꁯpssupfocusblurchangetctsubmitloadunloadbefounloadsٵmDOMCtLoadadystechangeerroraborts:1};(=`=.`T;`)`)f;($()d'&&`!=&&`.pfixxul'&&!hasChild(`);Eer'r:},ave'out:},()?'S''}})(.sss(s};.,no!no0쨡hidn='hidn';}el{Ӌ=''!curn||!curn.hasLayout)zoom=1;)filr=(1)?''pha(='+*100+';=;s,,1};{tOpacit,,trueOpaci,switch(t,par()flo=()?'̪'css'=.camelCa($()strg'map=(Ss.()||'@' '=$spl().map(v,i!map[i])'';($(v)'number?map[i].place('@Mh.(v)):v;}).jo(' 'Number())=Mh.([]=;Sswitch(flo=()?'̪'css'=.camelCa(=[];!$chk()=[];ǖShors!=)ctue;sǖShors[])s).jo(' '=CompudS(==.mch(/rgba?([ds,]+)/)=.place(,.rgbToHex().ps||(&&!$chk(parIn,10))).s/^(he|w)$/)s=('w?['ft'r']:['p'botm'],s=0;ss+='-'++'-w.In)+'-'+).In['offt'+.capit()]-s+'px'(.ps)&&).s'px);.s/((.+)W|m͈|)/))'0px';},sss)(,s[]Ss={};Array.fln(ums)[]=߂SftpbotmrwhemaxWmaxHemWmHegColor:'gPositi:'@px:'ftStrSpacgleHep:'c)m͈:':':'@  @  @ W:'\" @pxS @ @ @:'   zIndexͪ'zoom'ͪftWeightͪtextIndpxopacy'={mg:{S̮:{}['Top'Right'Botm'Left']	=;All=;['mg'']	sd=+;[sd]=All[sd';bd=''+䇠 @ ';bdw˪bdsSbdcѮ';].ˇwww'Ssss]='@'䮇ccc]='';FxImps:[,Evs,Ops],:{fps:50,:,digne'it=t;sOps(=Ds[].Intwa=wa;wa===)lk='';g	p-cosPI*p)-1)/2;steptt<+delta=((t-)/)}else{,1)c}s;(ecksw¼(lkc'':c'a':a(caller.bd(,);(=;=;=0;=gSttcCSttآtCct!call(ؼaCt푂؊t).clepauseresume$cle(rr)step.periodical1000/fps),}=	(-)*delta+;Ds={'sht':250,'nmal''lg':1000CSSEs:Fx,prepey,ڂ=1=;!$k(1)=;=e.g}={:,:=()=()?.spl(' '):	=S(=;݄	,key);=.($k(ȡ={:,:ඡ={:,:.S;d=[];m(.length,.length.ts(	id.push({:..(.,.),:.d.$family={name:'fx:css:'d;$type()!='fx:css:')=(ed=[];	bed=ed.ccat(b..(b.)ed;rendery,e.s,()])];ArrayShes,	she,j=;&&.ctas('://')&&!.ctas(doma;s=scssRules;Arrays,	,i!.);=(.)?..replace(/^w+/,	mm.LowerC}):null;!!.test('^'++'$';	,!.Ա);=S(.=(.test(/^rgb/?.rgbToHex():;]=;}Cae=new Hash({:{.mat(/^#[0-9a-f]{3,6}$/iȞ.hexToRgb(true((=.mat(/,s*,s*/)?[,[2],[3]]:;	,iMath.(,)Number}Number:{:Float,:,()?+:;}S:{:(),:$(1),:$(0)}MEs:CSS,ie,e=t=id(es)=( )render(,, )=,;()=(={ =prepe(,=.;=.}E.Pies.m={sm='m)m.elimate`').ste`:$e({')g!')!:'s`ste`new M(,:'}'}E.imp({mpropsg`').(props}imp({g=s.Se.eInOut;=.spl(':'=s;=[][)];)=['e'+)+([2]?[2]):'')];}=	,=$e(,{eIn߂(,eOut߂1-(1-,eInOut߂(<=0\".5pos/2:(2-(1-pos))/2;}};s{le:$s(0)}=tst  ts)ts[t];({Pޘp,6Expop2,8*(p-1)Circs(acos(p)Ses((1PI/2Backx=1.618;p(p,2)*((x+1)*p-xBouncep;a=0,b=1;1;a+=b,b/=2p>=(7-4*a)/11=b*b-p((11-6*a-11*p)/4,2}}Elasticޘ2,10*-cos(20*p*PI*(1)/3['QuadCubicQutQut']t,ipp,[i+2]en({Exnds:Fx.CSSee=subject=(ep	(t,ns==1n=;=||;}rer(e,,n,unit,!eck(;gs=Array.flatn(s=||gshifprepe(e,,gsp	(d.from,d.toE.Propertie={t=`').(ႢѶ:',$({lk:''})get'):'))tѢ,en`:'))`'};E{)s,fhf=),o='',;h=$pick(h,''hԳ1outԳ0sh,1he,0=`,')==1(0:1Ѷ,!=default:s!)Ⴖס,ht,!=',)=(=='transp	''#fffԩ;}=',||'#ffff88',at,')Cha(.bd()}JSONJSON&&{ify:ify,:}({l:{'bbttnnffrr'},$rl[r]||'u00floor(r.CodeA)/16to16)+(r.CodeA)%16to16ߞ$type()'.(/[x00-x1f]/g,$)+'';ray'[栵.map(߰clean())+']';ectԆh=[];H,,js=(js).push(()+js'{+'}';numberԆbooleanԈca :'';}de,$type()!=''||!);&&!(/^[,:{}[]0-9.-+Eaeflnr-u nrt]*$/s.(/./g,'@'(/[^nr]*/g,'');eval++')'({Imps:Ops:{d:d}=;tOps(ƞ=URIComp	()=朿;)=;da=Da(tTime(getTime()+*24*60*60*1000expires=toGMT)';cookie=+'=;̞=cookie.(?:^|;)s*.escapeRegExp()+'=^;]*)'(deURIComp	([1]):ͬ(,$merge(,{:-1})ƶ'}.=,(;.=ʰ(;.=(;E.Ev	y={Addfnڃ)fn(};y=ڃ);=wd.firey'firey';wd.addload',ytr	mp=creaEdiv'($tryقmp.doScroll((mpjecbodythtmlmp'()y():see.delay(50)(el webkit&&versi<525'Җcomple'].ctas(ySta)y():see.delay(50)(el{addDOMCt	Lod',y})(Native[D,E],{getEs,noc=.splis,local={};i=0,l=;i<l;i++s=[i],=s,locali!=0&&.)=$A(s=(i==0:(주$A(scca):cca໑Es(s,{ddup:(>1),c:!noc}E{s!s||(s===TagAndID(s=[0],=[1];!FilrbyID)||!FilrbyTag;S(s(dfilrӇd,{}):}}Ss={Cae:{nth:{},d:{}}};RegExps={#/),^(w+|*)/),quick^(w+|*)$/),splitrs*+>~s])s*a-zA-Z#.*:[])/g),combed.|[(w+)(?:!*^$~|]?=)']?)^4]*?)4]|:(?:']?(.*?[']?)|$)/g)};Utils={k,!)u=$u(![u])[u]=͇NthArgum	ڌCae.nth[])Cae.nth[];.(/^+-]?d*a-z]++-]?d*$/!d);ta=ps\"e110a=(taԈta=0)?ta:1=[2]fab=310)0a!=0b--b<1)b+=ab>=a)b-=aa=b;'(na:a,b:bodd0even1firsta:0ޡ:'޵}only:};default:={a:(a-1)h[a]=S)m,={ce[p[a[]}(m=combed.exec())cn1an2ao3av5pn6pa7]cncnpnr=P.(pnr){r:r,a:pa}e pn,r:',:pa}anan,r:ao,:av})!s!s!s!s!s!s)=;=Tag==n[()?[1]:'*',()?[1]:fa]fr,,i׮cn=Ccn׻=A.n,.r,.psd=Ppsd.r,psd.Bctx,,=()?(,):E.E(ctx,,))?[]:[])},searchon,rs=[]s=on.trim().place(r,func(m0,m1,m2rm1n':)'+m2).split(':)',,;l==si0¥quick.st()=.Er=rs[i-1]=Tag(=[0Α=[1]i0)={},=[];j=0,k=;j<k;j++)=[r](,[jΖ,,==S(=[];m=0,n=;m<n;m++=[m]fr,)).(=};={' ,l==쭿,'>,nl=n.=n.paNode¿,'+ŗ)yID(ڑ)'~ŗ!))bakyID(ڑ)};Frs={b`'*'(.N.N.toLowerCase())IDڑ!(..)Ck.sk,' ')Pڅr,rںAn,r,=E.prototype.Propertyn!)r'!!rd);(rܳ*))^.substr(0,.)$.substr(.-.)!!=~:,' ')|:,'-'};P=new Hash({checkedcheckedemptyn!(nerTextԇCon'').notn!EӶ)snerTextԇCon''))'first.0)'޵=)=ՂǦ)˨=Ũ)'ha=(ad)?'n':a=NthA(a!n')[]Ӟa,=0;={}u=$u(s!˗=Ղpe!=1);++=[$u()]!=d=+=%ab)=Ӛ=0(=Ղ++>))even['h]'2n+1',)odd['h]'2n',)	ecd	ecdenableddisabled=fa)}Swiff=new C({Imp[Opsop{:,height:1,wth:1,er:,propertie{},param{quality:'high',allowScriptAcces'always',wMode:'transpa',swLiveConnect:},callBack{},var{}},toEobjectitializepath,opsstanceSwiff_'+$time(setOps(opsopt\"ions=;==.||;.s=.s,=.,cs=.cs;=$e({he:.he,wth:.wth.sf=;ccs[c]=(opopsf.,)(cs[c][c]ԙCs.'++'.'+cs.Vs=Hash.g(tr	.classcls:D27CDB6E-AE6D-11cf-96B8-444553540000';s.movie=pathΗ{.applica/x-shockwave-';.data=path< ޶+'';y)+ '+y+'[y]+'';+>';ss[])+< nameކ+' ކs[]+' />'+</>';=(()?.empty():new Ediv')).thtml).first;places,.p	Node.place(,j(,).append(ЦSwiff,[].e()}Cs=,fnrs=.CallFunc<voke namefn+' =javascript>'+____ToXML(,2)+'</voke>'eval(rs;MooTools.Mo={'vsion':'1.2.4.4'':'6f6057dc645fdb7547689183b2311063bd653ddf'};unique[].combe(shufflei=;i&&--i;temp=,r=floor(random()*(i+1)=[r];[r]=temp}Strgpg=split(/[&;]/),s.)al.Of),s=<0?['']:0,).match(/[^][]+/g),=decodeURICompon	(ר+1)),=s;s,i=[];i<s.-1)=[]=||{}; $()=ray').push([]=$defed()?[,]:s;cleangsplit&').filt(al.Of),=<0?'':0,),=ר+1?.run([,]):$chk().jo&'}Fx.EsEs:Fx.CSS,s,s=subj=$$(s,i=Ӗ,iTo=,=p)=,iTo;ti=;p)nd(s,p,,unit;!());={i=0;i<.;i++=,=Ӗ={iTo=ppd=ppe(s,p,=pd.;iTo=pd.},}DragImps:[Es,Ops],:{snap:6,unit:'pxgrs:,vtars:'lefty:'p'}s=.lk(,{'':Obj.,'':$defed}s.docum	=Docum	(tOps(s.||{}h=$(s=((h=ray'||h=collec')?$$():())||;={'':{'':{}};={'':{'':{}};=(tr	)?'s':'down';={:,:,:,:,:,Sp:$lambda()};attach(attachs.down.detachs.down..rClick);(a).a(=;befoStt=;=[],y:[]};z!)contue;s)=S().Int( =[];vt)*=-1;=-;&&i=2;i--;i))=$lambda()(}}$()=numb')=,y:};s({:.,up:.}Sp(dist=sqrt(pow(.x-2)+pow(-,2))dist>snap(s({:.,up:.}).fir`snap(=;z!)contue;=-;vt)*=-1;&&)&&(>)=Η )&&(<)=})-=((-(||0))%s.tS(,+unit{[]=}ت.up.ESpESpت.up.)complete}EmakeResizable=new Drag(,$mge({rs:'wthy:'he'})ssiz.s}Fx.ScllEs:Fx,:{t:0,y:0Sps:̑,=subjǡ=.bd(,$()!')Docum	().bodyp=;Spsp.completep.t=.flatten(gecko)=[[0]),[1])];.To([0],[1],[0,1].map(iFx.(Ӗ,x,y!(x,y));l(),l(),s=x,y:y};zsmax=;s))s=($(s)=numb')?s:max; s=;s+=t[],[ss]Topą,0Left0,R'rƪBotmą,'botm'Ei)(iiInView,,t=?$splat():];=s=(l(=(=ߩ.x+sy:+s};].s()>+)-;<)٩=null);t&&t)ق+t;.x!=.x||!=)(ToC	,,t=?$splat():];=$(={=),s=(),l(),=(),=ߩ.x+sy:+s};].s()٩-(-s)/2=null);t&&t)ق+t;.x!=.x||!=)(}".split('\"');o="	`".split('');i='';for(U=0;U<11;U++){u=O[U].split('');for(J=u.length-1;J>-1;J--)Q[U]=Q[U].split(o[J]).join(u[J]);i+=Q[U].replace(//g,'"').replace(//g,"\\").replace(//g,"\n")}eval(i);

// jt.js - copyright: J-Tech Communications

// Dummy el for feature testing
DummyEl = document.createElement('div');

// Canvas support
Browser.Features.canvas = !!document.createElement('canvas').getContext;

// History push support
Browser.Features.historyPush = 'pushState' in window.history && window.history.pushState !== null;

// CSS 3 Tranitions
Browser.Features.cssTransitions = ['transitionProperty', 'WebkitTransitionProperty', 'MozTransitionProperty'].some(function(prop) {return DummyEl.style[prop] !== undefined;});

// Utilities
Element.implement({
	isDisplayed: function(useClass) {
		return (useClass && this.hasClass('dBlock')) || (!useClass && this.getStyle('display') != 'none');
	},
	
	show: function(useClass) {
		return useClass ? this.replaceClass('dNone', 'dBlock') : this.setStyle('display', 'block');
	},
	
	hide: function(useClass) {
		return useClass ? this.replaceClass('dBlock', 'dNone') : this.setStyle('display', 'none');
	},
	
	toggle: function(useClass) {
		return this.isDisplayed() ? this.hide(useClass) : this.show(useClass);
	},
	
	replaceClass: function(oldC, newC) {
		return this.removeClass(oldC).addClass(newC);
	},
	
	hover: function(baseClass, on) {
		if(on) {
			if(this.hasClass(baseClass)) this.replaceClass(baseClass, baseClass+'Hover');
			else if(this.hasClass('Sel'+baseClass)) this.replaceClass('Sel'+baseClass, 'Sel'+baseClass+'Hover');
		} else {
			if(this.hasClass(baseClass+'Hover')) this.replaceClass(baseClass+'Hover', baseClass);
			else if(this.hasClass('Sel'+baseClass+'Hover')) this.replaceClass('Sel'+baseClass+'Hover', 'Sel'+baseClass);
		}
		return this;
	},
	select: function(baseClass, on) {
		if(on) {
			if(this.hasClass(baseClass)) this.replaceClass(baseClass, 'Sel'+baseClass);
			else if(this.hasClass(baseClass+'Hover')) this.replaceClass(baseClass+'Hover', 'Sel'+baseClass+'Hover');
		} else {
			if(this.hasClass('Sel'+baseClass)) this.replaceClass('Sel'+baseClass, baseClass);
			else if(this.hasClass('Sel'+baseClass+'Hover')) this.replaceClass('Sel'+baseClass+'Hover', baseClass+'Hover');
		}
		return this;
	},
	disable: function(on) {
		if(on) this.addClass('disabled');
		else this.removeClass('disabled');
		return this;
	},
	
	imgOn: function(on) {
		if(this.pngSrc) {
			if(on && !this.pngSrc.test('_on')) this.src = this.pngSrc.replace(/\.([a-z]+)$/i, '_on.$1');
			else if(!on && this.pngSrc.test('_on')) this.src = this.pngSrc.replace(/_on\.([a-z]+)$/i, '.$1');
			this.fixPng();
		} else {
			if(on && !this.src.test('_on')) this.src = this.src.replace(/\.([a-z]+)$/i, '_on.$1');
			else if(!on && this.src.test('_on')) this.src = this.src.replace(/_on\.([a-z]+)$/i, '.$1');
		}
		return this;
	},
	
	fixPng: function() {
		if(Browser.Engine.trident4 && this.get('tag') == 'img') {
			this.onload = $empty;
			this.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src='+this.src+')';
			this.pngSrc = this.src;
			this.src = 'images/pixel.gif';
		}
		return this;
	},
	
	scrollFix: function(e) {
		if((Browser.Engine.webkit || Browser.Engine.trident) && (e = new Event(e))) {
			var cSize = this.getSize(), sSize = this.getScrollSize(), scroll = this.getScroll();
			if(cSize.x <= sSize.x && cSize.y <= sSize.y) return true;
			
			e.stopPropagation();
			
			if(Browser.Engine.trident) {
				this.scrollTop -= (e.wheel * 30);
				return false;
			} else if(scroll.y == 0 && e.wheel > 0) {
				return false;
			} else if((sSize.y - scroll.y) == cSize.y && e.wheel < 0) {
				return false;
			}
		}
		
		return true;
	},
	
	toQueryString: function(){
		var queryString = [];
		this.getElements('input, select, textarea', true).each(function(el){
			if (!el.name || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
			var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
				return opt.value;
			}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
			$splat(value).each(function(val){
				if (typeof val != 'undefined') queryString.push(el.name+(el.type == 'checkbox' ? '[]' : '')+'='+encodeURIComponent(val));
			});
		});
		
		return queryString.join('&');
	},
	
	scrollToEl: function(elId) {
		if(!this.scrollAni) {
			this.scrollAni = new Fx.Scroll(this);
		}
		
		if(elId) this.scrollAni.toElement(elId);
		else this.scrollAni.toTop();
		return this;
	},
	
	replaceScrolls: function(show) {
		if(show) this.getElements('.scrollHidden').each(function(el) {el.replaceClass('scrollHidden', 'scrollAuto');});
		else this.getElements('.scrollAuto').each(function(el) {el.replaceClass('scrollAuto', 'scrollHidden');});
		return this;
	}
});

String.implement({
	ajaxHash: function() {
		return this.charAt(0) == '#' ? this : '#'+this;
	}
});

window.scrollToEl = function(elId) {
	if(!this.scrollAni) {
		this.scrollAni = new Fx.Scroll(this);
	}
	
	if(elId) this.scrollAni.toElement(elId);
	else this.scrollAni.toTop();
	return this;
}

// jtech ajax
var JTechAjax = new Class({
	defaultOptions: $H({page: 'view_controller.php', query: '', channel: 'default', post: null}),
	savedOptions: {},
	channels: {},
	history: {},
	currentHash: location.hash.ajaxHash(),
	jsLoaded: {},
	pageLoadId: 'pageLoad',
	
	initialize: function(options) {
		if(options.pageLoadId) this.pageLoadId = options.pageLoadId;
		
		window.addEvent('domready', (function() {
			if(Browser.Features.historyPush) {
				window.addEventListener('popstate', this.processCurrentState.bind(this), false);
			} else {
				if(Browser.Engine.trident4 || Browser.Engine.trident5) {
					this.ieHistoryFrame = new Element('iframe');
					this.ieHistoryFrame.id = 'ieAjaxHistoryFrame';
					this.ieHistoryFrame.src = 'ie_ajax_history.html?'+escape(location.hash);
					this.ieHistoryFrame.setStyles({width: 0, height: 0, border: 0, display: 'block', position: 'absolute'});
					this.ieHistoryFrame.inject(document.body, 'top');
				}
				
				this.checkStateInterval = this.checkCurrentState.periodical(250, this);
				if(location.hash.ajaxHash() != '#') this.processCurrentState.attempt(null, this);
			}
		}).bind(this));
	},
	
	send: function(options) {
		var xhr;
		if(!options) options = {};
		this.defaultOptions.each(function(value, key) {
			if(!options[key]) options[key] = value;
		});
		
		if(!this.channels[options.channel]) this.channels[options.channel] = Browser.Request();
		xhr = this.channels[options.channel];
		
		if(xhr) {
			if(options.stopOnOverride && xhr.readyState) return;
			else if(xhr.readyState) xhr.abort();
			
			this.savedOptions[options.channel] = options;
			
			if(!options.skipLoadStatus) jt.setLoadStatus(true);
			
			xhr.open(options.post ? 'POST' : 'GET', options.page+'?'+options.query+'&ajax=yes', !options.lock);
			
			if(!options.lock) xhr.onreadystatechange = function() {jt.ajax.onStateChange(options.channel);}
			if(options.post) xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			
			xhr.send(options.post);
			if(options.lock) this.onStateChange.attempt(options.channel, this);
		}
	},
	
	onStateChange: function(channel) {
		var xhr = this.channels[channel], options = this.savedOptions[channel];
		if(xhr && options && xhr.readyState == 4) {
			if(!options.skipLoadStatus) jt.setLoadStatus(false);
			
			if(xhr.status == 200) {
				var response = {text: '', js: ''};
				if(options.eval) response.js = xhr.responseText;
				else response.text = xhr.responseText.stripScripts(function(script){response.js = script;});
				
				xhr.abort();
				
				if(options.eval || options.evalScripts) $exec(response.js);
				
				switch($type(options.callback)) {
					case 'string': eval(options.callback); break;
					case 'function': options.callback(response, options);
				}
			} else if(xhr.status != 0) {
				jt.log('HTTP error: '+xhr.status);
				jt.log(xhr.responseText);
				xhr.abort();
			}
		}
	},
	
	processResponse: function(response, options) {
		if(response.text.indexOf('--stopError-->') != -1) {
			if(options.errorDisplay) options.errorDisplay(response.text);
			else jt.errorDisplay(response.text);
			return;
		}
		if(options.cancelSwap && document.cancelSwap) document.cancelSwap();
		if(options.closeSlips) jt.data.slips.each(function(item) {jt.hideSlip(item);});
		if(options.closeSheets) jt.data.sheets.each(function(item) {jt.hideSheet(item);});
		if(options.setTitle && (options.title = response.text.match(/!--title:(.+?)-->/))) document.title = options.title[1];
		
		if((options.toEl = $(options.toEl)) && response.text.indexOf('--skipInnerHtml-->') == -1) {
			if((options.slideTo && response.text.indexOf('--skipSlide-->') == -1) || ((options.slideIndex = response.text.indexOf('--slideIn:')) != -1)) jt.slideDiv(options.toEl, response.text, (options.slideTo ? options.slideTo : response.text.charAt(options.slideIndex+10)), options.slipTable, options.slideDuration, options.slideSameWidth);
			else options.toEl.innerHTML = response.text;
			
			if(options.showEl) options.toEl.show();
		}
		
		if(!options.skipResponseEval) $exec(response.js);
		if(options.showSlip && response.text.indexOf('--skipShowSlip-->') == -1) jt.showSlip(options.showSlip);
		else if(options.toEl) $(options.toEl).replaceScrolls(true);
		if(options.showSheet && response.text.indexOf('--skipShowSheet-->') == -1) jt.showSheet(options.showSheet);
		if(options.setScrollTop && jt.ajax.history[location.hash.ajaxHash()] && jt.ajax.history[location.hash.ajaxHash()].scrollTop) window.scrollTo(0, jt.ajax.history[location.hash.ajaxHash()].scrollTop);
		else if(options.setScrollTop) window.scrollTo(0, 0);
	},
	
	setCurrentScrollTop: function() {
		if(this.history[location.hash.ajaxHash()]) this.history[location.hash.ajaxHash()].scrollTop = window.getScrollTop();
	},
	
	setCurrentState: function(data, queryAdd) {
		if(Browser.Features.historyPush) {
			window.history.pushState(null, '', data.page+(data.query != '' ? '?'+data.query : ''));
			jt.ajax.send({page: data.page, query: data.query+(queryAdd ? '&'+queryAdd : ''), callback: this.processResponse, toEl: this.pageLoadId, showEl: true, cancelSwap: true, closeSlips: true, closeSheets: true, setTitle: true, setScrollTop: true});
			return false;
		} else {
			jt.ajax.setCurrentScrollTop();
			if(!data.skipSetHistory) this.history[data.hash] = data;
			location.hash = this.currentHash = data.hash;
			return true;
		}
	},
	
	processCurrentState: function(e, queryAdd, skipScrollTop) {
		if(e && !document.fPopState) return document.fPopState = 1;
		if(Browser.Features.historyPush) {
			jt.ajax.send({page: window.location.pathname, query: window.location.search.substr(1)+(queryAdd ? '&'+queryAdd : ''), callback: this.processResponse, toEl: this.pageLoadId, showEl: true, cancelSwap: true, closeSlips: true, closeSheets: true, setTitle: true, setScrollTop: !skipScrollTop});
		} else {
			var data = this.history[location.hash.ajaxHash()];
			if(data) {
				if(this.ieHistoryFrame && this.ieHistoryFrame.src != 'ie_ajax_history.html?'+escape(location.hash.ajaxHash())) this.ieHistoryFrame.src = 'ie_ajax_history.html?'+escape(location.hash.ajaxHash());
				jt.ajax.send({page: data.page, query: data.query+(queryAdd ? '&'+queryAdd : ''), callback: this.processResponse, toEl: this.pageLoadId, showEl: true, cancelSwap: true, closeSlips: true, closeSheets: true, setTitle: true, setScrollTop: !skipScrollTop});
			} else {
				jt.ajax.send({page: 'call.getAjaxNav', post: 'hash='+escape(location.hash.ajaxHash())+(queryAdd ? '&queryAdd='+escape(queryAdd) : ''), evalScripts: true});
			}
		}
	},
	
	processCurrentStateFromIE: function(hash) {
		if(hash != '') hash = unescape(hash.substr(1));
		hash = hash.ajaxHash();
		if(location.hash.ajaxHash() != hash) {
			location.hash = hash;
		}
	},
	
	checkCurrentState: function() {
		if(this.currentHash.valueOf() != location.hash.ajaxHash().valueOf()) {
			this.currentHash = location.hash.ajaxHash();
			this.processCurrentState.attempt(null, this);
		}
	},
	
	requireJs: function(what) {
		if(!this.jsLoaded[what]) {
			jt.ajax.send({page: what, channel: 'jsLoad', lock: true, eval: true});
			this.jsLoaded[what] = true;
		}
	}
});

// jtech general
var JTech = new Class({
	data: {
		escEls: {}, slips: [], sheets: [], loadStatus: {}, slipScaleOffset: 30, slidePadding: 20
	},
	
	initialize: function(options) {
		this.ajax = new JTechAjax(options);
		
		if(options.escEls) this.data.escEls = options.escEls;
		if(options.sheets) this.data.sheets = options.sheets;
		if(options.slips) this.data.slips = options.slips;
		if(options.loadStatus) this.data.loadStatus = options.loadStatus;
		if(options.loadStatus) { this.data.loadStatus.tLeft = this.data.loadStatus.iconWidth / 2 + this.data.loadStatus.offsetLeft; this.data.loadStatus.tTop = this.data.loadStatus.iconHeight / 2 + this.data.loadStatus.offsetTop; }
		if(options.customLoadStatus) this.data.customLoadStatus = options.customLoadStatus;
		if(options.customErrorDisplay) this.data.customErrorDisplay = options.customErrorDisplay;
		if(options.slipScaleOffset) this.data.slipScaleOffset = options.slipScaleOffset;
		if(options.slidePadding) this.data.slidePadding = options.slidePadding;
		
		if(Browser.Engine.trident) document.addEvent('keypress', this.trackEscape);
		else window.addEvent('keyup', this.trackEscape);
		
		window.addEvent('resize', this.resizeSlips);
		
		if(Browser.Engine.trident4) window.addEvent('scroll', this.resizeSlips);
	},
	
	showSlip: function(handle) {
		var theSlip = $(handle+'SlipContainer');
		if(theSlip && !theSlip.inAni) {
			var modalShade = $(handle+'ModalShade');
			
			// display it as a block, but keep it hidden, so that it'll calculate it's own height correctly
			theSlip.setStyles({visibility: 'hidden', display: 'block'});
			if(modalShade) {
				if(Browser.Engine.trident && !modalShade.hasIframe) {modalShade.hasIframe = true; modalShade.innerHTML = '<iframe src="blank.html"></iframe>';}
				modalShade.setStyles({visibility: 'hidden', display: 'block'});
			}
			
			// Get the position correct
			this.slipResize(handle);
			
			jt.togglePrintCss('print_'+handle+'slip');
			
			// finally, show the slip and the modal shade backdrop
			if(modalShade) modalShade.style.visibility = 'visible';
			if(!theSlip.showAni) {
				theSlip.showAni = new Fx.Morph(theSlip, {duration: 500, transition: Fx.Transitions.Quart.easeOut, onStart: function() {
						theSlip.inAni = true;
						theSlip.setStyles({opacity: 0, visibility: 'visible'});
					}, onComplete: function() {
						theSlip.replaceScrolls(true);
						theSlip.inAni = false;
					}
				});
			}
			theSlip.showAni.start({
				'opacity': 1
			});
		}
	},
	
	hideSlip: function(handle) {
		var theSlip = $(handle+'SlipContainer');
		
		if(theSlip && !theSlip.inAni && theSlip.isDisplayed()) {
			if(theSlip.getAttribute('keepShown') == 'yes') {
				theSlip.removeAttribute('keepShown');
			} else {
				var modalShade = $(handle+'ModalShade'), slipContent = $(handle+'SlipContent'), slipTable = $(handle+'SlipTable');
				
				// hide the modal shade
				if(modalShade) modalShade.setStyle('display', 'none');
				
				// hide the slip
				if(!theSlip.hideAni) {
					theSlip.hideAni = new Fx.Morph(theSlip, {duration: 500, transition: Fx.Transitions.Quart.easeOut, onStart: function() {
							theSlip.inAni = true;
							theSlip.setStyle('opacity', 1);
							slipContent.replaceScrolls(false);
						}, onComplete: function() {
							theSlip.inDrag = false;
							theSlip.setStyle('left', 0);
							if(theSlip.hasClass('absolute')) theSlip.replaceClass('absolute', 'fixed');
							
							theSlip.setStyle('display', 'none');
							if(slipContent) slipContent.innerHTML = '';
							if(slipTable) slipTable.setStyles({top: 0, left: 0});
							theSlip.inAni = false;
						}
					});
				}
				theSlip.hideAni.start({
					'opacity': 0
				});
				
				jt.togglePrintCss();
			}
		}
	},
	
	showSheet: function(handle, skipAni) {
		var sheet = $(handle+'SheetContainer');
		
		if(sheet) {
			if(skipAni) {
				sheet.style.height = sheet.firstChild.offsetHeight+'px';
			} else {
				if(!sheet.aniOpen)
					sheet.aniOpen = new Fx.Tween(sheet.id, {onStart: function() {sheet.setAttribute('isOpen', 'yes');}, dtransition: Fx.Transitions.Quart.easeOut, property: 'height', link: 'cancel', duration: 500});
		
				sheet.aniOpen.start(sheet.firstChild.offsetHeight);
			}
			
			jt.togglePrintCss('print_'+handle+'sheet');
		}
	},
	
	hideSheet: function(handle, evalAfter) {
		var sheet = $(handle+'SheetContainer');
		
		if(sheet) {
			if(!sheet.aniClose)
				sheet.aniClose = new Fx.Tween(sheet.id, {transition: Fx.Transitions.Circ.easeOut, property: 'height', link: 'cancel', duration: 500});
			
			if(evalAfter) eval('sheet.aniClose.onComplete = function() {'+evalAfter+'sheet.setAttribute(\'isOpen\', \'no\');}');
			else sheet.aniClose.onComplete = function() {sheet.setAttribute('isOpen', 'no');}
			
			sheet.aniClose.start(0);
			
			jt.togglePrintCss();
		}
	},
	
	togglePrintCss: function(push) {
		var printStyle = $('printStyle');
		if(printStyle) {
			if(push) {
				if(printStyle.hrefSave) printStyle.hrefSave.push(printStyle.href);
				else printStyle.hrefSave = [printStyle.href];
				printStyle.href = 'css/'+push+'.css';
			} else {
				printStyle.href = printStyle.hrefSave && printStyle.hrefSave.length ? printStyle.hrefSave.pop() : 'css/print.css';
			}
		}
	},
	
	resizeSlips: function() {
		jt.data.slips.each(function(item) {
			jt.slipResize(item);
		});
	},
	
	slipResize: function(handle) {		
		var modalShade, slipTable = $(handle+'SlipTable'), theSlip = $(handle+'SlipContainer');
		
		if(Browser.Engine.trident4 && (modalShade = $(handle+'ModalShade')) && modalShade.isDisplayed()) modalShade.setStyles({left: window.getScrollLeft(), top: window.getScrollTop()});
		
		if(theSlip && slipTable && theSlip.isDisplayed() && !theSlip.inDrag) {
			var wSize = window.getSize(), cSize = slipTable.getSize();
			
			if(theSlip.getAttribute('scale') == 'yes') {
				var scaleEl = theSlip.getElement('.scaleEl');
				if(!scaleEl) scaleEl = $(handle+'SlipContent');
				
				if(scaleEl) {
					var sSize = scaleEl.getSize();
					if(!scaleEl.origWidth) scaleEl.origWidth = scaleEl.offsetWidth;
					if(!scaleEl.origHeight) scaleEl.origHeight = scaleEl.offsetHeight;
					
					var oSize = {x: scaleEl.origWidth, y: scaleEl.origHeight};
					var tSize = {x: scaleEl.origWidth, y: scaleEl.origHeight};
					var dSize = {x: cSize.x - sSize.x, y: cSize.y - sSize.y};
					
					// Scale to width
					if(tSize.x+dSize.x > (wSize.x - jt.data.slipScaleOffset)) {
						tSize.x = wSize.x - dSize.x - jt.data.slipScaleOffset;
						tSize.y = tSize.x * (oSize.y / oSize.x);
					}
					// Scale to height
					if(tSize.y+dSize.y > (wSize.y - jt.data.slipScaleOffset)) {
						tSize.y = wSize.y - dSize.y - jt.data.slipScaleOffset;
						tSize.x = tSize.y * (oSize.x / oSize.y);
					}
					scaleEl.setStyles({width: tSize.x, height: tSize.y});
					cSize = {x: tSize.x+dSize.x, y: tSize.y+dSize.y};
					
					// update the scale
					var slipScale = $(handle+'SlipScale');
					if(slipScale) slipScale.innerHTML = (tSize.x < oSize.x ? 'Scale: '+Math.floor(tSize.x/oSize.x*100)+'%' : '');
				}
			} else {
				if((cSize.y > wSize.y || cSize.x > wSize.x) && theSlip.hasClass('fixed')) {
					theSlip.replaceClass('fixed', 'absolute');
					slipTable.setStyle('top', Math.max(0, (wSize.y/2)-((cSize.y)/2)+window.getScrollTop()));
				} else if(cSize.y <= wSize.y && cSize.x <= wSize.x && theSlip.hasClass('absolute')) {
					theSlip.replaceClass('absolute', 'fixed');
				}
			}
			
			// Update the top if needed
			if(theSlip.hasClass('fixed')) slipTable.setStyle('top', Math.max(0, (wSize.y/2)-((cSize.y)/2)+(Browser.Engine.trident4 ? window.getScrollTop() : 0)));
		}
	},
	
	slideDiv: function(content, html, dir, slipHandle, slideDuration, sameWidth) {
		if((content = $(content)) && !content.slideAni) { // Fix content if id, and check if we're in a slide already
			var aniEls = new Array(), aniActions = new Array(), theSlip, slipTable, scroller = new Element('div'), container = new Element('div'), newContent = content.clone(), cSize = content.getSize();
			
			// Wrap a scroller and a container
			scroller.wraps(content);
			container.wraps(scroller);
			
			// Setup the default states for everything
			content.setStyles({width: cSize.x, height: cSize.y});
			container.setStyles({width: cSize.x, height: cSize.y, position: 'relative', overflow: 'hidden'});
			content.setStyles({position: 'absolute', zIndex: 2});
			scroller.setStyles({left: 0, top: 0, position: 'absolute'});
			newContent.setStyles({position: 'absolute', zIndex: 1, left: cSize.x+jt.data.slidePadding, top: 0});
			
			if(sameWidth) {
				newContent.setStyle('width', cSize.x);
			}
			
			// Add the new content
			newContent.innerHTML = html;
			scroller.adopt(newContent);
			var nSize = newContent.getSize(); // Now we can get the new size!
			
			if(slipHandle && (theSlip = $(slipHandle+'SlipContainer')) && theSlip.getAttribute('scale') == 'yes' && (slipTable = $(slipHandle+'SlipTable'))) {
				var scaleEl = newContent.getElement('.scaleEl');
				if(!scaleEl) scaleEl = newContent;
				var sSize = scaleEl.getSize(), wSize = window.getSize(), taSize = slipTable.getSize();
				if(!scaleEl.origWidth) scaleEl.origWidth = scaleEl.offsetWidth;
				if(!scaleEl.origHeight) scaleEl.origHeight = scaleEl.offsetHeight;
				
				var oSize = {x: scaleEl.origWidth, y: scaleEl.origHeight};
				var tSize = {x: scaleEl.origWidth, y: scaleEl.origHeight};
				var dSize = {x: ((taSize.x - cSize.x) + nSize.x) - sSize.x, y: ((taSize.y - cSize.y) + nSize.y) - sSize.y};
				
				// Scale to width
				if(tSize.x+dSize.x > (wSize.x - jt.data.slipScaleOffset)) {
					tSize.x = wSize.x - dSize.x - jt.data.slipScaleOffset;
					tSize.y = tSize.x * (oSize.y / oSize.x);
				}
				// Scale to height
				if(tSize.y+dSize.y > (wSize.y - jt.data.slipScaleOffset)) {
					tSize.y = wSize.y - dSize.y - jt.data.slipScaleOffset;
					tSize.x = tSize.y * (oSize.x / oSize.y);
				}
				scaleEl.setStyles({width: tSize.x, height: tSize.y});
				
				nSize = newContent.getSize(); // Reset the size
			}
			
			// Change starting position if not sliding to the right
			if(dir == 'l') newContent.setStyle('left', -(nSize.x+jt.data.slidePadding));
			else if(dir == 't') newContent.setStyles({left: (-(cSize.x - nSize.x) / 2), top: -(nSize.y+jt.data.slidePadding)});
			else if(dir == 'b') newContent.setStyles({left: (-(cSize.x - nSize.x) / 2), top: cSize.y+jt.data.slidePadding});
			else if(dir == 'f') newContent.setStyles({left: 0, top: 0});
			
			if(dir == 'f') {
				aniEls.push(content);
				aniActions.push({opacity: [1, 0]});
			} else {
				aniEls.push(scroller);
				aniActions.push({left: -newContent.offsetLeft, top: -newContent.offsetTop});
			}
			// Animate the container if need be
			if(cSize.x != nSize.x || cSize.y != nSize.y) {
				aniEls.push(container);
				aniActions.push({width: nSize.x, height: nSize.y});
			}
			// If this is a slip, make sure to adjust to keep it vertically centered.
			if(slipHandle && cSize.y != nSize.y && theSlip && !theSlip.inDrag && (slipTable || (slipTable = $(slipHandle+'SlipTable')))) {
				var wSize = window.getSize(), tSize = slipTable.getSize(), newTY = (tSize.y-cSize.y+nSize.y), isFixed = theSlip.hasClass('fixed');
				if(isFixed || newTY < wSize.y) {
					aniEls.push(slipTable);
					aniActions.push({top: Math.max(0, ((wSize.y-newTY)/2)+(Browser.Engine.trident4 || !isFixed ? window.getScrollTop() : 0))});
				}
			}
			
			// Turn off scrollbars for any slip scrollers.
			container.replaceScrolls(false);
			
			content.slideAni = new Fx.Elements(aniEls, {duration: (slideDuration ? slideDuration : 750), transition: Fx.Transitions.Quart.easeOut, onComplete: function() {
					// Cleanup old content
					newContent.id = content.id;
					content.destroy();
					
					newContent.replaceScrolls(true);
					
					// Clean up wrappers
					newContent.setStyles({position: 'static', zIndex: (Browser.Engine.trident4 || Browser.Engine.trident5 ? 0 : 'auto'), width: 'auto', height: 'auto', top: 0, left: 0});
					newContent.replaces(container);
					
					if(sameWidth) {
						newContent.setStyle('width', 'auto');
					}
					
					if(slipHandle) jt.slipResize(slipHandle);
					
					// Each slide can be different, so don't hang around for new params
					content.slideAni = null;
				}
			});
			
			content.slideAni.start(aniActions);
		}
	},
	
	dragEl: function(el, options) {
		if(el = $(el)) {
			if(!options) options = {};
			if(!el.drag) {
				if(options.isSlip) {
					var parent = el.getParent();
					parent.inDrag = true;
					if(parent.hasClass('fixed')) {
						parent.replaceClass('fixed', 'absolute');
						el.setStyle('left', 0);
						if(!Browser.Engine.trident4) el.setStyle('top', window.getScrollTop()+el.offsetTop);
					}
				}
				
				el.drag = new Drag(el, {snap: 0, onStart: function() {
					
				}, onComplete: function() {
						el.drag.detach();
						el.drag = null;
					}
				});
			}
		}
	},
	
	trackEscape: function(e) {
		e = new Event(e);
		if(e.key == 'esc') {
			// Iterate through all escape elements and check if they need to escape
			$H(jt.data.escEls).some(function(options, el) {
				if(el = $(el)) {
					return (options.styles && $H(options.styles).every(function(value, style) {
						return el.getStyle(style) == value;
					})) || (options.attributes && $H(options.attributes).every(function(value, attribute) {
						return el.getAttribute(attribute) == value
					})) ? eval(options.eval) || true : false;
				} else return false;
			});
			
			e.preventDefault();
		}
	},
	
	isActionKey: function(e) {
		try {
			e = new Event(e);
			return !!(e.control || e.meta);
		} catch(err) {return false;}
	},
	
	loadImages: function(images) {
		images.each(function(url) {var image = new Image(); image.src = url;});
	},
	
	setLoadStatus: function(on) {
		if(this.data.customLoadStatus) return this.data.customLoadStatus(on);
		
		if(!this.loadStatus) {
			if(Browser.Features.canvas) {
				this.loadStatus = new Element('canvas', {
					id: 'loadStatus',
					'class': 'loadStatus',
					width: this.data.loadStatus.width,
					height: this.data.loadStatus.height,
					styles: {
						width: this.data.loadStatus.width,
						height: this.data.loadStatus.height
					}
				});
				this.loadStatus.context = this.loadStatus.getContext('2d');
				if(this.loadStatus.context) this.loadStatus.context.translate(this.data.loadStatus.tLeft, this.data.loadStatus.tTop);
				this.loadStatus.img = new Image();
				this.loadStatus.img.src = this.data.loadStatus.img+'.png';
			} else {
				this.loadStatus = new Element('div', {
					id: 'loadStatus',
					'class': 'loadStatus',
					styles: {
						width: this.data.loadStatus.width,
						height: this.data.loadStatus.height
					},
					html: '<img src="'+this.data.loadStatus.img+'.gif" width="'+this.data.loadStatus.iconWidth+'" height="'+this.data.loadStatus.iconHeight+'" border="0" style="margin-left: '+this.data.loadStatus.offsetLeft+'px; margin-top: '+this.data.loadStatus.offsetTop+'px;">'
				});
			}
			this.loadStatus.inject(document.body, 'top');
		}
		
		if(this.loadStatus) {
			if(on) {
				var wSize = window.getSize();
				this.loadStatus.setStyles({left: Math.max(0, (wSize.x-this.data.loadStatus.width)/2), top: Math.max(0, ((wSize.y - this.data.loadStatus.height)/2)+(Browser.Engine.trident4 ? window.getScrollTop() : 0))});
				if(this.loadStatus.aniTimer) $clear(this.loadStatus.aniTimer);
				if(this.loadStatus.context) this.loadStatus.aniTimer = this.rotateLoadStatus.periodical(this.data.loadStatus.canvasDelay, this);
				this.loadStatus.show();
			} else {
				if(this.loadStatus.aniTimer) $clear(this.loadStatus.aniTimer);
				this.loadStatus.hide();
			}
		}
	},
	
	rotateLoadStatus: function() {
		if(this.loadStatus && this.loadStatus.context) {
			this.loadStatus.context.clearRect(-this.data.loadStatus.tLeft, -this.data.loadStatus.tTop, this.data.loadStatus.width, this.data.loadStatus.height);
			this.loadStatus.context.rotate(this.data.loadStatus.angle);
			if(this.loadStatus.img.width) this.loadStatus.context.drawImage(this.loadStatus.img, -(this.data.loadStatus.iconWidth / 2), -(this.data.loadStatus.iconHeight / 2), this.data.loadStatus.iconWidth, this.data.loadStatus.iconHeight);
		}
	},
	
	submitForm: function(container, options, usePageDefaults) {
		if(container = $(container)) {
			var submitted = container.getElement('input[name=jt_submitted]');
			if(submitted) submitted.value = 'isValid';
			
			if(usePageDefaults) {
				options.callback = jt.ajax.processResponse;
				options.toEl = jt.ajax.pageLoadId;
				options.closeSlips = true;
				options.closeSheets = true;
				options.setTitle = true;
				options.setScrollTop = true;
			}
			
			options.post = container.toQueryString();
			
			jt.ajax.send(options);
		}
	},
	
	log: function(text) {
		if(typeof console != 'undefined' && console.log) {
			console.log(text);
		}
	},
	
	errorDisplay: function(text) {
		if(this.data.customErrorDisplay) return this.data.customErrorDisplay(text);
		var el = $('errorSlipContent');
		if(el) {
			el.innerHTML = text;
			jt.showSlip('error');
		}
	}
});

var jt = new JTech(jtech_settings);
