// Script to generate Summer Challenge Table 
var races=28	//Number of races
var toCount=10 //Number of scores to count
var x=0;	//universal counter;
var sorted=new Array();	//Empty array for sorted results
var totalScore=new Array();

var marks= new Array();
var n=0;
marks[n++]= ["Mick","303/2.3",1,,,,,,5,"A",2,3,7,,1,1,"A","A","A","A",7,5,5,1,3,2,5,2,1,1,0];
marks[n++]= ["Stella","303/2.3",2,2,3,2,3,3,3,"A",3,4,,,,,"A","A","A","A",,,,,,,,,,,0];
marks[n++]= ["Rachael","303",5,4,2,4,2,2,2,"A",4,2,3,4,,,"A","A","A","A",3,8,7,6,,,6,6,4,4,0];
marks[n++]= ["Cheryl","2.3",5,1,,,,,,"A",,,,,,,"A","A","A","A",,,,,,,,,,,0];
marks[n++]= ["Roy","303/SB/2.3",,3,1,1,1,1,1,"A",1,1,5,2,,,"A","A","A","A",2,3,1,2,1,1,1,1,,,0];
marks[n++]= ["Michelle","303",,,4,3,,,,"A",,,4,3,,,"A","A","A","A",,,4,5,5,5,4,5,,,0];
marks[n++]= ["Barbara","2.3",,,,,,,,"A",5,6,,,,,"A","A","A","A",4,2,2,4,2,3,2,7,3,2,0];
marks[n++]= ["Gabriel","303",,,,,,,8,"A",,,,,,,"A","A","A","A",,,,,,,,,,,0];
marks[n++]= ["Chris","2.3 / M16",,,,,,,6,"A",,,2,,2,2,"A","A","A","A",,,,,,,,,,,0];
marks[n++]= ["Eddie","M16",,,,,,,4,"A",,,,,,,"A","A","A","A",,,,,,,,,,,0];
marks[n++]= ["Rod","M16 / 303",,,,,,,,"A",,,1,1,,,"A","A","A","A",5,4,3,3,4,4,7,4,,,0];
marks[n++]= ["Clive","Pico",,,,,,,,"A",,,,,3,3,"A","A","A","A",,,,,,,,,,,0];
marks[n++]= ["Hilary","303",,,,,,,,"A",,,,,,,"A","A","A","A",1,1,6,8,,,3,3,2,3,0];
marks[n++]= ["Leslie","303",,,,,,,,"A",,,,,,,"A","A","A","A",,,,,7,,,,,,0];

//Make an array for scores to count
var scores=new Array();
function resetScores(myarray)	{
	for (var score=0; score<toCount; score++)	{
		scores[score]=(myarray.length)*100 + races;	//initialize it to all discard scores, ie number of competitors
	}
}

function numberOrder(a,b){	//used in conjunction with Array.sort() to specify sort order.
	return a-b;
}

function maketable()	{
	var mark;
	var raceNumber;
	var datatag;
	var points;
	for (var entry=0; entry<marks.length; entry++)	{
		resetScores(marks);
		points=0;
		for (x=2; x<marks[entry].length-1; x++)	{
			checkDiscard(marks[entry][x],x-1,marks);
		}
		//Calculate total score
		for (score=0; score<toCount; score++)	{
			raceNumber=scores[score]%100;
			points=points+(scores[score]-raceNumber)/100;
		}
		//add total score as last array element
		marks[entry][x]=points;
		//store the score in totalScore array
		totalScore[entry]=points;
	}
	totalScore.sort(numberOrder);	//Sort scores array into numerical order

//sort marks array into points order here!!!!!!!!!!!!
	var sailors=marks.length;
	for (entry=0; entry<sailors; entry++)	{
		x=0;
		var found=false;
		do	{
			if (marks[x][marks[x].length-1]==totalScore[entry])	{
				found=true
				sorted[entry]=marks[x];	//copy entry to sorted array
				marks.splice(x,1);	//delete the entry
			}
			x++;
		}
		while (!found);
	}
				
//Write table rows
	for (entry=0; entry<sorted.length; entry++)	{
		document.write("<TR>");
		resetScores(sorted);
		for (x=2; x<sorted[entry].length-1; x++)	{
			checkDiscard(sorted[entry][x],x-1,sorted);
		}
		for (x=0; x<sorted[entry].length; x++)	{
			mark=sorted[entry][x];
			if(mark==undefined)	{
				mark="&nbsp;";
			}
			datatag="<TD>";
			// check if it's a counting score and set bold tag
			for (score=0; score<toCount; score++)	{
				raceNumber=scores[score]%100;
				if (raceNumber==x-1)	{
					datatag="<TD class=inverse>";
				}
			}
			document.write(datatag+mark+"</TD>");
		}
		document.write("<TD>"+(entry+1)+"</TD>");
		document.write("</TR>");
	}
}

function checkDiscard(place, race, myarray)	{
	if (place==undefined)	{	//Blank score
		place=myarray.length;
	}
	if (isNaN(parseInt(place)))	{ //non-numeric score, eg abandoned
		return;
	}
	var merit=place*100 + race
	// Check if merit score is less than greatest score to count so far and replace if so.
	if (scores[toCount-1] > merit)	{
		scores[toCount-1] = merit;
	}
	scores.sort(numberOrder);	//re-sort ready for next time
	//alert(place+" * "+race + " ** " + scores[toCount-1]);
}


