// -------------------- Star Auto Retrieve odds xml -------------------------//

var JointConfigData = new Array();
var FixtureData = new Array();
var OddsData = new Array();
var TVData = new Array();
var OutputData = new Array();
var OutputDataLast = new Array();
var degdata =0;
var bfound = false;
var basyncProperty = true;
var ARR_ACTIVEX = ["Microsoft.XMLHTTP"];
var ARR_ACTIVEX2 = ["MSXML4.DOMDocument", "MSXML3.DOMDocument", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XmlDom"];

var METHOD1 = 1;
var METHOD2 = 2;
var METHOD3 = 3;

var Method = METHOD1;
// -------------------- Common function -------------------------//


function LoadTreeXMLData(inxmlDoc,inConfig) {
	var LoadData = new Array();
	var RowData = new Array();
	var root = inxmlDoc.documentElement;
	var root1 =null;
	var root2 =null;
	var k =0;
	for (var x = 0;x<root.childNodes.length;x++) {
		root1 = root.childNodes.item(x);
		for (var y = 0 ;y<root1.childNodes.length;y++) {
			root2 = root1.childNodes.item(y)
			for (var z = 0 ;z<root2.childNodes.length;z++) {
				RowData = setArrayNull(inConfig.length);
				Location = new Array(x,y,z);
				RowData = RetrieveTreeRowDataByLocation(root,Location,RowData);
				LoadData[k] = new Array();
				LoadData[k] = RowData;
				k++;
			}
		}
	}
	return LoadData;
}

function LoadSingleXMLData(inxmlDoc,inConfig,type) {
	var LoadData = new Array();
	var xmlEle = inxmlDoc.getElementsByTagName("Fixture");
	if (xmlEle.length==0) xmlEle = inxmlDoc.getElementsByTagName("CPN");
	if (type == 'TV') {
		xmlEle = inxmlDoc.getElementsByTagName("TV");
//		if (xmlEle.length==0) xmlEle = inxmlDoc.getElementsByTagName("tv");
		inConfig = tvXmlConfig;
	}

	for (var i=0;i<xmlEle.length;i++) {
		LoadData[i] = new Array(inConfig.length);
		for (var j=0;j<inConfig.length;j++) {
			if (xmlEle.item(i).getAttribute(inConfig[j])!=null)
				LoadData[i][j] = xmlEle.item(i).getAttribute(inConfig[j]);
			else
				LoadData[i][j] = -1;
		}

	}
	return LoadData;
}


function RetrieveTreeRowDataByLocation(xmlEle,aLocation,aRowData) {
	for (var i=0;i<aLocation.length;i++) {
		xmlEle = LocateEleByRowID(xmlEle,aLocation[i]);
			for (var y=0;y<oddsXmlConfig[getOddsType()].length;y++) {
				if (xmlEle.getAttribute(oddsXmlConfig[getOddsType()][y])!=null)
 				aRowData[y] = xmlEle.getAttribute(oddsXmlConfig[getOddsType()][y]);
			}
	}
	return aRowData;
}

function LocateEleByRowID(Ele,RowsID) {
	return Ele.childNodes.item(RowsID);
}

function setArrayNull(iSize) {
	var aReturn = new Array();
	for (var i=0; i<iSize;i++) {
		aReturn[i] = -1;
	}
	return aReturn;
}



function JointEle(StructureTable_id,EleId,row_id_0,row_id_1) {
	var JointEleData = new Array();
	switch(StructureTable_id) {
		case 0 :
			JointEleData = FixtureData[row_id_0][EleId];
			break;
		case 1 :
			JointEleData = OddsData[row_id_1][EleId];
			break;
	}
	return JointEleData;
}

function FindElement(inArray, Ele, StructureTbl_id, row_id) {
	for( j=0;j<inArray.length;j++) {
		if (inArray[j] == Ele && !bfound) {
		JointConfigData[0][row_id] = j;
		JointConfigData[1][row_id] = StructureTbl_id;
		bfound = true;}
	}
}

function JointData() {
	var tempArray = new Array();
	OutputDataLast = OutputData;
	OutputData = new Array();

	var k = 0;
	var j = 0;
	var tmpArr2 = new Array();
	var tmpVar = new Array();
	var tmpOffset;

	if ( // (FixtureData.length == 0 && OddsData.length == 0) ||
			(FixtureData.length >= 0 && OddsData.length == 0) ||
			(FixtureData.length == 0 && OddsData.length >= 0)) {
		//if (chp=="1") {alert("tt");OutputData = OddsData;}
	} else {
		for (i=0; i< OddsData.length; i++) {
			tempArray = JointConfigData[0];
			for (y=0;y<FixtureData.length;y++) {
				if (FixtureData[y][0] == OddsData[i][0]) {
					OutputData[k] = new Array();
					for (j =0; j < tempArray.length;j++ ) {
						OutputData[k][j] = JointEle(JointConfigData[1][j],JointConfigData[0][j],y,i) ;
					}
					k++;
				}
			}
		}
	}

	if( Sport == Soccer && getOddsType() == AH ){
		for( k = 0; k < OutputData.length; k++){
			tmpOffset = 0;
			tmpArr2 = new Array();

			if( OutputData[k][_od+_AH_vodds_offset] != -1 ){
				
				for( j = _od+_AH_vodds_offset+1; j < OutputData[k].length; j++){
					tmpArr2.push(OutputData[k][j]);
				}

				tmpVar = OutputData[k][_od+_AH_vodds_offset].split(","); 
		
				for( j=0; j < tmpVar.length; j++){
						OutputData[k][_od+_AH_vodds_offset+tmpOffset] = tmpVar[j];
						tmpOffset++;
				}
				
				for( j = 0; j < tmpArr2.length; j++){
					OutputData[k][_od+_AH_vodds_offset+tmpOffset+j] = tmpArr2[j];
				}
			}
		}
	}
	if (CheckDownloadedData()) {
		b_isDownloading = false;
		OddsArea();
	}
}


function CheckDownloadedData() {
	var CheckDownloaded = false;
	var chksum = 0;
	for (var i=0;i<ObjectEle.length;i++) {
		chkDownloadFlag[i] = 0;
		//eval("if("+ObjectEle[i]+".LastModifiedData.length>0) chkDownloadFlag[i] =1;");
	
		if(eval(ObjectEle[i]+'.LastModifiedData')) 	
		eval("if("+ObjectEle[i]+".LastModifiedData.documentElement) chkDownloadFlag[i] =1;");
	}

	for (i=0;i<chkDownloadFlag.length;i++) {
		chksum += chkDownloadFlag[i];
	}
	if (chksum == chkDownloadFlag.length) CheckDownloaded = true;

	return CheckDownloaded;
}


/*
function readFixture(x_doc,x_tag,a_item) {
	var st = new Array();
	var xmlDoc = document.createElement("XML");
	xmlDoc.load(x_doc);
	//Ele = xmlDoc.documentElement;

	var ele = xmlDoc.getElementsByTagName(x_tag);
	//var ele = Ele.getElementsByTagName(x_tag);

	for (i=0; i<ele.length; i++) {
		st[ele.item(i).getAttribute(a_item[0])] = new Array(ele.item(i).getAttribute(a_item[0]),ele.item(i).getAttribute(a_item[1]),ele.item(i).getAttribute(a_item[2]),ele.item(i).getAttribute(a_item[3]),ele.item(i).getAttribute(a_item[4]));
	}

	return st;
}
*/




// -------------------- Common function -------------------------//




function init_config() {
	try {
		JointConfigData[0] = new Array();
		JointConfigData[1] = new Array();
		chkDownloadFlag = new Array();
		for(var i=0;i<JointDataConfig[getOddsType()].length;i++) {
			bfound = false;
			FindElement(oddsXmlConfig[OC],JointDataConfig[getOddsType()][i],0,i);
			FindElement(oddsXmlConfig[getOddsType()],JointDataConfig[getOddsType()][i],1,i);
		}
	} catch (e) {
	}
}

// ------------- Package xmldoc ----------------- //

function xmlOddsData() {
	this.dataURL = null;
	this.timerHandler = null;
	this.n_timeOut = 5000;
	this.varname = null;
	this.targetTag = null;
	this.xmldoc = null;
	this.startRetrieve = start_loadXML;
	this.stopRetrieve = stop_loadXML;
	this.LoadXML = data_loadXML;
	this.doRetreive = data_doRetreive;
	this.bGetting = false;
	this.sGlobalName = null;
	this.init = xmlodds_init;
	this.debugcount = 0;
	this.LastModifiedData = null;
	this.chkDownloadFlag = 0;
	this.chkRetrieveOK = data_chkRetrieveOK;
	this.timer = null;
	this.chkTimer = null

	this.Method=123;
}

function xmlodds_init(ProcName, tagID, inTimeOut , inDataURL, inXmlConfigEle, insOutputData) {
	this.n_timeOut = inTimeOut;
	this.targetTag = tagID;
	this.varname = ProcName;
	this.XmlConfigEle = inXmlConfigEle;
	this.dataURL = inDataURL;
	this.sOutputData = insOutputData;
	var bACTIVEXFound = false;
	var i;

	if (window.XMLHttpRequest) {
		try {
			this.xmldoc = new window.XMLHttpRequest();
			bACTIVEXFound = true;
			Method = METHOD1;
		} catch (e) {
		}
	} else if (window.ActiveXObject) {
		for(i=0; !bACTIVEXFound && i < ARR_ACTIVEX.length; i++){
			try{

				this.xmldoc = new ActiveXObject(ARR_ACTIVEX[i]);
				bACTIVEXFound = true;
				Method = METHOD2;
			} catch (e) {
			}
		}
		for(i=0; i < ARR_ACTIVEX2.length && !bACTIVEXFound; i++) {
			try{
				this.xmldoc = new ActiveXObject(ARR_ACTIVEX2[i]);
				this.xmldoc.async = basyncProperty;
				bACTIVEXFound = true;
				Method = METHOD3;
			} catch (e) {
			}
		
		}
	} else {
		this.xmldoc = null;
	}

	if (!bACTIVEXFound) {
		throw "No DOM DOcument found on your computer.";
	}

	//if(basyncProperty) {
	//	eval("function chg_"+this.targetTag+"() {try{"+this.varname+".chkRetrieveOK();degdata +=1;}catch(e){}};");
	//	eval("this.xmldoc.onreadystatechange = chg_"+this.targetTag+";");
	//}
}

function start_loadXML() {
	try {
		clearTimeout(this.chkTimer);
		clearTimeout(this.timer);

		this.LoadXML();
 		this.timer = setTimeout("this." + this.varname + ".startRetrieve();",this.n_timeOut);

		if(basyncProperty) {
			this.chkTimer = setTimeout("this." + this.varname + ".chkRetrieveOK();",1000);	
		}
	} catch (e) {
		alert ("debug -- start_loadXML : " ,e);
	}
}

function stop_loadXML() {
	try {
 		clearTimeout(this.timer);
		clearTimeout(this.chkTimer);
		this.LastModifiedData = null;
	} catch (e) {
	}
}

function xmlToString(xmlObject)   
{   
    if (window.ActiveXObject) {
        return xmlObject.xml;   
    } else {   
        return (new XMLSerializer()).serializeToString(xmlObject);   
    }   
} 

function data_doRetreive() {
	var OutputData = new Array();
	var data;
	var len;

	if(Method != METHOD3) {
		data = this.xmldoc.responseXML;
		len = (data.documentElement? 1:0);
	} else {
		data = this.xmldoc.cloneNode(true);
		len = data.length;
	}
	if (this.LastModifiedData != null) {
		if (xmlToString(this.LastModifiedData) == xmlToString(data) ||
				data == null ||
				//data == "" ||
				this.xmldoc == null) {
			try {
				if (forceOddsArea && this.varname=='LoadOddsData2') {
					OutputDataLast = OutputData;
//					forceOddsArea = false;
					OddsArea();
				}
			} catch (e) {
			}
			return;
 		}
	}

	if ((len <=0 || data == null) && this.LastModifiedData != null) {
		return;
	}

	this.LastModifiedData = data;
	
	if (this.LastModifiedData.documentElement) this.chkDownloadFlag = 1;

	//if (this.LastModifiedData.length >0) this.chkDownloadFlag = 1;
	if (data.documentElement.hasChildNodes()) {
		if(!data.documentElement.firstChild.hasChildNodes()) {
			OutputData = LoadSingleXMLData(data,this.XmlConfigEle);
		} else {
			OutputData = LoadTreeXMLData(data,this.XmlConfigEle);
		}

		if (TVData.length==0) {
			if(!data.documentElement.firstChild.hasChildNodes()) {
				TVData = LoadSingleXMLData(data,this.XmlConfigEle, 'TV');
			} else {
//				TVData = LoadTreeXMLData(this.xmldoc,this.XmlConfigEle);
			}
		}
	}

	eval(this.sOutputData + "= OutputData");
	JointData();
}

function data_chkRetrieveOK() {
	clearTimeout(this.chkTimer);
	degdata +=1;
	if (this.xmldoc.readyState != 4) {
		this.bGetting = true;
		this.chkTimer = setTimeout("this." + this.varname + ".chkRetrieveOK();",1000);
		return;
	};

	this.doRetreive();
}


function data_loadXML() {
	try {
 		if (!this.bGetting) {
 			//Edit refer to job 1256
			var noCache=( (bBO || bCMS) ? "" : "?nocache="+Math.round(Math.random()*65000));

			if (Method != METHOD3) {
				this.xmldoc.open("GET", this.dataURL+noCache, basyncProperty );
				this.xmldoc.send(null);
			} else {
				this.xmldoc.load(this.dataURL+noCache);
			}

		};
		if (this.xmldoc.async == false)
			this.chkRetrieveOK();
		this.bGetting = false;
	} catch (e) {
		alert("debug -- loadXML :" + e);
	}
}


/*
function readTV(x_doc,x_tag,a_item) {
	var st = new Array()
	var xdoc = new ActiveXObject("Microsoft.XMLDOM");
	xdoc.async = false;
	xdoc.load(x_doc);

	var ele = xdoc.getElementsByTagName(x_tag);
	for (i=0; i<ele.length; i++) {
		st[ele.item(i).getAttribute(a_item[0])] = new Array(ele.item(i).getAttribute(a_item[0]),ele.item(i).getAttribute(a_item[1]),ele.item(i).getAttribute(a_item[2]),ele.item(i).getAttribute(a_item[3]),ele.item(i).getAttribute(a_item[4]));
	}

	return st;
}
*/
// ------------- Package xmldoc ----------------- //
// -------------------- End Auto Retrieve odds xml -------------------------//
