(function(d){var m=document.location,s={a:"href",img:"src",form:"action",base:"href",script:"src",iframe:"src",link:"href"};var u=function(v){return typeof v==="string"};var p=function(v){return typeof v==="object"};var a=function(v){return typeof v==="function"};var r=function(v){return(v.length==1&&!p(v[0]))};var g=function(v){return(v.length>=2||(v.length==1&&p(v[0])))};var c=function(v){return v.replace(/\?.*$/,"")};var j=function(v){return v.replace(/^#/,"")};function t(y){var x={},w=y.replace(/^\?/,"").split("&"),v=w.length,z=0,A;for(;z<v;z++){if(!w[z]){continue}A=w[z].split("=");x[A[0]]=A[1]}return x}var e=function(w,v){var x=(v===true)?"?":"";for(i in w){x+=i+"="+w[i]+"&"}return x.slice(0,-1)};var q=function(v){return v.join("/")};function l(v){if(v.indexOf("=")===-1){if(v.charAt(v.length-1)=="/"){v=v.slice(0,-1)}return v.replace(/^\//,"").split("/")}return null}function n(v){if(v.indexOf("=")!==-1){return t(v)}return null}var h=function(w){var v=d(w).get(0).tagName;if(v!==undefined){return v.toLowerCase()}return v};var k=function(v){if(v===undefined){v="url parser error"}};var b=function(w,v){var x=new RegExp(":"+v);return w.replace(x,"")};d.extend(d.expr[":"],{external:function(B,z,w){var y=B.tagName;if(y!==undefined){var A=y.toLowerCase();var v=s[A];if(B[v]){if(A!=="a"){var x=document.createElement("a");x.href=B[v]}else{var x=B}return x.hostname&&b(x.hostname,x.port)!==b(m.hostname,m.port)}}return false},internal:function(B,z,w){var y=B.tagName;if(y!==undefined){var A=y.toLowerCase();var v=s[A];if(B[v]){if(A!=="a"){var x=document.createElement("a");x.href=B[v]}else{var x=B}return x.hostname&&b(x.hostname,x.port)===b(m.hostname,m.port)}}return false}});d.url=function(v){return new f(v)};d.fn.url=function(){if(this.size()>1){var v={};this.each(function(w){v[w]=new f(d(this))});return v}else{return new f(this)}};d.observeUrl=function(G){if(G===undefined){G=100}var A,z,L,x,B,C,y=d.browser.msie,I=d.browser.safari,w=false,F;var K=function(){A=c(m.hash);if(y){if(A==""){A="#"}d("body").prepend('<iframe id="browser_history" style="display: none;" src="'+m.href+'"></iframe>');H(A)}else{if(d.browser.safari){L=[];L.length=history.length;x=[];B=history.length;isFirst=true}}if(A){D(j(A))}F=setInterval(v,G)};var E=function(M){L.push(M);x.length=0;isFirst=true};var v=function(){if(y){var M=d("#browser_history")[0];var P=M.contentDocument||M.contentWindow.document;var R=c(P.location.hash);if(R!=A){m.hash=R;A=R;D(j(R))}else{if(j(A)!=j(m.hash)){J(j(m.hash))}}}else{if(I){if(B==history.length&&L.length>B){L.shift()}if(!C){var N=history.length-L.length;B=history.length;if(N){isFirst=false;if(N<0){for(var O=0;O<Math.abs(N);O++){x.unshift(L.pop())}}else{for(var O=0;O<N;O++){L.push(x.shift())}}var Q=L[L.length-1];if(Q!=undefined){A=c(m.hash);D(Q)}}else{if(L[L.length-1]==undefined&&!isFirst){if(m.hash){D(j(m.hash))}else{D("")}isFirst=true}}}}else{var R=c(m.hash);if(R!=A){A=R;D(j(R))}}}};var J=function(M){M=decodeURIComponent(c(M));if(d.browser.safari){newHash=M}else{newHash="#"+M;m.hash=newHash}A=newHash;if(y){H(newHash);B=history.length;D(M)}else{if(I){C=true;E(M);window.setTimeout(function(){C=false},200);D(M);m.hash=newHash}else{D(M)}}};var H=function(O){var M=d("#browser_history")[0];var N=M.contentDocument||M.contentWindow.document;N.open();N.close();N.location.hash=O};var D=function(){if(!w){d(document).trigger("hash:change",j(m.hash))}w=false};d(document).bind("hash:unwatch",function(){w=true});K()};function o(w){var v=document.createElement("a");v.href=w;return{source:w,protocol:v.protocol.replace(":",""),host:b(v.hostname,v.port),base:(function(){if(v.port!=0&&v.port!==null&&v.port!==""){return v.protocol+"//"+b(v.hostname,v.port)+":"+v.port}return v.protocol+"//"+v.host})(),port:v.port,query:v.search,params:t(v.search),file:(v.pathname.match(/\/([^\/?#]+)$/i)||[,""])[1],hash:j(v.hash),path:(function(){var x=v.pathname.replace(/^([^\/])/,"/$1");if(x=="/"){x=""}return x})(),segments:v.pathname.replace(/^\//,"").split("/"),hashSegments:l(j(v.hash)),hashParams:n(j(v.hash))}}var f=function(v){var E=null,x=null,D={};var I=function(J){var K="";if(D.hashParams!=null){K=makeQueryString(D.hashParams)}else{if(D.hashSegments!=null){K=makePathString(D.hashSegments)}}if(K!==""){if(D.hash.charAt(0)=="/"){K="/"+K}if(J===true){return"#"+K}return K}return""};var C=function(){if(E=="elm"){x.attr(s[h(x)],D.source)}else{if(E=="doc"){m.href=D.source}}};var A=function(){D.source=D.base+D.path+D.query;if(D.hash&&D.hash!=""){D.source+="#"+D.hash}};var H=function(K,L){switch(K){case"source":D=o(L);break;case"base":if(L.charAt(L.length-1)=="/"){L=L.slice(0,-1)}var J=document.createElement("a");J.href=D.base=L;D.protocol=J.protocol.replace(":","");D.host=b(J.hostname,J.port);D.port=J.port;break;case"protocol":case"host":case"port":D[K]=L;if(J.port!=0&&J.port!==null&&J.port!==""){D.base=J.protocol+"//"+b(J.hostname,J.port)+":"+J.port}else{D.base=J.protocol+"//"+J.host}break;case"query":D.query="?"+L.replace(/\?/,"");D.params=t(L);break;case"file":D.path=D.path.replace(new RegExp(D.file+"$"),L);D.file=L;break;case"hash":D.hash=L;D.hashSegments=l(L);D.hashParams=n(L);break;case"path":if(L.charAt(0)!="/"){L="/"+L}D.path=L;D.file=(L.match(/\/([^\/?#]+)$/i)||[,""])[1];D.segments=L.replace(/^\//,"").split("/");break;default:k("you can't update this property directly");break}A()};var B=function(J,K){D.params[J]=K;D.query=e(D.params,true);A()};var z=function(J,K){D.segments[J]=K;D.path="/"+q(D.segments);D.file=(D.path.match(/\/([^\/?#]+)$/i)||[,""])[1];A()};var w=function(J,K){D.hashParams[J]=K;D.hash=e(D.hashParams,true);A()};var F=function(K,L){var J=(D.hash.charAt(0)=="/")?"/":"";D.hashSegments[K]=L;D.hash=J+q(D.hashSegments);A()};var y=function(M,L,J){if(r(J)){var K=J[0];return(M===undefined||M[K]===undefined||M[K]==="")?null:M[K]}else{if(g(J)){if(p(J[0])){for(var K in J[0]){L(K,J[0][K])}if(J[1]!==false){C()}}else{L(J[0],J[1]);if(J[2]!==false){C()}}return this}}};var G=function(){if(p(v)&&v.size()){urlAttr=undefined;var K=h(v);if(K!==undefined){urlAttr=s[K]}if(K!==undefined&&urlAttr!==undefined){E="elm";x=v;var J=v.attr(urlAttr)}else{if(K!==undefined&&urlAttr===undefined){k("no valid URL on object");return}else{E="doc";var J=m.href;d(document).bind("hash:change",function(L){H("hash",j(m.hash))})}}}else{if(!p(v)){E="str";var J=m.href}else{k("no valid item");return}}D=o(J)}();return{attr:function(){return y(D,H,arguments)},param:function(){return y(D.params,B,arguments)},segment:function(){return y(D.segments,z,arguments)},hashParam:function(){return y(D.hashParams,w,arguments)},hashSegment:function(){return y(D.hashSegments,F,arguments)},is:function(J){if(J==="internal"||J===":internal"){return D.host&&D.host===b(m.hostname)}else{if(J==="external"||J===":external"){return D.host&&D.host!==b(m.hostname)}}},toString:function(){return D.source}}}})(jQuery);
