/* Copyright (c) 2007, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt version: 2.2.0 */ YAHOO.util.History=(function(){var _browser="unknown";var _iframe=null;var _storageField=null;var _initialized=false;var _storageFieldReady=false;var _bhmReady=false;var _modules=[];var _fqstates=[];function _trim(str){return str.replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1");} function _getHash(){var href=top.location.href;var idx=href.indexOf("#");return idx>=0?href.substr(idx+1):null;} function _storeStates(){var initialStates=[];var currentStates=[];for(var moduleName in _modules){var moduleObj=_modules[moduleName];initialStates.push(moduleName+"="+moduleObj.initialState);currentStates.push(moduleName+"="+moduleObj.currentState);} _storageField.value=initialStates.join("&")+"|"+currentStates.join("&");if(_browser=="safari"){_storageField.value+="|"+_fqstates.join(",");}} function _checkIframeLoaded(){if(!_iframe.contentWindow||!_iframe.contentWindow.document){setTimeout(_checkIframeLoaded,10);return;} var doc=_iframe.contentWindow.document;var elem=doc.getElementById("state");var fqstate=elem?elem.innerText:null;setInterval(function(){doc=_iframe.contentWindow.document;elem=doc.getElementById("state");var newfqstate=elem?elem.innerText:null;if(newfqstate!=fqstate){fqstate=newfqstate;_handleFQStateChange(fqstate);var hash;if(!fqstate){var states=[];for(var moduleName in _modules){var moduleObj=_modules[moduleName];states.push(moduleName+"="+moduleObj.initialState);} hash=states.join("&");}else{hash=fqstate;} top.location.replace("#"+hash);_storeStates();}},50);_bhmReady=true;YAHOO.util.History.onLoadEvent.fire();} function _handleFQStateChange(fqstate){var moduleName,moduleObj,currentState;if(!fqstate){for(moduleName in _modules){moduleObj=_modules[moduleName];moduleObj.currentState=moduleObj.initialState;moduleObj.onStateChange(moduleObj.currentState);} return;} var modules=[];var states=fqstate.split("&");for(var idx=0,len=states.length;idx1){var idx,len,tokens,moduleName,moduleObj;var initialStates=parts[0].split("&");for(idx=0,len=initialStates.length;idx=2){moduleName=tokens[0];var currentState=tokens[1];moduleObj=_modules[moduleName];if(moduleObj){moduleObj.currentState=currentState;}}}} if(parts.length>2){_fqstates=parts[2].split(",");} _storageFieldReady=true;if(_browser=="msie"){_iframe=document.getElementById("yui_hist_iframe");_checkIframeLoaded();}else{var counter=history.length;var hash=_getHash();setInterval(function(){var state;var newHash=_getHash();var newCounter=history.length;if(newHash!=hash){hash=newHash;counter=newCounter;_handleFQStateChange(hash);_storeStates();}else if(newCounter!=counter){hash=newHash;counter=newCounter;state=_fqstates[counter-1];_handleFQStateChange(state);_storeStates();}},50);_bhmReady=true;YAHOO.util.History.onLoadEvent.fire();}} var ua=navigator.userAgent.toLowerCase();if(ua.indexOf("opera")!=-1){_browser="opera";}else if(ua.indexOf("msie")!=-1){_browser="msie";}else if(ua.indexOf("safari")!=-1){_browser="safari";}else if(ua.indexOf("gecko")!=-1){_browser="gecko";} return{onLoadEvent:new YAHOO.util.CustomEvent("onLoad"),register:function(module,initialState,onStateChange){if(typeof module!="string"||_trim(module)===""||typeof initialState!="string"||typeof onStateChange!="function"){throw new Error("Missing or invalid argument passed to YAHOO.util.History.register");} if(_modules[module]){throw new Error("A module cannot be registered twice");} if(_initialized){throw new Error("All modules must be registered before calling YAHOO.util.History.initialize");} module=escape(module);initialState=escape(initialState);_modules[module]={name:module,initialState:initialState,currentState:initialState,onStateChange:onStateChange};},initialize:function(iframeTarget){if(_initialized){return;} if(_browser=="unknown"){throw new Error("Your web browser is not supported by the Browser History Manager");} if(!iframeTarget){iframeTarget="blank.html";} if(typeof iframeTarget!="string"||_trim(iframeTarget)===""){throw new Error("Invalid argument passed to YAHOO.util.History.initialize");} document.write('');if(_browser=="msie"){document.write('');} YAHOO.util.Event.addListener(window,"load",_initialize);_initialized=true;},navigate:function(module,state){if(typeof module!="string"||typeof state!="string"){throw new Error("Missing or invalid argument passed to YAHOO.util.History.navigate");} if(!_bhmReady){throw new Error("The Browser History Manager is not initialized");} if(!_modules[module]){throw new Error("The following module has not been registered: "+module);} module=escape(module);state=escape(state);var currentStates=[];for(var moduleName in _modules){var moduleObj=_modules[moduleName];var currentState=(moduleName==module)?state:moduleObj.currentState;currentStates.push(moduleName+"="+currentState);} var fqstate=currentStates.join("&");if(_browser=="msie"){var html='
'+fqstate+'
';try{var doc=_iframe.contentWindow.document;doc.open();doc.write(html);doc.close();}catch(e){return false;}}else{top.location.hash=fqstate;if(_browser=="safari"){_fqstates[history.length]=fqstate;_storeStates();}} return true;},getCurrentState:function(module){if(typeof module!="string"){throw new Error("Missing or invalid argument passed to YAHOO.util.History.getCurrentState");} if(!_storageFieldReady){throw new Error("The Browser History Manager is not initialized");} var moduleObj=_modules[module];if(!moduleObj){throw new Error("No such registered module: "+module);} return unescape(moduleObj.currentState);},getBookmarkedState:function(module){if(typeof module!="string"){throw new Error("Missing or invalid argument passed to YAHOO.util.History.getBookmarkedState");} var hash=top.location.hash.substr(1);var states=hash.split("&");for(var idx=0,len=states.length;idx=0?url.substr(idx+1):url;var params=queryString.split("&");for(var i=0,len=params.length;i=2){if(tokens[0]==paramName){return tokens[1];}}} return null;}};})();YAHOO.register("history",YAHOO.util.History,{version:"2.2.0",build:"127"});