/*
---
description: An AJAX-esque hash navigation class made in JavaScript using MooTools 1.3

license: MIT-style license

authors:
- Xunnamius

requires:
- core/1.3: [Class.Extras,Element.Event,Fx,Cookie,JSON]
- more/1.3.0.1: [String.QueryString,Fx.Scroll]

provides: [HashNav]
...
*/

/* documentation and updates @ http://github.com/Xunnamius/HashNav */
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}('(8(){A o=M,y=[],O={},I=0.2H,u={1m:p,1A:p,1b:\'\',F:[\'\',{H:\'\',1p:\'\',U:M}]},1d={2k:8(e,f){e=e.2x();A g=e.2i(/[&;]/),P={};3(!g.D||!e.D)7 P;g.K(8(c){A d=c.2z(\'=\'),W=d<0?r:c.V(d+1),1q=c.V(0,d),1x=d<0?[c]:1q.30(/([^\\]\\[]+|(\\B)(?=\\]))/g),1s=P;3(f&&W.D===0)W=p;3(z(W)!=\'1u\')W=1o(W);1x.K(8(a,i){a=1o(a);A b=1s[a];3(i<1x.D-1)1s=1s[a]=b||{};q 3(z(b)==\'P\')b.1n(W);q 1s[a]=b!=M?[b,W]:W})});7 P},1v:8(d){A e=\'\';t.K(d,8(a,b){3(a===r){3(e)e=e+\'&\'+b;q e+=b;G d[b]}q 3(a===p){A c=b+\'=\';3(e)e=e+\'&\'+c;q e+=c;G d[b]}});d=t.2o(d);7 e+(d&&e?\'&\'+d:d)},2h:8(a,b,d){3(!a||!b||t.J(a)!=t.J(b))7 p;7 t.1e(a,8(a,c){7 z(a)==\'P\'?1d.2h(a,b[c],d):(d?b[c]===a:b[c]==a)},5)}};5.16=1r 35({36:[37,2n],9:{2g:1S,10:\'!/\',1J:\'2Z\',1j:r,2e:r,1P:p,2d:p,13:[\'39\',\'3e\'],14:{C:\'/\',2p:p,2t:2v,2w:p,1G:1G,1I:p},L:[2L,6],2M:p,2N:r},2P:8(f){3(o)7 o;q{5.2c(f);3(5.9.1j){5.y={T:8(b){3(b==\'19\')7 2b.1L(y).K(8(a,i){3(1Q(a)+1)5[i]=5[a]});b=1Q(b),N=y.D+b;3(b>=0)N=y[b];q 3(N<y.D&&N>=0)N=y[N];q N=M;3(N&&z(N)==\'P\')7 N;3(1Q(N)+1)7 y[N];q 7 p},38:8(a){3(a>=y.D)7 o.y.29();q 3(a>0){y.3a(0,a);7 r}q 7 p},29:8(){y=[];7 r}}}3(5.9.2e){3b.3h({3f:8(a,b,c,d){A e=1r 16(),Z=5.1H(\'1T\')||5.1H(\'2q\')||5.1H(\'Z\')||5.T(\'2r\');3(d===r)d=5;5.2s(e.9.13[0],Z);e.26(Z,a,b,c,5,d);e=M;7 5},2u:8(){A a=1r 16(),25=a.23(5.21(a.9.13[0]));a=M;7 25},2y:8(){A a=1r 16(),1q=a.9.13[0],Z=5.21(1q);3(Z)a.1M(Z);5.2A(1q);a=M;7 5},})}3(!2B.2C&&\'20\'1O Q){u.1A=r;Q.20=5.1f.15(5);5.1f()}q 5.1Z();o=5}},1Z:8(){3(u.1A)7 p;q{5.1f();u[\'1m\']=2V(5.1f.15(5),5.9.2g);7 r}},2W:8(){3(u[\'1m\']){2X(u[\'1m\']);u[\'1m\']=p;7 r}7 p},1f:8(){A b,R=Q.1C.1D;3(u[\'F\'][0]!=R){u[\'F\'][0]=(R.D?R:\'#\');3(5.1Y()){b=R.2i(\'&&\');u[\'F\'][1][\'H\']=b.32().V(5.9.10.D+1).33()||u.1b||5.9.1J;u.1b=u[\'F\'][1][\'H\'];u[\'F\'][1][\'1p\']=b.34(\'&&\');3(5.9.1P)u[\'F\'][1][\'U\']=u[\'F\'][1][\'1p\'].1P();q u[\'F\'][1][\'U\']=1d.2k(u[\'F\'][1][\'1p\'],5.9.2d);R=5.1k().1L();y.1e(8(a,i){3(a[0]==R[0]){R=i;7 p}7 r}.15(5));3(5.9.1j)y.1n(R)}q{u[\'F\'][1][\'H\']=\'\';u.1b=\'\';u[\'F\'][1][\'1p\']=\'\';u[\'F\'][1][\'U\']=M}5.1g()}},26:8(h,i,j,k,l,m){3(!i||z(i.H)==\'12\'||!i.E)7 p;q{A n=8(){G i.x;G i.E;i.E={};i.E[\'*\']=\'~\'};3(i.x){3(z(i.x.17)==\'1U\'&&i.x.17<=0){i.E={};G i.x.17;3(i.x.Y)G i.x.Y;i.x.11=r}3(i.x.Y<=0||i.x.17<i.x.Y)G i.x.Y;3(i.x.11&&(i.x.Y||i.x.17))G i.x.11}3(t.1e(i.E,8(a){7 a===\'~\'}))n();q t.K(i.E,8(a,b){3(b==\'*\'){3(z(a)==\'1u\'){A c=i.E[\'*\'];G i.E[\'*\'];3(!t.1z(i.E,c))i.E[\'*\']=c}q 3(a===\'~\'&&i.x)n();q 3(a===\'\'&&t.J(i.E)>1)G i.E[\'*\'];q 3((i.x&&(z(i.x.Y)!=\'12\'||z(i.x.17)!=\'12\'))||(z(a)!=\'1u\'&&a!==\'~\'&&a!==\'\'&&i.x&&i.x.11))G i.x.11}})}3(!O[h])O[h]=[];O[h].1n([8(e){e=e[1];3(!e)7;A f=5.y.T(-2),f=5.9.1j?(f?f:(5.y.T(-1)?-2:-1)):-1,C=e.U,1a=p,1B=p,1w=p;3(i.x){3(i.x.1B)1B=r;3(i.x.1w)1w=r;3(i.x.17<t.J(C)||i.x.Y>t.J(C))7}3(i.H===p||(i.H===r&&(f==-2||(f!=-1&&f[1].H&&e.H&&e.H!=f[1].H)))||(i.H===\'\'&&e.H==5.9.1J)||i.H==e.H){3(i.H===p)1a=r;f=t.1e(i.E,8(b,c){3(1a)7 r;q 3(c===\'*\'){3(b===\'~\'&&(!C||t.J(C)==0))7 1a=r;q 3(t.J(C)){3(b===\'\'&&((i.x&&i.x.11&&t.J(C)==1)||(!i.x&&t.J(C))))7 1a=r;q{A d=i.E[\'*\'];G i.E[\'*\'];3((b===r&&t.1z(C,r))||(b===p&&t.1z(C,(5.9.27?p:\'\')))||(b!==\'\'&&(t.1V(C).1e(8(a){7(1w?a===b:a.1h()==b.1h())})))){i.E[\'*\']=d;7 r}i.E[\'*\']=d}}7 p}q{3(b===\'~\'&&(!C||z(C[c])==\'12\'))7 r;q 3(t.J(C)){3((b===r&&C[c]===r)||(b===p&&(C[c]===\'\'||(5.9.27&&C[c]===p)))||(b===\'\'&&z(C[c])!=\'12\')||(C[c]&&(1B?b===C:b.1h()==C[c].1h())))7 r}7 p}}.15(5));3(f){3(!1a&&i.x){3(i.x.11){A g=t.1L(i.E);g=t.1W(g,8(a,b){3(a==\'~\')7 p;7 r});3(t.J(g)!==t.J(C))7}}3(m)16.1X(m);j.2D(l,[5.1k()].2E(2b.2F(k)))}}}.15(5),i,k,l,m]);Q.2G(\'1E\',O[h].2I()[0]);7 r},23:8(a){7 z(O[a])!=\'12\'},1M:8(b){3(z(O[b])!=\'12\'){O[b].K(8(a){Q.2J(\'1E\',a[0])});G O[b];7 r}7 p},2K:8(){A b=w;3(w[0]==\'19\')b=t.1x(O);t.K(b,8(a){5.1M(a)},5)},1t:8(a){A b=Q.1C.1D,1g=p;3(z(w[w.D-1])==\'1u\'){1g=w[--w.D];G w[w.D]}3(z(w[0])==\'1c\'&&w[1]&&!w[2])b=5.9.10+w[0]+\'&&\'+(z(w[1])==\'P\'?1d.1v(w[1]):w[1]);q 3(z(w[0])==\'1c\'&&z(w[1])==\'1c\'&&w[2])b=w[0]+w[1]+\'&&\'+(z(w[2])==\'P\'?1d.1v(w[2]):w[2]);q 3(z(a)==\'1U\'&&5.9.1j){A c=(5.y.T(a)||[M])[0];3(c)b=c;q 7 p}q 3(z(a)==\'P\')b=5.9.10+u.1b+\'&&\'+1d.1v(a);q 3(z(a)==\'1c\'){3(a.V(0,1)==\'#\')b=a;q 3(a.V(0,1)==\'&\'&&a.V(1,1)!=\'&\')b+=(5.22(\'19\')?a:(b.1z(\'&&\')?a.V(1):\'&\'+a));q b=5.9.10+a}q 7 p;Q.1C.1D=b;3(1g)5.1g();q 5.1f();7 r},2O:8(){7 u.1b},S:8(){7 u.F[1][\'U\']=u.F[1][\'U\']||{}},1k:8(){7 u.F},T:8(){3(w[0]==\'19\')7 5.S();A b={},T=5.S();t.K(w,8(a){3(a 1O T)b[a]=T[a]},5);7 t.J(b)?(w.D==1?b[w[0]]:b):(w.D==1?M:{})},2Q:8(){A a={};3(z(w[0])==\'1c\'&&w.D>=2)a[w[0]]=w[1];q a=w[0];t.2R(5.S(),a);5.1t(5.S())},2S:8(){3(w[0]==\'19\')t.K(5.S(),8(a,b){G u.F[1].U[b]},5);q t.K(w,8(a){G u.F[1].U[a]},5);5.1t(5.S())},22:8(){3(w[0]==\'19\')7!!t.J(5.S());A b=t.1W(w,8(a){7 a 1O 5.S()}.15(5));7 t.J(w)==1?(t.J(b)==1?r:p):t.1V(b)},2T:8(){7 u.1A},1Y:8(a){a=a||5.1k()[0];7 a.V(1,5.9.10.D)==5.9.10},2U:8(d,e){d=d||5.9.13[1];3(5.9.L[0]<1)5.9.L[0]=1;q 3(5.9.L[0]>24)5.9.L[0]=24;3(5.9.L[1]<4)5.9.L[1]=4;q 3(5.9.L[1]>1S)5.9.L[1]=1S;A f={\'9\':[],\'u\':[],\'y\':[]},1y=4,1l=8(a,b,c){3(!c)a=28(1i.1I(a));3(a.D>5.9.L[0]){1y++;3(1y<=5.9.L[1]){f[b].1n(a.31(0,5.9.L[0]));a=a.V(5.9.L[0]);7 1l(a,b,r)}7 p}f[b].1n(a);7 r}.15(5);5.2a(d);1l(5.9,\'9\');1l(u,\'u\');1l(y,\'y\');3(1y>5.9.L[1])7 p;3(!e){X.1K(d+\'I\',28(1i.1I({\'v\':I,\'s\':{\'9\':f.9.D,\'u\':f.u.D,\'y\':f.y.D}})),5.9.14);t.K(f,8(b,c){3(b.D>1)b.K(8(a,i){X.1K(d+c+i,a,5.9.14)},5);q X.1K(d+c,b[0],5.9.14)},5);7 r}q 7 f},2f:8(c,d,e,f,g){e=e||5.9.13[1];A h={},18=M;3(g)h=g;q{3(f!==r)f=p;3(c!==p)c=r;3(d!==p)d=r;h[\'I\']=1i.1F(1o(X.1N(e+\'I\')),f);3(!h[\'I\']||I.1h()!=h[\'I\'][\'v\'].1h())7 p;18=h[\'I\'][\'s\'];t.K(18,8(a,b){3(a>1){2j(a--)h[b]=X.1N(e+b+a)+(h[b]?h[b]:\'\');h[b]=1i.1F(1o(h[b]),f)}q h[b]=1i.1F(1o(X.1N(e+b)),f)})}3(c){3(t.1e(h,8(a){7!!a})&&h.I&&h.9&&h.u&&h.y){I=h[\'I\'].v;5.2c(h[\'9\']);u=h[\'u\'];y=h[\'y\'];7 5.1t(-1,d);7 r}7 p}7 h},2a:8(c){c=c||5.9.13[1];A d=5.2f(p,p,c,r,M),18;3(d&&d.I&&d.I.s){18=d.I.s;t.K(18,8(a,b){3(a>1)2j(a--)X.1R(c+b+18[0],d.9.14);q X.1R(c+b,d.9.14)});X.1R(c+\'I\',d.9.14);7 r}7 p},1g:8(){Q.3c(\'1E\',[5.1k()])}})})();16.3d({2l:2m?1r 2m.3g(Q):M,1X:8(a){a=z(a)==\'1c\'?1G.1T(a):a;3(a)16.2l.2Y(a)}});',62,204,'|||if||this||return|function|options||||||||||||||||false|else|true||Object|state||arguments|qualifiers|history|typeof|var||path|length|params|storedHash|delete|page|version|getLength|each|cookieDataHardLimits|null|negen|observers|object|window|lochash|getStoredHash|get|pathParsed|substr|value|Cookie|minparams|name|prefix|exclusive|undefined|externalConstants|cookieOptions|bind|HashNav|maxparams|td|all|satisfied|current|string|utility|every|poll|triggerEvent|toString|JSON|trackHistory|getStoredHashData|splitter|polling|push|decodeURIComponent|pathString|key|new|obj|navigateTo|boolean|POTQS|wildstrict|keys|cookies|contains|native|strict|location|hash|navchange|decode|document|getProperty|encode|defaultHome|write|clone|unregisterObserver|read|in|cleanQueryString|parseInt|dispose|200|id|number|values|filter|scrlTo|isLegalHash|startPolling|onhashchange|retrieve|has|registeredObserver|10000|result|registerObserver|makeFalse|encodeURIComponent|clear|deserialize|Array|setOptions|queryMakeFalse|exposeObserverMethods|unserialize|interval|compare|split|while|PQS|scrl|Fx|Events|toQueryString|domain|class|tag|store|duration|observing|365|secure|trim|unobserve|indexOf|eliminate|Browser|ie7|apply|append|from|addEvent|97|getLast|removeEvent|unregisterObservers|2000|ignoreVersionCheck|explicitHashChange|getCurrent|initialize|set|merge|unset|isNative|serialize|setInterval|stopPolling|clearInterval|toElement|home|match|substring|shift|clean|join|Class|Implements|Options|truncate|NAVOBJOBSDATA|splice|Element|fireEvent|extend|NAVOBJSERDATA|observe|Scroll|implement'.split('|'),0,{}))

Element.Events.hashchange = {
    onAdd: function(){
        var hash = self.location.hash;

        var hashchange = function(){
            if (hash == self.location.hash) return;
            else hash = self.location.hash;

            var value = (hash.indexOf('#') == 0 ? hash.substr(1) : hash);
            window.fireEvent('hashchange', value);
            document.fireEvent('hashchange', value);
        };

        if ("onhashchange" in window){
            window.onhashchange = hashchange;
        } else {
            hashchange.periodical(50);
        }
    }
};
