/**
 * 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){
				//alert(typeof obj[setter]!=UNDEFINED);
				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){
						//alert(obj[setter] + " " + value);		
						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); Se modifico para poder embeber
		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;
		_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=url3
			} 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=""
		}
		//alert("_value: " + _value + " value: " + value)
		if(_value==value){
			//alert("Retorna");
			return
		}
		
		_justset=TRUE;
		_value=value;
		_silent=TRUE;
		_update.call(SWFAddress,true);
		//alert(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{
			//alert(_value);
			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.debug=function(msg){
		alert(msg);
		return 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])
					}
				}
			}
		}
	}
)
()
};
