/** * SWFAddress 2.3: Deep linking for Flash and Ajax <http://www.asual.com/swfaddress/> * * SWFAddress is (c) 2006-2009 Rostislav Hristov and contributors * This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> * */  if(typeof asual=="undefined"){	var asual={}}if(typeof asual.util=="undefined"){	asual.util={}}asual.util.Browser=new function(){	var b=navigator.userAgent.toLowerCase(),	a=/webkit/.test(b),	e=/opera/.test(b),	c=/msie/.test(b)&&!/opera/.test(b),	d=/mozilla/.test(b)&&!/(compatible|webkit)/.test(b),	f=parseFloat(c?b.substr(b.indexOf("msie")+4):(b.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1]);		this.toString=function(){ 	return"[class Browser]"};	this.getVersion=function(){return f};	this.isMSIE=function(){return c};	this.isSafari=function(){return a};	this.isOpera=function(){return e};	this.isMozilla=function(){return d}};	asual.util.Events=new function(){	var c="DOMContentLoaded",j="onstop",k=window,h=document,b=[],a=asual.util,e=a.Browser,d=e.isMSIE(),g=e.isSafari();	this.toString=function(){return"[class Events]"};	this.addListener=function(n,l,m){ 		b.push({o:n,t:l,l:m});		if(!(l==c&&(d||g))){			if(n.addEventListener){				n.addEventListener(l,m,false)			}else{				if(n.attachEvent){					n.attachEvent("on"+l,m)				}			}		}	};		this.removeListener=function(p,m,n){		for(var l=0,o;o=b[l];l++){			if(o.o==p&&o.t==m&&o.l==n){				b.splice(l,1);				break			}		}		if(!(m==c&&(d||g))){			if(p.removeEventListener){				p.removeEventListener(m,n,false)			}else{				if(p.detachEvent){					p.detachEvent("on"+m,n)				}			}		}	};		var i=function(){		for(var m=0,l;l=b[m];m++){			if(l.t!=c){				a.Events.removeListener(l.o,l.t,l.l)			}		}	};	var f=function(){		if(h.readyState=="interactive"){			function l(){				h.detachEvent(j,l);				i()			}			h.attachEvent(j,l);			k.setTimeout(function(){h.detachEvent(j,l)},0)		}	};		if(d||g){		(			function(){				try{					if((d&&h.body)||!/loaded|complete/.test(h.readyState)){						h.documentElement.doScroll("left")					}				}catch(m){				return setTimeout(arguments.callee,0)				}				for(var l=0,m;m=b[l];l++){					if(m.t==c){						m.l.call(null)					}				}			}		)()	}	if(d){		k.attachEvent("onbeforeunload",f)	}	this.addListener(k,"unload",i)};		asual.util.Functions=new function(){		this.toString=function(){			return"[class Functions]"		};		this.bind=function(f,b,e){			for(var c=2,d,a=[];d=arguments[c];c++)			{				a.push(d)			}			return function(){ return f.apply(b,a) }		}	};		var SWFAddressEvent=function(d){		this.toString=function(){return"[object SWFAddressEvent]"};		this.type=d;		this.target=[SWFAddress][0];		this.value=SWFAddress.getValue();		this.path=SWFAddress.getPath();		this.pathNames=SWFAddress.getPathNames();		this.parameters={};				var c=SWFAddress.getParameterNames();		for(var b=0,a=c.length;b<a;b++)		{			this.parameters[c[b]]=SWFAddress.getParameter(c[b])		}		this.parameterNames=c	};		SWFAddressEvent.INIT="init";	SWFAddressEvent.CHANGE="change";		var SWFAddress=new function(){		var _getHash=function(){				var index=_l.href.indexOf("#");				return index!=-1?_ec(_dc(_l.href.substr(index+1))):""		};				var _getWindow=function(){			try{				top.document;				return top			}catch(e){				return window			}		};				var _strictCheck=function(value,force){			if(_opts.strict){				value=force?(value.substr(0,1)!="/"?"/"+value:value):(value==""?"/":value)			}			return value		};				var _ieLocal=function(value,direction){			return(_msie&&_l.protocol=="file:")?(direction?_value.replace(/\?/,"%3F"):_value.replace(/%253F/,"?")):value		};				var _searchScript=function(el){			for(var i=0,l=el.childNodes.length,s;i<l;i++){				if(el.childNodes[i].src){					_url=String(el.childNodes[i].src)				}				if(s=_searchScript(el.childNodes[i])){return s}			}		};				var _titleCheck=function(){			if(_d.title!=_title&&_d.title.indexOf("#")!=-1){				_d.title=_title			}		};						var _listen=function(){			if(!_silent){				var hash=_getHash();				var diff=!(_value==hash);				if(_safari&&_version<523){					if(_length!=_h.length){						_length=_h.length;						if(typeof _stack[_length-1]!=UNDEFINED){							_value=_stack[_length-1]						}						_update.call(this)					}				}else{					if(_msie&&diff){						if(_version<7){							_l.reload()						}else{							this.setValue(hash)						}					}else{						if(diff){							_value=hash;							_update.call(this)						}					}				}								if(_msie){					_titleCheck.call(this)				}			}		};				var _bodyClick=function(e){			if(_popup.length>0){				var popup=window.open(_popup[0],_popup[1],eval(_popup[2]));				if(typeof _popup[3]!=UNDEFINED){					eval(_popup[3])				}			}			_popup=[]		};				var _swfChange=function(){			for(var i=0,id,obj,value=SWFAddress.getValue(),setter="setSWFAddressValue";id=_ids[i];i++)			{				obj=document.getElementById(id);				if(obj){					if(obj.parentNode&&typeof obj.parentNode.so!=UNDEFINED){						obj.parentNode.so.call(setter,value)					}else{						if(!(obj&&typeof obj[setter]!=UNDEFINED)){							var objects=obj.getElementsByTagName("object");							var embeds=obj.getElementsByTagName("embed");							obj=((objects[0]&&typeof objects[0][setter]!=UNDEFINED)?objects[0]:((embeds[0]&&typeof embeds[0][setter]!=UNDEFINED)?embeds[0]:null))						}						if(obj){							obj[setter](value)							}					}				}else{					if(obj=document[id]){						if(typeof obj[setter]!=UNDEFINED){							obj[setter](value)						}					}				}			}		};				var _jsDispatch=function(type){			this.dispatchEvent(new SWFAddressEvent(type));			type=type.substr(0,1).toUpperCase()+type.substr(1);			if(typeof this["on"+type]==FUNCTION){				this["on"+type]()			}		};				var _jsInit=function(){			if(_util.Browser.isSafari()){				_d.body.addEventListener("click",_bodyClick)			}			_jsDispatch.call(this,"init")		};		var _jsChange=function(){			_swfChange();			_jsDispatch.call(this,"change")		};		var _update=function(){			_jsChange.call(this);			_st(_functions.bind(_track,this),10)		};		var _track=function(){			var value=(_l.pathname+(/\/$/.test(_l.pathname)?"":"/")+this.getValue()).replace(/\/\//,"/").replace(/^\/$/,"");			var fn=window[_opts.tracker];			if(typeof fn==FUNCTION){				fn(value)			}else{				if(typeof pageTracker!=UNDEFINED&&typeof pageTracker._trackPageview==FUNCTION){					pageTracker._trackPageview(value)				}else{					if(typeof urchinTracker==FUNCTION){						urchinTracker(value)					}				}			}		};		var _htmlWrite=function(){			var doc=_iframe.contentWindow.document;			doc.open();			doc.write("<html><head><title>"+_d.title+"</title><script>var "+ID+' = "'+_getHash()+'";<\/script></head></html>');			doc.close()		};		var _htmlLoad=function(){			var win=_iframe.contentWindow;var src=win.location.href;			_value=(typeof win[ID]!=UNDEFINED?win[ID]:"");			if(_value!=_getHash()){				_update.call(SWFAddress);				_l.hash=_ieLocal(_value,true)			}		};		var _load=function(){			if(!_loaded){				_loaded=true;				if(_msie&&_version<8){					var iframe='<iframe id="'+ID+'" src="javascript:false;" width="0" height="0"></iframe>';					_d.body.innerHTML=iframe+_d.body.innerHTML;					_iframe=_d.getElementById(ID);					_st(function(){							_events.addListener(_iframe,"load",_htmlLoad);							if(typeof _iframe.contentWindow[ID]==UNDEFINED){								_htmlWrite()							}						},50)				}else{					if(_safari){						if(_version<418){							_d.body.innerHTML+='<form id="'+ID+'" style="position:absolute;top:-9999px;" method="get"></form>';							_form=_d.getElementById(ID)						}						if(typeof _l[ID]==UNDEFINED){							_l[ID]={}						}						if(typeof _l[ID][_l.pathname]!=UNDEFINED){							_stack=_l[ID][_l.pathname].split(",")						}					}				}				_st(_functions.bind(function(){_jsInit.call(this);_jsChange.call(this);_track.call(this)},this),1);				if(_msie&&_version>=8){					_d.body.onhashchange=_functions.bind(_listen,this);					_si(_functions.bind(_titleCheck,this),50)				}else{					_si(_functions.bind(_listen,this),50)				}			}		};		var ID="swfaddress",			FUNCTION="function",			UNDEFINED="undefined",			_util=asual.util,			_browser=_util.Browser,			_events=_util.Events,			_functions=_util.Functions,			_version=_browser.getVersion(),			_msie=_browser.isMSIE(),			_mozilla=_browser.isMozilla(),			_opera=_browser.isOpera(),			_safari=_browser.isSafari(),			_supported=false,			_t=_getWindow(),			_d=_t.document,			_h=_t.history,			_l=_t.location,			_si=setInterval,			_st=setTimeout,			_dc=decodeURI,			_ec=encodeURI,			_iframe,_form,_url,_title=_d.title,			_length=_h.length,			_silent=false,			_loaded=false,			_justset=true,			_juststart=true,			_ref=this,			_stack=[],			_ids=[],			_popup=[],			_listeners={},			_value=_getHash(),			_opts={history:true,strict:true};			_supported=(_mozilla&&_version>=1)||(_msie&&_version>=6)||(_opera&&_version>=9.5)||(_safari&&_version>=312);				if(_supported){			for(var i=1;i<_length;i++){				_stack.push("")			}			_stack.push(_getHash());			if(_msie&&_l.hash!=_getHash()){				_l.hash="#"+_ieLocal(_getHash(),true)			}			if(_opera){				history.navigationMode="compatible"			}			_searchScript(document);			var _qi=_url.indexOf("?");			if(_url&&_qi>-1){				var param,params=_url.substr(_qi+1).split("&");				for(var i=0,p;p=params[i];i++){					param=p.split("=");					if(/^(history|strict)$/.test(param[0])){						_opts[param[0]]=(isNaN(param[1])?/^(true|yes)$/i.test(param[1]):(parseInt(param[1])!=0))					}					if(/^tracker$/.test(param[0])){						_opts[param[0]]=param[1]					}				}			}								if(_msie){				_titleCheck.call(this)			}			if(window==_t){				_events.addListener(document,"DOMContentLoaded",_functions.bind(_load,this))			}			_events.addListener(_t,"load",_functions.bind(_load,this))		}else{			if((!_supported&&_l.href.indexOf("#")!=-1)||(_safari&&_version<418&&_l.href.indexOf("#")!=-1&&_l.search!="")){				_d.open();				_d.write('<html><head><meta http-equiv="refresh" content="0;url='+_l.href.substr(0,_l.href.indexOf("#"))+'" /></head></html>');				_d.close()			}else{				_track()			}		}				this.toString=function(){return"[class SWFAddress]"};		this.back=function(){_h.back()};		this.forward=function(){_h.forward()};		this.up=function(){			var path=this.getPath();			this.setValue(path.substr(0,path.lastIndexOf("/",path.length-2)+(path.substr(path.length-1)=="/"?1:0)))		};		this.go=function(delta){			_h.go(delta)		};		this.href=function(url,target){			target=typeof target!=UNDEFINED?target:"_self";			if(target=="_self"){				self.location.href=url			}else{				if(target=="_top"){					_l.href=url				}else{					if(target=="_blank"){						window.open(url)					}else{						_t.frames[target].location.href=url					}				}			}		};		this.popup=function(url,name,options,handler){			try{				var popup=window.open(url,name,eval(options));				if(typeof handler!=UNDEFINED){					eval(handler)				}			}catch(ex){}						_popup=arguments		};		this.getIds=function(){			return _ids		};		this.getId=function(index){			return _ids[0]		};		this.setId=function(id){			_ids[0]=id		};		this.addId=function(id){			this.removeId(id);			_ids.push(id)		};		this.removeId=function(id){			for(var i=0;i<_ids.length;i++){				if(id==_ids[i]){					_ids.splice(i,1);break				}			}		};		this.addEventListener=function(type,listener){			if(typeof _listeners[type]==UNDEFINED){				_listeners[type]=[]			}			_listeners[type].push(listener)		};		this.removeEventListener=function(type,listener){			if(typeof _listeners[type]!=UNDEFINED){				for(var i=0,l;l=_listeners[type][i];i++){				if(l==listener){break}				}				_listeners[type].splice(i,1)			}		};		this.dispatchEvent=function(event){			if(this.hasEventListener(event.type)){				event.target=this;				for(var i=0,l;l=_listeners[event.type][i];i++){					l(event)				}				return true			}			return false		};				this.hasEventListener=function(type){			return(typeof _listeners[type]!=UNDEFINED&&_listeners[type].length>0)		};		this.getBaseURL=function(){			var url=_l.href;			if(url.indexOf("#")!=-1){				url=url.substr(0,url.indexOf("#"))			}			if(url.substr(url.length-1)=="/"){				url=url.substr(0,url.length-1)			}			return url		};				this.getStrict=function(){return _opts.strict};		this.setStrict=function(strict){_opts.strict=strict};		this.getHistory=function(){return _opts.history};		this.setHistory=function(history){_opts.history=history};		this.getTracker=function(){return _opts.tracker};		this.setTracker=function(tracker){_opts.tracker=tracker};		this.getTitle=function(){return _d.title};		this.setTitle=function(title){			if(!_supported){return null}			if(typeof title==UNDEFINED){return}			if(title=="null"){title=""}			title=_dc(title);			_st(function(){				_title=_d.title=title;				if(_juststart&&_iframe&&_iframe.contentWindow&&_iframe.contentWindow.document){					_iframe.contentWindow.document.title=title;					_juststart=false				}				if(!_justset&&_mozilla){					_l.replace(_l.href.indexOf("#")!=-1?_l.href:_l.href+"#")				}				_justset=false			},50)		};		this.getStatus=function(){return _t.status};		this.setStatus=function(status){			if(!_supported){return null}			if(typeof status==UNDEFINED){return}			if(status=="null"){status=""}			status=_dc(status);			if(!_safari){				status=_strictCheck((status!="null")?status:"",true);				if(status=="/"){status=""}				if(!(/http(s)?:\/\//.test(status))){					var index=_l.href.indexOf("#");					status=(index==-1?_l.href:_l.href.substr(0,index))+"#"+status				}				_t.status=status			}		};		this.resetStatus=function(){_t.status=""};		this.getValue=function(){			if(!_supported){return null}			return _dc(_strictCheck(_ieLocal(_value,false),false))		};				this.setValue=function(value){			if(!_supported){return null}			if(typeof value==UNDEFINED){return}			if(value=="null"){value=""}			value=_ec(_dc(_strictCheck(value,true)));			if(value=="/"){value=""}			if(_value==value){return}			_justset=true;			_value=value;			_silent=true;			_update.call(SWFAddress);			_stack[_h.length]=_value;			if(_safari){				if(_opts.history){					_l[ID][_l.pathname]=_stack.toString();					_length=_h.length+1;					if(_version<418){						if(_l.search==""){							_form.action="#"+_value;_form.submit()						}					}else{						if(_version<523||_value==""){							var evt=_d.createEvent("MouseEvents");							evt.initEvent("click",true,true);							var anchor=_d.createElement("a");							anchor.href="#"+_value;							anchor.dispatchEvent(evt)						}else{							_l.hash="#"+_value						}					}				}else{					_l.replace("#"+_value)				}			}else{				if(_value!=_getHash()){					if(_opts.history){						_l.hash="#"+_ieLocal(_value,true)					}else{						_l.replace("#"+_value)					}				}			}			if((_msie&&_version<8)&&_opts.history){				_st(_htmlWrite,50)			}			if(_safari){				_st(function(){_silent=false},1)			}else{				_silent=false			}		};		this.getPath=function(){			var value=this.getValue();			var value=SWFAddress.getValue();			if(value.indexOf("?")!=-1){				return value.split("?")[0]			}else{				if(value.indexOf("#")!=-1){					return value.split("#")[0]				}else{					return value				}			}		};		this.getPathNames=function(){			var path=this.getPath();			var names=path.split("/");			if(path.substr(0,1)=="/"||path.length==0){				names.splice(0,1)			}			if(path.substr(path.length-1,1)=="/"){				names.splice(names.length-1,1)			}			return names		};		this.getQueryString=function(){			var value=this.getValue();			var index=value.indexOf("?");			return(index!=-1&&index<value.length)?value.substr(index+1):""		};		this.getParameter=function(param){			var value=this.getValue();			var index=value.indexOf("?");			if(index!=-1){				value=value.substr(index+1);				var params=value.split("&");				var p,i=params.length;				while(i--){					p=params[i].split("=");					if(p[0]==param){						return p[1]					}				}			}		};		this.getParameterNames=function(){			var value=this.getValue();			var index=value.indexOf("?");			var names=[];			if(index!=-1){				value=value.substr(index+1);				if(value!=""&&value.indexOf("=")!=-1){					var params=value.split("&");					var i=0;					while(i<params.length){						names.push(params[i].split("=")[0]);						i++					}				}			}			return names		};		this.onInit=null;		this.onChange=null;		(function(){			var _args;			if(typeof FlashObject!=UNDEFINED){				SWFObject=FlashObject			}			if(typeof SWFObject!=UNDEFINED&&SWFObject.prototype&&SWFObject.prototype.write){				var _s1=SWFObject.prototype.write;				SWFObject.prototype.write=function(){					_args=arguments;					if(this.getAttribute("version").major<8){						this.addVariable("$swfaddress",SWFAddress.getValue());						((typeof _args[0]=="string")?document.getElementById(_args[0]):_args[0]).so=this					}					var success;if(success=_s1.apply(this,_args)){						_ref.addId(this.getAttribute("id"))					}					return success				}			}			if(typeof swfobject!=UNDEFINED){				var _s2r=swfobject.registerObject;				swfobject.registerObject=function(){					_args=arguments;					_s2r.apply(this,_args);					_ref.addId(_args[0])				};				var _s2c=swfobject.createSWF;				swfobject.createSWF=function(){					_args=arguments;					_s2c.apply(this,_args);					_ref.addId(_args[0].id)				};				var _s2e=swfobject.embedSWF;				swfobject.embedSWF=function(){					_args=arguments;					if(typeof _args[8]==UNDEFINED){						_args[8]={}					}					if(typeof _args[8].id==UNDEFINED){						_args[8].id=_args[1]					}					_s2e.apply(this,_args);					_ref.addId(_args[8].id)				}			}			if(typeof UFO!=UNDEFINED){				var _u=UFO.create;UFO.create=function(){					_args=arguments;					_u.apply(this,_args);					_ref.addId(_args[0].id)				}			}			if(typeof AC_FL_RunContent!=UNDEFINED){				var _a=AC_FL_RunContent;				AC_FL_RunContent=function(){					_args=arguments;					_a.apply(this,_args);					for(var i=0,l=_args.length;i<l;i++){						if(_args[i]=="id"){							_ref.addId(_args[i+1])						}					}				}			}		}		)()	};