var form;
			
/*----------------------------------
Rennterminsuche
------------------------------------*/			

/*Prepare search variables*/			
function setVariablesSearchRacedates()
{				
	form = document.forms['racedatesForm'];
	if (form)
	{
		var box = form['iSeason'];
		box.onchange = changeSeason;

		box = form['iStartMonth'];
		box.onchange = changeStartDays;									

		box = form['iEndMonth'];
		box.onchange = changeEndDays;

		changeSeason(); // initialize dropdowns
	}				
}

/*eventhanlder for changed season*/
function changeSeason()
{		
	form.iStartMonth.options[0].selected = true;				
	form.iEndMonth.options[form.iEndMonth.options.length-1].selected = true;		
	
	changeStartDays();
	changeEndDays()		
	
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	var arrSeason = getSubsetFromArray(oData,0,season);

	// set other dd
	setCountries(arrSeason);
	setTracks(arrSeason);
	setCups(arrSeason);
}

/*set startdate depending on season*/			
function changeStartDays()
{	
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	var month = form.iStartMonth.options[form.iStartMonth.selectedIndex].value;
	
	var days = form.iStartDay; // alle options löschen
	days.length = 0;
	var dayCount = getDaysInMonth(season,month);
	for (var i=0; i<dayCount; i++)
	{
		days.options[i] = new Option(i+1,i+1);
	}
	
	days.options[0].selected = true;											
}

/*set enddate depending on season and startdate*/
function changeEndDays()
{	
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	var month = form.iEndMonth.options[form.iEndMonth.selectedIndex].value;
	
	var days = form.iEndDay; // alle options löschen
	days.length = 0;
	var dayCount = getDaysInMonth(season,month);
	for (var i=0; i<dayCount; i++)
	{
		days.options[i] = new Option(i+1,i+1);
	}
	
	days.options[days.options.length-1].selected = true;											
}

/* populate coutry-dd */
function setCountries(arrSeason)
{		
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	
	var countrylist = form.iCountry;
	
	// delete list & set all option
	var allOption = countrylist.options[0];
	countrylist.options.length = 0;
	countrylist.options[0] = allOption;

	// fill list from data					
	var arrCountry = getColum(arrSeason,3);				
	var arrCountryVal = new Array();
	
	for(var i=0; i< arrCountry.length; i++)
	{
		arrCountryVal[i] = new Array(oCountry[arrCountry[i]],arrCountry[i]);					
	}	
	
	arrCountry = sortArrayDimension(arrCountryVal,0);
	
	for(var i=0; i< arrCountry.length; i++)
	{
		countrylist.options[i+1] = new Option(arrCountry[i][0], arrCountry[i][1]);
	}
					
}

/*populate track-DD*/
function setTracks(arrSeason)
{		
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	var country = form.iCountry.options[form.iCountry.selectedIndex].value;
	
	// delete list & set all option
	var tracklist = form.iTrack;
	var allOption = tracklist.options[0];
	tracklist.options.length = 0;
	tracklist.options[0] = allOption;
	
	// fill list from data
	var arrTracks = getColum(arrSeason,2);				
	var arrTracksVal = new Array();
	
	for(var i=0; i< arrTracks.length; i++)
	{
		arrTracksVal[i] = new Array(oTrack[arrTracks[i]],arrTracks[i]);					
	}	
	
	arrTracks = sortArrayDimension(arrTracksVal,0);
	
	for(var i=0; i< arrTracks.length; i++)
	{
		tracklist.options[i+1] = new Option(arrTracks[i][0], arrTracks[i][1]);
	}
	
}

/*populate cup-dd*/
function setCups(arrSeason)
{	
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	//var country = form.iCountry.options[form.iCountry.selectedIndex].value;
	//var track = form.iTrack.options[form.iTrack.selectedIndex].value;
	
	// delete list & set all option
	var cuplist = form.iCup;
	var allOption = cuplist.options[0];
	cuplist.options.length = 0;
	cuplist.options[0] = allOption;
	
	// fill list from data				
	var arrCups = getColum(arrSeason,1);				
	var arrCupsVal = new Array();				
	for(var i=0; i< arrCups.length; i++)
	{
		arrCupsVal[i] = new Array(oCup[arrCups[i]],arrCups[i]);					
	}	
	
	arrCups = sortArrayDimension(arrCupsVal,0);
	
	for(var i=0; i< arrCups.length; i++)
	{
		cuplist.options[i+1] = new Option(arrCups[i][0], arrCups[i][1]);
	}								
}

/*submit racedates-form*/
function submitForm()
{	
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	var endMonth = form.iEndMonth.options[form.iEndMonth.selectedIndex].value;
	var endDay = form.iEndDay.options[form.iEndDay.selectedIndex].value;
	var startMonth = form.iStartMonth.options[form.iStartMonth.selectedIndex].value;
	var startDay = form.iStartDay.options[form.iStartDay.selectedIndex].value;
	
	var startDate = new Date(season,startMonth,startDay);
	var endDate = new Date(season,endMonth,endDay);
	var maxDate = new Date(season,12,31);
	
	if (startDate > endDate)
	{
		form.iStartMonth.options[form.iEndMonth.selectedIndex].selected = true;
		changeStartDays();
		form.iStartDay.options[form.iEndDay.selectedIndex].selected = true;
	}
	
	form.submit();
	
	return true;
}
			
			
/*-----------------------------
Archive Racereports			
-------------------------------*/

function setVariablesArchiveRacereports()
{				
	form = document.forms['racereportsForm'];
	if (form)
	{
		var box = form['iSeason'];
		box.onchange = changeSeasonArchiveRacereports;

		box = form['iStartMonth'];
		box.onchange = changeStartDays;									

		box = form['iEndMonth'];
		box.onchange = changeEndDays;

		changeSeasonArchiveRacereports(); // initialize dropdowns
	}				
}

/*eventhanlder for changed season*/
function changeSeasonArchiveRacereports()
{						
	form.iStartMonth.options[0].selected = true;				
	form.iEndMonth.options[form.iEndMonth.options.length-1].selected = true;		
	
	changeStartDays();
	changeEndDays()		
	
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	var arrSeason = getSubsetFromArray(oData,0,season);

	// set other dd	
	setCups(arrSeason);
}

/*-----------------------------
Archive Results		
-------------------------------*/

function setVariablesArchiveResults()
{				
	form = document.forms['raceresultsForm'];
	if (form)
	{
		var box = form['iSeason'];
		box.onchange = changeSeasonArchiveResults;

		box = form['iCup'];
		box.onchange = changeCupArchiveResults;
		
		changeSeasonArchiveResults(); // initialize dropdowns
	}				
}

/*eventhanlder for changed season*/
function changeSeasonArchiveResults()
{						
	var season = form.iSeason.options[form.iSeason.selectedIndex].value;
	var arrSeason = getSubsetFromArray(oData,0,season);

	// set other dd	
	setCups(arrSeason);
}

/*eventhandler for changed cup*/
function changeCupArchiveResults()
{
	var cup = form['iCup'];
	if (cup.selectedIndex >0)
	{
		/*	
		var cupname = cup.options[cup.selectedIndex].value;
		var season = form.iSeason.options[form.iSeason.selectedIndex].value;
		
		// get URL for season,cup
		var arrSeason = getSubsetFromArray(oData,0,season);
		var arrCup = getSubsetFromArray(arrSeason,1,cupname);
				
		// change document url
		document.location = arrCup[0][2];
		*/
		form.submit();
	}
}

/*-----------------------------
Racehistory	
-------------------------------*/

function setVariablesRacehistory()
{				
	form = document.forms['recehistoryForm'];
	if (form)
	{
		var box = form['iDateMade'];
		box.onchange = changeRacehistoryDateMade;
		
		box = document.getElementById('raceHistoryResults');
		box.style.display = 'none';
		
		populateRacehistoryDateMade(); // initialize dropdowns
	}				
}

function populateRacehistoryDateMade()
{
	var dateMadeList = form['iDateMade'];
	var allOption = dateMadeList.options[0];	
	dateMadeList.options.length = 0;
	dateMadeList.options[0] = allOption;
	
	var arrDates = getColum(oData,0);
	
	arrDates.sort();
	
	for(var i=0; i< arrDates.length; i++)
	{
		dateMadeList.options[i+1] = new Option(arrDates[i], arrDates[i]);
	}
}

function changeRacehistoryDateMade()
{
	var raceHistoryResults = document.getElementById('raceHistoryResults');
	raceHistoryResults.style.display = 'block';
	
	// get racehistory urls
	var dateMade = form.iDateMade.options[form.iDateMade.selectedIndex].value;
	var arrDates = getSubsetFromArray(oData,0,dateMade);
	arrDates = sortArrayDimension(arrDates,1);
	
	// get & display list
	var list = document.getElementById('raceHistoryResultsList');
		
	// remove old list items		
	var ilList = list.getElementsByTagName('li');
	for(var i=ilList.length-1;i >= 0;i--)
	{
		list.removeChild(ilList[i]);
	}
	
	// add new list items
	var listItem, textValue;
	for (var i=0; i<arrDates.length;i++)
	{
		listItem = document.createElement("li");
		listItem.innerHTML = '<a href="'+arrDates[i][2]+'/">'+arrDates[i][1]+'</a>';		
		list.appendChild(listItem);
	}
		
}

/*---------------------------------------------
global functions
-----------------------------------------------*/

/* days in mont depending on year (4digits) */
function getDaysInMonth(year,month)
{
	var monthLength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	if (month == 2)
	{
		// berechnen ob schaltjahr
		if ( (year % 4 == 0 && year % 100 != 0) || (year % 4 == 0 && year % 100 == 0 && year % 400 == 0))
		{
			monthLength[1] = 29;
		}
	}
	
	return monthLength[month-1];
}

/*returns distinct colum from 2 dimensional array*/
function getColum(arr,index)
{
	// copy value into output array
	var arrOut = new Array();		
	var x=0,xOld=0;
	var j=0;
	for(var i=0; i<arr.length; i++)
	{
		x = arr[i][index];
		
		if (x != xOld)
		{
			xOld = x;
			arrOut[j] = x;
			j++;
			
		}
	}
	arrOut.sort();
	
	// make output array distinct
	x=0;
	xOld=0;
	j=0;
	var arrOut2 = new Array();
	for(var i=0; i< arrOut.length; i++)
	{
		x = arrOut[i];
		if (x != xOld)
		{
			xOld = x;
			arrOut2[j] = x;
			j++;
		}
	}
	arrOut2.sort();				
	
	return arrOut2;
}

/*
Returns subset from multidimensional array.

index = Field for comparison
search = Field comparison value
*/
function getSubsetFromArray(arr,index,search)
{
	var arrOut = new Array();
	var x;
	var j=0;
	for(var i=0; i< arr.length; i++)
	{
		x = arr[i][index];
		if (x == search)
		{
			arrOut[j] = arr[i];
			j++;
		}
	}
	return arrOut;
}						

/* sorts multidimensional array on specified field 
arr = array
dimesion = field in array
*/
function sortArrayDimension(arr,dimension)
{
	var arrKeys = new Array();
	var arrKeyValue = new Array();
	var j=0;
	for(var i=0; i < arr.length; i++)
	{
		arrKeys[j] = arr[i][dimension];
		j++;
		arrKeyValue[arr[i][dimension]] = arr[i];
	}		
	
	arrKeys.sort();
	
	var arrOut = new Array();
	j=0;
	for(var i=0; i< arrKeys.length; i++)
	{
		arrOut[j] = arrKeyValue[arrKeys[i]];
		j++;
	}	
	
	return arrOut;
}