var currentRace;
var currentOverlay;
var defaultRace;

var poiNames = new Hashtable();
var racePrefixes = new Hashtable();
var DeviceNames = new Hashtable();

function loadBasicData()
{
	getPOINames();
	getRacePrefixes();
	getDeviceNames();
}

function getDeviceNames()
{
		var postData = "action=S&filter=WHERE organization_id=" + OrganizationId;
		//alert(postData);
		var handleSuccess = function(o)
		{ 
	    if(o.responseText !== undefined)
	    {  
			var xml = GXml.parse(o.responseText);
			var at = xml.documentElement.getElementsByTagName("device");
			AuthorizedItemsList="";
			for (var i = 0; i < at.length; i++) 
			{
				//alert(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue+" "+at[i].getElementsByTagName("name")[0].childNodes[0].nodeValue);
				DeviceNames.set(parseInt(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue,10), at[i].getElementsByTagName("name")[0].childNodes[0].nodeValue);
				AuthorizedItemsList+=at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue;
				if (i<at.length-1) AuthorizedItemsList+=",";
			}
			update();
  		}
  	};
  	
  	var handleFailure = function(o)
  	{
			YAHOO.log("The failure handler was called.  tId: " + o.tId + ".", "info", "example");
			if(o.responseText !== undefined)
			{
				// TODO Error Handling
			}
		};

  	
  	var callback =
		{
		  success:handleSuccess,
		  failure:handleFailure,
		  argument:['foo','bar']
		};

		var request = YAHOO.util.Connect.asyncRequest('POST', "xml/device.php", callback, postData);
}


function getPOINames()
{
	var postData = "action=S&filter=WHERE organization_id=" + OrganizationId;
	var handleSuccess = function(o)
	{ 
	    if(o.responseText !== undefined)
	    {  
			var xml = GXml.parse(o.responseText);
			var at = xml.documentElement.getElementsByTagName("poi");
			for (var i = 0; i < at.length; i++) 
			{
				//alert(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue+" "+at[i].getElementsByTagName("name")[0].childNodes[0].nodeValue);
				poiNames.set(parseInt(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue,10), at[i].getElementsByTagName("name")[0].childNodes[0].nodeValue);
			}
  	}
	};
  var handleFailure = function(o)
  {
		YAHOO.log("The failure handler was called.  tId: " + o.tId + ".", "info", "example");
		if(o.responseText !== undefined)
		{
			// TODO Error Handling
		}
	};
  	
  var callback =
	{
	  success:handleSuccess,
	  failure:handleFailure,
	  argument:['foo','bar']
	};

		var request = YAHOO.util.Connect.asyncRequest('POST', "xml/poi.php", callback, postData);
}

function getRacePrefixes()
{
	var postData = "action=S&filter=WHERE organization_id=" + OrganizationId;
	var handleSuccess = function(o)
	{ 
	    if(o.responseText !== undefined)
	    {  
			var xml = GXml.parse(o.responseText);
			var at = xml.documentElement.getElementsByTagName("race");
			for (var i = 0; i < at.length; i++) 
			{
				//alert(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue+" "+at[i].getElementsByTagName("prefix")[0].childNodes[0].nodeValue);
				if (defaultRace == undefined) defaultRace = parseInt(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue,10);
				racePrefixes.set(parseInt(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue,10), at[i].getElementsByTagName("prefix")[0].childNodes[0].nodeValue);
			}
			if (currentRace==undefined) currentRace=defaultRace; 
			setRace(currentRace);
  	}
	};
  var handleFailure = function(o)
  {
		YAHOO.log("The failure handler was called.  tId: " + o.tId + ".", "info", "example");
		if(o.responseText !== undefined)
		{
			// TODO Error Handling
		}
	};
  	
  var callback =
	{
	  success:handleSuccess,
	  failure:handleFailure,
	  argument:['foo','bar']
	};

		var request = YAHOO.util.Connect.asyncRequest('POST', "xml/race.php", callback, postData);
}


function displayRacePOIs()
{
	var postData = "action=S&filter=WHERE organization_id=" + OrganizationId + " AND race_id=" + currentRace + "ORDER BY seqorder";
	var icon="";
	var handleSuccess = function(o)
	{ 
	    if(o.responseText !== undefined)
	    {  
	    var kmSum=0;
			var xml = GXml.parse(o.responseText);
			var at = xml.documentElement.getElementsByTagName("racepoi");
			for (var i = 0; i < at.length; i++) 
			{
				//alert(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue+" "+at[i].getElementsByTagName("prefix")[0].childNodes[0].nodeValue);
				//racePrefixes.set(parseInt(at[i].getElementsByTagName("id")[0].childNodes[0].nodeValue,10), at[i].getElementsByTagName("prefix")[0].childNodes[0].nodeValue);
				if (at[i].getElementsByTagName("icon")[0].firstChild != null) icon=at[i].getElementsByTagName("icon")[0].firstChild.nodeValue;
				else icon="";
				displayPOI(parseInt(at[i].getElementsByTagName("id")[0].firstChild.nodeValue,10), at[i].getElementsByTagName("name")[0].firstChild.nodeValue,parseFloat(at[i].getElementsByTagName("latitude")[0].firstChild.nodeValue), parseFloat(at[i].getElementsByTagName("longitude")[0].firstChild.nodeValue), icon,"Km: "+(kmSum/1000),"Ouverture: "+xmlStringToDate0(at[i].getElementsByTagName("openingtime")[0].firstChild.nodeValue).toLocaleString(),"Fermeture: "+xmlStringToDate0(at[i].getElementsByTagName("closingtime")[0].firstChild.nodeValue).toLocaleString(),"");
				kmSum+=parseInt(at[i].getElementsByTagName("distance")[0].firstChild.nodeValue,10);			
			}
  	}
	};
  var handleFailure = function(o)
  {
		YAHOO.log("The failure handler was called.  tId: " + o.tId + ".", "info", "example");
		if(o.responseText !== undefined)
		{
			// TODO Error Handling
		}
	};
  	
  var callback =
	{
	  success:handleSuccess,
	  failure:handleFailure,
	  argument:['foo','bar']
	};

		var request = YAHOO.util.Connect.asyncRequest('POST', "xml/racepoi.php", callback, postData);
}

function updatePassed(position)
{
	var postData = "organization_id=" + OrganizationId + "&race_id=" + currentRace;
	var handleSuccess = function(o)
	{ 
	  if(o.responseText !== undefined)
	  {  
			document.getElementById(position).innerHTML = o.responseText;
  	}
	};
  var handleFailure = function(o)
  {
		YAHOO.log("The failure handler was called.  tId: " + o.tId + ".", "info", "example");
		if(o.responseText !== undefined)
		{
			// TODO Error Handling
		}
	};
	  var callback =
	{
	  success:handleSuccess,
	  failure:handleFailure,
	  argument:['foo','bar']
	};

	var request = YAHOO.util.Connect.asyncRequest('POST', "passed_through_checkpoint_div.php", callback, postData);
}

function updatePdfResults()
{
	var postData = "race_id=" + currentRace;
	var handleSuccess = function(o)
	{ 
	  if(o.responseText !== undefined)
	  {  
			document.getElementById("pdfresults").innerHTML = o.responseText;
  	}
	};
  var handleFailure = function(o)
  {
		YAHOO.log("The failure handler was called.  tId: " + o.tId + ".", "info", "example");
		if(o.responseText !== undefined)
		{
			// TODO Error Handling
		}
	};
	  var callback =
	{
	  success:handleSuccess,
	  failure:handleFailure,
	  argument:['foo','bar']
	};

	var request = YAHOO.util.Connect.asyncRequest('POST', "pdfresults.php", callback, postData);
}

 
function updateRunner(position,runnerPrivateId)
{
	if (runnerPrivateId!="")
	{
	var postData = "user_privid=" + runnerPrivateId + "&race_id=" + currentRace;
	var handleSuccess = function(o)
	{ 
	  if(o.responseText !== undefined)
	  { 
	  	if (o.responseText.indexOf("error")==-1)
				document.getElementById(position).innerHTML = o.responseText;
  	}
	};
  var handleFailure = function(o)
  {
		YAHOO.log("The failure handler was called.  tId: " + o.tId + ".", "info", "example");
		if(o.responseText !== undefined)
		{
			// TODO Error Handling
		}
	}; 	
  var callback =
	{
	  success:handleSuccess,
	  failure:handleFailure,
	  argument:['foo','bar']
	};

		var request = YAHOO.util.Connect.asyncRequest('POST', "checks_for_runner_div.php", callback, postData);
	}
}

function xmlStringToDate0(xmldate)
{
	var realDate = new Date();
	var intMonth;
	var strMonth;
	realDate.setDate(parseInt(xmldate.substr(8,2),10));
	strMonth=xmldate.substr(5,2);
	intMonth=parseInt(strMonth,10);
	intMonth--;
	realDate.setMonth(intMonth);
	realDate.setFullYear(xmldate.substr(0,4));
	realDate.setHours(xmldate.substr(11,2));
	realDate.setMinutes(xmldate.substr(14,2));
	realDate.setSeconds(xmldate.substr(17,2));
	return realDate;
}

function dateTimeToFr0(dateObject)
{
	var sqlDate = dateObject.getDate() +"/"+ (dateObject.getMonth()+1)+"/"+ dateObject.getFullYear() + " " + dateObject.getHours()+ ":" + dateObject.getMinutes()+ ":" + dateObject.getSeconds();
	return sqlDate;
}

