addWindowOnload(init);

function mouseMoveHandler(e)
{
	if (typeof e == 'undefined') 
		e = event;
	
	Y = e.clientY + document.documentElement.scrollTop + document.body.scrollTop;
	X = e.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
}

var X;
var Y;
var zoekTracker = null;

function init()
{
	document.onmousemove = mouseMoveHandler;
	
	zoekTracker = new ZoekTrackerManager();
}

function ZoekTrackerManager()
{
	var instantie = this;
	var zoekTracker = null;
	
	var init = function()
	{
		zoekTracker = document.forms['accommodatieZoeken'];
		zoekTracker.onsubmit = function() { zoekTracker.aankomstdatumHidden.value = zoekTracker.aankomstdatum.value; }
		
		zoekTracker.accommodatietypeId.onchange = instantie.updateZoekTracker;
		zoekTracker.aantalPersonen.onchange = instantie.updateZoekTracker;
		zoekTracker.aantalSlaapkamers.onchange = instantie.updateZoekTracker;
				
		zoekTracker.land.onchange = function() { instantie.updateZoekTrackerLocatie(1); };
		zoekTracker.provincie.onchange = function() { instantie.updateZoekTrackerLocatie(2); };
		zoekTracker.regio.onchange = function() { instantie.updateZoekTrackerLocatie(3); };
		zoekTracker.plaats.onchange = function() { instantie.updateZoekTrackerLocatie(4); };
		
		zoekTracker.verblijfsduur.onchange = function() { instantie.updateZoekTrackerVerblijfsduur(0); };
		zoekTracker.aantalNachten.onchange = function() { instantie.updateZoekTrackerVerblijfsduur(1); };
		zoekTracker.aankomstdatumSelect.onclick = function() { instantie.popupMenu(true); };
		
		// Popup
		document.getElementById('popupMenuSpacerTop').onmouseover = hidePopupMenu;
		document.getElementById('popupMenuSpacerLeft').onmouseover = hidePopupMenu;
		document.getElementById('popupMenuSpacerRight').onmouseover = hidePopupMenu;
		document.getElementById('popupMenuSpacerBottom').onmouseover = hidePopupMenu;		
		document.forms['aankomstenForm'].aankomstmaand.onchange = instantie.updateZoekTrackerAankomstdatum;
		
		var jaarMaand = getCheckedValue(document.getElementById('aankomstmaand'));
		var i = 1;
		while (i < 32)
		{
			var index = i;
			if (index < 10) index = '0' + index;
			index = 'dag_' + jaarMaand + index;
			if (document.getElementById(index)) document.getElementById(index).onclick = function(event) { instantie.setAankomstdatum(event); };
			i++;
		}
	}
	
	function hidePopupMenu()
	{
		instantie.popupMenu(false);	
	}
	
	this.updateZoekTracker = function()
	{
		var requestParameters = '';
		requestParameters += 'accommodatietypeId=' +  encodeURI(zoekTracker.accommodatietypeId.value);
		requestParameters += '&aantalPersonen=' +  encodeURI(zoekTracker.aantalPersonen.value);
		requestParameters += '&aantalSlaapkamers=' +  encodeURI(zoekTracker.aantalSlaapkamers.value);
		requestParameters += '&land=' +  encodeURI(zoekTracker.land.value);
		requestParameters += '&provincie=' +  encodeURI(zoekTracker.provincie.value);
		requestParameters += '&regio=' +  encodeURI(zoekTracker.regio.value);
		requestParameters += '&plaats=' +  encodeURI(zoekTracker.plaats.value);
		//requestParameters += '&aantalNachten=' +  encodeURI(zoekTracker.aantalNachten.value);
		//requestParameters += '&aankomstdatum=' +  encodeURI(zoekTracker.aankomstdatum.value);
		new ServerRequest('updateZoekTracker/', instantie, 'receiveUpdateZoekTracker', null, 'POST', requestParameters);
	}
	
	this.updateZoekTrackerLocatie = function(locatie)
	{
		if (locatie <= 3)
		{
			zoekTracker.plaats.value = 0;
		}
		if (locatie <= 2)
		{
			zoekTracker.regio.value = 0;
		}
		if (locatie <= 1)
		{
			zoekTracker.provincie.value = 0;
		}
				
		zoekTracker.land.disabled = true;
		zoekTracker.provincie.disabled = true;
		zoekTracker.regio.disabled = true;
		zoekTracker.plaats.disabled = true;
		
		instantie.updateZoekTracker();
	}

	this.updateZoekTrackerVerblijfsduur = function(aantalNachtenChange)
	{
		if (aantalNachtenChange == 0)
		{
			if (zoekTracker.verblijfsduur.value == 99)
			{
				zoekTracker.aantalNachten.value = 1;
				zoekTracker.aantalNachten.disabled = false;
				if (zoekTracker.aankomstdatum.value == '??-??-????') zoekTracker.aankomstdatum.value = zoekTracker.aankomstdatumDefault.value;
				zoekTracker.aankomstdatumSelect.disabled = false;
				zoekTracker.aankomstdatumExact.disabled = false;
			}
			else
			{
				zoekTracker.aantalNachten.value = getCheckedValue(zoekTracker.verblijfsduur);
				zoekTracker.aantalNachten.disabled = true;
				if (zoekTracker.verblijfsduur.value == '0')
				{
					zoekTracker.aankomstdatum.value = '??-??-????';
					zoekTracker.aankomstdatumSelect.disabled = true;
					zoekTracker.aankomstdatumExact.checked = false;
					zoekTracker.aankomstdatumExact.disabled = true;
				}
				else 
				{
					if (zoekTracker.aankomstdatum.value == '??-??-????') zoekTracker.aankomstdatum.value = zoekTracker.aankomstdatumDefault.value;
					zoekTracker.aankomstdatumSelect.disabled = false;
					zoekTracker.aankomstdatumExact.disabled = false;
				}
			}
		}
		else
		{
			if (zoekTracker.aantalNachten.value == 0)
			{
				zoekTracker.verblijfsduur.value = 0;
				zoekTracker.aantalNachten.disabled = true;
				zoekTracker.aankomstdatum.value = '??-??-????';
				zoekTracker.aankomstdatumSelect.disabled = true;
				zoekTracker.aankomstdatumExact.checked = false;
				zoekTracker.aankomstdatumExact.disabled = true;
			}
		}
		
		instantie.updateZoekTracker();
	}	
	
	this.popupMenu = function(show)
	{
		if (show)
		{
				document.getElementById('popupMenu').style.left = X-270 + 'px';
				document.getElementById('popupMenu').style.top = Y-273 + 'px';
				document.getElementById('popupMenu').style.visibility = 'visible';
				// hide fields IE6
				if (!window.XMLHttpRequest)
				{
					zoekTracker.aantalPersonen.style.visibility = 'hidden';
					zoekTracker.aantalSlaapkamers.style.visibility = 'hidden';
					zoekTracker.land.style.visibility = 'hidden';
					zoekTracker.provincie.style.visibility = 'hidden';
					zoekTracker.regio.style.visibility = 'hidden';
					zoekTracker.plaats.style.visibility = 'hidden';
					zoekTracker.verblijfsduur.style.visibility = 'hidden';
					zoekTracker.aantalNachten.style.visibility = 'hidden';
				}
		}
		else
		{
			document.getElementById('popupMenu').style.visibility = 'hidden';
			// show fields IE6
			if (!window.XMLHttpRequest)
			{
				zoekTracker.aantalPersonen.style.visibility = 'visible';
				zoekTracker.aantalSlaapkamers.style.visibility = 'visible';
				zoekTracker.land.style.visibility = 'visible';
				zoekTracker.provincie.style.visibility = 'visible';
				zoekTracker.regio.style.visibility = 'visible';
				zoekTracker.plaats.style.visibility = 'visible';
				zoekTracker.verblijfsduur.style.visibility = 'visible';
				zoekTracker.aantalNachten.style.visibility = 'visible';
			}	
		}	
	}
		
	this.receiveUpdateZoekTracker = function(data)
	{
		if (data.status)
		{
			var aantalPersonenKeuze = true;
			if (data.aantalPersonenKeuze == 0) aantalPersonenKeuze = false;
			zoekTracker.aantalPersonen.disabled = !aantalPersonenKeuze;
			zoekTracker.aantalSlaapkamers.disabled = !aantalPersonenKeuze;
			renewFormfield(zoekTracker.land, data.land.opties, data.land.selected ,data.land.disabled);
			renewFormfield(zoekTracker.provincie, data.provincie.opties, data.provincie.selected, data.provincie.disabled);
			renewFormfield(zoekTracker.regio, data.regio.opties, data.regio.selected, data.regio.disabled);			
			renewFormfield(zoekTracker.plaats, data.plaats.opties, data.plaats.selected, data.plaats.disabled);
			document.getElementById('accommodatieAantal').innerHTML = data.accommodatieAantal;
		}		
	}
	
	this.updateZoekTrackerAankomstdatum = function()
	{
		var requestParameters = '';
		requestParameters += 'jaarMaand=' + encodeURI(getCheckedValue(document.getElementById('aankomstmaand')));
		new ServerRequest('updateZoekTrackerAankomstdatum/', instantie, 'receiveUpdateZoekTrackerAankomstdatum', null, 'POST', requestParameters);
	}

	this.receiveUpdateZoekTrackerAankomstdatum = function(data)
	{
		if (data.status)
		{
			var jaarMaand = getCheckedValue(document.getElementById('aankomstmaand'));
			document.getElementById('aankomstKalender').innerHTML = stripslashes(data.aankomstKalender);
			var i = 1;
			while (i < 32)
			{
				var index = i;
				if (index < 10) index = '0' + index;
				index = 'dag_' + jaarMaand + index;
				if (document.getElementById(index)) document.getElementById(index).onclick = function(event) { instantie.setAankomstdatum(event); };
				i++;
			}
		}
	}
	
	this.setAankomstdatum = function(e)
	{
		var target;
		if (!e)
		{
			var e=window.event;
		}
		if (e.target)
		{
			target=e.target;
		}
		else if (e.srcElement)
		{
			target=e.srcElement;
		}
		if (target.nodeType == 3) // defeat Safari bug
		{
			target = targ.parentNode;
		}
		
		var dag = target.id.substr(10, 2);
		var maand = target.id.substr(8, 2);
		var jaar = target.id.substr(4, 4);
		
		document.getElementById('aankomstdatum').value = dag + '-' + maand + '-' + jaar;
		
		instantie.popupMenu(false);
	}
		
	this.updateZoekTrackerEigenschappen = function(eigenschap, enable)
	{
		if (enable)
		{
			enable = '1';
		}
		else
		{
			enable = '0';
		}
		
		var requestParameters = '';
		requestParameters += 'eigenschapNaam=' + encodeURI(eigenschap);
		requestParameters += '&eigenschapEnable=' + encodeURI(enable);
		new ServerRequest('updateZoekTrackerEigenschappen/', instantie, 'receiveUpdateZoekTrackerEigenschappen', null, 'POST', requestParameters);
		document.body.style.cursor = 'wait';
		document.getElementById('googleMapLoading').style.visibility = 'visible';
	}

	this.updateZoekTrackerAccommodatiesPrevious = function()
	{
		instantie.updateZoekTrackerAccommodaties('previous');
	}
	
	this.updateZoekTrackerAccommodatiesNext = function(firstPhotoId)
	{
		instantie.updateZoekTrackerAccommodaties('next');
	}

	this.updateZoekTrackerAccommodaties = function(previousNext)
	{
		var requestParameters = '';
		if (previousNext == 'previous') requestParameters += '&previous=1';
		if (previousNext == 'next') requestParameters += '&next=1';
		new ServerRequest('updateZoekTrackerEigenschappen/', instantie, 'receiveUpdateZoekTrackerEigenschappen', null, 'POST', requestParameters);
		document.body.style.cursor = 'wait';
		document.getElementById('googleMapLoading').style.visibility = 'visible';
	}
	
	this.receiveUpdateZoekTrackerEigenschappen = function(data)
	{
		if (data.status)
		{
			// eigenschappen update
			var eigenschappenCount = data.eigenschappen.length;
			var i = 0;
			while (i < eigenschappenCount)
			{
				var eigenschap = data.eigenschappen[i];
				var eigenschapId = eigenschap.id.split('.');
				document.getElementById('number.' + eigenschap.id).innerHTML = eigenschap.accommodatieAantal;
				if (eigenschap.isActief == '1')
				{
					if (eigenschapId[2] == '0')
					{
						if (document.getElementById('id.' + eigenschapId[0] + '.' + eigenschapId[1] + '.1')) document.getElementById('id.' + eigenschap.id).style.height = '35px';
						document.getElementById('id.' + eigenschap.id).className = 'kenmerkActief';
					}
					if (eigenschapId[2] == '1') document.getElementById('id.' + eigenschap.id).className = 'subKenmerkActief';
				}
				else
				{
					if (eigenschapId[2] == '0') 
					{
						if (document.getElementById('id.' + eigenschapId[0] + '.' + eigenschapId[1] + '.1')) document.getElementById('id.' + eigenschap.id).style.height = '15px';
						document.getElementById('id.' + eigenschap.id).className = 'kenmerk';
					}
					if (eigenschapId[2] == '1') document.getElementById('id.' + eigenschap.id).className = 'subKenmerk';
				}
				i++;
			}
			// update advertenties
			var accommodatieResultaten = document.getElementById('accommodatieResultaten');
			accommodatieResultaten.innerHTML = '';
			var accommodatieAdvertentiesCount = data.accommodatieAdvertenties.length
			var i = 0;
			while (i < accommodatieAdvertentiesCount)
			{
				var accommodatieAdvertentie = data.accommodatieAdvertenties[i];
				accommodatieResultaten.innerHTML += stripslashes(accommodatieAdvertentie.body);
				i++;
			}
			// update GoogleMap
			accommodatieManager.updateAccommodatieLijst(data.accommodaties);
			// update Resultaten tekst
			document.getElementById('trackerAccommodatieResultaten').innerHTML = stripslashes(data.resultatenText);
			document.getElementById('trackerAccommodatieResultatenVorigeVolgende').innerHTML = stripslashes(data.resultatenTextVorigeVolgende);
		}
		document.body.style.cursor = 'auto';
		document.getElementById('googleMapLoading').style.visibility = 'hidden';
	}
	
	var renewFormfield = function(selectFormfield, options, selected, disabled)
	{
		selectFormfield.options.length = 0;
		selectFormfield.innerHTML = '';
		var i = 0;
		var optionsCount = options.length;
		while (i < optionsCount)
		{
			if (options[i].isGroup == 1)
			{
				var optGroup = document.createElement('optgroup');
				optGroup.label = options[i].label;		
						
				var j = 0;
				var subOptions = options[i].options;
				var subOptionsCount = subOptions.length;
				while (j < subOptionsCount)
				{
					var optie = document.createElement('option');
					optie.value = subOptions[j].id;
					optie.innerHTML = subOptions[j].naam;
					optGroup.appendChild(optie);
					j++;
				}

				selectFormfield.appendChild(optGroup);
			}
			else
			{
					var optie = document.createElement('option');
					optie.value = options[i].id;
					optie.innerHTML = options[i].naam;
					selectFormfield.appendChild(optie);
			}			
			i++;
		}
		selectFormfield.value = selected;
		selectFormfield.disabled = disabled == 1;
		// IE6 BUGFIX
		if (selectFormfield.value != selected)
		{
			var i = 0;
			while (i < selectFormfield.options.length)
			{
				try
				{
					if (selectFormfield.options[i].value == selected) selectFormfield.options[i].selected = true;
				}
				catch (error)
				{
				}
				i++;
			}
		}
  	}
  	
  	var getCheckedValue = function(inputFormfield)
  	{
		if (inputFormfield.value)
		{
			return inputFormfield.value;
		}
		else 
		{
			var i = 0;
			var inputFormfieldCount = inputFormfield.length;
			while (i < inputFormfieldCount)
			{
				if (inputFormfield[i].checked) return inputFormfield[i].value;
				i++;
			}
		}
		return 0;
	}
	
	this.updateEigenschap = function(id)
	{
		var enable = true;
		
		var kenmerk = id.split('.');
		if (kenmerk[3] == '0')
		{
			var subKenmerkId = kenmerk[0] + '.' + kenmerk[1] + '.' + kenmerk[2] + '.1';
			var subKenmerk = document.getElementById(subKenmerkId);
			if (document.getElementById(id).className == 'kenmerk')
			{
				enable = true;
				document.getElementById(id).className = 'kenmerkActief';
				if (subKenmerk) document.getElementById(id).style.height = '35px';
			}
			else
			{
				enable = false;
				document.getElementById(id).className = 'kenmerk';
				if (subKenmerk) 
				{
					document.getElementById(id).style.height = '15px';
					subKenmerk.className = 'subKenmerk';
				}
			}
		}
		else
		{
			if (document.getElementById(id).className == 'subKenmerk')
			{
				enable = true;
				document.getElementById(id).className = 'subKenmerkActief';
			}
			else
			{
				enable = false;
				document.getElementById(id).className = 'subKenmerk';
			}
		}
		
		instantie.updateZoekTrackerEigenschappen(kenmerk[1] + '.' + kenmerk[2] + '.' + kenmerk[3], enable);
	}
	
	init();
}
