// JavaScript Document
var contests=["Quiksilver Pro Gold Coast","Rip Curl Pro Bells Beach","Billabong Pro Tahiti","Rip Curl Search Somewhere in Chile","Billabong Pro Jeffreys Bay","Boost Mobile Pro Trestles","Quiksilver Pro France","Billabong Pro Mundaka","Nova Schin Festival Brazil","Billabong Pipeline Masters, Hawaii"];
var contestsSlots;

function initTableau() {
	var tempHTML="";
	var nbSurfers=surfers.firstChild.childNodes.length;
	tempHTML+="<table cellspacing='0' cellpadding='2'>";
	for (var i=0;i<nbSurfers;i++) {
		var tempResults=surfers.firstChild.childNodes[i].getAttribute('results').split(";");
		var nbResults=tempResults.length;
		var tempTotal=0;
		for (var j=0;j<nbResults;j++) {
			tempTotal+=place2points(tempResults[j]);
		}
		surfers.firstChild.childNodes[i].setAttribute('totalreel',tempTotal);
		surfers.firstChild.childNodes[i].setAttribute('totalsimul',tempTotal);
	}
	
	initForecastXml(nbResults);
	
	var index=msort('totalreel');
	
	var previousRating=1;

	for (var i=0;i<nbSurfers;i++) {
		if (isIe) {
			tempHTML+='<tr onMouseOver="this.className=\'trHover\';" onMouseOut="this.className=\'\'">';
		} else  {
			tempHTML+="<tr>";
		}
		
		
		if (i>0) {
			if (surfers.firstChild.childNodes[index[i]].getAttribute('totalreel')!=surfers.firstChild.childNodes[index[i-1]].getAttribute('totalreel')) {
				previousRating=(i+1);
			}
		}
		var tempName=nameOfSurfer(index[i]);
		tempHTML+="<td width='25px'>"+previousRating+"</td>";
		tempHTML+="<td width='140px'>"+tempName+"</td>";
		tempHTML+="<td width='35px'>"+surfers.firstChild.childNodes[index[i]].getAttribute('totalreel')+"</td>";
		
		var tempResults=surfers.firstChild.childNodes[index[i]].getAttribute('results').split(";");
		for (var j=0;j<10;j++) {
			if (tempResults[j]) {
				tempHTML+="<td class='cell25' title='result of "+tempName+" for "+contests[j]+"'>"+tempResults[j]+"</td>";
			} else {
				tempHTML+="<td id='simul_"+index[i]+"_"+j+"' class='cell25 fakeCursor' title='click to edit result of "+tempName+" for "+contests[j]+"' onClick='editResult("+index[i]+","+j+")'>&nbsp;</td>";
			}
			
		}
		
		tempHTML+="</tr>";
	}
	tempHTML+="</table>";
	$('tableauResultats').innerHTML=tempHTML;
	updateSimulation();
}

function initForecastXml(nbResults) {
	//alert(nbResults);
	
	var xmlstring="";
	xmlstring+="<contests>";
	for (var i=0;i<nbResults;i++) {
		xmlstring+="<contest />";
	}
	for (var i=nbResults;i<10;i++) {
		xmlstring+="<contest>";
		xmlstring+="<place lib='1st' val='1' totalSlots='1' pris='0' />";
		xmlstring+="<place lib='2nd' val='2' totalSlots='1' pris='0' />";
		xmlstring+="<place lib='3rd' val='3' totalSlots='2' pris='0' />";
		xmlstring+="<place lib='5th' val='5' totalSlots='4' pris='0' />";
		xmlstring+="<place lib='9th' val='9' totalSlots='8' pris='0' />";
		xmlstring+="<place lib='17th' val='17' totalSlots='16' pris='0' />";
		xmlstring+="<place lib='33rd/inj' val='33' totalSlots='16' pris='0' />";
		xmlstring+="<place lib='no show' val='0' totalSlots='16' pris='0' />";
		xmlstring+="</contest>";
	}
	xmlstring+="</contests>";
	//alert(xmlstring);
	if (window.ActiveXObject) {
		contestsSlots = new ActiveXObject("Microsoft.XMLDOM");
		contestsSlots.loadXML(xmlstring);
		
	} else {
		contestsSlots = (new DOMParser()).parseFromString(xmlstring, "text/xml");
	}
	
}
function place2points(place) {
	var points=0;
	switch (place) {
		case "1":
			points=1200;
			break;
		case "2":
			points=1032;
			break;
		case "3":
			points=876;
			break;
		case "5":
			points=732;
			break;
		case "9":
			points=600;
			break;
		case "17":
			points=410;
			break;
		case "0":
			points=0;
			break;			
		default:
			points=225;
			break;
	}
	return points;
}
function place2nchild(place) {
	var child=0;
	switch (place) {
		case "1":
			child=0;
			break;
		case "2":
			child=1;
			break;
		case "3":
			child=2;
			break;
		case "5":
			child=3;
			break;
		case "9":
			child=4;
			break;
		case "17":
			child=5;
			break;
		case "0":
			child=7;
			break;			
		default:
			child=6;
			break;
	}
	return child;	
}

function editResult(nsurfer,ncontest) {
	var tempHTML="";
	
	var tempPos=Position.cumulativeOffset($('simul_'+nsurfer+'_'+ncontest));
	
	var tempResults=surfers.firstChild.childNodes[nsurfer].getAttribute('resultssimul').split(';');
	var tempName=nameOfSurfer(nsurfer);
	
	if (tempResults[ncontest]) {
		tempHTML+="Result of "+tempName+" for "+contests[ncontest]+" :<br/><br/>";
		tempHTML+="<span class='bigText'>"+tempResults[ncontest]+"</span>";
		tempHTML+="<br/><br/>";
		tempHTML+="<a onmouseover='ieLinkOver(this)' onmouseout='ieLinkOut(this)' onClick='deleteResult("+nsurfer+","+ncontest+")'>change</a> - <a onmouseover='ieLinkOver(this)' onmouseout='ieLinkOut(this)' onClick='fadeResult()'>cancel</a>";
	} else {
	
		tempHTML+="Enter the result of "+tempName+" for "+contests[ncontest]+" :<br/><br/>";
	
		tempHTML+=drawSelectContest(ncontest)+"<br/><br/>";
		
		tempHTML+="<a onmouseover='ieLinkOver(this)' onmouseout='ieLinkOut(this)' onClick='validateResult("+nsurfer+","+ncontest+")'>ok</a> - <a onmouseover='ieLinkOver(this)' onmouseout='ieLinkOut(this)' onClick='fadeResult()'>cancel</a>";
	
	}
	
	$('inputScore').innerHTML=tempHTML;
	new Effect.Appear('inputScore',{duration:0.3});
	new Effect.Move ('inputScore',{ x: tempPos[0]+25, y:tempPos[1]-100 , mode: 'absolute',duration:0.3});

}
function deleteResult(nsurfer,ncontest) {
	var tempResults=surfers.firstChild.childNodes[nsurfer].getAttribute('resultssimul').split(';');
	var deletedPlace=tempResults[ncontest];
	tempResults[ncontest]="";
	var totalSimul=0;
	
	
	var best8=tempResults.clone();
	var notNull=0;
	for (var i=0;i<10;i++) {
		if (tempResults[i]) notNull++;
	}
	if (notNull==9) {
		best8=best8.sort(byNumber);
		while(parseInt(best8[0])==0) {
			best8.shift();
			
		}
		best8.pop();
	}
	for (var i=0;i<8;i++) {
		
		if (best8[i]) {
			
			totalSimul+=place2points(best8[i]);
			
		}
	
	}
	tempResults=tempResults.join(";");
	
	var tempVal=place2nchild(deletedPlace);
	
	var tempPris=parseInt(contestsSlots.firstChild.childNodes[ncontest].childNodes[tempVal].getAttribute('pris'));
	tempPris--;
	contestsSlots.firstChild.childNodes[ncontest].childNodes[tempVal].setAttribute('pris',tempPris);
	
	surfers.firstChild.childNodes[nsurfer].setAttribute('resultssimul',tempResults);
	surfers.firstChild.childNodes[nsurfer].setAttribute('totalsimul',totalSimul);
	$('simul_'+nsurfer+'_'+ncontest).innerHTML="&nbsp;";
	updateSimulation();
	editResult(nsurfer,ncontest);
}

function fadeResult() {
	new Effect.Fade('inputScore',{duration:0.3});
}

function validateResult(nsurfer,ncontest) {
	
	var tempVal=$('forecastResult').value;
	var tempPris=parseInt(contestsSlots.firstChild.childNodes[ncontest].childNodes[tempVal].getAttribute('pris'));
	tempPris++;
	$('simul_'+nsurfer+'_'+ncontest).innerHTML=contestsSlots.firstChild.childNodes[ncontest].childNodes[tempVal].getAttribute('val');
	
	contestsSlots.firstChild.childNodes[ncontest].childNodes[tempVal].setAttribute('pris',tempPris);
	
	var tempResults=surfers.firstChild.childNodes[nsurfer].getAttribute('resultssimul').split(';');
	var totalSimul=0;
	
	tempResults[ncontest]=contestsSlots.firstChild.childNodes[ncontest].childNodes[tempVal].getAttribute('val');

	var best8=tempResults.clone();
	var notNull=0;
	for (var i=0;i<10;i++) {
		if (tempResults[i]) notNull++;
	}
	if (notNull>8) {
		
		best8=best8.sort(byNumber);
		while(parseInt(best8[0])==0) {
			best8.shift();
			
		}
		best8.pop();
		if (notNull==10) best8.pop();

	}
	
	
	for (var i=0;i<8;i++) {
		
		if (best8[i]) {
			
			totalSimul+=place2points(best8[i]);
			
		}
	
	}
		
	tempResults=tempResults.join(";");
	
	surfers.firstChild.childNodes[nsurfer].setAttribute('resultssimul',tempResults);
	
	surfers.firstChild.childNodes[nsurfer].setAttribute('totalsimul',totalSimul);
	
	
	
	fadeResult();
	updateSimulation();
}

function updateSimulation() {
	var index=msort('totalsimul');
	var nbSurfers=surfers.firstChild.childNodes.length;
	
	var tempHTML="";
	var previousRating=1;
		
	tempHTML+="<table cellspacing='0' cellpadding='2'>";
	for (var i=0;i<nbSurfers;i++) {
		var tempClass='';
		if (i>29) {
			tempClass=" class='warningText'";
		}
		
		tempHTML+="<tr"+tempClass+">";
		if (i>0) {
			if (surfers.firstChild.childNodes[index[i]].getAttribute('totalsimul')!=surfers.firstChild.childNodes[index[i-1]].getAttribute('totalsimul')) {
				previousRating=(i+1);
			}
		}
		var tempName=nameOfSurfer(index[i]);
		
		tempHTML+="<td width='25px'>"+previousRating+"</td>";
		tempHTML+="<td width='140px'>"+tempName+"</td>";
		tempHTML+="<td width='35px'>"+surfers.firstChild.childNodes[index[i]].getAttribute('totalsimul')+"</td>";
		tempHTML+="</tr>";
		
	}
	tempHTML+="</table>";
	
	$('tableauSimulation').innerHTML=tempHTML;
	
	//$('newWorldChamp').innerHTML=nameOfSurfer(index[0]);
}

function resetSimulation() {
	var nbSurfers=surfers.firstChild.childNodes.length;
	var nbResults=surfers.firstChild.childNodes[0].getAttribute('results').split(";").length;
	//alert(nbContests);
	for (var i=0;i<nbSurfers;i++) {
		surfers.firstChild.childNodes[i].setAttribute('totalsimul',surfers.firstChild.childNodes[i].getAttribute('totalreel'));
		surfers.firstChild.childNodes[i].setAttribute('resultssimul',surfers.firstChild.childNodes[i].getAttribute('results'));
		for (var j=nbResults;j<10;j++) {
			$('simul_'+i+'_'+j).innerHTML="&nbsp;";
			
		}
	}
	initForecastXml(nbResults);
	updateSimulation();
}

function drawSelectContest(ncontest) {
	var tempHTML="";
	tempHTML+="<select id='forecastResult'>";
	
	var contestXml=contestsSlots.firstChild.childNodes[ncontest].childNodes;
		
	for (var i=0;i<contestXml.length;i++) {
		if (parseInt(contestXml[i].getAttribute('pris'))<parseInt(contestXml[i].getAttribute('totalSlots'))) {
			tempHTML+="<option value='"+i+"'>"+contestXml[i].getAttribute('lib')+"</option>";
		}
	}
	
	tempHTML+="</select>";
	return tempHTML;
}

function showHelp() {
	new Effect.Appear('help',{duration:0.3});
}


function nameOfSurfer(nsurfer) {
	return 	surfers.firstChild.childNodes[nsurfer].getAttribute('prenom')+" "+surfers.firstChild.childNodes[nsurfer].getAttribute('nom');

}

function msort(mattribute) {
	var index = new Array();
	var temp = new Array();
	
	var surfersList=surfers.firstChild.childNodes;
	var nbSurfers=surfersList.length;
	
	for (var i=0;i<nbSurfers;i++) {
		
		if (index.length != 0) {
			
			var currentRes=parseInt(surfersList[i].getAttribute(mattribute));
			
			if ( currentRes<=parseInt(surfersList[findXMLindex(index[0])].getAttribute(mattribute)) ) {
				index.unshift(surfersList[i].getAttribute('n'));
			} else if ( currentRes>=parseInt(surfersList[findXMLindex(index[index.length-1])].getAttribute(mattribute)) ) {
				index.push(surfersList[i].getAttribute('n'));
			} else {

				for (var j=0;j<index.length;j++) {

					if (currentRes == parseInt(surfersList[findXMLindex(index[j])].getAttribute(mattribute))  || ( currentRes<parseInt(surfersList[findXMLindex(index[j])].getAttribute(mattribute)) && currentRes > parseInt(surfersList[findXMLindex(index[j-1])].getAttribute(mattribute)) ) ) {
						
						
						var debut = new Array;
						var fin = new Array;
						debut=index.slice(0,j);
						fin=index.slice(j);
						index = debut.concat(surfersList[i].getAttribute('n'));
						index = index.concat(fin);
						
						break;	
						
					}
				}
			}
		} else {
			index.push(0);
		}
	}
	index.reverse();
	return index;
}
function findXMLindex(nsurfer) {
	/*var nbSurfers=surfers.firstChild.childNodes.length;
	for (var i=0;i < nbSurfers; i++) {
		if (surfers.firstChild.childNodes[i].getAttribute('n') == nsurfer) {
			return i;
			break
		}
	}*/
	return nsurfer;
}
function byNumber(a,b) {
	return a - b;
}
function ieLinkOver(element) {
	if (isIe) {
		element.className="aHover";	
	}
}
function ieLinkOut(element) {
	if (isIe) {
		element.className="";	
	}
}