﻿
var CurrentDiscount = 0;
var DiscountCurrentX = 0;
var DiscountTargetX = 0;
var DiscountItemWidth = 144;
var DiscountScrollTimer = null;
var AutoCompleteMouseDown = false;
var IsIE = navigator.userAgent.indexOf("MSIE") != -1;
var IsMozilla = navigator.userAgent.indexOf("Mozilla") != -1;
var CurrentAutoCompleteIndex = -1;
var CurrentAutoCompleteTextIndex = -1;
var CurrentAutoCompleteTextSelStart = -1;
var CurrentAutoCompleteText = null;
var CurrentAutoCompleteItems = [];
var Timers = new Object();
var Images = new Array();
var CurrentMapItem = null;
var AutoMapItem = null;
var AutoMapTimer = null;
var AutoMapInterval = 6000;
var CanClick = true;
var AutoCompleteTimer = null;

var ImagesIndex = 0;
Images[ImagesIndex] = new Image();
Images[ImagesIndex++].src = "/images/home/search_tab_inactive_hover2.gif";
Images[ImagesIndex] = new Image();
Images[ImagesIndex++].src = "/images/home/arrow_left_hover.gif";
Images[ImagesIndex] = new Image();
Images[ImagesIndex++].src = "/images/home/arrow_right_hover.gif";

//---- search --------------------------

function SearchDestFocus()
{
	var elem = document.getElementById("SearchDest");
	if (elem.value == DefaultSearchText)
		elem.value = "";
	elem.style.color = "";
}

function SearchDestLostFocus()
{
	CollectAutoCompleteItems();
	setTimeout("HideAutoCompleteBox()", 100);
	UpdateSearch();
}

function HideAutoCompleteBox()
{
	if (AutoCompleteMouseDown)
		return;
	document.getElementById('AutoCompleteBox').style.display = 'none';
	var elem = document.getElementById("SearchDest");
	if (elem.value.replace(/^\s*|\s&/g, "").length == 0)
		elem.value = DefaultSearchText;

	if (elem.value == DefaultSearchText)
		elem.style.color = "#777777";
	CollectAutoCompleteItems();
	//UpdateSearch();
}

function SearchButtonClicked()
{
	if (!CanClick)
		return;

	CollectAutoCompleteItems();

	var period = document.getElementById("SearchPeriod");
	var date = $("#datepicker").datepicker("getDate");

	var theme = 0;
	var index = 0;
	while ((cb = document.getElementById("theme" + index++)))
	{
		if (cb.checked)
		{
			theme = cb.value;
			break;
		}
	}

	var text = "";
	var prov = null, area = null, city = null, per = null;
	for (var i = 0; i < CurrentAutoCompleteItems.length; i++)
	{
		var item = CurrentAutoCompleteItems[i];
		if (item.Type == "P")
			prov = item.Name;
		else if (item.Type == "C")
			city = item.Name;
		else if (item.Type == "A")
			area = item.Id;
		else
			text += item.Name + " ";
	}

	if (IsBookFriesland)
		prov = "friesland";

	var cat = Categories[SelectedSearchTab + 1];

	var url = Language == 2 ? "/mieten" : "/huren";
	url += "/" + cat;
	if (prov)
		url += "/" + escape(prov);
	if (city)
		url += "/" + escape(city);

	var qs = "";
	if (text.length > 0)
		qs += "&searchtext=" + escape(text.replace(/\s+$/, ""));
	if (date)
		qs += "&date=" + GetDateStringYYYYMMDD(date, true);
	
	var p = period.selectedIndex > 0 ? period.options[period.selectedIndex].value : null;
	if (p)
	{
		if (p[0] == 'P')
			qs += "&period=" + p.substr(1);
		else
			qs += "&holidayid=" + p.substr(1);
	}

	if (SelectedSearchTab == 3)
		qs += "&facilities=" + ParkFacilityId;
	if (theme > 0)
		qs += "&themeid=" + theme;
	if (area)
		qs += "&areaid=" + escape(area);

	if (qs.length > 0)
		qs = '?' + qs.substr(1);
	location.href = url + qs;
}

function TryAutoComplete(e)
{
	if (AutoCompleteTimer)
		clearTimeout(AutoCompleteTimer);
	AutoCompleteTimer = setTimeout("CollectAutoCompleteItems(); UpdateSearch(); AutoCompleteTimer = null;", 1000);

	if (!e)
		e = window.event;

	if (e.keyCode == 38 || e.keyCode == 40)
	{
		SelectAutoComplete(e);
		return;
	}

	var keycode = e.keyCode ? e.keyCode : 0;
	var box = document.getElementById("AutoCompleteBox");
	if (keycode && keycode < 32 && keycode != 8 && keycode != 13)
		return;

	if (keycode == 13 && CurrentAutoCompleteIndex >= 0)
	{
		box.style.display = "none";
		return;
	}

	var start = -1;
	var tb = document.getElementById("SearchDest");

	if (IsIE)
	{
		var range = tb.createTextRange();
		range.setEndPoint("EndToStart", document.selection.createRange());
		start = range.text.length;
	}
	else if (IsMozilla)
	{
		var s = tb.selectionStart;
		var e = tb.selectionEnd;
		start = s > e ? e : s;
	}

	CurrentAutoCompleteTextSelStart = start;

	box.scrollTop = 0;
	CurrentAutoCompleteIndex = -1;
	CurrentAutoCompleteTextIndex = -1;
	CurrentAutoCompleteText = null;
	while (box.childNodes.length > 0)
		box.removeChild(box.childNodes[0]);

	if (start < 1)
	{
		box.style.display = "none";
		return;
	}

	var text = tb.value.substr(0, start);
	var index = text.length - 1;
	while (index > 0)
	{
		var ch = text.charAt(index);
		if (ch == ' ' || ch == ',' || ch == '\t')
		{
			index++;
			break;
		}
		index--;
	}

	if (index >= text.length)
	{
		box.style.display = "none";
		return;
	}
	CurrentAutoCompleteTextIndex = index;

	text = text.substr(index);
	if (text.length < 1)
	{
		box.style.display = "none";
		return;
	}

	CollectAutoCompleteItems();

	text = text.toLowerCase();
	textcode = text.charCodeAt(0);
	var matches = new Array();
	var s = "";
	for (var i = 0; i < AutoComplete.length; i++)
	{
		var ac = AutoComplete[i].Name.toLowerCase();
		var code = ac.charCodeAt(0);

		if (code < textcode)
			continue;
		if (code > textcode)
			break;

		if (ac.length <= text.length)
			continue;
		if (ac.substr(0, text.length) == text)
		{
			var exists = false;
			for (var j = 0; j < CurrentAutoCompleteItems.length; j++)
			{
				if (AutoComplete[i].Type == CurrentAutoCompleteItems[j].Type)
				{
					exists = true;
					break;
				}
			}
			if (!exists)
				matches.push(AutoComplete[i].Name);
		}
	}

	if (matches.length < 1)
	{
		box.style.display = "none";
		return;
	}

	for (var i = 0; i < matches.length; i++)
	{
		var item = document.createElement("div");
		item.innerHTML = matches[i];
		item.style.cursor = "default";
		item.style.width = "550px";
		//item.style.backgroundColor = "#FFFFFF";
		box.appendChild(item);
		//AddEventListener(item, "click", SelectAutoCompleteMouse, false);
		item.onmousedown = function () { AutoCompleteMouseDown = true; };
		item.onmouseup = function () { AutoCompleteMouseDown = false; HideAutoCompleteBox(); };
		item.onclick = SelectAutoCompleteMouse;
	}

	box.style.display = "block";
}

function CollectAutoCompleteItems()
{
	CurrentAutoCompleteItems = [];
	var searchtext = document.getElementById("SearchDest").value.toLowerCase().replace(/^\s+|\s$/g, "");
	var elem = document.getElementById("SearchDest");
	if (searchtext.length < 1)
		return;
	if (elem.value == DefaultSearchText)
		return;

	var index = 0;
	while (index < searchtext.length)
	{
		var start = index;
		var text = searchtext.substr(index);
		var textcode = text.charAt(0);
		for (var i = 0; i < AutoComplete.length; i++)
		{
			var ac = AutoComplete[i].Name.toLowerCase();
			var code = ac.charCodeAt(0);
			if (code < textcode)
				continue;
			if (code > textcode)
				break;
			if (ac.length > text.length)
				continue;
			if (text.substr(0, ac.length) != ac)
				continue;
			if (text.length > ac.length)
			{
				var next = text.charAt(ac.length);
				if (next != ' ' && next != ',' && next != '\t')
					continue;
			}

			CurrentAutoCompleteItems.push(AutoComplete[i]);
			index += ac.length;
		}

		if (index == start)
		{
			while (index < searchtext.length)
			{
				var ch = searchtext.charAt(index);
				if (ch == ' ' || ch == ',' || ch == '\t')
					break;
				index++;
			}

			CurrentAutoCompleteItems.push({ Name: searchtext.substr(start, index - start), Type: "T" });
		}

		while (index < searchtext.length)
		{
			var ch = searchtext.charAt(index);
			if (ch != ' ' && ch != ',' && ch != '\t')
				break;
			index++;
		}
	}
	/*
	var s = "";
	for (var i = 0; i < CurrentAutoCompleteItems.length; i++)
	s += CurrentAutoCompleteItems[i].Type + ": " + CurrentAutoCompleteItems[i].Name + "<br/>";
	*/
}

function SelectAutoCompleteMouse(e)
{
	if (!e)
		e = window.event;
	var elem = e.target;
	if (!elem)
		elem = e.srcElement;
	if (!elem)
		return;
	if (elem.nodeType == 2)
		elem = elem.parentNode;

	var box = document.getElementById("AutoCompleteBox");
	var index = -1;
	for (var i = 0; i < box.childNodes.length; i++)
	{
		if (box.childNodes[i] == elem)
		{
			index = i;
			break;
		}
	}
	if (index < 0)
		return;

	ReplaceSelection(elem.innerHTML);
	box.style.display = "none";

	CollectAutoCompleteItems();
	UpdateSearch();
	HideAutoCompleteBox();
}

function SelectAutoComplete(e)
{
	//try
	{
		if (e.keyCode != 38 && e.keyCode != 40)
			return;

		var box = document.getElementById("AutoCompleteBox");
		var index = CurrentAutoCompleteIndex;
		var count = box.childNodes.length;
		if (count < 1)
		{
			CurrentAutoCompleteIndex = -1;
			return;
		}

		index = e.keyCode == 38 ? index - 1 : index + 1;
		if (index < 0)
			index = count - 1;
		else if (index >= count)
			index = 0;

		if (CurrentAutoCompleteIndex >= 0 && CurrentAutoCompleteIndex < count)
			box.childNodes[CurrentAutoCompleteIndex].className = "home_search_box_item";

		CurrentAutoCompleteIndex = index;
		var elem = box.childNodes[CurrentAutoCompleteIndex];
		elem.className = "home_search_box_item_selected";

		var y = elem.offsetTop;
		var y2 = y + elem.offsetHeight;
		var height = box.offsetHeight - 2;

		if (y < box.scrollTop)
			box.scrollTop = y;
		else if (y2 > box.scrollTop + height)
			box.scrollTop = y2 - height;

		ReplaceSelection(elem.innerHTML);

		CollectAutoCompleteItems();
		UpdateSearch();
	}
	//catch(e)
	{
		//	alert(e);
	}
}

function ReplaceSelection(text)
{
	var tb = document.getElementById("SearchDest");
	var end = CurrentAutoCompleteTextIndex;
	var box = document.getElementById("AutoCompleteBox");
	var curtext = tb.value;
	if (CurrentAutoCompleteText != null)
	{
		end = CurrentAutoCompleteTextIndex + CurrentAutoCompleteText.length;
	}
	else
	{
		while (end < curtext.length)
		{
			var ch = curtext.charAt(end);
			if (ch == ' ' || ch == ',' || ch == '\t')
				break;
			end++;
		}
		if (end < CurrentAutoCompleteTextIndex)
			end = CurrentAutoCompleteTextIndex;
	}

	if (IsIE)
	{
		tb.select();
		range = tb.createTextRange();
		range.collapse();
		range.moveStart("character", CurrentAutoCompleteTextIndex);
		range.moveEnd("character", end - CurrentAutoCompleteTextIndex);
		range.select();
		range.text = text;
		tb.select();

		range = tb.createTextRange();
		range.collapse();
		//range.moveStart("character", CurrentAutoCompleteTextSelStart);
		//range.moveEnd("character", (CurrentAutoCompleteTextIndex + text.length) - CurrentAutoCompleteTextSelStart);
		range.moveStart("character", (CurrentAutoCompleteTextIndex + text.length));
		range.moveEnd("character", 0);
		range.select();
	}
	else if (IsMozilla)
	{
		var cursel = tb.selectionStart > tb.selectionEnd ? tb.selectionEnd : tb.selectionStart;
		tb.focus();
		tb.setSelectionRange(CurrentAutoCompleteTextIndex, end);
		tb.value = curtext.substr(0, CurrentAutoCompleteTextIndex) + text + curtext.substr(end);
		//tb.setSelectionRange(cursel, CurrentAutoCompleteTextIndex + text.length);
		tb.setSelectionRange(CurrentAutoCompleteTextIndex + text.length, CurrentAutoCompleteTextIndex + text.length);
	}

	CurrentAutoCompleteText = text;
	tb.focus();
}

function InitSearch()
{
	var elem = document.getElementById("SearchDest");
	elem.value = DefaultSearchText;
	elem.style.color = "#777777";
	/*
	var picker = GetDatePicker("SearchCalendar");
	picker.oldOnFocus = picker.onfocus;
	picker.oldOnBlur = picker.onblur;
	picker.oldOnKeyDown = picker.onkeydown;
	picker.onfocus = PickerFocus;
	picker.onblur = PickerBlur;
	picker.onkeydown = PickerKeyDown;*/
	//SearchTabClick(0);
	UpdateSearch();
}

function PickerFocus(e)
{
	this.oldOnFocus(e);
	UpdateSearch();
}

function PickerBlur(e)
{
	this.oldOnBlur(e);
	UpdateSearch();
}

function PickerKeyDown(e)
{
	this.oldOnKeyDown(e);

	if (!e)
		e = window.event;

	if (e.keyCode == 13 || e.which == 13)
	{
		SearchButtonClicked();
		return false;
	}
}

function UpdateSearch()
{
	var period = document.getElementById("SearchPeriod");
	var date = $("#datepicker").datepicker("getDate");

	var params = new Object();

	var index = 0;
	while ((cb = document.getElementById("theme" + index++)))
	{
		if (cb.checked)
		{
			params["themeid"] = cb.value;
			break;
		}
	}

	var text = "";
	var prov = null, area = null, city = null, per = null;
	for (var i = 0; i < CurrentAutoCompleteItems.length; i++)
	{
		var item = CurrentAutoCompleteItems[i];
		if (item.Type == "P")
			params["provinceid"] = item.Id;
		else if (item.Type == "C")
			params["cityid"] = item.Id;
		else if (item.Type == "A")
			params["areaid"] = item.Id;
		else
			text += item.Name + " ";
	}
	if (text.length > 0)
		params["searchtext"] = text.replace(/^\s+|\s+$/g, '');
	if (ProvinceId)
		params["provinceid"] = ProvinceId;

	params["categoryid"] = SelectedSearchTab < 3 ? SelectedSearchTab + 1 : 1;
	params["date"] = date ? GetDateStringYYYYMMDD(date, true) : "";
	params["period"] = period.selectedIndex > 0 ? period.options[period.selectedIndex].value : "";
	params["facilities"] = (SelectedSearchTab == 3) ? ParkFacilityId : 0;
	params["language"] = Language;
	document.getElementById("SearchResult").innerHTML = "";
	var request = new HttpRequest();
	request.Send("GET", "/home/search", UpdateSearchCallback, params);
}

function UpdateSearchCallback(request)
{
	var text = request.responseText;
	document.getElementById("SearchResult").innerHTML = request.responseText + " " + Resultaten;
	var button = document.getElementById("SearchButton");
	if (!button.oldonmouseover)
		button.oldonmouseover = button.onmouseover;
	if (parseInt(request.responseText) > 0)
	{
		button.onclick = SearchButtonClicked;
		button.onmouseover = button.oldonmouseover;
		CanClick = true;
	}
	else
	{
		button.onclick = null;
		button.onmouseover = null;
		CanClick = false;
	}
}

//---- discounts --------------------------

function ScrollDiscountLeft()
{
	var elem = document.getElementById("DiscountTable");
	if (!elem)
		return;
	var max = elem.rows[0].cells.length - 4;

	var pos = (DiscountCurrentX / DiscountItemWidth).toFixed(0);
	if (pos >= CurrentDiscount)
		CurrentDiscount--;
	else
		CurrentDiscount = pos - 1;
	if (CurrentDiscount < 0)
		CurrentDiscount = 0;
	else if (CurrentDiscount > max)
		CurrentDiscount = max;

	DiscountTargetX = CurrentDiscount * DiscountItemWidth;
	if (DiscountScrollTimer)
		return;

	ScrollDiscount();
}

function ScrollDiscountRight()
{
	var elem = document.getElementById("DiscountTable");
	if (!elem)
		return;
	var max = elem.rows[0].cells.length - 4;

	var pos = (DiscountCurrentX / DiscountItemWidth).toFixed(0);
	if (pos <= CurrentDiscount)
		CurrentDiscount++;
	else
		CurrentDiscount = pos - 1;
	if (CurrentDiscount < 0)
		CurrentDiscount = 0;
	else if (CurrentDiscount > max)
		CurrentDiscount = max;

	DiscountTargetX = CurrentDiscount * DiscountItemWidth;
	if (DiscountScrollTimer)
		return;

	ScrollDiscount();
}

function ScrollDiscount()
{
	DiscountScrollTimer = null;
	var elem = document.getElementById("DiscountTable");
	if (!elem)
		return;
	var diff = Math.abs(DiscountTargetX - DiscountCurrentX);
	var scroll = diff / 5;
	if (scroll < 1)
		scroll = 1;
	if (DiscountCurrentX < DiscountTargetX)
	{
		DiscountCurrentX += scroll;
		if (DiscountCurrentX > DiscountTargetX)
			DiscountCurrentX = DiscountTargetX;
	}
	else if (DiscountCurrentX > DiscountTargetX)
	{
		DiscountCurrentX -= scroll;
		if (DiscountCurrentX < DiscountTargetX)
			DiscountCurrentX = DiscountTargetX;
	}

	DiscountCurrentX = parseInt(DiscountCurrentX);
	elem.style.left = "-" + DiscountCurrentX + "px";
	if (DiscountCurrentX != DiscountTargetX)
		DiscountScrollTimer = setTimeout("ScrollDiscount()", 40);
}

function SubscribeNieuwsbrief()
{
	var tb = document.getElementById("NiewsbriefEmail");
	if (!tb)
		return;

	var email = tb.value.replace(/^\s+|\s+$/g, "");
	if (email.length < 1)
		return;
	if (!email.match(/[^@]+@[^@.]+\.[^@.][^@]*/))
	{
		// foutmelding geven
		alert('Ongeldig email adres');
		return;
	}

	var request = new HttpRequest();
	var params = new Object();
	params["email"] = email;
	request.Send("POST", "/home/subscribe", SubscribeNieuwsbriefCompleted, params);

	var form = document.getElementById("NieuwsbriefForm");
	var result = document.getElementById("NieuwsbriefResult");

	form.parentNode.removeChild(form);
	form.style.display = "none";
	result.innerHTML = SubscribeSubscribing;
	result.style.display = "block";
}

function SubscribeNieuwsbriefCompleted(request)
{
	var result = document.getElementById("NieuwsbriefResult");
	if (request.status != 200 || request.responseText != "OK")
	{
		result.innerHTML = SubscribeError;
		return;
	}

	result.innerHTML = SubscribeOk;
}

function ToggleAction()
{
	var elem = document.getElementById("Action");
	if (!elem)
		return;
	if (elem.src.match(/_text\.jpg$/i))
		elem.src = elem.src.substring(0, elem.src.length - 9) + ".jpg";
	else
		elem.src = elem.src.replace(/\.jpg$/i, "") + "_text.jpg";
}


function ThemeClicked(id)
{
	var index = 0;
	var cb;
	while((cb = document.getElementById("theme" + index++)))
	{
		if (cb.id != id && cb.checked)
			cb.checked = false;
	}

	UpdateSearch();
}

function ShowAll()
{
	document.getElementById('ctl00$MainContentPlaceHolder$SearchDest').value = DefaultSearchText;
	document.getElementById('ctl00_MainContentPlaceHolder_ThemeZorg').checked = false;
	document.getElementById('ctl00_MainContentPlaceHolder_ThemeBijzonder').checked = false;
	document.getElementById('ctl00_MainContentPlaceHolder_ThemeKind').checked = false;
	document.getElementById('ctl00_MainContentPlaceHolder_ThemeLuxe').checked = false;
	document.getElementById('_eo_ctl00_MainContentPlaceHolder_SearchCalendar_picker').value = '';
	document.getElementById('ctl00$MainContentPlaceHolder$SearchPeriod').value = '';
}

