var EXANIMO=EXANIMO||{};

(function(){

	EXANIMO.managers=EXANIMO.managers||{};
	var _1=false;
   var _2;
	var _3;
	var _4;
	var _5;
	var _6=false;
	var _7="EXANIMO-managers-StateManager-iFrame";
	var _e;

	function _self(){
		return EXANIMO.managers.StateManager;
   }

   var _9=navigator.appName.indexOf("Microsoft Internet")!=-1?"IFRAME":navigator.userAgent.indexOf("Safari")!=-1?"LINK":"HASH";

   function _getStateID(){
   	return _self().defaultStateID;
   }
   function _getSWF(){
   	var _a=["object","embed"];
      for(var i=0;i<_a.length;i++){
      	var a=document.getElementsByTagName(_a[i]);
         for(var j=0;j<a.length;j++){
         	if(a[j].dispatchStateChangeEvents){
            	return a[j];
            }
         }
      }
   }
   function _dispatchEvent(_e,_f){
   	_e=_e||_self().defaultStateID;
      if(!_4){
      	_e={id:_e};
         var f;
         if(f=_self().onstatechange){
         	_e.type="stateChange";
            f(_e);
         }
         if(_f){
         	if(f=_self().onstateset){
            	_e.type="stateSet";
               f(_e);
            }
         }
         else{
         	if(f=_self().onstaterevisit){
            	_e.type="stateRevisit";
               f(_e);
            }
         }
         _e=null;
      }
      else{
      	if(!_f){
         	_4.dispatchStateChangeEvents(_e);
         }
      }
   }
   var _11=(function(){
   	switch(_9){
      	case "HASH":return function(_12){
         	document.location.hash=_12==_self().defaultStateID:_12;
            _5=_12;
			};
			case "IFRAME":return function(_13){
         	_6=true;
            var _14=document.getElementById(_7);
            frames[_7].document.open();
            frames[_7].document.write("<script>parent.document.location.hash = \""+(_13==_self().defaultStateID:_13)+"\"; /* Wait for IE to impose its title before setting ours. */ setTimeout( function(){ parent.EXANIMO.managers.StateManager._updateIFrame(\""+_13+"\"); }, 0);</script>");
            frames[_7].document.close();
         };
         case "LINK":return function(_15){
         	_6=true;
            var a=document.createElement("a");
            a.setAttribute("href",_15==_self().defaultStateID:_15);
            var evt=document.createEvent("MouseEvents");
            evt.initEvent("click",true,true);
            a.dispatchEvent(evt);
            document.location.EXANIMO.managers.StateManager.stateList.push(_15);
         };
      }
   })();

   EXANIMO.managers.StateManager={
   	CHECK_RATE:100,onstatechange:null,onstateset:null,onstaterevisit:null,DEFAULT_STATE:"defaultState",defaultStateID:"defaultState",initialize:function(swf){
      	if(_1){return;}
         _1=true;
         _4=swf==true?_getSWF():swf;
         switch(_9){
         	case "HASH":_5=_getStateID()==_self().defaultStateID?_self().defaultStateID:null;
            var _19=function(){
            	var _1a=_getStateID();
               if(_1a!=_5){
               	_5=_1a;
                  _dispatchEvent(_1a);
               }
            };
            _2=setInterval(_19,_self().CHECK_RATE);
            break;
            case "IFRAME":_6=true;

            var _1b=document.createElement("iframe");
            _1b.setAttribute("src","about:blank");
            _1b.setAttribute("name",_7);
            _1b.setAttribute("id",_7);
            _1b.style.visibility="hidden";
            _1b.style.width="0";
            _1b.style.height="0";
            _1b.style.position="absolute";
            _1b.style.overflow="hidden";
            document.body.appendChild(_1b);

            var _1c=_getStateID();
            if(_1c!=_self().defaultStateID){
            	setTimeout(function(){
               	_dispatchEvent(_1c);
               },0);
            }
            frames[_7].document.open();
            if(_1c){
            	frames[_7].document.write("<script>parent.document.location.hash = \""+(_1c==_self().defaultStateID?"":_1c)+"\"; parent.EXANIMO.managers.StateManager._updateIFrame(\""+_1c+"\");</script>");
            }
            else{
            	frames[_7].document.write("<script>parent.document.location.hash = \"\"; parent.EXANIMO.managers.StateManager._updateIFrame();</script>");
            }
            frames[_7].document.close();
            break;
            case "LINK":document.location.EXANIMO=document.location.EXANIMO||{};
            document.location.EXANIMO.managers=document.location.EXANIMO.managers||{};
            document.location.EXANIMO.managers.StateManager=document.location.EXANIMO.managers.StateManager||{};
            var loc=document.location.EXANIMO.managers.StateManager;
            window.onunload=function(){
            	loc.oldHistoryLength=-1;
            };
            if(loc.deepLink&&loc.deepLink!=_self().defaultStateID){
            	loc.oldHistoryLength=-1;
               loc.deepLink=null;
            }
            if(typeof loc.stateList=="undefined"){
            	loc.stateList=[_getStateID()||_self().defaultStateID];
               loc.deepLink=loc.stateList[0];
               loc.offset=history.length-1;
               while(loc.offset){
               	loc.stateList.unshift(null);
                  loc.offset--;
               }
               delete loc.offset;
               loc.oldHistoryLength=document.location.hash?-1:history.length;
            }
            var _1e=function(){
            	var loc=document.location.EXANIMO.managers.StateManager;
               if(_6){
               	_6=false;
                  loc.oldHistoryLength=history.length;
                  return;
               }
               if(history.length!=loc.oldHistoryLength){
               	var _20=loc.stateList[history.length-1];
                  _dispatchEvent(_20);
                  loc.oldHistoryLength=history.length;
               }
            };
            _2=setInterval(_1e,_self().CHECK_RATE);
            break;
         }
      },setState:function(_21,_22){
   		if(_22){_self().setTitle(_22);}
         if(_e){return;}
         _11(_21);
         _dispatchEvent(_21,true);
      },setTitle:function(_23){
      	window.document.title=_23||"S";
      },_updateIFrame:function(_24){
      	if(!_6){
         	_dispatchEvent(_24);
         }
         _6=false;
      }
   };
})();