//TODO: setcityitemid

var connection;
var cke=null;
var charHeight=20;
var lineHeight=16;
var maxHeight=100;

var firstDown = false;

var cityAutocompleteAvailable = false;
var countryAutocompleteAvailable = false;

var destinationPulldownID;

var rpcCallDelay = 250; // Delay (in milliseconds) before the rpc call is executed after a keystroke.

if(navigator&&navigator.userAgent.toLowerCase().indexOf("msie")!=-1)
{
	var offsetAutocompleteTop = 25;
	var offsetAutocompleteLeft = 5;	
}
else if(navigator&&navigator.userAgent.toLowerCase().indexOf("safari")!=-1)
{
	var offsetAutocompleteTop = 25;
	var offsetAutocompleteLeft = 5;	
}
else if(navigator&&navigator.userAgent.toLowerCase().indexOf("opera")!=-1)
{
	var offsetAutocompleteTop = 28;
	var offsetAutocompleteLeft = 8;	
}
else
{
	var offsetAutocompleteTop = 20;
	var offsetAutocompleteLeft = 0;	
}

function getNodeIndex(node)
{
	var children = node.parentNode.childNodes;
	for (var nodeCounter=0; nodeCounter < children.length; nodeCounter++)
	{
		if (children[nodeCounter]==node)
			return nodeCounter;
	}	
	return -1;
}

function prehandleKeys(event)
{
	if (getKeyCode(event)==8 && cke)
	{
		
		if (window.event)
		{
			window.event.cancelBubble=true;
			window.event.returnValue = false;
		}
		return false;
	}
}

function handleKeys(event)
{
	
	keyCode = getKeyCode(event);

	if (firstDown)
	{
		firstDown = false;
		return;
	}
	if (keyCode==40 && cke!=null && cke.nextSibling)
	{
		cke.className = 'resultItem';
		cke = cke.nextSibling;
		cke.className = 'resultItemHL';		
		cke.scrollIntoView(false);
		setItemFromPulldown();
	}
	else if (keyCode==38 && cke && cke.previousSibling)
	{
		cke.className = 'resultItem';
		cke = cke.previousSibling;
		cke.className = 'resultItemHL';
		setItemFromPulldown();
		cke.scrollIntoView(false);
	}
	else if (keyCode==38 && cke && !cke.previousSibling)
	{
		if (cke.parentNode.id=='autocompleteCountry')
		{
			document.getElementById('hs_country').focus();			
		}
		else if (cke.parentNode.id=='autocompleteCountry_b')
		{			
			document.getElementById('hs_country_b').focus();						
		}
		else if (cke.parentNode.id=='autocompleteCity')
		{		
			document.getElementById('hs_city').focus();						
		}
		else if (cke.parentNode.id=='autocompleteCity_b')
		{			
			document.getElementById('hs_city_b').focus();						
		}
				
		cke.className='resultItem';
		cke=null;	
	}
	else if (keyCode==9 || keyCode==13)
	{
		if (cke && (cke.parentNode.id=='autocompleteCountry' || cke.parentNode.id=='autocompleteCountry_b'))
		{
			tempNode=cke;
			clearAllAutocomplete();
			selectCountryItem(tempNode);
		}	
		else if (cke)
		{
			tempNode=cke;
			var goToSearch = (cke.parentNode.id=='autocompleteCity_b');
			clearAllAutocomplete();
			selectCityItem(tempNode);
			if (goToSearch)
			{
				document.getElementById('hs_searchbutton').focus();
			}
			else
			{				
				document.getElementById('hs_name_b').focus();
			}
			
		}
		
	}
	else if (keyCode==8)
	{
		if (cke)
		{
			//TODO
			if (cke.parentNode.id=='autocompleteCountry')
			{
				clearAllAutocomplete();		
				setTimeout("document.getElementById('hs_country').focus()",10);
			}
			else
			{
				clearAllAutocomplete();		
				setTimeout("document.getElementById('hs_city').focus()",10);
				
			}
		}
		return false;
	}
	
}

function setItemFromPulldown()
{
	
	if (cke.parentNode.id=='autocompleteCountry')
	{
		document.getElementById('hs_country').value=cke.getAttribute('countryID');	
	}
	else if (cke.parentNode.id=='autocompleteCountry_b')
	{
		document.getElementById('hs_country_b').value=cke.getAttribute('countryID');	
	}
	else if (cke.parentNode.id=='autocompleteCity')
	{
		selectCityItem(cke);
	}	
	else if (cke.parentNode.id=='autocompleteCity_b')
	{
		selectCityItem(cke);
	}	
}


function clearAutocomplete(autocompleteID)
{
	var autocomplete = document.getElementById(autocompleteID);
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';
	var countryAutocompleteAvailable = false;	
}
		 

function clearAllAutocomplete()
{
	cke=null;
	var autocomplete = document.getElementById('autocompleteCountry');
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';	
	var autocomplete = document.getElementById('autocompleteCountry_b');
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';
	var autocomplete = document.getElementById('autocompleteCity');
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';
	var autocomplete = document.getElementById('autocompleteCity_b');
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';
	var cityAutocompleteAvailable = false;
	var countryAutocompleteAvailable = false;	
}

function onLoad()
{
	
	var autocompleteCountry = document.getElementById('autocompleteCountry');
	var hsCountry = document.getElementById('hs_country');	

	autocompleteCountry.style.top =  (findPosY(hsCountry) + offsetAutocompleteTop)+'px';
	autocompleteCountry.style.left = (findPosX(hsCountry) + offsetAutocompleteLeft)+'px';
	
	var autocompleteCity = document.getElementById('autocompleteCity');
	var hsCity = document.getElementById('hs_city');	

	autocompleteCity.style.top =  (findPosY(hsCity) + offsetAutocompleteTop)+'px';
	autocompleteCity.style.left = (findPosX(hsCity) + offsetAutocompleteLeft)+'px';

	var autocompleteCountry_b = document.getElementById('autocompleteCountry_b');
	var hsCountry_b = document.getElementById('hs_country_b');	

	autocompleteCountry_b.style.top =  (findPosY(hsCountry_b) + offsetAutocompleteTop)+'px';
	autocompleteCountry_b.style.left = (findPosX(hsCountry_b) + offsetAutocompleteLeft)+'px';
	
	var autocompleteCity_b = document.getElementById('autocompleteCity_b');
	var hsCity_b = document.getElementById('hs_city_b');	

	autocompleteCity_b.style.top =  (findPosY(hsCity_b) + offsetAutocompleteTop)+'px';
	autocompleteCity_b.style.left = (findPosX(hsCity_b) + offsetAutocompleteLeft)+'px';

	
	
	document.onkeyup=handleKeys;
	document.onkeydown = prehandleKeys;
	
	document.getElementById('hs_firstname').focus();
}

function bodyOnClick()
{
	var autocomplete = document.getElementById('autocompleteCountry');
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';
	
	var autocomplete = document.getElementById('autocompleteCity');
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';
	
	var autocomplete = document.getElementById('autocompleteCountry_b');
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';
	
	var autocomplete = document.getElementById('autocompleteCity_b');
	autocomplete.style.visibility='hidden';
	autocomplete.style.display='none';
	
	
}

function getKeyCode(e)
{
	
	if(window.event)
	{
		var keyCode = window.event.keyCode;
	}
	else if ( e)
	{
		var keyCode= e.keyCode;
	}
	return keyCode;

}

function setKeyCode(e,code)
{
	if(window.event)
	{
		window.event.keyCode=code;
	}
	else if (e)
	{		
		e.keyCode=code;
	}
}

function setCountryAutocompletFocus(pulldownID)
{
	var autocompleteCountry = document.getElementById(pulldownID);
	var children =(autocompleteCountry.childNodes);
	if(children.length==0)
		return 0;

	children[0].className='resultItemHL';
	cke=children[0];
	
}

function unsetCityID()
{
	document.getElementById('hs_city_id').value='';
	document.getElementById('hs_city').value='';
}
function unsetCityID_b()
{
	document.getElementById('hs_city_id_b').value='';
	document.getElementById('hs_city_b').value='';
}

function setCountryAutoComplete(elementId, searchString)
{
	if(document.getElementById(elementId).value != searchString)
        {
                return false;
        }

	connection = xmlhttpAvailable();
	connection.onreadystatechange=stateChangedCountry;
	connection.open('GET', '../country_rpc.php?search=' + escape(searchString),true);
	connection.setRequestHeader("Content-Type", 'text/html');
	connection.send('');	
}

function stateChangedCountry()
{
	
	if (connection.readyState==4)
	{
		
		var autocomplete = document.getElementById(destinationPulldownID);
		
		autocomplete.innerHTML=buildTableCountry(connection.responseText);
		autocomplete.style.visibility='visible';
		autocomplete.style.display='block';
		
		
	}
}

function buildTableCountry(result)
{
	if (result == '0')
	{
		countryAutocompleteAvailable=false;
		return '<div class="resultItem">Geen resultaten...</div>';		
	}
	countryAutocompleteAvailable=true;
	resultFields = result.split(';');
	resultFields.sort();
	var resultHTML = '';
	if (resultFields.length>lineHeight && navigator&&navigator.userAgent.toLowerCase().indexOf("msie")!=-1)
	{		
		document.getElementById(destinationPulldownID).style.height=maxHeight+'px';
	}
	else
	{
		document.getElementById(destinationPulldownID).style.height='';
	}
	
	for (var resultCount = 0; resultCount < resultFields.length; resultCount++)
	{
		resultHTML += '<div onMouseOut="return unsetFocus(this);" onMouseOver="return setFocus(this);" onClick="return selectCountryItem(this);" class="resultItem" countryID="' + resultFields[resultCount] + '" >';
		resultHTML += resultFields[resultCount];
		resultHTML += '</div>';
	}
	return resultHTML;
}

function selectCountryItem(country)
{
	if (destinationPulldownID=='autocompleteCountry')
	{
		document.getElementById('hs_country').value=country.getAttribute('countryID');	
		setTimeout("document.getElementById('hs_city').focus()",10);
	}
	else
	{
		document.getElementById('hs_country_b').value=country.getAttribute('countryID');	
		setTimeout("document.getElementById('hs_city_b').focus()",10);
	}
}


function setConnectingAlert(autocompleteElement)
{
	setAutocompleteMessage(autocompleteElement,'Connecting...');
}
function setAutocompleteMessage(autocompleteElement,message)
{

	autocompleteElement.innerHTML='<div class="resultItem">'+message+'</div>';
	autocompleteElement.style.visibility='visible';
	autocompleteElement.style.display='block';
	
}


function setCityAutocompletFocus(pulldownID)
{
	var autocompleteCity = document.getElementById(pulldownID);
	var children =(autocompleteCity.childNodes);
	if(children.length==0)
		return 0;

	children[0].className='resultItemHL';
	cke=children[0];
	
}

function hs_country_onkeyup(object,e,pulldownID)
{
	var keyCode = getKeyCode(e);
	if (keyCode==40 && countryAutocompleteAvailable)
	{
		firstDown=true;
		object.blur();
		setCountryAutocompletFocus(pulldownID);	

		//TODO	
		object.value=cke.getAttribute('countryID');	
	}
	else
	{
		var country = document.getElementById('hs_country');
		if(object.value.length>0)
		{		
			setConnectingAlert(document.getElementById(pulldownID));
			destinationPulldownID=pulldownID;
			setTimeout("setCountryAutoComplete(\"" + object.id + "\", \"" + object.value + "\")", rpcCallDelay);
		}
		else
		{
			document.getElementById(pulldownID).style.visibility='hidden';
			document.getElementById(pulldownID).style.display='none';
			
			cke=null;
		}
	}
}

function hs_city_onkeyup(object,e,pulldownID)
{
	
	var keyCode = getKeyCode(e);
	var country;
	if (pulldownID=='autocompleteCity')
	{
		var country = document.getElementById('hs_country');
	}
	else
	{
		var country = document.getElementById('hs_country_b');		
	}

	if (keyCode==40 && cityAutocompleteAvailable)
	{
		firstDown=true;
		object.blur();
		setCityAutocompletFocus(pulldownID);						
		selectCityItem(cke);
		
	}
	else
	{
		destinationPulldownID=pulldownID;		
		if (country.value=='')
		{				
			setAutocompleteMessage(document.getElementById(pulldownID),'Kies eerst een geldig land...');		
			return;
		}
		if(object.value.length>1)
		{		
			setTimeout("setAutoCompleteCity(\"" + object.id + "\", \"" + object.value + "\")", rpcCallDelay);
		}
	}
}

function setAutoCompleteCity(elementId, searchString)
{
	if(document.getElementById(elementId).value != searchString)
        {
                return false;
        }
	
	setConnectingAlert(document.getElementById(destinationPulldownID));
	connection = xmlhttpAvailable();
	connection.onreadystatechange=stateChangedCity;
	//alert('../city_rpc.php?search=' + escape(searchString)+'&country='+escape(document.getElementById('hs_country').value));
	if (destinationPulldownID=='autocompleteCity')
	{
		var searchCountry = document.getElementById('hs_country').value;
	}
	else
	{
		var searchCountry = document.getElementById('hs_country_b').value;		
	}
	connection.open('GET', '../city_rpc.php?search=' + escape(searchString)+'&country='+escape(searchCountry),true);
	connection.setRequestHeader("Content-Type", 'text/html');
	connection.send('');	
}

function stateChangedCity()
{
	if (connection.readyState==4)
	{
		var autocomplete = document.getElementById(destinationPulldownID);
		autocomplete.innerHTML=buildTableCity(connection.responseText);
		autocomplete.style.visibility='visible';
		autocomplete.style.display='block';
		
	}
}



function selectCityItem(object)
{	
	if (destinationPulldownID=='autocompleteCity')
	{
		document.getElementById('hs_city_id').value = object.getAttribute('cityID');
		document.getElementById('hs_city').value = object.getAttribute('cityName');
	}
	else
	{
		document.getElementById('hs_city_id_b').value = object.getAttribute('cityID');
		document.getElementById('hs_city_b').value = object.getAttribute('cityName');
	}
}

function setFocus(object)
{
	object.className='resultItemHL';
}

function unsetFocus(object)
{
	object.className='resultItem';
}



function buildTableCity(result)
{
	if (result == '0')
	{
		cityAutocompleteAvailable=false;
		return '<div class="resultItem">Geen resultaten...</div>';				
	}	
	
	var results = result.split('\n');
	cityAutocompleteAvailable=true;
	if (results.length>lineHeight && navigator && navigator.userAgent.toLowerCase().indexOf("msie")!=-1)
	{
		document.getElementById(destinationPulldownID).style.height=maxHeight+'px';
	}
	else
	{
		document.getElementById(destinationPulldownID).style.height='';
	}
	
	var resultHTML = '';
	var sameAsPrior = false;
	var sameAsPriorb = false;
	var same
	for (resultCount = 0; resultCount < results.length; resultCount++)
	{

		
		resultFields = results[resultCount].split(';');
		resultHTML += '<div onMouseOut="return unsetFocus(this);" onMouseOver="return setFocus(this);" onClick="return selectCityItem(this);" class="resultItem" cityName="'+ resultFields[1] +'" cityID="' + resultFields[0] + '" >';
		resultHTML += resultFields[1];
		
		if (resultCount != (results.length - 1))
		{
			nextFields = results[resultCount+1].split(';');
			if (resultFields[1]==nextFields[1] && resultFields[3]==nextFields[3])
			{				
				resultHTML += ', ' + resultFields[4];
				sameAsPrior = true;
				if (resultFields[4]==nextFields[4] )
				{
					resultHTML += ', ' + resultFields[5] + ' - ' + resultFields[6];					
					sameAsPriorb = true;
				}
				else
				{
					sameAsPriorb = false;
				}
			}
			else if (sameAsPrior)
			{
				resultHTML += ', ' + resultFields[4];
				if (sameAsPriorb)
					resultHTML += ', ' + resultFields[5] + ' - ' + resultFields[6];					
				sameAsPrior = false;
				sameAsPriorb = false;
			}
			else
			{
				sameAsPrior = false;
				sameAsPriorb = false;
			}
		}
		else if (sameAsPrior)
		{
			resultHTML += ', ' + resultFields[4];			
			if (sameAsPriorb)
				resultHTML += ', ' + resultFields[5] + ' - ' + resultFields[6];					
			
		}
		
		//if (resultFields[3]>1) resultHTML += ', ' + resultFields[4];
		resultHTML += '</div>';
	}
	return resultHTML;
}

function submitHSForm(form)
{
	var formValid = true;
		
	if (!fsCheckCity())
	{
		alert('Eerste gekozen geboorteland of plaats is onjuist.');
		formValid=false;
		return;
	}
	if (!fsCheckCity_b())
	{
		alert('Tweede gekozen geboorteland of plaats is onjuist.');
		formValid=false;
		return;
	}
	if (!fsCheckDate())
	{
		alert('Eerste gekozen datum is onjuist.');
		formValid=false;
		return;
	}
	if (!fsCheckDate_b())
	{
		alert('Tweede gekozen datum is onjuist.');
		formValid=false;
		return;
	}
	
	if (!checkTime())
	{
		alert('Eerste gekozen tijd is onjuist');
		formValid=false;
		return;
		
	}
	if (!checkTime_b())
	{
		alert('Tweede gekozen tijd is onjuist');
		formValid=false;
		return;
		
	}

	if (document.getElementById('hs_firstname').value=='')
	{
		alert('Eerste gekozen voornaam ontbreekt');
		return false;
	}
	if (document.getElementById('hs_lastname').value=='')
	{
		alert('Eerste gekozen achternaam ontbreekt');
		return false;
	}
	if (document.getElementById('hs_firstname_b').value=='')
	{
		alert('Tweede gekozen voornaam ontbreekt');
		return false;
	}
	if (document.getElementById('hs_lastname_b').value=='')
	{
		alert('Tweede gekozen achternaam ontbreekt');
		return false;
	}
	if (!document.getElementById('hs_geslacht_man').checked && !document.getElementById('hs_geslacht_vrouw').checked)
	{
		alert('Geslacht eerste persoon ontbreekt');
		return false;
	}
	if (!document.getElementById('hs_geslacht_man_b').checked && !document.getElementById('hs_geslacht_vrouw_b').checked)
	{
		alert('Geslacht tweede persoon ontbreekt');
		return false;
	}
	
	if (formValid)
	{
		form.submit();
	}
}

function checkTime()
{
	var hours = document.getElementById('hs_hours').value;
	var minutes = document.getElementById('hs_minutes').value;
	
	if (hours.length<2)
		return false;
	if (minutes.length<2)
		return false;
	if (isNaN(hours))
		return false;
	if (isNaN(minutes))
		return false;
	if (parseInt(hours,10)>23)
		return false;
	if (parseInt(minutes,10)>59)
		return false;
	return true;	
}
function checkTime_b()
{
	var hours = document.getElementById('hs_hours_b').value;
	var minutes = document.getElementById('hs_minutes_b').value;
	
	if (hours.length<2)
		return false;
	if (minutes.length<2)
		return false;
	if (isNaN(hours))
		return false;
	if (isNaN(minutes))
		return false;
	if (parseInt(hours,10)>23)
		return false;
	if (parseInt(minutes,10)>59)
		return false;
	return true;	
}

function fsCheckDate()
{
	return parseDate(document.getElementById('hs_day').value + '-' + document.getElementById('hs_month').value+'-' + document.getElementById('hs_year').value);
}
function fsCheckDate_b()
{
	return parseDate(document.getElementById('hs_day_b').value + '-' + document.getElementById('hs_month_b').value+'-' + document.getElementById('hs_year_b').value);
}

function fsCheckCity()
{
	
	if (document.getElementById('hs_city_id').value!='' && document.getElementById('hs_country').value!='')
	{
		var curl = '../city_check.php?cityID=' +escape(document.getElementById('hs_city_id').value);
	}
	else
	{
		return false;
	}
	//else
	//{
	//	var curl = '../city_check.php?cityName=' +escape(document.getElementById('hs_city').value);
	//}
	connection = xmlhttpAvailable();
	//connection.onreadystatechange=stateChangedCity;
	connection.open('GET', curl,false);
	connection.setRequestHeader("Content-Type", 'text/html');
	connection.send('');		
	var valid = (connection.responseText);
	return valid == '1';
}
function fsCheckCity_b()
{
	if (document.getElementById('hs_city_id_b').value!='' && document.getElementById('hs_country_b').value!='')
	{
		var curl = '../city_check.php?cityID=' +escape(document.getElementById('hs_city_id_b').value);
	}
	else
	{
		return false;
	}
	
	//else
	//{
	//	var curl = '../city_check.php?cityName=' +escape(document.getElementById('hs_city_b').value);
	//}
	connection = xmlhttpAvailable();
	//connection.onreadystatechange=stateChangedCity;
	connection.open('GET', curl,false);
	connection.setRequestHeader("Content-Type", 'text/html');
	connection.send('');		
	var valid = (connection.responseText);
	return valid == '1';
}

function xmlhttpAvailable()
{
		var xmlhttp;
		/*@cc_on @*/
		/*@if (@_jscript_version >= 5)
		try {
			xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
		} catch (e) {
			try {
				xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
			} catch (E) {
				xmlhttp=false
			}
		}
		@else
		xmlhttp=false
		@end @*/
		if (!xmlhttp && document.createElement) {
			try {
	  			xmlhttp = new XMLHttpRequest();
			} catch (e) {
	  		xmlhttp=false
			}
		}
		return xmlhttp;
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

