/** * 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);		_st(_functions.bind(_postclick,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 _postclick=function(){		postclick(_getHash());	};	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);				_postclick.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();			_postclick();		}	}	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])					}				}			}		}	})()};
