// <script language="Javascript">
//<!-- Copyright 1999-2006 Alexa Internet, Inc.  All Rights Reserved. j

function array_contains(aArray, sVal) { 
	for (var si in aArray) { if(aArray[si] == sVal) { return true; } }
	return false;
}
function AlxAll() {
	this.objects=new Object();this.last_error=new Array();this.unique=new Unique();
	this.register=alxAll_register; this.clobberUID=alxAll_clobberUID; this.clobberGID=alxAll_clobberGID;
	function alxAll_register(oObject) {
		if (!oObject) { return ''; }
		if (!this.objects[oObject.oType]) { this.objects[oObject.oType]=new Array(); }
		regUID = this.unique.get(oObject.oType);
		if (oObject.oID!='') { for (var si in this.objects) { for (var sObject in this.objects[si]) { if (this.objects[si][sObject].oID==oObject.oID) { delete this.objects[si][sObject]; this.objects[si][regUID]=oObject; } } } }
		oObject.oID=''; 
		this.objects[oObject.oType][regUID]=oObject; 
		return regUID;
	}
	function alxAll_clobberUID(oObject) {
		for (var si in this.objects) { for (var sObject in this.objects[si]) { if (this.objects[si][sObject]!=null) { if (this.objects[si][sObject].oID==oObject.oID) { delete this.objects[si][sObject]; } } } }
	}
	function alxAll_clobberGID(oObject) {
		for(var si in this.objects) { for (var sObject in this.objects[oObject.oType]) { this.clobberUID(oObject); } }
	}
}
function Unique() {
	var o = new Object();o.m_nVal = new Number(0);o.m_nUnique = Unique.nUnique++;o.get = Unique_get;return o;
	function Unique_get(sType) {
		var myChar=0;
		var rVal = new String();var newVal = new String();
		if (eval(sType + ".ID")) {
			rVal = eval(sType + ".ID");
		} else {
			for (i = 0; i < sType.length; i++) { 
				myChar=sType.charCodeAt(i)-65;
				newVal += myChar.toString(16); }
			if (newVal.length > 24) { newVal = newVal.substring(0,24); }
			rVal = newVal;
//			for (i=0; i<newVal.length; i+=6) { rVal += newVal.substring(i,i+6)+"-"; }
			eval(sType + ".ID = '" + rVal +"'");
		}
		rVal += String(65+(this.m_nVal%26)).toString(16)+String(this.m_nUnique).toString(16)+"_"+String(this.m_nVal++).toString(16);

		return rVal;
	}
}
Unique.nUnique = 1;
function AlxObj() {
	this.oType=new String("AlxObj");this.oID=new String();this.last_error= new String();
	this.create=AlxObj_create;this.destroy=AlxObj_destroy;
	this.isRegistered = AlxObj_isRegistered;
//	this.create();
	function AlxObj_create() { this.oID = alxAll.register(this); }
	function AlxObj_destroy() { alxAll.clobberUID(this); }
	function AlxObj_isRegistered(sEvent) { return et.check(sEvent,this); }
}
function XMLParser(oXMLDOM) {
	var o = new AlxObj();
	o.oType = "XMLParser"; o.XMLDOM = oXMLDOM; o.get = XMLParser_get; o.transform = XMLParser_transform;
	o.create();
	return o;
	function XMLParser_get(sXPath) {
		var oNodeList; var oNode; var aReturn = new Array(); var oItems; var oItem; var oAttributes; var oAttribute; var nItems = 0;
		if ( !this.XMLDOM.parsed ) { return null; }
		oNodeList = this.XMLDOM.selectNodes(sXPath);
		if ( oNodeList.length == 0 ) { return ''; }
		oItems = new Enumerator(oNodeList);
		for (oItems.moveFirst(); !oItems.atEnd(); oItems.moveNext()) {
			oItem = oItems.item();
			if ( oItem.attributes ) {
				oAttributes = new Enumerator(oItem.attributes); aReturn[nItems] = new Object();count = 0;
				for (oAttributes.moveFirst(); !oAttributes.atEnd(); oAttributes.moveNext()) { count++; oAttribute = oAttributes.item(); aReturn[nItems][oAttribute.name.toLowerCase()] = oAttribute.value; }
				if ((count == 0) && (oItem.text != '')) {	return oItem.text; }
			} else { return oItem.text; }
			nItems++;
		}
		return aReturn;
	}
	function XMLParser_transform(oStyleXMLDOM) {
		if ( oStyleXMLDOM.xml == '' ) { return ''; }
		try {
			var sResult = this.XMLDOM.transformNode(oStyleXMLDOM); 
		} catch(ex) {
			// probably out of disk space.
			var sResult = "";
		}
		return sResult;
	}
}

function Timer()
{
	var o = new AlxObj();
	o.oType = "Timer";
	o.dateStart = parseInt(new Date().getTime());
	o.elapsed = Timer_elapsed;
	o.create();
	return o;
	function Timer_elapsed()
	{
		return parseInt(new Date().getTime()) - parseInt(this.dateStart);
	}
}
if ( typeof(oScriptReport) == 'object' )
	oScriptReport.load('api.class.js');
