/*
 * 
 * zie ook ovvp.js
 * 
 */

var ajaxResult = new Array(); // resultaten opgevraagd met ajax cachen in een
								// array, zodat er sneller terug gebladerd kan
								// worden
var lastCall = "search"; // laatste aanroep van ajax pagina. deze verwijst
							// naar een key in de ajaxResult array
var fadeSpeed = 250; // fade speed voor transparante elementen
var bgOpacity = 0.75; // 'boekframe' achtergrond transparantie
var ovrOpacity = 0.5; // overlay transparantie wanneer er geladen wordt
var ajaxObj = new Object();
ajaxObj.abort = function()
{
};

// zoek & boek formulier afhandeling
$(document).ready(
	function()
	{
		// formulier submit
		$("#zb_form").submit(searchOffer);
		$("body")
				.prepend(
						"<div class='boekOverlay'></div><div id='boekBackground'></div>");
		setAjaxListeners();
		setFormListeners();
		
		$("#zb_form select[name=park]").change(parkChange);
		parkChange();
		//$("select[name=maand_jaar]").change();
		accommodationChange();
	}
);

/**
 * Aanbod doorzoeken adhv zoekbalk bovenaan
 * 
 * @param e
 *            Event
 * @return false
 */
function searchOffer(e)
{
	lastCall = "search";
	var accomm = $("select[name=accommodatie]", this).val();
	
	if (accomm.length == 0 || accomm.match("keuze"))
	{
		alert("Selecteer een type accommodatie.");
		return false;
	}
	
	var dag = $("select[name=dag]", this).val().substr(0,2);
	if (dag.length == 0 || dag == 0)
	{
		alert("Geeft een aankomstdatum op.");
		return false;
	}
	
	var verblijf = $("select[name=nachten]", this).val();
	if (verblijf.length == 0 || verblijf == 0)
	{
		alert("Geeft de verblijfsduur op.");
		return false;
	}
	
	var pers = $("select[name=personen]", this).val();
	if (pers.length == 0)
	{
		alert("Geef het aantal personen op.");
		return false;
	}
	
	var ser = $(this).serialize().split("&");
	for (i=0; i<ser.length; i++)
	{
		if (ser[i].indexOf("dag=")>=0)
		{
			var d = ser[i].split("=");
			d[1] = (d[1].substr(0,2));
			d = d.join("=");
			ser[i] = d;
		}
	}
	ser = ser.join("&");
	
	blendContent();
	
	// $("#zoekLoader").css({visibility:"visible",opacity:0}).fadeTo(fadeSpeed,1);
	ajaxObj.abort();
	ajaxObj = $.get("zoek_en_boek/zoeken.php", ser,
			showSearchResult);
	return false;
}

/**
 * Zoekresultaat weergeven
 * 
 * @param data
 *            HTML response van ajax request
 * @return
 */
function showSearchResult(data)
{
	ajaxResult["search"] = data;
	ajaxResult["boek1"] = null;
	ajaxResult["boek2"] = null;
	ajaxResult["boek3"] = null;
	// alert("search result:\n\n" + data);
	showAjaxContent(data);
}

/**
 * Inhoud van hoofdcontent vervangen met andere html
 * 
 * @param htmlContent
 *            Nieuwe html om weer te geven
 */
function showAjaxContent(htmlContent)
{
	if (String(htmlContent).length == 0)
		return;
	ajaxResult[lastCall]["html"] = htmlContent;

	var footer = $("#content #footer").clone();

	// $("#content").animate({opacity:0},fadeSpeed,function()
	{
		// alert("show html: " + htmlContent);
		$("#content").html(htmlContent);
		if (!/.footer/im.test(htmlContent))
			$(footer).appendTo("#content");

		// achtergrond voor boeken-frame
		$("#boekBackground").css($(".boeken_frame").position());
		$(window).resize(function()
		{
			$("#boekBackground").css($(".boeken_frame").position());
		});
		if ($("#boekBackground").css("display") == "none")
			$("#boekBackground").css( {
				width : $(".boeken_frame").width() + 6,
				height : $(".boeken_frame").height() + 6,
				opacity : 0,
				display : "block"
			}).fadeTo(fadeSpeed, bgOpacity);
		else
			$("#boekBackground").css( {
				width : $(".boeken_frame").width() + 6,
				height : $(".boeken_frame").height() + 6
			});
		setAjaxListeners();
		// $("#content").animate({opacity:1},fadeSpeed);
	}// );
	$("#zoekLoader").fadeTo(fadeSpeed, 0);
	showContent();
}

function processBookLink(url)
{
	blendContent();
	if (!ajaxResult["search"])
		ajaxResult["search"] = $("#content").html();

	lastCall = "boek1";
	ajaxResult[lastCall] = new Array();
	ajaxResult[lastCall]["url"] = url.replace("&clear=1", "");

	ajaxObj.abort();
	ajaxObj = $.get(url, showAjaxContent);
}

/**
 * Bij het weergeven van ajax requests moeten listeners opnieuw gezet worden
 * 
 * @return false
 */
function setAjaxListeners()
{
	// link "direct boeken" bij zoekresultaten
	$(".boekLink").click(
			function()
			{
				/*
				blendContent();

				if (!ajaxResult["search"])
					ajaxResult["search"] = $("#content").html();

				lastCall = "boek1";
				ajaxResult[lastCall] = new Array();
				ajaxResult[lastCall]["url"] = $(this).attr("href").replace(
						"&clear=1", "");

				ajaxObj.abort();
				ajaxObj = $.get($(this).attr("href"), showAjaxContent);
				*/
				processBookLink($(this).attr("href"));
				return false;
			});

	// "terug"-knop, terug naar zoekresultaten
	$(".gotoResults").click(function()
	{
		blendContent();
		showAjaxContent(ajaxResult["search"]);
		return false;
	});

	// terug naar pagina 1 vanaf de 2e boekingspagina
	$(".gotoBoek1").click(function()
	{
		blendContent();
		// showAjaxContent(ajaxResult["boek1"]["html"]); // gecachede inhoud
		// laten zien
			ajaxObj.abort();
			ajaxObj = $.get(ajaxResult["boek1"]["url"], showAjaxContent); // pagina
																			// opnieuw
																			// laden
		});

	// terug naar pagina 2 vanaf de 3e boekingspagina
	$(".gotoBoek2").click(function()
	{
		blendContent();
		showAjaxContent(ajaxResult["boek2"]["html"]); // gecachede inhoud
														// laten zien
			// $.post(ajaxResult["boek2"]["url"],ajaxResult["boek2"]["data"],showAjaxContent);
			// // pagina opnieuw laden
		});

	// Formulier stap 1 submit
	$("form[name=boeken1]")
			.submit(function()
			{
				// eerst formulier valideren
					$("input[type=text]", this).each(function()
					{
						var val = parseInt($(this).val());
						if (isNaN(val))
							val = 0;
						$(this).val(val);
					});

					var volw = $("input[name=txtVolwassenen]", this).val();
					var kind12 = $("input[name=txtKinderen3_12]", this).val();
					var kind2 = $("input[name=txtKinderen]", this).val();
					var max = $("input[name=max_personen]", this).val();

					var totaal = parseInt(volw) + parseInt(kind12);
					if (parseInt(volw) == 0)
					{
						alert("U dient tenminste 1 volwassene op te geven.");
						return false;
					}
					if (parseInt(totaal) > parseInt(max))
					{
						alert("U kunt deze accomodatie voor maximaal "
								+ max
								+ " personen reserveren. Kinderen t/m 2 worden niet mee gerekend. ");
						return false;
					}

					blendContent();

					lastCall = "boek2";
					ajaxResult[lastCall] = new Array();
					ajaxResult[lastCall]["url"] = "zoek_en_boek/boeken2.php";
					ajaxResult[lastCall]["data"] = $(this).serialize();
					ajaxObj.abort();
					ajaxObj = $.post("zoek_en_boek/boeken2.php", $(this)
							.serialize(), showAjaxContent); // pagina opnieuw
															// laden
					return false;
				});

	// Formulier stap 2 submit
	$("form[name=boeken2]").submit(function()
	{
		// geen validator nodig
			blendContent();

			lastCall = "boek3";
			ajaxResult[lastCall] = new Array();
			ajaxResult[lastCall]["url"] = "zoek_en_boek/boeken3.php";
			ajaxResult[lastCall]["data"] = $(this).serialize();
			ajaxObj.abort();
			ajaxObj = $.post("zoek_en_boek/boeken3.php", $(this).serialize(),
					showAjaxContent); // pagina opnieuw laden
			return false;
		});
	var didSubmit = false;
	// Formulier stap 3 submit
	$("form[name=boeken3]")
			.submit(function()
			{

				if (didSubmit)
				{
					alert("Uw verzoek wordt verwerkt. Even geduld a.u.b.");
					return false;
				}
				// validator
					var error = "";

					if ($("#h", this).attr("checked") == false
							&& $("#v", this).attr("checked") == false)
						error += "- Aanhef\n";
					if (!validateStr(ge("voorletters")))
						error += "- Voorletters\n";
					if (!validateStr(ge("achternaam")))
						error += "- Achternaam\n";
					if (!validateStr(ge("adres")))
						error += "- Straat\n";
					if (!validateStr(ge("huisnummer")))
						error += "- Huisnummer " + ge("huisnummer") + "\n";
					//if (!/^[0-9]{4}[a-z]{2}$/i.test(ge("postcode")))
					if (!validateStr(ge("postcode")))	
						error += "- Postcode\n";
					if (!validateStr(ge("woonplaats")))
						error += "- Woonplaats\n";
					if (!validateStr(ge("land")))
						error += "- Land\n";
					if (!/^[0-9\-]{10,12}$/.test(ge("tf_nr_overdag")))
						error += "- Telefoonnummer overdag\n";
					if (!validateNum(ge("gb_datum_dag")))
						error += "- Geboortedatum: dag\n";
					if (!validateNum(ge("gb_datum_maand")))
						error += "- Geboortedatum: maand\n";
					if (!validateNum(ge("gb_datum_jaar")))
						error += "- Geboortedatum: jaar\n";
					if (!validateMail(ge("emailadres")))
						error += "- E-mailadres\n";
					if (ge("emailadres") != ge("emailadres2"))
						error += "- E-mailadressen zijn niet gelijk\n";
					if ($("#rv", this).attr("checked") == false)
						error += "- U dient akkoord te gaan met de Recronvoorwaarden\n";

					if (error != "")
					{
						alert("Het formulier is niet volledig ingevuld.\nControleer de volgende velden en probeer het opnieuw:\n\n"
								+ error);
						return false;
					}
					lastCall = "boek4";
					ajaxResult[lastCall] = new Array();
					ajaxResult[lastCall]["url"] = "zoek_en_boek/boeken4.php";
					ajaxResult[lastCall]["data"] = $(this).serialize();

					blendContent();
					if (!didSubmit)
					{
						didSubmit = true;
						$.post("zoek_en_boek/boeken4.php", $(this).serialize(),
								showAjaxContent);
					}
					return false;
				});

	// informatie afbeeldingen
	$(".infoImage").each(function()
	{
		// $(this).balloon({fixed:true, balloonID:"#" +
		// $(this).attr("target")});
			var t = "#" + $(this).attr("target");
			$(t).css( {
				position : "absolute"
			});

			var obj = this;
			$(this).hover(function(e)
			{
				$(t).css("display", "block");

				var p = $(obj).position();
				p.top = p.top - $(t).height() - 12 - $(obj).height();
				p.left = p.left - ($(t).width() / 2);
				$(t).css(p);
			}, function(e)
			{
				$(t).css("display", "none");
			});
		});
}

/**
 * Overlay weergeven tijdens het laden van een nieuwe ajax pagina
 * 
 * @return
 */
function blendContent()
{
	var obj = ".boeken_frame";
	if ($(obj).length == 0)
		obj = "#content";
	var bw = parseInt($(obj).css("border-width"));
	var w = 521; // parseInt($(obj).width()) + (isNaN(bw)?0:bw);
	var h = parseInt($(obj).height()) + (isNaN(bw) ? 0 : bw);
	var bgPos = h > 600 ? "300px" : "30%";

	$(".boekOverlay").css("background-position", "center " + bgPos);
	$(".boekOverlay").css($(obj).position());
	$(".boekOverlay").css( {
		opacity : 0,
		display : "block",
		width : w + "px",
		height : h + "px"
	});
	$(".boekOverlay").fadeTo(fadeSpeed, ovrOpacity);
}

/**
 * Overlay verbergen
 */
function showContent()
{
	$(".boekOverlay").fadeTo(fadeSpeed, 0, function()
	{
		$(this).css("display", "none");
	});
	if ($(".boeken_frame").size() == 0)
		$("#boekBackground").css("display", "none");
}

/**
 * E-mail validator check
 * 
 * @param m
 *            E-mail adres
 * @return true indien geldig, false indien ongeldig
 */
function validateMail(m)
{
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	return (reg.test(m));
}

/**
 * Simple string validator. (Speciale karakters worden niet gecontroleerd.)
 * 
 * @param str
 *            String om te controleren
 * @return true indien corrent, false indien er cijfers in zitten
 */
function validateStr(str)
{
	str = str.replace(" ", "");
	// return /[^0-9]+/igm.test(str) && str.length>0;
	return str.length > 0;
}

/**
 * Integer validator
 * 
 * @param num
 *            Een string
 * @return true indien een geldig, false indien ongeldig getal
 */
function validateNum(num)
{
	return /^[0-9]+$/.test(num);
}

/**
 * Veldwaarde van formulier ophalen
 * 
 * @param fieldName
 *            Veldnaam
 * @return Waarde van het veld
 */
function ge(fieldName)
{
	return $("input[name=" + fieldName + "]").val();
}

/*******************************************************************************
 * Aantal nachten en de aankomstdagen instellen
 ******************************************************************************/

var bCamp = false; // geselecteerde accommodatie is een kampeerplaats of niet
var maxDays = 28;

var f,i,n;

/**
 * Formuliervelden controleren op wijziging en hierop de beschikbare
 * aankomstdatums en nachten aanpassen
 */
function setFormListeners()
{
	f = document.getElementById("zb_form");
	$("#veld-accommodatie", "#zb_form").change(function()
	{
		var accomm = $(this).val();
		if (accomm == 0 || accomm == 1 | accomm == 13 || accomm == 18)
			bCamp = false;
		else
			bCamp = true;
		accommodationChange();
	});
	
	$("select[name=dag]", "#zb_form").change(function() {
		setVacationLength($(this).val());
	});
	// monthChange();
}

/**
 * Selectieveld voor aankomst en aantal nachten bijwerken
 */
function accommodationChange()
{
	try {
		f['nachten'].options.length = 0;
		// f['nachten'].options[0] = new Option("dag",0);
		
		// er is een accommodatie geselecteerd, dus aankomst is beperkt
		var selMonth= f['maand_jaar'].value.split("-")[0];
		var selYear = f['maand_jaar'].value.split("-")[1];
		var selDay	= f['dag'].value.substr(0,2); // geselecteerde aankomstdag
		changeArrivalDay(selMonth, selYear); // aankomstdagen aanpassen op basis van
									// geselecteerde maand
		setVacationLength(selDay);
		updateCalendar();
		$("select[name=dag]").change();
		setSelectFields();
	}
	catch(e)
	{
		//alert(e);
	}
}

/**
 * Beschikbare aankomstdatums invullen
 * 
 * @param month
 *            Geselecteerde maand van aankomst
 */
function changeArrivalDay(month, year)
{
	var arr;
	if (bCamp)
		arr = arrDaysKamp;
	else if(arrDaysBung)
		arr = arrDaysBung;
	else
		arr = new Array();
	
	f['dag'].options.length = 0;
	
	for (i=0; i<arr[year][month].length; i++)
	{
		f['dag'].options[i] = new Option(arr[year][month][i].substr(0,2), arr[year][month][i]);
	}
}

/**
 * Aantal verblijfsnachten aanpassen
 * 
 * @param selDay
 *            Aankomstdag
 */
function setVacationLength(selDay)
{
	//alert(f["maand_jaar"].value +", " + f["dag"].options[f["dag"].selectedIndex].innerHTML);
	// accommodatie geselecteerd
	
	var uMonth = f["maand_jaar"].value.split("-")[0];
	
	var uDay = 0;
	if (f["dag"].options.length > 0)
		uDay = f["dag"].options[f["dag"].selectedIndex].innerHTML;
	
	// pinksteren 2010
	$("select[name=dag] option:contains(24)").css("display","block");
	//alert(uMonth + ", " + uDay);
	// bungalow gekozen (geen kampeerplaats)
	if (!bCamp)
	{
		f['nachten'].options.length = 0;
		var day = parseInt(selDay.substr(2,3));
		var monthDay = parseInt(selDay.substr(0,2));
		// ...
		if (day == 1)
		{
			i = 4;
			n = 0;
			while (i <= maxDays)
			{
				f['nachten'].options[n] = new Option(i +" nachten", i);
				i += n%2==0 ? 3 : 4; 
				n++;
			}
		}
		
		// hemelvaart
		else if (day == 3 && monthDay == 1 && uMonth == 6)
		{
			i = 5;
			n = 0;
			while (i <= maxDays)
			{
				f['nachten'].options[n] = new Option(i +" nachten",i);
				if (n%2==0)
					i+=4;
				else
					i+=3;
				n++;
			}
		}
		
		else if (day == 3)
		{
			i = 2;
			n = 0;
			while (i <= maxDays)
			{
				f['nachten'].options[n] = new Option(i +" nachten",i);
				if (n%3==0 && n<=15)
					i+=3;
				else
					i+=2;
				n++;
			}
		}

		// pinksteren 2011
		else if (parseInt(uMonth) == 6 && parseInt(uDay) == 10)
		{
			i = 4;
			n = 0;
			while (i <= maxDays)
			{
            	f['nachten'].options[n] = new Option(i +" nachten",i);
                
            	if (n%3==0 && n<=15)
                    i+=4;
                else
                    i+=3;
                n++;
            }
		}

		// pasen 2011
		else if (parseInt(uMonth) == 4 && parseInt(uDay) == 22)
		{
			i = 4;
			n = 0;
			while (i <= maxDays)
			{
            	f['nachten'].options[n] = new Option(i +" nachten",i);
                
            	if (n%3==0 && n<=15)
                    i+=4;
                else
                    i+=3;
                n++;
            }
		}
		
		else if (day == 4)
		{
			i = 4;
			n = 0;
			while (i <= maxDays)
			{
				f['nachten'].options[n] = new Option(i +" nachten",i);
				if (n%3==0 && n<=15)
					i+=4;
				else
					i+=3;
				n++;
			}
		}
		else
		{
			i = 3;
			n = 0;
			
			while (i <= maxDays)
			{
				f['nachten'].options[n] = new Option(i +" nachten",i);
				if (n%2==0)
					i+=4;
				else
					i+=3;
				n++;
			}
		}
	}
	// er is een kampeerplek geselecteerd. aankomst kan op elke dag en verblijf
	// ook
	else
	{
		for (i = 1; i <= maxDays; i++)
		{
			var sNacht = i==1?" nacht":" nachten";
			f['nachten'].options[i-1] = new Option(i + sNacht,i);
		}
	}
}

/**
 * Functie die wordt aangeroepen wanneer een andere maand is gekozen
 */
function monthChange()
{
	setVacationLength(f['dag'].value);
	changeArrivalDay(f['maand_jaar'].value.split("-")[0],f['maand_jaar'].value.split("-")[1]);
	updateCalendar();
	$("select[name=dag]").change();
}

$(document).ready(showPeriode);
function showPeriode()
{
	try {
		var dag = $("select[name=dag]").val().substr(0,2);
		if (dag.substr(0,1) == '0')
			dag = dag.substr(1,1);
		var jaar = $("select[name=maand_jaar]").val();
		$(".kalender span").html(dag + "-" + jaar);
	}
	catch(e)
		{}
}

function setSelectFields()
{
	$("#kalender td.selected").click();
}

/**
 * Inhoud van kalender popup aanpassen. Datums die geen aankomstdatum zijn,
 * worden uitgeschakeld
 */
function updateCalendar()
{
	// inhoud van kalender popup aanpassen
	$("#kalender td.dag").addClass("inactive");
	for (i=0; i<f['dag'].options.length; i++)
	{
		var d = f['dag'].options[i].value.substr(0,2);
		if (d.substr(0,1)==0)
			d = d.replace("0","");
		$("#kalender td.dag:eq(" + (d-1) + ")").removeClass("inactive");
	}
	if (!bCamp)
	{
		$("#kalender td.dag").addClass("inactive");
		$("#kalender td.dag").parent().find("td:eq(0), td:eq(4)").removeClass("inactive");
		$("select[name=dag] option").each(function() {
			var v = $(this).attr("value");
			v = parseInt(v.substr(0,2));
			$("#kalender td.dag").parent().find("td").each(function() {
				if ($(this).html() == String(v))
					$(this).removeClass("inactive");
			});
			//$("#kalender td.dag").parent().find("td:contains(" + v + ")").removeClass("inactive");
		});
	}
	// inactieve dagen verwijderen uit <select> lijst
	$("#kalender td.dag[class*=inactive]").each(function() {
		var d = $(this).text().length==1 ? "0" + $(this).text() : $(this).text();
		$("#zoekmenu select[name=dag] option[value^="+d+"]").remove(); //.css("display","none");
	});
	$("#zoekmenu select[name=dag] option:first").attr("selected","selected");
}

/**
 * Aangeroepen wanneer een ander park gekozen is
 */
function parkChange()
{
	if ($("#zb_form select[name=park]").val() == 6)
		$("#zb_form select[name=accommodatie] option[value=1]").css("display","none");
	else
		$("#zb_form select[name=accommodatie] option[value=1]").css("display","block");
	
}
