//---------------------------------------------------------------------------
// Filename: ClassicAjax.js
// This functions call the Ajax Interface for classic bet programms
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// Global Varibales
//----------------------------------------------------------------------------
//

// The URL for the File Interface (test only)
// var classicServiceURL='/cgi-bin/dynamicclassicprogram.pl';  // (Set in HTML/JSP)

// THE URL for the Online Interface
// var classicServiceURL='dynamicclassicprogram.jsp?sessionID=1231231-1231231-13';

//  the round we want data for
// var j_round=roundNumber; // var roundNumber must be Set by the JSP in the main HTML File

// TIMEOUTs between Ajax Requests (definied in HTML/JSP)
// var CLASSICSERVICE_TIMEOUT=5000; // 5000 ==  5 Sec
// var CLASSICSERVICE_ERRORTIMEOUT=60000; // 1 Min.
// Test only 
var roundtrip=0; // If set to 1 cycling restarts with j_cycle=0 after last sequence (file interface only)
var classicReq=new Object();
var j_cycle=0;
var cache = new Array();
//-------------------------------------------------------------------------------

function initClassicAjax() {	
	if(CLASSICSERVICE_TIMEOUT!=-1) {
		var url = classicServiceURL+"&j_round="+j_round+"&j_cycle="+j_cycle+"&ms="+(new Date().getTime());
		// window.status=url;
		initClassicRequest(url); 
		classicReq.onreadystatechange = processClassicRequest;    	
		classicReq.send(null);
	}
}

function initClassicRequest(url) {    
	if (window.XMLHttpRequest) {        
		classicReq = new XMLHttpRequest();    
	} 
	else if (window.ActiveXObject) {        
		isIE = true;        
		classicReq = new ActiveXObject("Microsoft.XMLHTTP");    
	}    
	classicReq.open("GET", url, true);
}

function cacheIsDirty(aBetId,field,value) {
	var dirty=false;
	if (cache[aBetId] == undefined) {
		cache[aBetId]=new Array();
		cache[aBetId][field]=value;
		dirty=true;
	} else if (cache[aBetId][field] == undefined) {
		cache[aBetId][field]=value;
		dirty=true;
	} else if (cache[aBetId][field] != value) {
		cache[aBetId][field]=value;
		dirty=true;
	}
	return(dirty);
}

function processClassicRequest() {
	if (classicReq.readyState == 4) {     
		if (classicReq.status == 200) {
			j_cycle++;
			var warningMessage=''; 
			var betArray = classicReq.responseXML.getElementsByTagName('bet'); 	// getting an Array of <bet> nodes
			for(var i=0;i<betArray.length;i++) {  				// for each <bet> do ....
				var betId=betArray[i].getAttribute('id');		// get the id Attrinute of <bet id="xxx">
				if (document.getElementById('GID'+betId+'_TR') != null) {	// check if line exists
					var nodes = betArray[i].firstChild;			// get the first child of <bet> (normaly <betableuntil_day>xxx</betableuntil_day>)
					while(nodes != null) {					// at the and of the while we switch nodes to nodes.nextSibling
												// so we walk through all cilds of <bet>
						if(nodes.nodeType!=3) {		 		// skip text nodes at this point (chr(13) and tabs)
							switch (nodes.nodeName) {
							case "betableuntil_day":if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											setValue('GID'+betId+'_DATE',nodes.firstChild.nodeValue);
										}
										break;
							case "betableuntil_time":if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											setValue('GID'+betId+'_TIME',nodes.firstChild.nodeValue);
										}
										break;
							case "quote1":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkQuote(betId,'1',nodes.firstChild.nodeValue);
										}
										break;
							case "status1":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkStatus(betId,'1',nodes.firstChild.nodeValue);
										}
										break;
							case "quoteX":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkQuote(betId,'X',nodes.firstChild.nodeValue);
										}
										break;
							case "statusX":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkStatus(betId,'X',nodes.firstChild.nodeValue);
										}
										break;
							case "quote2":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkQuote(betId,'2',nodes.firstChild.nodeValue);
										}
										break;
							case "status2":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkStatus(betId,'2',nodes.firstChild.nodeValue);
										}
										break;
							case "quote1X":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkQuote(betId,'1X',nodes.firstChild.nodeValue);
										}
										break;
							case "quote12":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkQuote(betId,'12',nodes.firstChild.nodeValue);
										}
										break;
							case "quoteX2":		if(cacheIsDirty(betId,nodes.nodeName,nodes.firstChild.nodeValue)) {
											warningMessage+=checkQuote(betId,'X2',nodes.firstChild.nodeValue);
										}
										break;
							case "tip":		var aTipp = nodes.firstChild ? nodes.firstChild.nodeValue : '&nbsp;';
										if(cacheIsDirty(betId,nodes.nodeName,aTipp)) {
											document.getElementById('GID'+betId+'_Tipp').innerHTML=aTipp;
										}
										break;
							case "result":		var aResult=nodes.firstChild ? nodes.firstChild.nodeValue: '&nbsp;';
										var aResultType=null;
										aResultType=nodes.getAttribute('type');
										if((cacheIsDirty(betId,nodes.nodeName,aResult)) ||(cacheIsDirty(betId,nodes.nodeName+':type',aResultType)) ) {
											if(document.getElementById('GID'+betId+'_RES') != null) {
												var resultElement=document.getElementById('GID'+betId+'_RES');
												resultElement.innerHTML=aResult;
												if(aResultType=='1') {
													resultElement.className='normalTextRed';
												} else {
													resultElement.className='normalTextBlack';
												}
											} else {
												var aResultStyle=' class=\"normalTextBlack\"';
												if(aResultType=='1') {
													aResultStyle=' class=\".normalTextRed\"';	
												}
												document.getElementById('GID'+betId+'_ERG').innerHTML='<span id=\"GID'+betId+'_RES\"+aResultStyle>'+aResult+'</span>';
											}
										}
										break;
							case "detailid":	var aDetail=nodes.firstChild ? nodes.firstChild.nodeValue: '';
										if((aDetail!='') && (aDetail!='-1')) {
											if(cacheIsDirty(betId,nodes.nodeName,aDetail)) {
												setBetradarLink(betId, aDetail);
											}
										}
										break;
							case "status":		var aStatus=nodes.firstChild ? nodes.firstChild.nodeValue: '';
										if(aStatus!='') {
											if(cacheIsDirty(betId,nodes.nodeName,aStatus)) {
												warningMessage+=setBetStatus(betId,aStatus);
											}
										}
										break;
							case 'statusText':	var aStatusText=nodes.firstChild ? nodes.firstChild.nodeValue: '';
										if(cacheIsDirty(betId,nodes.nodeName,aStatusText)) {
											if(aStatusText!='') {
												setBetStatusText(betId,aStatusText);
											} else {
												setBetStatus(betId,0)
											}
										}
										break;
							default: break;
							}					// END OF SWITCH nodes.nodeName
						}						// END OF if(nodes.nodeType!=3)
						nodes = nodes.nextSibling;			// switch to the next sibling (== next child of <bet>)
					}							// END OF while(nodes != null)
				}								// END OF if line exists
			} 								// END OF "for each <bet> do ...."
			if(warningMessage!='') {
				alert(warningMessage);
			}
			setTimeout("initClassicAjax()", CLASSICSERVICE_TIMEOUT);	// do the next poll after CLASSICSERVICE_TIMEOUT again and agian and again....
		} else {
			if ((classicReq.status == 404) && (roundtrip==1)) {		// if we did not find a XML file for the current cycle
				j_cycle=0;						// and the variable roundtrip in this script was set to 1
				initClassicAjax();					// we reset cycle to 0 (test mode only!)
			} else {							// and start Ajax again.
				setTimeout("initClassicAjax()", CLASSICSERVICE_ERRORTIMEOUT);							
			}
		}
	}
}

function setValue(elementID,value) {
	var element = document.getElementById(elementID);
	if (element != null) {
		element.innerHTML=value;
	}
}

function unformatQuote(aFormatedQuote) {
	var index=aFormatedQuote.lastIndexOf(';');
	aFormatedQuote=aFormatedQuote.substring(index+1,aFormatedQuote.length);
	var aQuote=aFormatedQuote.replace(/,/,'');
	return(aQuote);
}

function checkQuote(currentBetId,currentTipp,newQuote) {
	var newFormatedQuote=quote2String(newQuote);
	var oldFormatedQuote='';
	if (currentTipp.length == 1) {
		oldFormatedQuote=document.getElementById('GID'+currentBetId+'_Q'+currentTipp).innerHTML;
		document.getElementById('GID'+currentBetId+'_Q'+currentTipp).innerHTML=newFormatedQuote;
	} else {
		oldQuote=doubleQuoteArray[currentBetId+"_"+currentTipp];
		if (oldQuote == -1)
			oldQuote = UNDEFINED_QUOTE;
		oldFormatedQuote = quote2String(oldQuote);
		doubleQuoteArray[currentBetId+"_"+currentTipp]=newQuote;
		if (newQuote == -1) {
			newQuote = UNDEFINED_QUOTE;
	 		newFormatedQuote=quote2String(newQuote);
		}

	}
	if (oldFormatedQuote != newFormatedQuote) {
		for (var i=0;i<TicketArray.length; i++) {
			if (currentBetId == TicketArray[i]["betId"] && TicketArray[i]["tipp"] == currentTipp) {
				TicketArray[i]["quote"]=newQuote;
				editMode=true;
				drawBetLines();
				checkSystemOption();
				return('Die Quote des Tipps '+currentTipp+' der Wette '+TicketArray[i]["short_home"]+' : '+TicketArray[i]["short_guest"]+' hat sich von '+oldFormatedQuote+' auf '+newFormatedQuote+' verändert\n'); 	
			}
		}
	}
	return('');
}

function checkStatus(currentBetId,currentTipp,newStatus) {
	var msg = '';
	var statusElement = document.getElementById('GID'+currentBetId+'_CHBX_'+currentTipp); // GID123_CHBX_2
	var oldStatus = 2; // checkbox not visible
	if (statusElement != null && statusElement.tagName == 'INPUT') 
		oldStatus = 0;	// currently betable
	if (statusElement != null && statusElement.tagName == 'IMG')
		oldStatus = 1;	// currently blocked
	if (oldStatus != newStatus) {
		var parentElement = findColumnParent(statusElement);
		if (newStatus == 0) {
			parentElement.innerHTML='<INPUT type=\"checkbox\" onClick=\"checkTipp(this);\" value=\"\" id=\"GID'+currentBetId+'_CHBX_'+currentTipp+'\" />';
			removeFromFilter(currentBetId);
		} else {
			for (var i=0; i<TicketArray.length; i++) {
				if (currentBetId == TicketArray[i]["betId"] && TicketArray[i]["tipp"].indexOf(currentTipp) > -1) {
					var home = TicketArray[i]["short_home"];
					var guest = TicketArray[i]["short_guest"];
					msg+='Der Tipp '+TicketArray[i]["tipp"]+' der Wette '+home+' : '+guest+' ist leider nicht mehr spielbar\n';
					var uncheck = document.getElementById("GID"+currentBetId+"_CHBX_"+TicketArray[i]["tipp"].substr(0,1));
					var uncheck2 = null;
					if (TicketArray[i]["tipp"].length > 1)
						uncheck2 = document.getElementById("GID"+currentBetId+"_CHBX_"+TicketArray[i]["tipp"].substr(1,1));
					uncheck.click();
					if (uncheck2 != null)
						uncheck2.click();
				}
			}
			if (newStatus == 1) {
				parentElement.innerHTML='<IMG id=\"GID'+currentBetId+'_CHBX_'+currentTipp+'\" src=\"../images/gesperrt.gif\" />';
			} else {
				parentElement.innerHTML='<SPAN id=\"GID'+currentBetId+'_CHBX_'+currentTipp+'\">&nbsp;</SPAN>';
				addToFilter(currentBetId);
			}
		}
	}
	return(msg);
}

function removeFromFilter(currentBetId) {
	var blockedGame = 'GID'+currentBetId+'_TR';
	var blockedGameArray = filters['OPENGAMES'];
	var newblockedGameArray = new Array();
	for (var i=0; i<blockedGameArray.length; i++) {
		if (blockedGameArray[i] != blockedGame)
			newblockedGameArray.push(blockedGameArray[i]);
	}
	filters['OPENGAMES'] = newblockedGameArray;
}

function addToFilter(currentBetId) {
	var blocked=false;
	var blockedGame='GID'+currentBetId+'_TR'; 
	var blockedGameArray=filters['OPENGAMES'];
	for(var i=0;i<blockedGameArray.length;i++) {
		if(blockedGameArray[i]==blockedGame) {
			blocked=true;
		}
	}
	if(blocked==false) {
		blockedGameArray.push(blockedGame);
		filters['OPENGAMES']=blockedGameArray;
	}
}


function setBetradarLink(currentBetId, brBetID) {
	var homeTeam=document.getElementById('GID'+currentBetId+'_Home').innerHTML;
	var guestTeam=document.getElementById('GID'+currentBetId+'_Guest').innerHTML;
	guestTeam=guestTeam.replace(/'/g,"\\'");
	homeTeam=homeTeam.replace(/'/g,"\\'");
	var result=document.getElementById('GID'+currentBetId+'_ERG').innerHTML;
	var resultClassName='normal_font';
	if(document.getElementById('GID'+currentBetId+'_RES')!=null) {
		var resultElement=document.getElementById('GID'+currentBetId+'_RES');
		result=resultElement.innerHTML;
		resultClassName=resultElement.className; /* maybe red_font */
	}
	var resultSpan='<span id=\"GID'+currentBetId+'_RES\" class=\"'+resultClassName+'\">'+result+'</span>';
	var betradarLink='<a href=\"javascript:startBetDetails(\''+brBetID+'\',\''+homeTeam+'\',\''+guestTeam+'\');showElement(\'dragDiv\');\" class=\"'+resultClassName+'\">';
	betradarLink+=resultSpan+'</a>';
	document.getElementById('GID'+currentBetId+'_ERG').innerHTML=betradarLink;
}

function setBetStatus(currentBetId,newStatus) {
	var testElement=document.getElementById('GID'+currentBetId+'_CHBX_1'); // GID123_CHBX_1
	oldStatus=0;
	if(testElement==null) {
		oldStatus=1;
	} else {
		if(testElement.style.display=='none') {
			oldStatus=1;
		} else {
			if(testElement.style.display=='') {
				testElement.style.display='inline';
			}
		}
	}
	var statusElement=document.getElementById('GID'+currentBetId+'_STATUS');	// GID_123_STATUS

	var quote1Element=document.getElementById('GID'+currentBetId+'_Q1');		// GID_123_Q1
	var checkBox1Element=document.getElementById('GID'+currentBetId+'_CHBX_1'); 	// GID123_CHBX_1 
	var checkBox1TDElement=findColumnParent(checkBox1Element);			// TD ohne betID

	var quoteXElement=document.getElementById('GID'+currentBetId+'_QX');		// GID_123_QX
	var checkBoxXElement=document.getElementById('GID'+currentBetId+'_CHBX_X'); 	// GID123_CHBX_X
	var checkBoxXTDElement=findColumnParent(checkBoxXElement);			// TD ohne betID

	var quote2Element=document.getElementById('GID'+currentBetId+'_Q2');		// GID_123_Q2
	var checkBox2Element=document.getElementById('GID'+currentBetId+'_CHBX_2'); 	// GID123_CHBX_2
	var checkBox2TDElement=findColumnParent(checkBox2Element);			// TD ohne betID

	var displayStr=document.all?'inline':'table-cell';	

	if(oldStatus!=newStatus) {
		if(newStatus==0) { // betable again

			statusElement.style.display='none';

			quote1Element.style.display=displayStr;
			checkBox1TDElement.innerHTML='<INPUT type=\"checkbox\" onClick=\"checkTipp(this);\" value=\"\" id=\"GID'+currentBetId+'_CHBX_1\" />';
			checkBox1Element=document.getElementById('GID'+currentBetId+'_CHBX_1');
			checkBox1Element.style.display='inline';
			checkBox1TDElement.style.display=displayStr;

			quoteXElement.style.display=displayStr;
			checkBoxXTDElement.innerHTML='<INPUT type=\"checkbox\" onClick=\"checkTipp(this);\" value=\"\" id=\"GID'+currentBetId+'_CHBX_X\" />';
			checkBoxXElement=document.getElementById('GID'+currentBetId+'_CHBX_X');
			checkBoxXElement.style.display='inline';
			checkBoxXTDElement.style.display=displayStr;

			quote2Element.style.display=displayStr;
			checkBox2TDElement.innerHTML='<INPUT type=\"checkbox\" onClick=\"checkTipp(this);\" value=\"\" id=\"GID'+currentBetId+'_CHBX_2\" />';
			checkBox2Element=document.getElementById('GID'+currentBetId+'_CHBX_2');
			checkBox2Element.style.display='inline';
			checkBox2TDElement.style.display=displayStr;

		} else { // now blocked
			checkBox1TDElement.innerHTML='<SPAN id=\"GID'+currentBetId+'_CHBX_1\">&nbsp;</SPAN>';
			checkBox1Element=document.getElementById('GID'+currentBetId+'_CHBX_1');
			checkBox1Element.style.display='none';

			checkBoxXTDElement.innerHTML='<SPAN id=\"GID'+currentBetId+'_CHBX_X\">&nbsp;</SPAN>';
			checkBoxXElement=document.getElementById('GID'+currentBetId+'_CHBX_X');
			checkBoxXElement.style.display='none';

			checkBox2TDElement.innerHTML='<SPAN id=\"GID'+currentBetId+'_CHBX_2\">&nbsp;</SPAN>';
			checkBox2Element=document.getElementById('GID'+currentBetId+'_CHBX_2');
			checkBox2Element.style.display='none';

			for(var i=0;i<TicketArray.length;i++) {
				if(currentBetId==TicketArray[i]["betId"]) {
					var home=TicketArray[i]["short_home"];
					var guest=TicketArray[i]["short_guest"];
					deleteTippFromTicket(currentBetId);
					drawBetLines();
					checkSystemOption();
					return('Die Wette '+home+' : '+guest+' ist leider nicht mehr spielbar\n');
				}
			}

		}
	}
	return('');
}

function setBetStatusText(currentBetId,newStatusText) {
	var testElement=document.getElementById('GID'+currentBetId+'_CHBX_1'); // GID123_CHBX_1
	oldStatus=0;
	if(testElement==null) {
		oldStatus=1;
	} else {
		if(testElement.style.display=='none') {
			oldStatus=1;
		}
	}
	if(oldStatus==0) {	// Just if we get a statustext and status is not "blocked"
		setBetStatus(currentBetId,1);
	}
	var quote1Element=document.getElementById('GID'+currentBetId+'_Q1');		// GID123_Q1
	var checkBox1Element=document.getElementById('GID'+currentBetId+'_CHBX_1');	// GID123_CHBX_1
	var checkBox1TDElement=findColumnParent(checkBox1Element);			// TD ohne betID
	quote1Element.style.display='none';
	checkBox1Element.style.display='none';
	checkBox1TDElement.style.display='none';

	var quoteXElement=document.getElementById('GID'+currentBetId+'_QX');		// GID123_QX
	var checkBoxXElement=document.getElementById('GID'+currentBetId+'_CHBX_X'); 	// GID123_CHBX_X
	var checkBoxXTDElement=findColumnParent(checkBoxXElement);			// TD ohne betID
	quoteXElement.style.display='none';
	checkBoxXElement.style.display='none';
	checkBoxXTDElement.style.display='none';

	var quote2Element=document.getElementById('GID'+currentBetId+'_Q2');		// GID123_Q2
	var checkBox2Element=document.getElementById('GID'+currentBetId+'_CHBX_2'); 	// GID123_CHBX_2
	var checkBox2TDElement=findColumnParent(checkBox2Element);			// TD ohne betID
	quote2Element.style.display='none';
	checkBox2Element.style.display='none';
	checkBox2TDElement.style.display='none';

	var statusElement=document.getElementById('GID'+currentBetId+'_STATUS');	// GID123_STATUS
	var statusTextElement=document.getElementById('GID'+currentBetId+'_STATUSTEXT');// GID123_STATUS_TEXT
	statusTextElement.innerHTML=newStatusText;
	var displayStr=document.all?'inline':'table-cell';
	statusElement.style.display=displayStr;	
}
