/**
 * 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>
 *
 */

////// FIX POR CAUSA DO IE8
if (navigator.appName == 'Microsoft Internet Explorer'){
	if(typeof asual == "undefined") var asual = new Object();
	if(typeof asual.util == "undefined") asual.util = new Object();
	asual.util.Browser = new function() {
		var agent = navigator.userAgent;
		this.supported = false;
		this.ie = false;
		this.gecko = false;
		this.safari = false;
		this.opera = false;
		this.version = -1;
		if (/MSIE/.test(agent)) {
			this.ie = true;
			this.version = parseFloat(agent.substring(agent.indexOf('MSIE') + 4));
			this.supported = this.version >= 6;
		} else if (/AppleWebKit/.test(agent)) {
			this.safari = true;
			this.version = parseFloat(agent.substring(agent.indexOf('Safari') + 7));
			this.supported = this.version >= 312;
		} else if (/Opera/.test(agent)) {
			this.opera = true;
			this.version = parseFloat(navigator.appVersion);
			this.supported = this.version >= 9.02;
		} else if (/Firefox/.test(agent)) {
			this.gecko = true;
			this.version = parseFloat(agent.substring(agent.indexOf('Firefox') + 8));
			this.supported = this.version >= 1;
		} else if (/Camino/.test(agent)) {
			this.gecko = true;
			this.version = parseFloat(agent.substring(agent.indexOf('Camino') + 7));
			this.supported = this.version >= 1;
		} else if (/Netscape/.test(agent)) {
			this.gecko = true;
			this.version = parseFloat(agent.substring(agent.indexOf('Netscape') + 9));
			this.supported = this.version >= 8;
		} else if (/Mozilla/.test(agent) && /rv:/.test(agent)) {
			this.gecko = true;
			this.version = parseFloat(agent.substring(agent.indexOf('rv:') + 3));
			this.supported = this.version >= 1.8;
		}
		if (!this.supported && top.location.href.indexOf('#') != -1) {
			document.open();
			document.write('<html><head><meta http-equiv="refresh" content="0;url=' + top.location.href.substr(0, top.location.href.indexOf('#')) + '" /></head></html>');
			document.close();
		}
	}
	asual.util.Functions = new function() {
		this.extend = function(superclass, subclass) {
			function inheritance() {}
			inheritance.prototype = superclass.prototype;
			subclass.prototype = new inheritance();
			subclass.prototype.constructor = subclass;
			subclass.superConstructor = superclass;
			subclass.superClass = superclass.prototype;
			return subclass;
		}
		this.bindAsListener = function(method, object, win) {
			return function(evt) {
				return method.call(object, evt || ((win) ? win.event : window.event));
			}
		}    
	}
	asual.util.Events = new function() {
		var cache = new Array();
		this.addListener = function (obj, type, listener) {
			if (obj.addEventListener){
				obj.addEventListener(type, listener, false);
			} else if (obj.attachEvent){
				obj.attachEvent('on' + type, listener);
			} else {
				obj['on' + type] = listener;        
			}
			cache.push({o: obj, t: type, l: listener});
		}
		this.removeListener = function (obj, type, listener) {  
			if (obj.removeEventListener){
				obj.removeEventListener(type, listener, false);
			} else if (obj.detachEvent){
				obj.detachEvent('on' + type, listener);
			} else {
				obj['on' + type] = listener;
			}
		}
		var unload = function() {
			for (var i = 0, evt; evt = cache[i]; i++) {
				asual.util.Events.removeListener(evt.o, evt.t, evt.l);
			}
		}
		if (asual.util.Browser.ie || asual.util.Browser.safari) {    
			this.addListener(window, 'unload', asual.util.Functions.bindAsListener(unload, this));    
		}
	}
	asual.SWFAddress = new function() {
		var browser = asual.util.Browser;
		var supported = browser.supported;
		var iframe, form;
		var swfaddr, swfid, swfupdate = false;
		var swftitle = document.title;
		var swflength = history.length;
		var swfhistory = new Array();
		var js = 'swfaddress.js';
		var html = 'swfaddress.html';
		var getHash = function() {
			var index = top.location.href.indexOf('#');
			if (index != -1) {
				return top.location.href.substring(index);
			}
			return '';
		}
		var hash = getHash();
		var listen = function() {
			if (browser.safari) {
				if (swflength != history.length && !swfupdate) {
					swflength = history.length;
					if (typeof swfhistory[swflength - 1] != 'undefined') {
						hash = swfhistory[swflength - 1];
					}
					update();
				}        
			} else if (browser.ie) {
				if (hash != getHash()) {
					if (browser.version < 7) {
						top.location.reload();
					} else {
						asual.SWFAddress.setValue(getHash().replace(/#/g, ''));
					}
				}
				if (top.document.title != swftitle) {
					asual.SWFAddress.setTitle(swftitle);
				}
			} else {
				if (hash != top.location.hash) {
					hash = top.location.hash;
					update();
				}
			}
		}
		var update = function() {
			var addr = hash.replace(/#/g, '');
			if (addr != swfaddr) {
				swfaddr = addr;
				var obj = document[swfid] || document.getElementById(swfid);        
				if (obj) {
					obj.setSWFAddressValue(addr);
				}
			}
		}
		var loadSuccess = function() {
			if (iframe.contentWindow && iframe.contentWindow.location) {
				var win = iframe.contentWindow;
				win.document.title = top.document.title = swftitle;
				var src = win.location.href;
				if (src.indexOf('?') > -1) {
					hash = '#' + src.substring(src.indexOf('?') + 1);
				} else {
					hash = '#';
				}
				if (hash != getHash()) {
					update();            
					top.location.hash = hash;
				}
			}
		}
		var load = function() {
			if (browser.ie || browser.safari) {
				var content = document.createElement('div');
				content.id = 'swfaddress';
				var scripts = document.getElementsByTagName('script');
				for (var i = 0, s; s = scripts[i]; i++) {
					if (s.src.indexOf(js) > -1) {
						html = (new String(s.src)).replace(js, html);
					}
				}
				content.innerHTML = '<iframe id="swfaddress-iframe" src="' + html + getHash().replace(/#/g, '?') + '" frameborder="no" scrolling="no"></iframe>';
				document.body.appendChild(content);
				content.style.position = 'absolute';
				content.style.left = content.style.top = '-9999px';
				iframe = content.getElementsByTagName('iframe')[0];
			}
			if (browser.ie) {
				asual.util.Events.addListener(iframe, 'load', asual.util.Functions.bindAsListener(loadSuccess, this));  
			}
			if (browser.safari) {
				form = document.createElement('form');
				form.id = 'swfaddress-form';        
				form.method = 'get';
				content.appendChild(form);
				if (typeof top.document.location.swfaddress == 'undefined') {
					top.document.location.swfaddress = new Object();
				}
				if (typeof top.document.location.swfaddress.history != 'undefined') {
					swfhistory = top.document.location.swfaddress.history.split(',');
				}
			}
			track.call(this);
			update.call(this);
			setInterval(listen, 50);
		}
		var track = function() {
			if (typeof urchinTracker != 'undefined'){
				var path = top.location.pathname + this.getValue();
				path = path.replace(/\/\//, '/');
				path = path.replace(/^\/$/, '');            
				urchinTracker(path);
			}
		}    
		this.getId = function() {
			if (!supported) return null;
			return swfid;
		}
		this.setId = function(id) {
			if (!supported) return null;    
			swfid = id;
		}
		this.getTitle = function() {
			if (!supported) return null;    
			return top.document.title;
		}
		this.setTitle = function(title) {
			if (!supported) return null;
			if (title == 'null') {
				title = '';
			}        
			if (typeof title != 'undefined') {
				swftitle = title;
				top.document.title = swftitle;
			}
		}
		this.getStatus = function() {
			if (!supported) return null;    
			return top.status;
		}
		this.setStatus = function(status) {
			if (!supported) return null;
			if (!browser.safari) {
				if (status == 'null' || typeof status == 'undefined') {
					status = '';
				}        
				var index = top.location.href.indexOf('#');
				if (index == -1) {
					status = top.location.href + '#' + status;
				} else {
					status = top.location.href.substr(0, index) + '#' + status;
				}
				top.status = status;
			}
		}
		this.resetStatus = function() {
			top.status = '';
		}
		this.getValue = function() {
			if (!supported) return null;
			var addr = hash.replace(/#/gi, '');
			return addr;
		}
		this.setValue = function(addr) {
			if (!supported) return null;
			if (addr == 'null') {
				addr = '';
			}
			if (swfaddr == addr) {
				return;
			}
			var checkaddr;
			var obj = document[swfid] || document.getElementById(swfid);
			if (obj) {
				checkaddr = obj.getSWFAddressValue();
				if (checkaddr == 'null') {
					checkaddr = '';
				}
			}
			hash = '#' + addr;
			if (checkaddr == addr) {
				swfaddr = addr;
				update();
			} else {
				update();
				swfaddr = addr;
			}
			if (browser.safari) {
				form.action = hash;
				swfhistory[history.length] = hash;
				top.document.location.swfaddress.history = swfhistory.toString();
				swfupdate = true;
				swflength = history.length + 1;            
				form.submit();
				swfupdate = false;
			} else if (checkaddr == addr) {
				top.location.hash = hash;
			}
			if (browser.ie) {
				var win = iframe.contentWindow;
				var query = '?' + getHash().substring(hash.indexOf('#') + 1);
				win.location.assign(win.location.pathname + query);
			}
			track.call(this);
		}    
		if (!supported) {
			return;
		}
		if (browser.safari) {
			for (var i = 1; i < swflength; i++) {
				swfhistory.push('');
			}
			swfhistory.push(top.location.hash);
		}
		if (browser.ie) {
			if (hash == '') {
				top.location.hash = '#';
			} else {
				top.location.hash = getHash();
			}           
		}
		asual.util.Events.addListener(window, 'load', asual.util.Functions.bindAsListener(load, this));    
		swfaddr = this.getValue();
	}
	if (typeof deconcept != 'undefined' && deconcept.SWFObject) {
		asual.SWFAddressObject = asual.util.Functions.extend(deconcept.SWFObject, 
			function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) {
			asual.SWFAddressObject.superConstructor.apply(this, arguments);
			asual.SWFAddress.setId(id);
		});    
		SWFObject = deconcept.SWFObject = asual.SWFAddressObject;    
	}
	SWFAddress = asual.SWFAddress;	
} else {
	if (typeof asual == "undefined") var asual = {};
	if (typeof asual.util == "undefined") asual.util = {};
	
	asual.util.Browser = new function() {
		
		var _agent = navigator.userAgent.toLowerCase(),
			_safari = /webkit/.test(_agent),
			_opera = /opera/.test(_agent),
			_msie = /msie/.test(_agent) && !/opera/.test(_agent),
			_mozilla = /mozilla/.test(_agent) && !/(compatible|webkit)/.test(_agent),
			_chrome = /chrome/.test(_agent) && !/(compatible|webkit)/.test(_agent),
			_version = parseFloat(_msie ? _agent.substr(_agent.indexOf('msie') + 4) : 
				(_agent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0,'0'])[1]);
	
		this.toString = function() {
			return '[class Browser]';
		};
	
		this.getVersion = function() {
			return _version;
		};
	
		this.isMSIE = function() {
			return _msie;
		};
	
		this.isSafari = function() {
			return _safari;
		};
	
		this.isOpera = function() {
			return _opera;
		};
	
		this.isMozilla = function() {
			return _mozilla;
		};
		
		this.isChrome = function() {
			return _chrome;
		};
	}
	
	asual.util.Events = new function() {
	
		var DOM_LOADED = 'DOMContentLoaded', 
			STOP = 'onstop',
			_w = window,
			_d = document,
			_cache = [],
			_util = asual.util,
			_browser = _util.Browser,
			_msie = _browser.isMSIE(),
			_safari = _browser.isSafari();
	
		this.toString = function() {
			return '[class Events]';
		};
	
		this.addListener = function(obj, type, listener) {
			_cache.push({o: obj, t: type, l: listener});
			if (!(type == DOM_LOADED && (_msie || _safari))) {
				if (obj.addEventListener)
					obj.addEventListener(type, listener, false);
				else if (obj.attachEvent)
					obj.attachEvent('on' + type, listener);
			}
		};
	
		this.removeListener = function(obj, type, listener) {
			for (var i = 0, e; e = _cache[i]; i++) {
				if (e.o == obj && e.t == type && e.l == listener) {
					_cache.splice(i, 1);
					break;
				}
			}
			if (!(type == DOM_LOADED && (_msie || _safari))) {
				if (obj.removeEventListener)
					obj.removeEventListener(type, listener, false);
				else if (obj.detachEvent)
					obj.detachEvent('on' + type, listener);
			}
		};
	
		var _unload = function() {
			for (var i = 0, evt; evt = _cache[i]; i++) {
				if (evt.t != DOM_LOADED)
					_util.Events.removeListener(evt.o, evt.t, evt.l);
			}
		};
	
		var _unloadFix = function() {
			if (_d.readyState == 'interactive') {
				function stop() {
					_d.detachEvent(STOP, stop);
					_unload();
				};
				_d.attachEvent(STOP, stop);
				_w.setTimeout(function() {
					_d.detachEvent(STOP, stop);
				}, 0);
			}
		};
	
		if (_msie || _safari) {
			(function (){
				try {
					if ((_msie && _d.body) || !/loaded|complete/.test(_d.readyState))
						_d.documentElement.doScroll('left');
				} catch(e) {
					return setTimeout(arguments.callee, 0);
				}
				for (var i = 0, e; e = _cache[i]; i++)
					if (e.t == DOM_LOADED) e.l.call(null);
			})();
		}
	
		if (_msie)
			_w.attachEvent('onbeforeunload', _unloadFix);
	
		this.addListener(_w, 'unload', _unload);
	}
	
	asual.util.Functions = new function() {
	
		this.toString = function() {
			return '[class Functions]';
		};
	
		this.bind = function(method, object, param) {
			for (var i = 2, p, arr = []; p = arguments[i]; i++)
				arr.push(p);
			return function() {
				return method.apply(object, arr);
			}
		};
	}
	
	var SWFAddressEvent = function(type) {
	
		this.toString = function() {
			return '[object SWFAddressEvent]';
		};
	
		this.type = type;
	
		this.target = [SWFAddress][0];
	
		this.value = SWFAddress.getValue();
	
		this.path = SWFAddress.getPath();
	
		this.pathNames = SWFAddress.getPathNames();
	
		this.parameters = {};
	
		var _parameterNames = SWFAddress.getParameterNames();
		for (var i = 0, l = _parameterNames.length; i < l; i++)
			this.parameters[_parameterNames[i]] = SWFAddress.getParameter(_parameterNames[i]);
	
		this.parameterNames = _parameterNames;
	
	}
	
	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(),
			_chrome = _browser.isChrome(),
			_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 = 
			(_chrome) || 
			(_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 && _chrome)
					_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]);
				}
			}
	
		})();    
	}
}