// <script language="Javascript">
//<!-- Copyright 1999-2003 Alexa Internet, Inc.  All Rights Reserved.
// Base class for XML consuming objects (eg, menues, drop downs)
function XML()
{
	var o = new AlxObj();
	o.oType="XML";
	o._xmlobj = new ActiveXObject("Msxml2.DOMDocument.3.0");
	o.bIsXMLHTTP = true;
	try {
	} catch (ex) {
		try {
			o._xmlobj = new ActiveXObject("Microsoft.XMLDOM");
			o.bIsXMLHTTP = false;
			g_oLogger.out(this, "error: "+ex.message);
		} catch(ex) {
			g_oLogger.out(this, "error 2: " + ex.message);
		}
	} finally {
		o.err = true;
	}
	if (o._xmlobj)
	{
		o._xmlobj.validateOnParse = false;
		o._xmlobj.resolveExternals = false;
		o._xmlobj.preserveWhiteSpace = false;
	}
	o.selectSingleNode = XML_selectSingleNode;

	o.create();

	return o;
	function XML_selectSingleNode(sXPath)
	{
		return this._xmlobj.selectSingleNode(sXPath);
	}
}
function aborted()
{
	return;
}
// security free version to get around same host restriction.
function AlxXML()
{
	var o = new XML();
	o.oType = "AlxXML";
	try {
		o._bpxml = BrowserProxy.System.GetAlxXML();
		o._bpxml.async = true;
	} catch(ex) {
		g_oLogger.out(this, ex.message);
	}
	o.create();
	o.load = AlxXML_load;
	o.ready = AlxXML_ready;
	o.abort = AlxXML_abort;
	o.readyImpl = AlxXML_readyImpl_virtual;
	o.setEventHandlers = AlxXML_setEventHandlers;
	o._destroy = o.destroy;
	o.destroy = AlxXML_destroy;
	return o;
	function AlxXML_destroy()
	{
		if (this._bpxml)
		{
			this._bpxml.abort();
			this._bpxml.OnReadyStateChange = aborted;
		}
		this._destroy();
	}
	function AlxXML_setEventHandlers()
	{
		// spoof event handler
		eval("function "+this.oType+"_"+this.oID+"_onReadyStateChange() { alxAll.objects.AlxXML['"+this.oID+"'].ready(); }");
		this._bpxml.OnReadyStateChange = eval(this.oType+"_"+this.oID+"_onReadyStateChange");
	}
	function AlxXML_readyImpl_virtual()
	{
		return true;
	}

	function AlxXML_load(sUrl)
	{
		g_oLogger.out(this, "load("+sUrl+")");
		this.m_bLoading = true;
		this._bpxml.load(sUrl);
	}
	function AlxXML_ready()
	{
		if (this._bpxml.ReadyState == 4)
		{
			this._xmlobj.loadXML(this._bpxml.XML);
			if (this._parser)
			{
				this._parser.destroy();
				this._parser = null;
				
			}
			g_oLogger.out(this, "creating xml parser");
			this._parser = new XMLParser(this._xmlobj);
			// callback to instance
			this.readyImpl();
			return true;
		}
	}
	function AlxXML_abort()
	{
		this._bpxml.abort();
	}
}

// abstract class for DSN: data source n*
function DSN() {
	var o = new AlxXML(); 	o.oType = "DSN";
	o.readyImpl = DSN_ready;
	o.onPageTurn= DSN_onPageTurn;
	o.activate = DSN_activate;
	o.deactivate = DSN_deactivate;
	o.create();
	et.register(EVT_PAGETURN,o);
	et.register(EVT_ACTIVATE,o);
	et.register(EVT_DEACTIVATE,o);
	return o;
	function DSN_onPageTurn(aArgs) {
		try {
			this.currenturl = aArgs[2];
		} catch(ex) {
			this.currenturl = BrowserProxy.Host.Location;
		} finally {}
	}
	function DSN_ready() { this.m_oLastXMLDOM = this.m_oOutputXMLDOM; return true; }
	function DSN_activate() {}
	function DSN_deactivate() {}
}
function UrlDSN() {
	var o = new DSN();
	o.oType = "UrlDSN";
	o._readyImpl = o.readyImpl;
	o.readyImpl = UrlDSN_ready;
	o.create();
	return o;
	function UrlDSN_ready() {
		this.m_bLoading = false;
		et.exec(EVT_DATALOAD_PREFIX+this.oType, this); return true;
	}
}

function MenuDSN() {
	var o = new UrlDSN();
	o.oType = "MenuDSN";
	MenuDSN._object = o;
	o.root_url = RESOURCE_URI + "XML/menu.xml";
	o.onLoad = MenuDSN_onLoad;
	o.create();
	et.register(EVT_LOAD, o);
	et.unregister(EVT_PAGETURN,o);
	o.setEventHandlers();
	return o;
	function MenuDSN_onLoad() { this.load(this.root_url); }
}

function AdDSN() {
	// final
	var o = new UrlDSN();
	o.oType="AdDSN";
	AdDSN._object=o;
	o.root_url="http://client.alexa.com/holiday/script/XML/ads.xml";
	o.onLoad = AdDSN_onLoad;
	o.create();
	//et.register(EVT_LOAD,o);
	o.setEventHandlers();
	return o;
	function AdDSN_onLoad() { this.load(this.root_url); }
}

function HintDSN() {
	// final
	var o = new UrlDSN();
	o.oType = "HintDSN";
	o.m_bLoading;
	o.root_url = "http://xslt.alexa.com/fetchhint?";
	o.start = HintDSN_start;
	o.sHints = g_oCookie.readPersist(REG_SEENHINTS);
	if (g_oCookie.readPersist(REG_LASTHINTTIME) == "") { g_oCookie.write(REG_LASTHINTTIME,"0","persist"); }
	if (o.sHints != '') {
		o.aHints = o.sHints.split(',');
	} else {
		o.aHints = new Array();
	}
	o._readyImpl = o.readyImpl;
	o.readyImpl = HintDSN_ready;
 	o.bSecondLoad = false;
	o.create();
	o.setEventHandlers();
	return o;

	function HintDSN_ready() {
		if (this._xmlobj.xml == "")
		{
			return false;
		}
		this.hintID = this._parser.get('hints/hint/@id');
		if (array_contains(this.aHints,this.hintID)) {
			g_oCookie.write(REG_SEENHINTS,"","persist");
			g_oCookie.write(REG_LASTHINTTIME,"0","persist");
			this.aHints = new Array();
			this.sHints = "";
		}
		if (this.hintID != '') {
			this.aHints[this.aHints.length] = this.hintID;
			if (this.aHints.length > 1) {
			 	var sNewHints = this.aHints.join(",");
			} else {
				var sNewHints = this.aHints[0];
			}
			g_oCookie.write(REG_SEENHINTS,sNewHints,"persist");
			g_oLogger.out(this,"onDataLoaded firing for type " + this.oType);
			if (this._parser.get("/hints/hint/body") != "") {
				et.exec(EVT_DATALOAD_PREFIX+this.oType, this);
			}
		} else {
			if (!this.bSecondLoad) {
				g_oCookie.write(REG_SEENHINTS,"","persist");
				this.sHints = '';
				this.aHints = new Array();
				this.load(this.root_url+"seen=");
				this.bSecondLoad = true;
			}
		}
		this._readyImpl();
		return true;
	}
	function HintDSN_start() {
		var nEnabled = g_oCookie.readPersist(REG_SHOWHINTS);
		var nLast = g_oCookie.readPersist(REG_LASTHINTTIME);
		if (nLast=="") { nLast = 0; }
		var nCur = new Date().valueOf();
		this.nEnabled=nEnabled;
		if (nEnabled !== "false") {
			if (nCur > (parseInt(nLast)+(2*60*60*1000))) {
				g_oCookie.write(REG_LASTHINTTIME,nCur,"persist");
				try {
					this.load(this.root_url+"seen="+this.sHints);
				} catch(ex) {
				}
			}
		}
	}
}

// actual implementation of all dad data.
function DadDSN() {
	// final
	var o = new UrlDSN();
	o.oType = "DadDSN";
	o.m_bLoading;
	o.rq=0;
	o.setRootUrl = DadDSN_setRootUrl;
	o.currenturl = "";
	o.lasturl = "";
	o.root_url = "http://data.alexa.com/data";
	var sCookieAID = g_oCookie.readPersist(REG_AID);
	o.setRootUrl(sCookieAID);
	o.stc = (!sCookieAID || (sCookieAID.length!=14) ) ? '&stc=' : '';
	o.windowID = parseInt(Math.random() * 32767);
	o._super_onPageTurn = o.onPageTurn;
	o.onPageTurn = DadDSN_onPageTurn;
	o.amznid= BrowserProxy.System.ReadClientState("amzn_id");
	o._readyImpl = o.readyImpl;
	o.readyImpl = DadDSN_ready;
	o.create();
	o.setEventHandlers();
	return o;
	function DadDSN_setRootUrl(sCookie)
	{
		this.root_url = "http://data.alexa.com/data";
		if (sCookie)
		{
			this.root_url += "/" + sCookie;
		}
		this.root_url += "?cli=10&dat=snba&ver=7.2";
	}
	function DadDSN_onPageTurn(aArgs) {
		if (this.m_bLoading) {
			g_oLogger.out(this, "load already in progress.");
			var sTaskUrl = this.currenturl;
			if (sTaskUrl.indexOf("http://cgi.alexa.com/download/alexa7/cgi-bin/final.cgi") == 0)
			{
				g_oLogger.out(this, "multiple request for final.cgi -- stripping so that abort won't occur.");
				return;
			}
			if (sTaskUrl!=this.lasturl) { 
				try { 
					this.abort(); 
				} catch(ex) { 
					g_oLogger.out(this, "Report: " + ex.message); 
				} 
				this.m_bLoading = false; 
			} 
		}
		if ((!this.m_bLoading)) {
			this._super_onPageTurn(aArgs);
			if ((this.currenturl != this.lasturl) || (this.lasturl == "")) {
				g_oLogger.out(this, "last (or no) load complete.  Sending new request.");
				try {
					var bVis = BrowserProxy.Visible ? 1 : 0;
					var sCDT = escape('alx_vw=20&wid='+this.windowID+'&act='+cw.get()+'&ss='+window.screen.width+'x'+window.screen.height+'&bw='+window.document.body.clientWidth+'&t='+(((aArgs[1]) && (aArgs[1].document) && (aArgs[1].document.referrer) ) ? '1':'0')+((this.amznid != '') ? "&amznid="+this.amznid : "")+"&ttl="+g_sTTL+this.stc+"&vis="+bVis+"&rq="+(this.rq++));
					try {
						var sAID = g_oCookie.readPersist(REG_AID);
						if ((sAID == null) || (sAID.length != 14))
						{
							this.stc = "&stc";
						}
						this.setRootUrl(sAID);
						this.request_url = this.root_url+"&cdt="+sCDT+this.stc+"&url="+this.currenturl;
						g_sTTL = 0;
						this.lasturl = this.currenturl;
						this.load(this.request_url);
						g_sCurrentUrl = this.currenturl;
					} catch(ex) {
						// drop request if error occurs
					}
				} catch(ex) {
				}
			}
		}
	}
	function DadDSN_ready() {
		this.m_bLoading = false;
		g_oLogger.out(this, "readyImpl()");
		var sAID = this._parser.get('ALEXA/@AID');
		if (g_oCookie.readPersist(REG_AID).length != 14)
		{
			if (( sAID!='=' ) && ( sAID!='' )) { 
				g_oCookie.write(REG_AID,sAID,"persist"); 
				this.setRootUrl(sAID);
			}
		}
		
		this.stc = '';
		var alxNode = this.selectSingleNode("/ALEXA");
		if (alxNode) { alxNode.setAttribute("REALURL",this.currenturl);	}
 		var oRlsNode = this.selectSingleNode("ALEXA/RLS");
 		if ((oRlsNode) && (wyrmdsn.isRegistered(EVT_DATALOAD_PREFIX+"DadDSN"))) {
 			oRlsNode.setAttribute("TWYMLINK","true");
 		}
		if (!g_bLoading) { et.exec(EVT_DATALOAD_PREFIX+this.oType, this); }
		else { g_bDataReady = true; }
		return true;
	}
}
function WyrmDSN() {
	var o = new AlxObj();
	o.oType="WyrmDSN";
	o.onDataLoaded_DadDSN = WyrmDSN_onDataLoaded_DadDSN;
	o.enable = WyrmDSN_enable;
	o.charencode = WyrmDSN_charencode;
	o.charunencode = WyrmDSN_charunencode;
	o.hexval = WyrmDSN_hexval;
	o.notOmitted = WyrmDSN_notOmitted;
	o.nNumberToKeep = 5;
	// shared key with wym website
	// encodes the current URI
	o.key = "d9adyz93472kb63z521t6e80wqpi56znb16fya6im3dr3xwe";
	o.omit = new Array('google.com','yahoo.co','msn.com','msn.ca','alexa.com','aol.com','excite.co','lycos.co','passport.com','dmoz.org','altavista.co','askjeeves.com','hotmail.com','prodigy.net','earthlink.net','netscape.com','ads.x10.com','ad.doubleclick.net','ad.iwin.com','ad.musicmatch.com','ads.musiccity.com','icover.realmedia.com','ad.trafficmp.com');
	o.create();
	if (g_oCookie.read("twym65_disabled")!='true') { 
		et.register(EVT_DATALOAD_PREFIX+"DadDSN", o); 
	}
	return o;
	function WyrmDSN_onDataLoaded_DadDSN(oDSN) {
 		if (g_oCookie.read('twym65_disabled') == '') { g_oCookie.write(REG_DISABLE_WYM,'false','long'); }
		if (oDSN._parser)
		{
			var sUrl = oDSN._parser.get("/ALEXA/@URL");
			var sRootUrl = (oDSN._parser.get("/ALEXA/@HOME")!=1) ? sUrl.substring(0, sUrl.indexOf('/')) : sUrl;
			var aOldCookie = String(unescape(g_oCookie.read('twym65'))).split('!');
			if ( (this.notOmitted(sUrl)) && (sUrl!='') && ( (oDSN._parser.get("/ALEXA/RLS/RL")!='') || (oDSN._parser.get("/ALEXA/DMOZ")!='')) ) {
				var founditem = false;
				for (var si in aOldCookie) {
					if (aOldCookie[si]!='') {	aOldCookie[si] = this.charunencode(aOldCookie[si]); if (aOldCookie[si].indexOf(sRootUrl) > -1) { founditem = true; break; }	}
				}
				if (!founditem) {
					var aNewCookie = new Array();
					aNewCookie[aNewCookie.length] = sRootUrl;
					var n = ( (aOldCookie) && (aOldCookie.length < (this.nNumberToKeep -1)) ) ? aOldCookie.length : this.nNumberToKeep - 1;
					for (i=0; i<n; i++) { aNewCookie[aNewCookie.length] = aOldCookie[i]; }
					for (var si in aNewCookie) { aNewCookie[si] = this.charencode(aNewCookie[si]); }
					var sNewCookie = aNewCookie.join('!');
					sNewCookie = sNewCookie.replace('!!D9A7C5C9DFE3A79898',''); sNewCookie = sNewCookie.replace('!D9A7C5C9DFE3A79898','');
					g_oCookie.write('twym65',escape(sNewCookie));
					aOldCookie = aNewCookie;
				}
			}
 			this.show_link = (aOldCookie.length >= 3) ? "true" : "false";
 			var rlsNode = oDSN.selectSingleNode("/ALEXA/RLS");
 			if (rlsNode) { rlsNode.setAttribute("TWYMLINK",this.show_link); }
			return this.show_link;
		}
	}
	function WyrmDSN_enable(bEnable) {
 		g_oCookie.write(REG_DISABLE_WYM,((bEnable) ? 'false' : 'true'),"long");
		g_bWebYouMade = bEnable;
 		var oDSN = dsndad;
 		var rlsNode = oDSN.selectSingleNode("/ALEXA/RLS");
 		var bSetPref = true;
 		if ((bEnable) && (this.isRegistered(EVT_DATALOAD_PREFIX+"DadDSN"))) {
 			et.register(EVT_DATALOAD_PREFIX+"DadDSN",wyrmdsn);
 		} else if ((!bEnable) && (this.isRegistered(EVT_DATALOAD_PREFIX+"DadDSN")==false)) {
 			bSetPref = false;
 			et.unregister(EVT_DATALOAD_PREFIX+"DadDSN",wyrmdsn);
 			g_oCookie.write("twym65","");
 		}
 		if (rlsNode) { rlsNode.setAttribute("TWYMLINK",bSetPref); }
		BP_onNavigateComplete(null, BrowserProxy.Host.Browser, BrowserProxy.Host.Location);
	}
	function WyrmDSN_charencode(sString) {
		sString = escape(sString); var rVal=''; var rKey=this.key;
		while (rKey.length < sString.length) { rKey+=this.key; }
		 for (i=0; i<sString.length; i++) { rVal+=this.hexval(sString.charCodeAt(i)+rKey.charCodeAt(i));       }
//		for (i=0; i<sString.length; i++) { rVal+=String(sString.charCodeAt(i)+rKey.charCodeAt(i)).toString(16);       }
		return rVal;
	}
	function WyrmDSN_charunencode(hString) {
		if (hString!="undefined") {
			var rVal=''; var rKey = this.key; var cVal = null;
			while (rKey.length < (hString.length/2) ) { rKey+=this.key; }
			for (var i=0;i<hString.length;i+=2) {
				cVal = parseInt("0x"+hString.substring(i,i+2));
				cVal = cVal - parseInt(rKey.charCodeAt(i/2));
				rVal+= String.fromCharCode(cVal);
			}
			return unescape(rVal);
		} else {
			return '';
		}
	}
	function WyrmDSN_hexval(c) { return String("0123456789ABCDEF").charAt((c/16)&0x0F)+String("0123456789ABCDEF").charAt((c/1)&0x0F); }
	function WyrmDSN_notOmitted(sUrl) {
		if (sUrl == 'blank') { return false; }
		var rVal = true;
		for (var nVal in this.omit) { if (sUrl.indexOf(this.omit[nVal])!=-1) {rVal = false; break; } }
		return rVal;
	}
}
if ( typeof(oScriptReport) == 'object' )
	oScriptReport.load('dsn.class.js');
