(function($){var locationWrapper={put:function(hash,win){(win||window).location.hash=this.encoder(hash);},get:function(win){var hash=((win||window).location.hash).replace(/^#/,'');return $.browser.mozilla?hash:decodeURIComponent(hash);},encoder:encodeURIComponent};var iframeWrapper={id:"__jQuery_history",init:function(){var html='<iframe id="'+this.id+'" style="display:none" src="javascript:false;" />';$("body").prepend(html);return this;},_document:function(){return $("#"+this.id)[0].contentWindow.document;},put:function(hash){var doc=this._document();doc.open();doc.close();locationWrapper.put(hash,doc);},get:function(){return locationWrapper.get(this._document());}};function initObjects(options){options=$.extend({unescape:false},options||{});locationWrapper.encoder=encoder(options.unescape);function encoder(unescape_){if(unescape_===true){return function(hash){return hash;};}if(typeof unescape_=="string"&&(unescape_=partialDecoder(unescape_.split("")))||typeof unescape_=="function"){return function(hash){return unescape_(encodeURIComponent(hash));};}return encodeURIComponent;}function partialDecoder(chars){var re=new RegExp($.map(chars,encodeURIComponent).join("|"),"ig");return function(enc){return enc.replace(re,decodeURIComponent);};}}var _={appState:undefined,callback:undefined,init:function(callback,options){},check:function(){},load:function(hash){}};$.history=_;var SimpleImpl={init:function(callback,options){initObjects(options);_.callback=callback;var current_hash=locationWrapper.get();_.appState=current_hash;_.callback(current_hash);setInterval(_.check,100);},check:function(){var current_hash=locationWrapper.get();if(current_hash!=_.appState){_.appState=current_hash;_.callback(current_hash);}},load:function(hash){if(hash!=_.appState){locationWrapper.put(hash);_.appState=hash;_.callback(hash);}}};var IframeImpl={init:function(callback,options){initObjects(options);_.callback=callback;var current_hash=locationWrapper.get();_.appState=current_hash;iframeWrapper.init().put(current_hash);_.callback(current_hash);setInterval(_.check,100);},check:function(){var iframe_hash=iframeWrapper.get(),location_hash=locationWrapper.get();if(location_hash!=iframe_hash){if(location_hash==_.appState){_.appState=iframe_hash;locationWrapper.put(iframe_hash);_.callback(iframe_hash);}else{_.appState=location_hash;iframeWrapper.put(location_hash);_.callback(location_hash);}}},load:function(hash){if(hash!=_.appState){locationWrapper.put(hash);iframeWrapper.put(hash);_.appState=hash;_.callback(hash);}}};if($.browser.msie&&($.browser.version<8||document.documentMode<8)){$.extend(_,IframeImpl);}else{$.extend(_,SimpleImpl);}})(jQuery);
