/**
 * SWFAddress 2.4: 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";
SWFAddressEvent.INTERNAL_CHANGE="internalChange";
SWFAddressEvent.EXTERNAL_CHANGE="externalChange";
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)
		{
			if(el.childNodes)
			{
				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,false)
					}
				}else
				{
					if(_msie&&diff){if(_version<7)
					{
						_l.reload()
					}else
					{
						this.setValue(hash)
					}
				}else
				{
					if(diff){_value=hash;_update.call(this,false)
				}
			}
		}
	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(internal)
		{
			_jsChange.call(this);
		if(internal)
		{
			_jsDispatch.call(this,"internalChange")
		}else
		{
			_jsDispatch.call(this,"externalChange")
		}
		_st(_functions.bind(_track,this),10)
	};
	var _track=function()
		{
			var value=(_l.pathname+(/\/$/.test(_l.pathname)?"":"/")+this.getValue()).replace(/\/\//,"/").replace(/^\/$/,"");
			var fn=_t[_opts.tracker];
			if(typeof fn==FUNCTION)
			{
				fn(value)
			}else
			{
				if(typeof _t.pageTracker!=UNDEFINED&&typeof _t.pageTracker._trackPageview==FUNCTION)
				{
					_t.pageTracker._trackPageview(value)
				}
				else
				{
					if(typeof _t.urchinTracker==FUNCTION){_t.urchinTracker(value)
				}
			}
		}
	};
	var _htmlWrite=function()
	{
		var doc=_frame.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=_frame.contentWindow;
			var src=win.location.href.replace('@', '#');
			_value=(typeof win[ID]!=UNDEFINED?win[ID]:"");
			if(_value!=_getHash())
			{
				_update.call(SWFAddress,false);
				_l.hash=_ieLocal(_value,TRUE)
			}
		};
		var _load=function()
		{
			if(!_loaded)
			{
				_loaded=TRUE;
				if(_msie&&_version<8)
				{
					var frameset=_d.getElementsByTagName("frameset")[0];
					_frame=_d.createElement((frameset?"":"i")+"frame");
					if(frameset)
					{
						frameset.insertAdjacentElement("beforeEnd",_frame);
						frameset[frameset.cols?"cols":"rows"]+=",0";
						_frame.src="javascript:false";
						_frame.noResize=true;_frame.frameBorder=_frame.frameSpacing=0
					}
					else
					{
						_frame.src="javascript:false";
						_frame.style.display="none";
						_d.body.insertAdjacentElement("afterBegin",_frame)
					}
					_st(function()
					{
						_events.addListener(_frame,"load",_htmlLoad);
						if(typeof _frame.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",TRUE=true,FALSE=false,_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,_frame,_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};
		if(_msie&&_d.documentMode&&_d.documentMode!=_version)
		{
			_version=_d.documentMode!=8?7:8
		}
		_supported=(_mozilla&&_version>=1)||(_msie&&_version>=6)||(_opera&&_version>=9.5)||(_safari&&_version>=312);
		if(_supported)
		{
			if(_opera)
			{
				history.navigationMode="compatible"
			}
		for(var i=1;i<_length;i++)
		{
			_stack.push("")
		}
		_stack.push(_getHash());
		if(_msie&&_l.hash!=_getHash())
		{
			_l.hash="#"+_ieLocal(_getHash(),TRUE)
		}
		_searchScript(document);
		var _qi=_url?_url.indexOf("?"):-1;
		if(_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&&_frame&&_frame.contentWindow&&_frame.contentWindow.document)
					{
						_frame.contentWindow.document.title=title;
						_juststart=FALSE
					}
					if(!_justset&&_mozilla)
					{
						_l.replace(_l.href.indexOf("#")!=-1?_l.href:_l.href+"#")
					}_justset=FALSE
				},10)
			};
		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,true);
				_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="#"+_dc(_ieLocal(_value,TRUE))
					}else
					{
						_l.replace("#"+_dc(_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();
			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(),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(),index=value.indexOf("?");
			if(index!=-1&&index<value.length)
			{
				return 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 p,params=value.split("&"),i=params.length,r=[];
						while(i--){p=params[i].split("=");
						if(p[0]==param)
						{
							r.push(p[1])
						}
					}
					if(r.length!=0)
					{
						return r.length!=1?r:r[0]
					}
				}
			};
			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("&"),i=0;
						while(i<params.length)
						{
							names.push(params[i].split("=")[0]);
							i++
						}
					}
				}
				return names
			};
			this.onInit=null;
			this.onChange=null;
			this.onInternalChange=null;
			this.onExternalChange=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;
							var swf=_s2c.apply(this,_args);
							if(swf)
							{
								_ref.addId(_args[0].id)
							}
							return swf
						};
						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])
								}
							}
						}
					}
				}
			)()};
