
addEvent(document, "click", function(evt) {
	if (clickedOutsideCalendar(evt)) {
		hideCalendar();
	}
});




var DT_OK = 0;
var DT_ERR_BEFORETODAY = -1;
var DT_ERR_TODAY = -2;
var DT_ERR_TOOFAR = -3;
var DT_ERR_TOOCLOSE = -4;
var DT_ERR_NOTLEGAL = -5;
var DT_ERR_AFTERMAX = -6;
var DT_ERR_NOTVACANT = -7;
var DT_ERR_NOTPOSSIBLE = -8;

var DT_MON = 1;
var DT_TUE = 2;
var DT_WED = 3;
var DT_THU = 4;
var DT_FRI = 5;
var DT_SAT = 6;
var DT_SUN = 0;

var DT_JAN = 1;
var DT_FEB = 2;
var DT_MAR = 3;
var DT_APR = 4;
var DT_MAY = 5;
var DT_JUN = 6;
var DT_JUL = 7;
var DT_AUG = 8;
var DT_SEP = 9;
var DT_OCT = 10;
var DT_NOV = 11;
var DT_DEC = 12;


var DT_MIN_DATE = str2date("2010-09-06");
var DT_MAX_DATE = str2date("2012-09-06");
var DT_MIN_YEAR = 2010;
var DT_MAX_YEAR = 2012;
var DT_OPTION = str2date("2011-01-08");

var FR_CACHE = false;
var FR_HISTORY = true;


var FR_LANGUAGE = "DE";
var FR_CURRENCYCODE = "EUR";


var FR_PETFEES = [720,730,740,750,760,770,780];


function ferieringDuration(days, minDiff, maxDiff, legalDaysOnly) {
	this.days = days;
	this.minDiff = minDiff;
	this.maxDiff = maxDiff;
	this.legalDaysOnly = legalDaysOnly;
}

var legalDays = [6];

var legalDurations = [new ferieringDuration(4, 1, 4, false), new ferieringDuration(5, 1, 4, false), new ferieringDuration(6, 1, 4, false), new ferieringDuration(7, 1, 0, true), new ferieringDuration(14, 1, 0, true), new ferieringDuration(21, 1, 0, true), new ferieringDuration(28, 1, 0, true), new ferieringDuration(35, 1, 0, true)];

var legalDates = [];

var illegalDates = [];

var areaMapImgs = [];
var defaultMapSrc = "/site/images/map.gif";
var currentMapSrc = defaultMapSrc;
function addAreaMapImg(key, src, w, h) {
	areaMapImgs[key] = new Image(w, h);
	areaMapImgs[key].src = src;
}
addAreaMapImg("fjand-bjerghuse", "/site/images/map-fjand-bjerghuse.gif", 180, 210);
addAreaMapImg("nr-fjand", "/site/images/map-nr-fjand.gif", 180, 210);
addAreaMapImg("noerhede-vest", "/site/images/map-noerhede-vest.gif", 180, 210);
addAreaMapImg("sdr-fjand", "/site/images/map-sdr-fjand.gif", 180, 210);
addAreaMapImg("thorsminde", "/site/images/map-thorsminde.gif", 180, 210);
addAreaMapImg("vedersoe-klit", "/site/images/map-vedersoe-klit.gif", 180, 210);
addAreaMapImg("vester-husby", "/site/images/map-vester-husby.gif", 180, 210);
addAreaMapImg("skalstrup", "/site/images/map-skalstrup.gif", 180, 210);

function toggleAreaMap(id) {
	var objMap = document.getElementById("areaMap");
	if (objMap != null) {
		if (areaMapImgs[id] == null) {
			id = "";
		}
		if (id != "") {
			objMap.src = areaMapImgs[id].src;
		}
		else {
			objMap.src = defaultMapSrc;
		}
	}
}

function initAreaMap(id) {
	var objMap = document.getElementById("areaMap");
	if (objMap != null) {
		oImg = areaMapImgs[id];
		if (oImg != null) {
			objMap.src = oImg.src;
		}
		else {
			objMap.src = defaultMapSrc;
		}
		currentMapSrc = objMap.src;
	}
}

function resetAreaMap() {
	var objMap = document.getElementById("areaMap");
	if (objMap != null) {
		objMap.src = currentMapSrc;
	}
}

function setArea(id) {
	if (ua["dom"]) {
		var bSearch = true;
		var objForm = document.forms["ferieringSearch"];
		if (objForm == null) {
			bSearch = false;
			objForm = document.forms["ferieringSimpleSearch"];
		}
		if (objForm != null) {
			if (areaMapImgs[id] == null) {
				id = ""
			}

			if (id != "") {
				currentMapSrc = areaMapImgs[id].src;
				initField(objForm, "area", id);
			}
			else {
				currentMapSrc = defaultMapSrc;
				resetAreaMap();
			}
		
			if (bSearch) {
				var objQS = document.getElementById("quickSearchResults");
				if (objQS != null) {
					doFerieringQuickSearch();
				}
				else {
					doFerieringSearch(true);
				}
			}
		}
	}
	return false;
}





requestHandler = function() {
	this.items = [];
}


requestHandler.prototype.add = function(key, oXMLHttpRequest, oWaitObj) {
	this.items[key] = { xmlHttpRequest : oXMLHttpRequest, waitObj : oWaitObj };
}


requestHandler.prototype.remove = function(key) {
	var item = this.items[key];
	if (item != null) {
		if (item.xmlHttpRequest != null) {
			item.xmlHttpRequest.abort();
		}
		if (item.waitObj != null) {
			item.waitObj.cancel();
		}
	}
}


var myRequests = new requestHandler();



function StringBuffer() { 
   this.buffer = []; 
 } 

 StringBuffer.prototype.append = function append(string) { 
   this.buffer.push(string); 
   return this; 
 }; 

 StringBuffer.prototype.toString = function toString() { 
   return this.buffer.join(""); 
 }; 



/**
* Returns the week number for this date. dowOffset is the day of week the week
* "starts" on for your locale - it can be from 0 to 6. If dowOffset is 1 (Monday),
* the week returned is the ISO 8601 week number.
* @param int dowOffset
* @return int
*/
Date.prototype.getWeek = function (dowOffset) {
/*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */

	dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
	var newYear = new Date(this.getFullYear(),0,1);
	var day = newYear.getDay() - dowOffset; //the day of week the year begins on
	day = (day >= 0 ? day : day + 7);
	var daynum = Math.floor((this.getTime() - newYear.getTime() -
	(this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
	var weeknum;
	//if the year starts before the middle of a week
	if(day < 4) {
		weeknum = Math.floor((daynum+day-1)/7) + 1;
		if(weeknum > 52) {
			nYear = new Date(this.getFullYear() + 1,0,1);
			nday = nYear.getDay() - dowOffset;
			nday = nday >= 0 ? nday : nday + 7;
			/*if the next year starts before the middle of
			the week, it is week #1 of that year*/
			weeknum = nday < 4 ? 1 : 53;
		}
	}
	else {
		weeknum = Math.floor((daynum+day-1)/7);
	}
	return weeknum;
};




/** Returns the number of day in the year. */
Date.prototype.getDayOfYear = function() {
	var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
	var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);
	var time = now - then;
	return Math.floor(time / Date.DAY);
};

/** Returns the number of the week in year, as defined in ISO 8601. */
Date.prototype.getWeekNumber = function() {
	var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
	var DoW = d.getDay();
	d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
	var ms = d.valueOf(); // GMT
	d.setMonth(0);
	d.setDate(4); // Thu in Week 1
	return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
};







function isLegalDay(d) {
	var res = false;
	for (var i = 0; i < legalDays.length; i++) {
		if (legalDays[i] == d) {
			res = true;
			break;
		}
	}
	return res;
}


function isLegalDate(dt) {
	var res = false;

	if (legalDates.length == 0) {
		res = true;
	}
	else {
		for (var i = 0; i < legalDates.length; i++) {
			if (date2str(legalDates[i]) == date2str(dt)) {
				res = true;
				break;
			}
		}
	}

	for (var i = 0; i < illegalDates.length; i++) {
		if (date2str(illegalDates[i]) == date2str(dt)) {
			res = false;
			break;
		}
	}

	return res;
}





function setSRView(v) {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		objForm.view.value = v;
		toggleSRViewTab(v);
		doFerieringSearch(true);
	}
	return false;
}


function toggleSRViewTab(v) {
	var objDiv = document.getElementById("searchResultsTabs");
	var obj = document.getElementById("srtab"+ v);

	if (obj != null) {
		var oLI = obj.parentNode;
		var oUL = oLI.parentNode;

		addClassName(oLI, "current");

		var aLI = oUL.getElementsByTagName("LI");
		for (var i = 0; i < aLI.length; i++) {
			if (aLI[i] != oLI) {
				removeClassName(aLI[i], "current");
			}
		}
	}
}



function getDayName(w) {
	switch (w) {
		case DT_MON :
			return "Maandag";
			break;
		case DT_TUE :
			return "Dinsdag";
			break;
		case DT_WED :
			return "Woensdag";
			break;
		case DT_THU :
			return "Donderdag";
			break;
		case DT_FRI :
			return "Vrijdag";
			break;
		case DT_SAT :
			return "Zaterdag";
			break;
		case DT_SUN :
			return "Zondag";
			break;
	}
}


function getMonthName(m) {
	switch (m) {
		case DT_JAN :
			return "Januari";
			break;
		case DT_FEB :
			return "februari";
			break;
		case DT_MAR :
			return "Maart";
			break;
		case DT_APR : 
			return "April";
			break;
		case DT_MAY :
			return "Mei";
			break;
		case DT_JUN :
			return "Juni";
			break;
		case DT_JUL :
			return "Juli";
			break;
		case DT_AUG :
			return "Augustus";
			break;
		case DT_SEP :
			return "September";
			break;
		case DT_OCT :
			return "Oktober";
			break;
		case DT_NOV :
			return "November";
			break;
		case DT_DEC :
			return "December";
			break;
	}
}


function getDTWarning(dtValidation) {
	var str = "";

	switch (dtValidation.state) {
		case DT_OK :
			break;

		case DT_ERR_BEFORETODAY :
			str = "Aankomstdatum moet na de datum van vandaag zijn "; 
			break;

		case DT_ERR_TODAY :
			str = "U kunt de datum van vandaag niet als aankomst kiezen "; 
			break;
		
		case DT_ERR_TOOFAR :
			
			str = "Du kan ikke bestille ferier af <fragment:days/> dages varighed med ankomstdato senere end <fragment:maxDiff/> dage efter dags dato.".replace("<fragment:days\/>", dtValidation.d.days).replace("<fragment:maxDiff\/>", dtValidation.d.maxDiff);
			break;
		
		case DT_ERR_TOOCLOSE :
			
			str = "Ferier af <fragment:days/> varighed skal bestilles mindst <fragment:minDiff/> dage før ankomstdato.".replace("<fragment:days\/>", dtValidation.d.days).replace("<fragment:minDiff\/>", dtValidation.d.minDiff);
			break;
		
		case DT_ERR_NOTPOSSIBLE :
			
		case DT_ERR_NOTLEGAL :

			var dstr = "";
			for (var i = 0; i < legalDays.length; i++) {
				dstr += (dstr != "" ? " eller " : "") + getDayName(legalDays[i]);
			}
		
			str = "U kunt alleen kiezen <fragment:d/> als dag van aankomst.".replace("<fragment:d\/>", dstr);
			break;

		case DT_ERR_AFTERMAX :
			
			str = "U kunt geen vakantiewoning boeken met de aankomst datum na <fragment:dt/>.".replace("<fragment:dt\/>", date2str(DT_MAX_DATE));
			break;

		case DT_ERR_NOTVACANT :
			str = "Het huis is in deze periode niet vrij "; 
			break;
	}
	return str;
}


function toggleDTWarning(dtValidation) {
	var obj = document.getElementById("dtWarning");
	if (obj != null) {
		var str = getDTWarning(dtValidation);
		obj.innerHTML = "<div id=\"dtWarningContent\">"+ str +"</div>"; 
		obj.style.display = (dtValidation.state == 0 ? "none" : "block");
	}
}



function validateSearchDate(objForm, dtStr) {
	if (objForm != null) {
		var dtToday = new Date();
		var dtStart = str2date(dtStr)
		var duration = parseInt(objForm.duration.value, 10);
		var dDiff = DateDiff("d", dtToday, dtStart);
		var w = DatePart("w", dtStart);

		var wdDiff = 0
		var dtLegalStart = dtStart;
		var state = DT_OK;

		
		var d = null;
		for (var i = 0; i < legalDurations.length; i++) {
			if (legalDurations[i].days == duration) {
				d = legalDurations[i];
			}
		}

		d = (d == null ? legalDurations[0] : d);

		

		if (d != null) {
			
			if (dDiff < 0) {
				state = DT_ERR_BEFORETODAY;
				dtLegalStart = dtToday;
			}
			
			else if (dDiff == 0) {
				state = DT_ERR_TODAY;
			}

			
			if (!((dDiff >= d.minDiff) && ((dDiff <= d.maxDiff) || (d.maxDiff == 0)))) {
				if ((dDiff >= d.maxDiff) && (d.maxDiff > 0)) {
					
					dtLegalStart = DateAdd("d", d.maxDiff, Date());
					state = (state == 0 ? DT_ERR_TOOFAR : state);
				}
				else {
					
					dtLegalStart = DateAdd("d", d.minDiff, Date());
					if (dDiff < 0) {

					}
					else if ((dDiff == 0) && (d.minDiff > 0)) {

					}
					else {
						state = (state == 0 ? DT_ERR_TOOCLOSE : state);
					}
				}
			}

			
			if (d.legalDaysOnly) {
				w = DatePart("w", dtLegalStart);
				if (!isLegalDay(w)) {
					state = (state == 0 ? DT_ERR_NOTLEGAL : state);

					
					var dOK = false;
					while (!dOK) {
						for (var i = 0; i < legalDays.length; i++) {
							if (DatePart("w", dtLegalStart) == legalDays[i]) {
								dOK = true;
								break;
							}
						}
						if (!dOK) {
							dtLegalStart = DateAdd("d", 1, dtLegalStart);						
						}
					}

				}
			}

			if (!isLegalDate(dtLegalStart)) {
				state = DT_ERR_NOTLEGAL;			
			}

		}

		return { state: state, dt : dtStart, vdt : dtLegalStart, d : d}
	}	
}

function validateHouseDate(dtStr) {
	var objForm = document.forms["ferieringHouse"];
	if (objForm != null) {
		var dtToday = new Date();
		var dtStart = str2date(dtStr);
		var dtLegalStart = null;
		var state = DT_ERR_NOTVACANT;
		var duration = parseInt(objForm.duration.value, 10);

		
		var d = null;
		for (var i = 0; i < legalDurations.length; i++) {
			if (legalDurations[i].days == duration) {
				d = legalDurations[i];
			}
		}

		d = (d == null ? legalDurations[0] : d);


		var dDiff = DateDiff("d", dtToday, dtStart);
		if (dDiff < 0) {
			state = DT_ERR_BEFORETODAY;
		}
		else if (dDiff == 0) {
			state = DT_ERR_TODAY;
		}
		else {
			if (legalDates.length > 0) {
				for (var i = 0; i < legalDates.length; i++) {
					if (legalDates[i] == date2str(dtStart)) {
						dtLegalStart = dtStart;
						state = DT_OK;
					}
				}
			}
		}

		if (state != DT_OK) {
			if (legalDates.length > 0) {
				dtLegalStart = str2date(legalDates[0]);
			}
		}
		
		return { state : state, dt: dtStart, vdt : dtLegalStart, d : d}

		
	}
}


function mydebug(s) {
	var objDebug = document.getElementById("mydebug");
	if (objDebug != null) {
		objDebug.value = s + "\n---\n"+ objDebug.value;
	}
}


function doFerieringSearch(bFirstPage) {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		var dtValidation = validateSearchDate(objForm, getDTStr(objForm));
		toggleDTWarning(dtValidation);
		if (dtValidation.state == DT_OK) {
			
			if (FR_HISTORY) {
				updateFerieringSearchHash();
			}
			
			checkFerieringSearch(bFirstPage);		
		}
	}
}

function doFerieringQuickSearch() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		var dtValidation = validateSearchDate(objForm, getDTStr(objForm));
		toggleDTWarning(dtValidation);
		if (dtValidation.state == DT_OK) {
			checkFerieringQuickSearch();
		}
	}
}

function doSimpleSearch() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSimpleSearch"];
		checkSimpleSearch(objForm);
	}
	return false;
}


function goToSearchResults() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		var dtValidation = validateSearchDate(objForm, getDTStr(objForm));
		toggleDTWarning(dtValidation);
		if (dtValidation.state == DT_OK) {
			var s = generateSearchUrl(1);
			window.location = s;
		}
	}
	return false;
}

function getDTStr(objForm) {
	return objForm.yearmonth.value +"-"+ objForm.day.value;
}


function toggleFacility(fname, b) {
	var oRLI = document.getElementById("rfac_"+ fname);
	var oALI = document.getElementById("afac_"+ fname);
	if ((oRLI != null) && (oALI != null)) {
		oRLI.style.display = (b ? "block" : "none");
		oALI.style.display = (b ? "none" : "block");
	}
}

function addFacility(obj) {
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		var oALI = obj.parentNode;
		
		var rx = /^afac_(.+)$/;

		var oRLI = document.getElementById(oALI.id.replace(rx, "rfac_$1"))
		if (oRLI != null) {
			objForm.elements.namedItem(oALI.id.replace(rx, "fac_$1")).value = "1";

			oRLI.style.display = "block";
			oALI.style.display = "none";

			
			doFerieringSearch(true);
			

		}
	}
	return false;
}

function remFacility(obj) {
	var objForm = document.forms["ferieringSearch"];

	if (objForm != null) {
		var oRLI = obj.parentNode;
		
		var rx = /^rfac_(.+)$/;

		var oALI = document.getElementById(oRLI.id.replace(rx, "afac_$1"))
		if (oRLI != null) {
			objForm.elements.namedItem(oRLI.id.replace(rx, "fac_$1")).value = "0";

			oALI.style.display = "block";
			oRLI.style.display = "none";

			
			doFerieringSearch(true);
			

		}
	}
	return false;
}



function decPage() {
	
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		var p = parseInt(objForm.page.value, 10);
		p--;
		if (p < 1) {
			p = 1;		
		}
		objForm.page.value = p;

		doFerieringSearch(false);
	}
	return false;
	
}

function incPage() {
	
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		var p = parseInt(objForm.page.value, 10);

		p++;
		objForm.page.value = p;

		doFerieringSearch(false);
	}
	return false;
	
}

function setPage(p) {
	
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		objForm.page.value = p;
		doFerieringSearch(false);
	}
	return false;
	
}


function decQSPage() {
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		var p = parseInt(objForm.page.value, 10);
		p--;
		if (p < 1) {
			p = 1;		
		}
		objForm.page.value = p;
		checkFerieringQuickSearch(true);
	}
	return false;
}

function incQSPage() {
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		var p = parseInt(objForm.page.value, 10);
		p++;
		objForm.page.value = p;
		checkFerieringQuickSearch(true);
	}
	return false;
}


function setPagingInformation(totalItems, itemCount, page, pageSize) {

	var oPO = document.getElementById("searchResultsPagingOptions");

	var oTP = document.getElementById("searchResultsTopPager");
	var oTC = document.getElementById("searchResultsTopCount");
	var oTL = document.getElementById("searchResultsTopPagerLinks");

	var oBP = document.getElementById("searchResultsBotPager");
	var oBC = document.getElementById("searchResultsBotCount");
	var oBL = document.getElementById("searchResultsBotPagerLinks");

	oPO.style.visibility = (pageSize > 0 ? "visible" : "hidden");

	if (totalItems > 0) {
		oTC.innerHTML = totalItems +(totalItems > 1 ? " vakantiewoningen" : " vakantiewoning");
		oBC.innerHTML = totalItems +(totalItems > 1 ? " vakantiewoningen" : " vakantiewoning");
	

		if (pageSize > 0) {
			if (totalItems != itemCount) {
				oTL.innerHTML = "";
				oBL.innerHTML = "";


				var str = new StringBuffer();

				if (page > 1) {
					str.append("<li class=\"prev\"><a href=\""+ generateSearchUrl(page - 1) +"\" onclick=\"return decPage()\">&lt;&lt;</a></li>");
				} 

				for (var i = 1; i <= Math.ceil(totalItems / pageSize); i++) {
					str.append("<li"+ (i == page ? " class=\"current\"" : "") +"><a href=\""+ generateSearchUrl(i) +"\" onclick=\"return setPage("+ i +")\">"+ i +"</a></li>");
				}

				if (page < Math.ceil(totalItems / pageSize)) {
					str.append("<li class=\"next\"><a href=\""+ generateSearchUrl(page + 1) +"\" onclick=\"return incPage()\">&gt;&gt;</a></li>");
				}

				oTL.innerHTML = str;
				oBL.innerHTML = str;
				
			}
			else {
				oTL.innerHTML = "";
				oBL.innerHTML = "";
			}
		}
		else {
			oTL.innerHTML = "";
			oBL.innerHTML = "";
		}


		
		oTP.style.visibility = "visible";
		oBP.style.visibility = "visible";

	}
	else {
		msg = "Bedaure. Kein Ferienhaus entsprach Ihren Suchkriterien."; 

		oTP.style.visibility = "hidden";
		oBP.style.visibility = "hidden";

		if (pageSize > 0) {
			displayFerieringSearchError(msg);
		}
		else {
			alert(msg);		
		}
	}
}


function displayFerieringSearchError(msg) {
	var oIL = document.getElementById("searchResultsList");
	var oTP = document.getElementById("searchResultsTopPager");
	var oBP = document.getElementById("searchResultsBotPager");

	if (oIL) {
		oIL.innerHTML = "<div class=\"searchResultsError\">"+ msg +"</div>";
	}

	if (oTP) {
		oTP.style.visibility = "hidden";
		oBP.style.visibility = "hidden";
	}
}


function formatPrice(p, a, c) {
	var kiloSeparator = ".";
	var decimalSeparator = ",";

	var s = "";

	p = parseFloat(p);
	if (p < 0) {
		s = "-";
		p = -p;
	}
	var pRes = p.toFixed(a);

	var pInt = "";
	var pDec = "";

	if (a > 0) {
		var rx = /(\d+)\.(\d+)/i;	
		pRes = pRes + "";
		pInt = pRes.replace(rx, "$1");
		pDec = pRes.replace(rx, "$2");
	}
	else {
		pInt = pRes + ""
	}

	var px = "";
	var j = 1;
	for (var i = pInt.length - 1; i >= 0; i--) {
		px = ((j % 3) == 0 ? kiloSeparator : "") + pInt.substr(i, 1) + px;
		j++;
	}
	if (px.substring(0,1) == kiloSeparator) {
		px = px.substring(1, px.length);
	}

	if (a > 0) {
		px = px + decimalSeparator + pDec;
	}

	return s + px +" "+ c;
}


function generateSimpleSearchUrl() {
	var objForm = document.forms["ferieringSimpleSearch"];
	if (objForm != null) {
		var s = "/vakantiewoningen/";
		s += (objForm.area.value != "" ? objForm.area.value +"/" : "");
		s += objForm.duration.value +"/";
		s += objForm.yearmonth.value +"-"+ objForm.day.value +"/";
		s += "index1.htm";
		s += "?visitors="+ objForm.visitors.value;

		return s;
	}
}

function generateSearchUrl(p) {
	var s = "#";
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		s = "/"+ "vakantiewoningen"+ "/";
		s += (objForm.area.value != "" ? objForm.area.value +"/" : "");
		s += objForm.duration.value +"/";
		s += objForm.yearmonth.value +"-"+ objForm.day.value;
		s += "/index" + (p > 0 ? p : objForm.page.value) +".htm";
		s += "?visitors=" + objForm.visitors.value;
		s += (objForm.pets.value != "0" ? "&pets="+ objForm.pets.value : "");
		s += "&bedrooms="+ objForm.bedrooms.value;
		if (objForm.orderby != null) {
			s += (objForm.orderby.value != "" ? "&orderby="+ objForm.orderby.value : "");
		}
		if (objForm.view != null) {
			if (objForm.view.type == "checkbox") {
				s += (objForm.view.checked ? "&view=map" : "");
			}
			else {
				s += "&view="+ objForm.view.value;
			}
		}
		s += (objForm.mode.value != "" ? "&mode="+ objForm.mode.value : "");
		s += (objForm.pagesize != null ? "&pagesize="+ objForm.pagesize.value : "");

		if (objForm.aproxydate != null) {
			s += (objForm.aproxydate.checked ? "" : "&aproxydate=0");
		}
		

		var facRx = /^fac_.+$/;
		for (var i = 0; i < objForm.elements.length; i++) {
			var objItem = objForm.elements.item(i);
			if (objItem.name.match(facRx)) {
				if (objItem.type == "hidden") {
					if (objItem.value != "0") {
						s += "&"+ objItem.name +"=1";
					}
				}
				else if (objItem.type == "checkbox") {
					if (objItem.checked) {
						s += "&"+ objItem.name +"=1";
					}
				}
			}
		}
	}

	return s;
}


function generateHouseUrl(objHouseNode) {
	var oXML = new XMLObject();

	var hId = oXML.getText(objHouseNode.selectSingleNode("@id"));
	var hArea = oXML.getText(objHouseNode.selectSingleNode("area/@url"));
	var hArr = oXML.getText(objHouseNode.selectSingleNode("period/@arrival"));


	var s = "#";
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		s = "/" + "vakantiewoningen" +"/";
		s += (hArea != "" ? hArea +"/" : "");
		s += objForm.duration.value +"/";
		s += hArr;
		s += "/"+ "vakantiewoning" +"-"+ hId +".htm";
		s += "?visitors=" + objForm.visitors.value;
		s += (objForm.pets.value != "0" ? "&pets="+ objForm.pets.value : "");

		if (objForm.aproxydate != null) {
			s+= (objForm.aproxydate.checked ? "" : "&aproxydate=0");
		}

	}
	return s;
}

function parseFerieringQuickSearchData(oXML) {
	var totalItems = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@totalItems")), 10);
	var firstItem = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@firstItem")), 10);
	var itemCount = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@itemCount")), 10);

	var objForm = document.forms["ferieringSearch"];
	var page = parseInt(objForm.page.value, 10);
	var pageSize = 6;

	var objPrev = document.getElementById("qsPrev");
	var objNext = document.getElementById("qsNext");
	var objTotal = document.getElementById("qsTotal");
	var objPage = document.getElementById("qsPage");

	var objData = document.getElementById("quickSearchResultsData");
	var objImg = document.getElementById("quickSearchImg");




	if (totalItems > 0) {
		var maxPerRow = 3;


		if (page > 1) {
			objPrev.href = generateSearchUrl(page - 1)
			objPrev.style.visibility = "visible";		
		}
		else {
			objPrev.style.visibility = "hidden";
			objPrev.href = "#";
		}

		if (page < Math.ceil(totalItems / pageSize)) {
			objNext.href = generateSearchUrl(page + 1);
			objNext.style.visibility = "visible";
		}
		else {
			objNext.style.visibility = "hidden";
			objNext.href = "#";
		}

		objTotal.style.visibility = "visible";
		objPage.style.visibility = "visible";

		objTotal.innerHTML = "<a href=\""+ generateSearchUrl(1) +"\">"+ totalItems + (totalItems > 1 ? " vakantiewoningen" : " vakantiewoning") + "</a>";

		objPage.innerHTML = (totalItems > pageSize ? " - pagina "+ page +"/"+ Math.ceil(totalItems / pageSize) : "");

		var objTable = document.createElement("TABLE");
		objTable.setAttribute("border", "0");
		objTable.setAttribute("cellpadding", "0");
		objTable.setAttribute("cellspacing", "0");

		var objTBody = document.createElement("TBODY");
		objTable.appendChild(objTBody);

		var houseNodes = oXML.selectNodes("//house");

		var numRows = Math.ceil(itemCount / maxPerRow);
		var rowNum = 0;

		objTR = objTBody.insertRow(objTBody.rows.length);	
		var j = 1;


		var hAddress1 = "";
		var hArea = "";
		var hId = "";

		for (var i = 0; i < houseNodes.length; i++) {
			houseNode = houseNodes[i];
			houseUrl = generateHouseUrl(houseNode);

			hAddress1 = oXML.getText(houseNode.selectSingleNode("address1"));
			hArea = oXML.getText(houseNode.selectSingleNode("area"));
			hId = oXML.getText(houseNode.selectSingleNode("@id"));


			rowNum = Math.ceil(j / maxPerRow);

			if ((j % maxPerRow) == 1) {
				if (j == 1) {
					objTR.className = "first";
				}
				else if (rowNum == numRows) {
					objTR.className = "last";
				}
			}

			objTD = objTR.insertCell(objTR.cells.length);
			
			if ((j % maxPerRow) == 1) {
				objTD.className = "first";
			}
			else if (((j % maxPerRow) == 0) || (j == itemCount)) {
				objTD.className = "last";
			}
		
			oItemDiv = document.createElement("DIV");
			oItemDiv.className = "item";

			
			oImgDiv = document.createElement("DIV");
			oImgDiv.className = "img";

			imgNode = houseNode.selectSingleNode("image");

			if (imgNode != null) {
				objA = document.createElement("A");
				objA.href = houseUrl;
				objA.title = "Vakantiewoning "+ hId + " - Denemarken";
				objA.innerHTML = "<img src=\""+ oXML.getText(imgNode.selectSingleNode("@src")) +"\" width=\"104\" alt=\"Vakantiewoning "+ hId +" - Denemarken\" />";
				oImgDiv.appendChild(objA);
			}

			oItemDiv.appendChild(oImgDiv);

			
			
			oAddressDiv = document.createElement("DIV");
			oAddressDiv.className = "address";
			oH2 = document.createElement("H2");
			oA = document.createElement("A");

			oA.href = houseUrl;

			oH2.innerHTML = "<a href=\""+ oA.href +"\" title=\"Vakantiewoning "+ hAddress1 +" - "+ hArea +" - Denemarken\"><span>"+ hAddress1 +"<span> <span>"+ hArea +"</span></a>";
			oAddressDiv.appendChild(oH2);
			oItemDiv.appendChild(oAddressDiv);

			
			price = parseFloat(oXML.getText(houseNode.selectSingleNode("period/@price")));
			discount = parseFloat(oXML.getText(houseNode.selectSingleNode("period/@discount")));
			total = parseFloat(oXML.getText(houseNode.selectSingleNode("period/@total")));
			curr = oXML.getText(houseNode.selectSingleNode("period/@curr"));

			if (discount > 0) {
				addClassName(objTD, "discount");
			}



			bMemo = (oXML.getText(houseNode.selectSingleNode("@memo")) == "true");
			lId = parseInt(oXML.getText(houseNode.selectSingleNode("@lId")), 10);
			dtArr = oXML.getText(houseNode.selectSingleNode("period/@arrival"));

			oPriceBeforeDiv = document.createElement("DIV");
			oPriceBeforeDiv.className = "priceBefore";
			oPriceBeforeDiv.innerHTML = (str2date(dtArr) > DT_OPTION ? "&nbsp;" : (discount > 0 ? "<del>"+ formatPrice(price, 2, curr) +"</del>" : "&nbsp;"));
			oItemDiv.appendChild(oPriceBeforeDiv);

			oTotalPriceDiv = document.createElement("DIV");
			oTotalPriceDiv.className = "price";
			oTotalPriceDiv.innerHTML = (str2date(dtArr) > DT_OPTION ? "OPTION" : formatPrice(total, 2, curr));

			oItemDiv.appendChild(oTotalPriceDiv);

			if (lId > 0) {
				oMemoDiv = document.createElement("DIV");
				oMemoA = document.createElement("A");
				oMemoA.href = "#";
				setMemoClick(!bMemo, oMemoA, lId, dtArr, objForm.duration.value);
				oMemoA.className = "memo "+ (bMemo ? "remove" : "add");
				oMemoA.innerHTML = (bMemo ? "Entfernen" : "Keuzelijst");

				oMemoDiv.appendChild(oMemoA);
				oItemDiv.appendChild(oMemoDiv);
			}

			objTD.appendChild(oItemDiv);

			if (((j % maxPerRow) == 0) || (j == itemCount)) {
				objTR = objTBody.insertRow(objTBody.rows.length);
			}

			j += 1;
		}

		objData.innerHTML = "";
		objData.appendChild(objTable);

		objData.style.display = "block";
		objImg.style.display = "none";

	}
	else {
		objPrev.style.visibility = "hidden";
		objNext.style.visibility = "hidden";
		objTotal.innerHTML = "Bedaure. Kein Ferienhaus entsprach Ihren Suchkriterien.";
		objTotal.style.visibility = "visible";
		objPage.innerHTML = "";
		objData.innerHTML = "";
		objData.style.display = "none";
		objImg.style.display = "block";
	}
}



function parseFerieringMapSearchData(oXML) {
	if (GBrowserIsCompatible()) {
		oGM.clearHouses();

		var totalItems = parseInt(oXML.getText(oXML.selectSingleNode("mapsearchxml/@totalItems")), 10);
		var objList = document.getElementById("searchResultsList");
		var objMap = document.getElementById("searchResultsMap");


		setPagingInformation(totalItems, 0, 0, 0);


		if (totalItems > 0) {
			var hNodes = oXML.selectNodes("//h");
			for (var i = 0; i < hNodes.length; i++) {
				hNode = hNodes[i];

				hId = oXML.getText(hNode.selectSingleNode("@id"));
				hLocId = oXML.getText(hNode.selectSingleNode("@lid"));
				hLat = oXML.getText(hNode.selectSingleNode("@lat"));
				hLng = oXML.getText(hNode.selectSingleNode("@lng"));
				hMemo = (oXML.getText(hNode.selectSingleNode("@m")) == "1");
				hDiscount = (oXML.getText(hNode.selectSingleNode("@d")) == "1");
				addHouse(hId, hLocId, hLat, hLng, hMemo, hDiscount);	
			}
		}

		objList.style.display = "none";
		if (objMap != null) {
			objMap.style.display = "block";
			if (GBrowserIsCompatible()) {
				oGM.map.checkResize();
				oGM.zoomToAll();
			}
		}
	}
}

function parseFerieringSearchData(oXML) {
	var totalItems = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@totalItems")), 10);
	var firstItem = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@firstItem")), 10);
	var itemCount = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@itemCount")), 10);

	var objList = document.getElementById("searchResultsList");
	var objMap = document.getElementById("searchResultsMap");


	var objForm = document.forms["ferieringSearch"];
	var page = parseInt(objForm.page.value, 10);
	var pageSize = parseInt(objForm.pagesize.value, 10);

	setPagingInformation(totalItems, itemCount, page, pageSize);


	if (totalItems > 0) {
		var maxPerRow = 4;


		var objTable = document.createElement("TABLE");
		objTable.className = "items";
		objTable.setAttribute("border", "0");
		objTable.setAttribute("cellpadding", "0");
		objTable.setAttribute("cellspacing", "0");

		var objTBody = document.createElement("TBODY");
		objTable.appendChild(objTBody);

		
		var houseNodes = oXML.selectNodes("//house");

		var numRows = Math.ceil(itemCount / maxPerRow);
		var rowNum = 0;

		objTR = objTBody.insertRow(objTBody.rows.length);
		var j = 1;

		var b = null;
		var lId = null;
		var dt = null;
		var d = null;
		var hId = null;
		var hAddress1 = null;
		var hArea = null;

		for (var i = 0; i < houseNodes.length; i++) {
			var houseNode = houseNodes[i];
			hId = oXML.getText(houseNode.selectSingleNode("@id"))
			hAddress1 = oXML.getText(houseNode.selectSingleNode("address1"))
			hArea = oXML.getText(houseNode.selectSingleNode("area"));
			houseUrl = generateHouseUrl(houseNode);

			rowNum = Math.ceil(j / maxPerRow);

			if ((j % maxPerRow) == 1) {
				if (j == 1) {
					objTR.className = "first";
				}
				else if (rowNum == numRows) {
					objTR.className = "last";
				}
			}

			objTD = objTR.insertCell(objTR.cells.length);
			
			if ((j % maxPerRow) == 1) {
				objTD.className = "first";
			}
			else if (((j % maxPerRow) == 0) || (j == itemCount)) {
				objTD.className = "last";
			}

			var oItemDiv = document.createElement("DIV");
			oItemDiv.className = "item";



			
			var oImgDiv = document.createElement("DIV");
			oImgDiv.className = "img";

			imgNode = houseNode.selectSingleNode("image");

			if (imgNode != null) {
				var objA = document.createElement("A");
				objA.href = houseUrl;
				objA.title = "Vakantiewoning "+ hId + " - Denemarken" ;
			
				var objImg = document.createElement("IMG");
				objImg.src = oXML.getText(imgNode.selectSingleNode("@src"));
				objImg.width = oXML.getText(imgNode.selectSingleNode("@width"));
				objImg.alt = "Vakantiewoning "+ hId + " - Denemarken";

				objA.appendChild(objImg);
				oImgDiv.appendChild(objA);
			}


			oItemDiv.appendChild(oImgDiv);


			
			
			var oAddressDiv = document.createElement("DIV");
			oAddressDiv.className = "address";
			oH2 = document.createElement("H2");
			oA = document.createElement("A");
			oA.href = houseUrl;
			oH2.innerHTML = "<a href=\""+ oA.href +"\" title=\"Vakantiewoning "+ hAddress1 +" - "+ hArea +" - Denemarken" +"\"><span>"+ hAddress1 +"</span>" +"\n"+ "<span>"+ hArea +"</span></a>";
			oAddressDiv.appendChild(oH2);
			oItemDiv.appendChild(oAddressDiv);


					
			oNrDiv = document.createElement("DIV");
			oNrDiv.className = "nr";
			oA2 = oA;
			oA2.title = "Vakantiewoning "+ hId +" - Denemarken";
			oA2.innerHTML = "Vakantiewoning "+ hId;
			oNrDiv.appendChild(oA2),
			oItemDiv.appendChild(oNrDiv);
			


			bMemo = (oXML.getText(houseNode.selectSingleNode("@memo")) == "true");
			lId = parseInt(oXML.getText(houseNode.selectSingleNode("@lId")), 10);
			dtArr = oXML.getText(houseNode.selectSingleNode("@period/@arrival"));


			
			price = oXML.getText(houseNode.selectSingleNode("period/@price"));
			discount = parseFloat(oXML.getText(houseNode.selectSingleNode("period/@discount")));
			total = oXML.getText(houseNode.selectSingleNode("period/@total"));
			curr = oXML.getText(houseNode.selectSingleNode("period/@curr"));


			if (discount > 0) {
				addClassName(objTD, "discount");
			}


			var oPriceBeforeDiv = document.createElement("DIV");
			oPriceBeforeDiv.className = "priceBefore";
			oPriceBeforeDiv.innerHTML = (str2date(dtArr) > DT_OPTION ? "OPTION" : (discount > 0 ? "<del>"+ formatPrice(price, 2, curr) +"</del>" : "&nbsp;"));
			oItemDiv.appendChild(oPriceBeforeDiv);

			var oTotalPriceDiv = document.createElement("DIV");
			oTotalPriceDiv.className = "price";
			oTotalPriceDiv.innerHTML = (str2date(dtArr) > DT_OPTION ? "OPTION" : formatPrice(total, 2, curr));

			oItemDiv.appendChild(oTotalPriceDiv);


			
			maxVisitors = oXML.getText(houseNode.selectSingleNode("@maxvisitors"))
			var oMaxVisitorsDiv = document.createElement("DIV");
			oMaxVisitorsDiv.className = "capacity";
			oMaxVisitorsDiv.innerHTML = "Max. "+ maxVisitors +" Personen";
			oItemDiv.appendChild(oMaxVisitorsDiv);
			

			
			m2 = oXML.getText(houseNode.selectSingleNode("@m2"));
			var oM2Div = document.createElement("DIV");
			oM2Div.className = "m2";
			oM2Div.innerHTML = m2 +"m²";
			oItemDiv.appendChild(oM2Div);

			if (lId > 0) {
				var oMemoDiv = document.createElement("DIV");
				var oMemoA = document.createElement("A");
				oMemoA.href = "#";
				setMemoClick(!bMemo, oMemoA, lId, dtArr, objForm.duration.value);
				oMemoA.className = "memo "+ (bMemo ? "remove" : "add");
				oMemoA.innerHTML = (bMemo ? "Entfernen" : "Keuzelijst");
				oMemoDiv.appendChild(oMemoA);
				oItemDiv.appendChild(oMemoDiv);
			}

			objTD.appendChild(oItemDiv);

			if (((j % maxPerRow) == 0) || (j == itemCount)) {
				objTR = objTBody.insertRow(objTBody.rows.length);
			}

			j += 1;
		}

		objList.innerHTML = "";
		objList.appendChild(objTable);

		objList.style.display = "block";
		if (objMap != null) {
			objMap.style.display = "none";
			if (GBrowserIsCompatible()) {
				oGM.map.checkResize();
			}
		}
	
	}
}


function setOpacity(obj, val) {
	if (obj != null) {
		obj.style.opacity = val/100;
		obj.style.filter = 'alpha(opacity='+ val +')';
	}
}


function toggleLoading(b, mode) {
	var objLoading = document.getElementById("loading");
	if (objLoading != null) {
		objLoading.style.visibility = (b ? "visible" : "hidden");

		var op = (!b ? 100 : 40);
		switch (mode) {
			case "ferieringsearch" :
				var objList = document.getElementById("searchResultsList");
				//var objMap = document.getElementById("gMapContainer");
				
				if (objList != null) {
					setOpacity(objList, op);
				}
				break;
			case "houseperiod" :
				var objPeriods = document.getElementById("housePeriods");
				if (objPeriods != null) {
					setOpacity(objPeriods, op);
				}
				break;
		}
	}
}

function toggleQuickSearchLoading(b) {
	var objLoading1 = document.getElementById("qsLoading1");
	var objLoading2 = document.getElementById("qsLoading2");
	if (objLoading1 != null) {
		objLoading1.style.visibility = (b ? "visible" : "hidden");
	}
	if (objLoading2 != null) {
		objLoading2.style.visibility = (b ? "visible" : "hidden");
	}
}






function checkFerieringQuickSearch() {
	
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		if (objForm != null) {
			if (arguments.length == 0) {
				objForm.page.value = 1;
			}

			var reqKey = "ferieringsearch";
			myRequests.remove(reqKey);

			var oXML = new XMLObject();
			var oXMLHttp = new XMLHttpRequestObject();
			oXMLHttp.async = true;
			oXMLHttp.src = "/custom/site/booking/searchxml.asp?language_id=3";

			var params = "";
			params += "duration="+ encodeURIComponent(objForm.duration.value);

			params += "&startdate="+ encodeURIComponent(objForm.yearmonth.value +"-"+ objForm.day.value);

			params += "&visitors="+ encodeURIComponent(objForm.visitors.value);
			params += "&bedrooms="+ encodeURIComponent(objForm.bedrooms.value);
			params += "&pets="+ encodeURIComponent(objForm.pets.value);
			params += "&area="+ encodeURIComponent(objForm.area.value);
			params += "&pagesize="+ 6;
			params += "&page="+ encodeURIComponent(objForm.page.value);

			if (objForm.aproxydate != null) {
				params += (objForm.aproxydate.checked ? "" : "&aproxydate=0");
			}


			
			var facRx
			facRx = /^fac_.+$/;
			for (var i = 0; i < objForm.elements.length; i++) {
				var objItem = objForm.elements.item(i)
				if (objItem.name.match(facRx)) {
					switch(objItem.type) {
						case "checkbox" :
						case "radio" :
							if (objItem.checked) {
								params += "&"+ objItem.name +"="+ encodeURIComponent(objItem.value);
							}
							break;
						default :
							params += "&"+ objItem.name +"="+ encodeURIComponent(objItem.value);
							break;
					}
				}
			}

			params += "&qs=1"; 

			

			oXMLHttp.args = params;

			var waitObj = new waitForIt();

			waitObj.waitFor = function() {
				return oXMLHttp.completed();
			}

			waitObj.whenDone = function() {
				toggleQuickSearchLoading(false);
				if (oXMLHttp.xml != null) {
					if (oXML.loadXML(oXMLHttp.xml)) {
						oError = oXML.selectSingleNode("//error");
						if (oError == null) {
							parseFerieringQuickSearchData(oXML);
						}
					}
				}
			}


			toggleQuickSearchLoading(true);
			oXMLHttp.load();
			waitObj.run();

			myRequests.add(reqKey, oXMLHttp, waitObj);
			updateFerieringSearchCookie("");
		}
	}
	
	return false;
}


function generateFerieringSearchParams(bHash) {
	var params = "";
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		if (objForm != null) {
			var mapSearch = (objForm.view.value == "map");

			params += (params != "" ? "&" : "") + "view="+ (bHash ? objForm.view.value : encodeURIComponent(objForm.view.value));

//			if (!bHash) {
				params += (params != "" ? "&" : "") + "mode="+ encodeURIComponent(objForm.mode.value);
//			}

			params += (params != "" ? "&" : "") + "duration="+ (bHash ? objForm.duration.value : encodeURIComponent(objForm.duration.value));
			params += (params != "" ? "&" : "") + "startdate="+ (bHash ? objForm.yearmonth.value +"-"+ objForm.day.value : encodeURIComponent(objForm.yearmonth.value +"-"+ objForm.day.value));
			params += (params != "" ? "&" : "") + "visitors="+ (bHash ? objForm.visitors.value : encodeURIComponent(objForm.visitors.value));
			params += (params != "" ? "&" : "") + "bedrooms="+ (bHash ? objForm.bedrooms.value : encodeURIComponent(objForm.bedrooms.value));
			params += (params != "" ? "&" : "") + "pets="+ (bHash ? objForm.pets.value : encodeURIComponent(objForm.pets.value));
			params += (params != "" ? "&" : "") + "area="+ (bHash ? objForm.area.value : encodeURIComponent(objForm.area.value));

			if (objForm.aproxydate != null) {
				params += (objForm.aproxydate.checked ? "" : (params != "" ? "&" : "") + "aproxydate=0");
			}

			if (!mapSearch) {
				params += (objForm.orderby != null ? (params != "" ? "&" : "") + "orderby=" + (bHash ? objForm.orderby.value : encodeURIComponent(objForm.orderby.value)) : "");
				params += (objForm.pagesize != null ? (params != "" ? "&" : "") + "pagesize="+ (bHash ? objForm.pagesize.value : encodeURIComponent(objForm.pagesize.value)) : "");
				params += (objForm.page != null ? (params != "" ? "&" : "") + "page="+ (bHash ? objForm.page.value : encodeURIComponent(objForm.page.value)) : "");
			}

			var facRx = /^fac_.+$/;
			for (var i = 0; i < objForm.elements.length; i++) {
				var objItem = objForm.elements.item(i)
				if (objItem.name.match(facRx)) {
					if (objItem.value != "0") {
						params += "&"+ objItem.name +"="+ (bHash ? objItem.value : encodeURIComponent(objItem.value));
					}
				}
			}
		}	
	}
	return params;
}

function generateFerieringSearchHash() {
	return generateFerieringSearchParams(true);
}

function updateFerieringSearchCookie(h) {
	if (ua["dom"]) {
		if (typeof h != "undefined") {
			h = (h != "" ? "#" + h : h);
		}
		else {
			h = "";
		}
		eraseCookie("frsearchpath");
		createCookie("frsearchpath", window.location.pathname + window.location.search + h);
	}
}

function updateFerieringSearchHash() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		if (objForm != null) {
			var h = generateFerieringSearchHash();
			dhtmlHistory.add(h, "");
			updateFerieringSearchCookie(h);
		}
	}
}

function initFerieringSearch() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		var objStateForm = document.forms["ferieringSearchState"];
		if ((objStateForm != null) && (objForm != null)) {

			
			var h = dhtmlHistory.getCurrentLocation();
			h = ((typeof h == "undefined") ? "" : h);

			var rx = /^(.+)=(.*)$/;
			var dtRx = /^(\d{4}-\d{2})-(\d{2})$/;
			var facRx = /^fac_(.+)$/;


			var bLoad = false;


			
			if (h != "") {
				var hArr = h.split("&");

				if (hArr.length > 0) {

					
					for (var i = 0; i < objForm.elements.length; i++) {
						oItem = objForm.elements.item(i);
						if (oItem.name.match(facRx)) {
							oItem.value = "0";
							toggleFacility(oItem.name.replace(facRx, "$1"), false);
						}
					}


					for (var i = 0; i < hArr.length; i++) {
						
						if (hArr[i].match(rx)) {
							k = hArr[i].replace(rx, "$1");
							v = hArr[i].replace(rx, "$2");
							
							if (k == "startdate") {
								if (v.match(dtRx)) {
									v = date2str(str2date(v));
									initField(objForm, "yearmonth", v.replace(dtRx, "$1"));
									initField(objForm, "day", v.replace(dtRx, "$2"));
								}
							}
							else {
								initField(objForm, k, v);
								if (k.match(facRx)) {
									toggleFacility(k.replace(facRx, "$1"), (v == "1"));
								}
								else if (k == "area") {
									initAreaMap(v);
								}
							}
						}
					}
				}

				if (FR_CACHE) {
					var hs = historyStorage.get(h);
					if (hs != null) {
						checkFerieringStoredSearch(hs);
					}
					else {
						doFerieringSearch(false);
					}
				}
				else {
					doFerieringSearch(false);
				}
			}
			
			else {
				
				bLoad = (fieldHasChanged(objStateForm.view, objForm.view) ? true : bLoad);
				bLoad = (fieldHasChanged(objStateForm.mode, objForm.mode) ? true : bLoad);
				bLoad = (fieldHasChanged(objStateForm.page, objForm.page) ? true : bLoad);

				
				if (objStateForm.view.value == objForm.view.value) {
					if (objStateForm.view.value != "map") {
						bLoad = (fieldHasChanged(objStateForm.pagesize, objForm.pagesize) ? true : bLoad);
					}
				}
				else {
					bLoad = (fieldHasChanged(objStateForm.pagesize, objForm.pagesize) ? true : bLoad);
				}
				

				bLoad = (fieldHasChanged(objStateForm.day, objForm.day) ? true : bLoad);
				bLoad = (fieldHasChanged(objStateForm.yearmonth, objForm.yearmonth) ? true : bLoad);
				bLoad = (fieldHasChanged(objStateForm.duration, objForm.duration) ? true : bLoad);
				bLoad = (fieldHasChanged(objStateForm.visitors, objForm.visitors) ? true : bLoad);
				bLoad = (fieldHasChanged(objStateForm.bedrooms, objForm.bedrooms) ? true : bLoad);
				bLoad = (fieldHasChanged(objStateForm.pets, objForm.pets) ? true : bLoad);
				bLoad = (fieldHasChanged(objStateForm.area, objForm.area) ? true : bLoad);
				
				if (objForm.aproxydate != null) {
					bLoad = (fieldHasChanged(objStateForm.aproxydate, objForm.aproxydate) ? true : bLoad);
				}

				for (var i = 0; i < objStateForm.elements.length; i++) {
					oFromItem = objStateForm.elements.item(i);
					oToItem = null;
					if (oFromItem.name.match(facRx)) {
						oToItem = objForm.elements.namedItem(oFromItem.name);

						bLoad = (fieldHasChanged(oFromItem, oToItem) ? true : bLoad);
						toggleFacility(oToItem.name.replace(facRx, "$1"), (oToItem.value == "1"));
					}
				}

				if (bLoad) {
					checkFerieringSearch(false);
				}
				updateFerieringSearchCookie("");
			}

			toggleSRViewTab(objForm.view.value);
		}

	}
}



function checkFerieringStoredSearch(xmlStr) {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		if (objForm != null) {
			var mapSearch = (objForm.view.value == "map");

			var reqKey = "searchresults";

			if (arguments.length == 0) {
				objForm.page.value = 1;
			}

			toggleLoading(true, reqKey);

			var oXML = new XMLObject();
			if (oXML.loadXML(xmlStr)) {
				oError = oXML.selectSingleNode("//error");
				if (oError == null) {
					if (mapSearch) {
						parseFerieringMapSearchData(oXML);
					}
					else {
						parseFerieringSearchData(oXML);
					}
				}
			}
			toggleLoading(false, reqKey);
		}
		updateFerieringSearchCookie();
	}
}



function submitFerieringSearch() {
	window.location = generateSearchUrl(1);
	return false;
}

function checkFerieringSearch(bFirstPage) {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		if (objForm != null) {

			if (bFirstPage) {
				objForm.page.value = 1;
			}

			var params = generateFerieringSearchParams(false);

			

			var reqKey = "ferieringsearch";
			myRequests.remove(reqKey);

			var mapSearch = (objForm.view.value == "map");

			var oXML = new XMLObject();
			var oXMLHttp = new XMLHttpRequestObject();
			oXMLHttp.async = true;

			if (mapSearch) {
				oXMLHttp.src = "/custom/site/booking/mapsearchxml.asp?language_id=3";		
			}
			else {
				oXMLHttp.src = "/custom/site/booking/searchxml.asp?language_id=3";			
			}


			oXMLHttp.args = params;

			var waitObj = new waitForIt();

			waitObj.waitFor = function() {
				return oXMLHttp.completed();
			}

			waitObj.whenDone = function() {
				toggleLoading(false, reqKey);

				if (oXMLHttp.xml != null) {
					if (oXML.loadXML(oXMLHttp.xml)) {

						if (FR_CACHE) {
							historyStorage.put(params, oXMLHttp.xml);
						}

						oError = oXML.selectSingleNode("//error");
						if (oError == null) {
							if (mapSearch) {
								parseFerieringMapSearchData(oXML);
							}
							else {
								parseFerieringSearchData(oXML);
							}
						}
					}
				}
			}

			toggleLoading(true, reqKey);
			oXMLHttp.load();
			waitObj.run();
		
			myRequests.add(reqKey, oXMLHttp, waitObj);

			
		}
	}
	return false;
}







function str2date(s) {
	var rx = /^(\d{4})-(\d{1,2})-(\d{1,2})$/;
	var d = new Date();
	if (s.match(rx)) {
		d.setFullYear(parseInt(s.replace(rx, "$1"), 10), 0, 1);
		d.setMonth(parseInt(s.replace(rx, "$2"), 10) - 1);
		d.setDate(parseInt(s.replace(rx, "$3"), 10));
	}
	return d;
}


function date2str(dt) {
	var y = dt.getFullYear();
	var m = dt.getMonth() + 1;
	var d = dt.getDate();
	return y +"-"+ (m < 10 ? "0" : "") + m +"-"+ (d < 10 ? "0" : "") + d;
}


function date2prettystr(dt) {
	var y = dt.getFullYear();
	var m = dt.getMonth() + 1;
	var d = dt.getDate();
	return d +". "+ getMonthName(m) +" "+ y;
}


function fieldHasChanged(objFrom, objTo) {
	var b = false;
	if ((objFrom != null) && (objTo != null)) {
		switch(objTo.type) {
			case "checkbox" :
				if (objTo.checked && (objFrom.value != "1") || !objTo.checked && (objFrom.value != "0")) {
					b = true;
					copyFieldValue(objFrom, objTo);
				}
				break;
			default :
				if (objFrom.value != objTo.value) {
					b = true;
					copyFieldValue(objFrom, objTo);
				}
				break;
		}
	}
	return b;
}

function copyFieldValue(objFrom, objTo) {
	if ((objFrom != null) && (objTo != null)) {
		initField(objTo.form, objTo.name, objFrom.value);
	}
}

function initField(objForm, k, v) {
	if (objForm != null) {
		var obj = objForm.elements.namedItem(k);
		if (obj != null) {
			switch(obj.type) {
				case "hidden" :
				case "text" :
				case "textarea" :
					obj.value = v;
					break;
				case "checkbox" : 
				case "radio" :
					obj.checked = (v == "1");
					break;
				case "select-one" :
					for (var i = 0; i < obj.options.length; i++) {
						if (obj.options[i].value == v) {
							obj.selectedIndex = i;
						}
					}
			}	
		}
	}
}


function initHouse() {
	var objForm = document.forms["ferieringHouse"];
	var objStateForm = document.forms["ferieringHouseState"];

	
	var h = dhtmlHistory.getCurrentLocation();
	h = ((typeof h == "undefined") ? "" : h);

	var rx = /^(.+)=(.+)$/;
	var dtRx = /^(\d{4}-\d{2})-(\d{2})$/;

	
	if (h != "") {
		var hArr = h.split("&");
		if (hArr.length > 0) {
			for (var i = 0; i < hArr.length; i++) {
				
				if (hArr[i].match(rx)) {
					k = hArr[i].replace(rx, "$1");
					v = hArr[i].replace(rx, "$2");
					
					if (k == "startdate") {
						if (v.match(dtRx)) {
							v = date2str(str2date(v));
							initField(objForm, "yearmonth", v.replace(dtRx, "$1"));
							initField(objForm, "day", v.replace(dtRx, "$2"));
						}
					}
					else {
						initField(objForm, k, v);							
					}
				}
			}
		}
		fetchHouseData();
	}
	else {
		
		var bLoad = false;

		if (objStateForm.duration.value != objForm.duration.value) {
			bLoad = true;
			initField(objForm, "duration", objStateForm.duration.value);
		}
		if (objStateForm.visitors.value != objForm.visitors.value) {
			bLoad = true;
			initField(objForm, "visitors", objStateForm.visitors.value);
		}
		if (objStateForm.day.value != objForm.day.value) {
			bLoad = true;
			initField(objForm, "day", objStateForm.day.value);
		}
		if (objStateForm.yearmonth.value != objForm.yearmonth.value) {
			bLoad = true;
			initField(objForm, "yearmonth", objStateForm.yearmonth.value);
		}

		
		if (bLoad) {
			fetchHouseData();
		}
	}
}

function updateHouse() {
	if (FR_HISTORY) {
		updateHouseHash();
	}
}

function updateHouseHash() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringHouse"];
		if (objForm != null) {
			var hStr = generateHouseHash();
			dhtmlHistory.add(hStr, "");
			fetchHouseData();
		}
	}
}

function generateHouseHash() {
	var hStr = "";
	var objForm = document.forms["ferieringHouse"];
	if (objForm != null) {
		hStr += (hStr != "" ? "&" : "") + "duration="+ objForm.duration.value;
		hStr += (hStr != "" ? "&" : "") + "visitors="+ objForm.visitors.value;
		hStr += (hStr != "" ? "&" : "") + "startdate="+ objForm.yearmonth.value +"-"+ objForm.day.value;
		if (objForm.aproxydate != null) {
			hStr += (objForm.aproxydate.checked ? "" : (hStr != "" ? "&" : "") + "aproxydate=0");
		}
	}
	return hStr;
}


function parseHousePeriods(oXML) {
	var objForm = document.forms["ferieringHouse"];
	if (objForm != null) {
		var dtStr = objForm.yearmonth.value + "-"+ objForm.day.value;
		var objTarget = document.getElementById("housePeriods");
		var aPeriods = oXML.selectNodes("//p");
		var str = new StringBuffer();

		var bAproxy = true;

		if (aPeriods.length > 0) {
			if (objForm.aproxydate != null) {
				if (!objForm.aproxydate.checked) {
					bAproxy = false;
				}
			}
			else {
				bAproxy = false;
			}
		}


		if (aPeriods.length > 0) {

			for (var i = 0; i < aPeriods.length; i++) {
				oPeriod = aPeriods[i];
				var arr = str2date(oXML.getText(oPeriod.selectSingleNode("@arr")));
				var dep = str2date(oXML.getText(oPeriod.selectSingleNode("@dep")));
				var discount = parseFloat(oXML.getText(oPeriod.selectSingleNode("@d")));
				var discountText = oXML.getText(oPeriod.selectSingleNode("@dt"));
				var price = parseFloat(oXML.getText(oPeriod.selectSingleNode("@p")));
				var totalPrice = parseFloat(oXML.getText(oPeriod.selectSingleNode("@t")));
				var curr = oXML.getText(oPeriod.selectSingleNode("@curr"));

				str.append("<div class=\"period\">");
				str.append("<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");
				str.append("<tbody>");

				if (bAproxy) {
					str.append("<tr><td colspan=\"2\" class=\"date\">");
					str.append("<div class=\"dates\">");
					str.append("<p><strong>Aankomst:</strong> "+ date2prettystr(arr) +"</p>");
					str.append("<p><strong>Vertrek:</strong> "+ date2prettystr(dep) +"</p>");
					str.append("</div>");
					str.append("</td></tr>");
				}

				if (arr > DT_OPTION) {
					str.append("<tr class=\"total\"><td>Preis</td><td class=\"price\">OPTION</td></tr>");
				}
				else {
					if (discount > 0) {
						str.append("<tr><td>Normalpreis</td><td class=\"price\">"+ formatPrice(price, 2, curr) +"</td></tr>");
						str.append("<tr class=\"discount\"><td>"+ discountText +"</td><td class=\"price\">"+ formatPrice(-discount, 2, curr) +"</td></tr>");
					}
					str.append("<tr class=\"total\"><td>Aktuellepreis</td><td class=\"price\">"+ formatPrice(totalPrice, 2, curr) +"</td></tr>");
				}
				
				str.append("</tbody>");
				str.append("</table>");
				str.append("<div><a href=\"/idd333.asp?state=4&amp;houseid="+ objForm.houseid.value +"&amp;startdate="+ date2str(arr) +"&amp;duration="+ objForm.duration.value +"&amp;visitors="+ objForm.visitors.value +"\">RESERVERING</a></div>");
				str.append("</div>");

			}
		}
		else {	
			str.append("<div class=\"error\">Haus leider nicht frei</div>");
		}		

		objTarget.innerHTML = str;

	}
}




function parseHouseSeason(oXML, year) {
	var objForm = document.forms["ferieringHouse"];
	if (objForm != null) {

		var objSeason = document.getElementById("houseSeasons");
		var cal_year = parseInt(year, 10);
		var duration = parseInt(oXML.getText(oXML.selectSingleNode("houseseasonxml/@duration")), 10);
		var bookingCalendar = oXML.getText(oXML.selectSingleNode("//bookingCalendar/calendar[@year='"+ cal_year +"']"));
		var seasonCalendar = oXML.getText(oXML.selectSingleNode("//seasonCalendar/calendar[@year='"+ cal_year +"']"));

		var periods = oXML.selectNodes("//p");
		var str = new StringBuffer();


		str.append("<table class=\"seasonCalendar\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");
		str.append("<tbody>");

		str.append("<tr>");
		str.append("<td class=\"years\" colspan=\"13\">");
	

		
		for (var i = DT_MIN_YEAR; i < DT_MAX_YEAR; i++) {
			str.append("<a href=\"#\" onclick=\"return toggleHouseSeason("+ i +");\""+ (i == cal_year ? " class=\"current\"" : "") +">Kalender "+ i +"</a>");
		}

		
		str.append("</td>");
		str.append("</tr>");

		str.append("<tr>");
		str.append("<td class=\"year\">&nbsp;</td>");
		str.append("<td class=\"month\">"+ "Jan" +"</td>");
		str.append("<td class=\"month\">"+ "Feb" +"</td>");
		str.append("<td class=\"month\">"+ "Maa" +"</td>");
		str.append("<td class=\"month\">"+ "Apr" +"</td>");
		str.append("<td class=\"month\">"+ "Mei" +"</td>");
		str.append("<td class=\"month\">"+ "Jun" +"</td>");
		str.append("<td class=\"month\">"+ "Jul" +"</td>");
		str.append("<td class=\"month\">"+ "Aug" +"</td>");
		str.append("<td class=\"month\">"+ "Sep" +"</td>");
		str.append("<td class=\"month\">"+ "Okt" +"</td>");
		str.append("<td class=\"month\">"+ "Nov" +"</td>");
		str.append("<td class=\"month\">"+ "Dec" +"</td>");
		str.append("</tr>");

		var td_arrivalday = false;
		var td_dayofyear = "";
		var td_date = "";
		var td_month = "";
		var td_week = "";
		var td_class = "";
		var td_season = "";

		var dtToday = new Date();

		for (var d = 1; d <= 31; d++) {
			str.append("<tr>");
			str.append("<td class=\"day\">"+ d +"</td>");

			for (var m = 1; m <= 12; m++) {
				td_arrivalday = false;
				
				td_date = str2date(cal_year +"-"+ m +"-"+ d);

				td_month = DatePart("m", td_date);
				td_class = "";

				if (td_month == m) { //Day is within current month

					td_dayofweek = (DatePart("w", td_date) + 1);

					if (td_dayofweek == 2) { //2 = monday
						td_week = td_date.getWeekNumber();
					}
					else {
						td_week = "";
					}

					td_dayofyear = DatePart("y", td_date) + 1;

					if (td_date <= dtToday) {
						td_class = "nodata";
					}
					else {

						if (bookingCalendar != "") {
							td_booked = (bookingCalendar.substr(td_dayofyear - 1, 1) == "B");
						}
						else {
							td_booked = false;
						}

						if (td_booked) {
							td_class = "booked";
						}
						else {
							//If not booked, find season:
							td_season = seasonCalendar.substr(td_dayofyear - 1, 1);

							//Check if today is an arrival day:
							if (periods.length > 0) {
								for (var i = 0; i < periods.length; i++) {
									if (date2str(td_date) == oXML.getText(periods[i].selectSingleNode("@arr"))) {
										td_arrivalday = true;
										break;
									}
								}
							}

							td_class = (td_season != "" ? "season_"+ td_season : "nodata");

						}
					}

					if (td_class != "") {
						str.append("<td class=\""+ td_class +"\">");
					}
					else {
						str.append("<td>");
					}

					if (td_arrivalday) {
						str.append("<a href=\"#\" onclick=\"return setHouseDate('"+ date2str(td_date) +"');\" title=\""+ date2str(td_date) +"\">");
					}

					str.append("&nbsp;" + td_week);

					if (td_arrivalday) {
						str.append("</a>");
					}

					str.append("</td>");

					

				}
				else {
					str.append("<td class=\"void\">&nbsp;</td>");
				}
			}

			str.append("</tr>");
		}


		str.append("</tbody>");
		str.append("</table>");


		var seasonPrices = oXML.selectNodes("//seasonPrice");

		if (seasonPrices.length > 0) {
			str.append("<table class=\"seasonCalendarLegends\">");
			str.append("<tbody>");
			str.append("<tr>");

			for (var i = 0; i < seasonPrices.length; i++) {
				sp = seasonPrices[i];
				spId = oXML.getText(sp.selectSingleNode("@id"));
				spCurr = oXML.getText(sp.selectSingleNode("@curr"));
				spPrice = parseFloat(oXML.getText(sp.selectSingleNode("@price")));
				str.append("<td><span class=\"season_"+ spId +"\">"+ spId +"</span> "+ formatPrice(Math.round(7 * spPrice), 2, spCurr) +"</td>");
				//str.append("<td><span class=\"season_"+ spId +"\">"+ spId +"</span></td>");
			}

			str.append("</tr>");
			str.append("<tr><td><span class=\"booked\">&nbsp;</span> Belegt</tr>");
			str.append("</tbody>");
			str.append("</table>");
		}


		objSeason.innerHTML = str;
	}
}


function toggleHouseSeason(y) {
	fetchHouseSeason(y);
	return false;
}

function setHouseDate(dtStr) {
	var objForm = document.forms["ferieringHouse"];
	if (objForm != null) {
		setDateFields(objForm, str2date(dtStr));
	}
	return false;
}

function fetchHouseSeason(y) {
	var objForm = document.forms["ferieringHouse"];
	if (objForm != null) {
		var oXML = new XMLObject();

		var reqKey = "houseseason";
		myRequests.remove(reqKey);

		var oXMLHttp = new XMLHttpRequestObject();	
		oXMLHttp.async = true;
		oXMLHttp.src = "/custom/site/booking/houseseasonxml.asp?language_id=3";

		var params = "";
		params += "houseid="+ encodeURIComponent(objForm.houseid.value);
		params += "&duration="+ 7; 
		params += "&startdate="+ encodeURIComponent(y+"-01-01"); 
		params += "&enddate="+ encodeURIComponent(y+"-12-31"); 

		oXMLHttp.args = params;

		var waitObj = new waitForIt();
		waitObj.waitFor = function() {
			return oXMLHttp.completed();
		}
		waitObj.whenDone = function() {
			if (oXMLHttp.xml != null) {
				if (oXML.loadXML(oXMLHttp.xml)) {
					oError = oXML.selectSingleNode("//error");
					if (oError == null) {
						parseHouseSeason(oXML, y);
					}
				}
			}
			toggleLoading(false, reqKey);
		}

		toggleLoading(true, reqKey);
		oXMLHttp.load();
		waitObj.run();

		myRequests.add(reqKey, oXMLHttp, waitObj);
	}
}



function fetchHousePeriod() {
	var objForm = document.forms["ferieringHouse"];

	var reqKey = "houseperiod";
	myRequests.remove(reqKey);

	var oXML = new XMLObject();
	var oXMLHttp = new XMLHttpRequestObject();	
	oXMLHttp.async = true;
	oXMLHttp.src = "/custom/site/booking/houseperiodsxml.asp?language_id=3";

	var params = "";
	params += "houseid="+ encodeURIComponent(objForm.houseid.value);
	params += "&duration="+ encodeURIComponent(objForm.duration.value);
	params += "&visitors="+ encodeURIComponent(objForm.visitors.value);
	params += "&startdate="+ encodeURIComponent(objForm.yearmonth.value +"-"+ objForm.day.value);
	
	if (objForm.aproxydate != null) {
		if (!objForm.aproxydate.checked) {
			params += "&aproxydate=0";
			params += "&e=1";
		}
	}
	else {
		params += "&e=1";
	}


	oXMLHttp.args = params;

	var waitObj = new waitForIt();
	waitObj.waitFor = function() {
		return oXMLHttp.completed();
	}

	waitObj.whenDone = function() {
		if (oXMLHttp.xml != null) {
			if (oXML.loadXML(oXMLHttp.xml)) {
				oError = oXML.selectSingleNode("//error");
				if (oError == null) {
					parseHousePeriods(oXML);
					
				}
			}
		}
		toggleLoading(false, reqKey);
	}

	toggleLoading(true, reqKey);
	oXMLHttp.load();
	waitObj.run();

	myRequests.add(reqKey, oXMLHttp, waitObj);
}


function fetchHouseData() {
	fetchHousePeriod();
}



function setHouseView(obj, v) {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringHouse"];
		objForm.view.value = v;
		toggleHouseViewTab(v);
	}
	return false;
}


function toggleHouseViewTab(v) {
	var objDiv = document.getElementById("houseTabs");
	var obj = document.getElementById("housetab"+ v);
	if (obj != null) {
		var oLI = obj.parentNode;
		var oUL = oLI.parentNode;

		addClassName(oLI, "current");
		var aLI = oUL.getElementsByTagName("LI");
		for (var i = 0; i < aLI.length; i++) {
			if (aLI[i] != oLI) {
				removeClassName(aLI[i], "current");
			}
		}

		var objDetails = document.getElementById("houseDetails");
		var objFacilities = document.getElementById("houseFacilities");
		var objMap = document.getElementById("houseMap");
		var objSeasons = document.getElementById("houseSeasons");
		
		var objMiniMap = document.getElementById("houseMiniMap");

		objDetails.style.display = (v == "details" ? "block" : "none");
		objFacilities.style.display = (v == "facilities" ? "block" : "none");
		if (objMap != null) {
			objMap.style.display = (v == "map" ? "block" : "none");

		}
		objSeasons.style.display = (v == "seasons" ? "block" : "none");

		if (GBrowserIsCompatible()) {
			if (objMap != null) {
				oGM.map.checkResize();
				oGM.map.setCenter(oGM.settings.center);
			}
			if (objMiniMap != null) {
				oMiniGM.map.checkResize();
			}
		}
	}
}






/* CROSS-BROWSER EVENT HANDLER */
	function addEvent(obj, evType, fn){
		 if (obj.addEventListener){
			 obj.addEventListener(evType, fn, true);
			 return true;
		 } else if (obj.attachEvent){
			 var r = obj.attachEvent("on"+evType, fn);
			return r;
		 } else {
			return false;
		 }
	}
/* END EVENT HANDLER */





function setMemoClick(b, obj, id, dt, d) {
	obj.onclick = function() {
		return toggleMemo(b, this, id, dt, d);
	}
}

function updateMemoCount(c) {
	if (ua["dom"]) {
		var objMemoCount = document.getElementById("memoCount");
		if (objMemoCount != null) {
			objMemoCount.innerHTML = c;
		}
	}
}

function toggleMemo(bAdd, obj, id, startdate, duration) {
	if (ua["dom"]) {
		defstartdate = startdate;
		defduration = duration

		if (bAdd) {
			if (startdate == null) {
				var objForm = document.forms["ferieringSearch"];
				if (objForm == null) {
					objForm = document.forms["ferieringHouse"];
				}
				if (objForm != null) {
					startdate = objForm.yearmonth.value +"-"+ objForm.day.value;
					duration = objForm.duration.value;
				}
			}
		}

		var reqKey = "memo";
		myRequests.remove(reqKey);

		var oXML = new XMLObject();
		var oXMLHttp = new XMLHttpRequestObject();
		oXMLHttp.async = true;
		oXMLHttp.src = "/custom/site/booking/memoxml.asp";

		var params = "";
		params += "act="+ (bAdd ? "add" : "del");
		params += "&id="+ encodeURIComponent(id);
		params += "&startdate="+ encodeURIComponent(startdate);
		params += "&duration="+ encodeURIComponent(duration);

		oXMLHttp.args = params;

		var waitObj = new waitForIt();

		waitObj.waitFor = function() {
			return oXMLHttp.completed();
		}

		waitObj.whenDone = function() {
			if (oXMLHttp.xml != null) {
				if (oXML.loadXML(oXMLHttp.xml)) {
					oError = oXML.selectSingleNode("//error");
					if (oError == null) {
						updateMemoCount(oXML.getText(oXML.selectSingleNode("memoxml/@count")));
						obj.innerHTML = (bAdd ? "Entfernen" : "Keuzelijst");

						if (bAdd) {
							removeClassName(obj, "add");
							addClassName(obj, "remove");
						}
						else {
							removeClassName(obj, "remove");
							addClassName(obj, "add");
						}

						obj.onclick = function() {
							return toggleMemo(!bAdd, this, id, defstartdate, defduration);
						}
					}
				}
			}
			toggleLoading(false, reqKey);			
		}

		toggleLoading(true, reqKey);
		oXMLHttp.load();
		waitObj.run();
		myRequests.add(reqKey, oXMLHttp, waitObj);
	}
	return false;
}

function deleteMemo() {
	return confirm("Wilt u het wenslijstje wissen?"); 
}





var displayCalendar = false;



function setDateFields(objForm, dt) {
	var objYearMonth = objForm.yearmonth;
	var objDay = objForm.day;

	if ((objYearMonth != null) && (objDay != null)) {
		dt = date2str(dt);
		var ym = dt.substr(0, 7);
		var d = dt.substr(8, 2);
		var b = false;

		if (ym != objYearMonth.value) {
			b = true;

			for (var i = 0; i < objYearMonth.options.length; i++) {
			if (objYearMonth.options[i].value == ym) {
				objYearMonth.selectedIndex = i;
			}
		}

		}
		if (d != objDay.value) {
			b = true;

			for (var i = 0; i < objDay.options.length; i++) {
				if (objDay.options[i].value == d) {
					objDay.selectedIndex = i;
				}
			}
		}

		if (b) {
			switch(objForm.name) {
				case "ferieringHouse" :
					updateHouse();
					break;
				case "ferieringSearch" :
					var objQS = document.getElementById("quickSearchResults");
					if (objQS != null) {
						doFerieringQuickSearch();
					}
					else {
						doFerieringSearch(true);
					}
					break;
			}
		}
	}
}



function simpleSearchCBCalendar(objCal) {
	var objForm = document.forms["ferieringSimpleSearch"];
	if (objForm != null) {
		if (objCal.dateClicked) {
			
			var dtValidation = validateSearchDate(objForm, date2str(objCal.date))

			switch (dtValidation.state) {
				case DT_OK :
					
					if (dtValidation.dt <= DT_MAX_DATE) {
						setDateFields(objForm, dtValidation.vdt);
						toggleSimpleCalendar();
					}
					else {
						dtValidation.state = DT_ERR_AFTERMAX;
						alert(getDTWarning(dtValidation));
					}
					break;

				default :
					alert(getDTWarning(dtValidation));
					break;
			}
		}
	}
}


function searchCBCalendar(objCal) {
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		if (objCal.dateClicked) {
			
			var dtValidation = validateSearchDate(objForm, date2str(objCal.date))

			switch (dtValidation.state) {
				case DT_OK :
					
					if (dtValidation.dt <= DT_MAX_DATE) {
						setDateFields(objForm, dtValidation.vdt);
						toggleCalendar();
					}
					else {
						dtValidation.state = DT_ERR_AFTERMAX;
						alert(getDTWarning(dtValidation));
					}
					break;

				default :
					alert(getDTWarning(dtValidation));
					break;
			}
		}
	}
}



function houseCBCalendar(objCal) {
	var objForm = document.forms["ferieringHouse"];
	if (objForm != null) {
		if (objCal.dateClicked) {
			
			var dtValidation = validateHouseDate(date2str(objCal.date));

			switch (dtValidation.state) {
				case DT_OK :
					
					if (dtValidation.dt <= DT_MAX_DATE) {
						setDateFields(objForm, dtValidation.vdt);
						toggleHouseCalendar();
					}
					break;
				default :
					break;
			}
			
		}
	}
}




function generateLegalDates(d) {
	d = parseInt(d, 10)
	var objDur = null;
	var objDur = null;
	for (var i = 0; i < legalDurations.length; i++) {
		if (legalDurations[i].days == d) {
			objDur = legalDurations[i];
			break;
		}
	}

	if (objDur != null) {
		var dtToday = new Date();
		var res = [];

		for (var i = objDur.minDiff; i <= objDur.maxDiff; i++) {
			dt = DateAdd("d", i, dtToday);

			if (objDur.legalDaysOnly) {
				w = DatePart("w", dt);
				if (isLegalDay(w)) {
					res[res.length] = date2str(dt);
				}
			}
			else {
				res[res.length] = date2str(dt);
			}
		}

		return res;
	}
	return [];
}


function generateIllegalDates() {
	var res = [];
	for (var i = 0; i < illegalDates.length; i++) {
		res[res.length] = date2str(illegalDates[i]);
	}
	return res;
}




function hideCalendar() {
	if (ua["dom"]) {
		var oIframe = document.getElementById("calendarFrame");
		if (oIframe != null) {
			displayCalendar = false;	
			oIframe.style.top = "0px";
			oIframe.style.left = "-1000px";
		}
	}
}


function toggleSimpleCalendar(obj) {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSimpleSearch"];
		var objIframe = window.frames["calendarFrame"];
		var oIframe = document.getElementById("calendarFrame");
		if ((objIframe != null) && (objForm != null)) {
			var objDoc = (typeof objIframe.document != "undefined" ? objIframe.document : objIframe.contentDocument);
			var objBody = objDoc.body;
			
			if (displayCalendar) {
				displayCalendar = false;
				oIframe.style.top = "0px";
				oIframe.style.left = "-1000px";

			}
			else {
				displayCalendar = true;
				var legalDates = generateLegalDates(objForm.duration.value);

				objIframe.initializeCalendar( {
					flat : "calendarContainer",
					flatCallback : simpleSearchCBCalendar,
					closeCallback : hideCalendar,
					date : str2date(objForm.yearmonth.value +"-"+ objForm.day.value),
					weekNumbers : true,
					showOthers : false,
					firstDay : 1,
					legalDays : (legalDates.length == 0 ? legalDays : []),
					legalDates : generateLegalDates(objForm.duration.value),
					illegalDates : generateIllegalDates(),
					duration : objForm.duration.value,
					range : [DT_MIN_YEAR, DT_MAX_YEAR],
					maxDate : DT_MAX_DATE
				});

				oIframe.style.height = objIframe.myHeight +"px";
				oIframe.style.width = objIframe.myWidth +"px";

				positionCalendar();
		
			}
		}
	}
	return false;
}


function toggleCalendar(obj) {
	var objForm = document.forms["ferieringSearch"];
	var objIframe = window.frames["calendarFrame"];
	var oIframe = document.getElementById("calendarFrame");
	if ((objIframe != null) && (objForm != null)) {
		var objDoc = (typeof objIframe.document != "undefined" ? objIframe.document : objIframe.contentDocument);
		var objBody = objDoc.body;

		if (displayCalendar) {
			displayCalendar = false;
			oIframe.style.top = "0px";
			oIframe.style.left = "-1000px";

		}
		else {
			displayCalendar = true;
			var legalDates = generateLegalDates(objForm.duration.value);

			objIframe.initializeCalendar( {
				flat : "calendarContainer",
				flatCallback : searchCBCalendar,
				closeCallback : hideCalendar,
				date : str2date(objForm.yearmonth.value +"-"+ objForm.day.value),
				weekNumbers : true,
				showOthers : false,
				firstDay : 1,
				legalDays : (legalDates.length == 0 ? legalDays : []),
				legalDates : generateLegalDates(objForm.duration.value),
				illegalDates : generateIllegalDates(),
				duration : objForm.duration.value,
				range : [DT_MIN_YEAR, DT_MAX_YEAR],
				maxDate : DT_MAX_DATE
			});

			oIframe.style.height = objIframe.myHeight +"px";
			oIframe.style.width = objIframe.myWidth +"px";

			positionCalendar();
		}
	}
}


function toggleHouseCalendar(obj) {
	var objForm = document.forms["ferieringHouse"];
	var objIframe = window.frames["calendarFrame"];
	var oIframe = document.getElementById("calendarFrame");
	var reqKey = "legaldates";

	if ((objIframe != null) && (objForm != null)) {
		var objDoc = (typeof objIframe.document != "undefined" ? objIframe.document : objIframe.contentDocument);
		var objBody = objDoc.body;
		
		if (displayCalendar) {
			displayCalendar = false;
			oIframe.style.top = "0px";
			oIframe.style.left = "-1000px";
		}
		else {

			myRequests.remove(reqKey);

			var oXML = new XMLObject();
			var oXMLHttp = new XMLHttpRequestObject();
			oXMLHttp.async = true;
			oXMLHttp.src = "/custom/site/booking/houseseasonxml.asp?language_id=3";

			var params = "";
			params += "houseid="+ encodeURIComponent(objForm.houseid.value);
			params += "&duration="+ encodeURIComponent(objForm.duration.value);
			params += "&startdate="+ encodeURIComponent(DT_MIN_YEAR +"-01-01");
			params += "&enddate="+  encodeURIComponent(DT_MAX_YEAR + "-12-31");
		
			oXMLHttp.args = params;

			var waitObj = new waitForIt();

			waitObj.waitFor = function() {
				return oXMLHttp.completed();
			}

			waitObj.whenDone = function() {
				toggleLoading(false, reqKey);
				if (oXMLHttp.xml != null) {
					if (oXML.loadXML(oXMLHttp.xml)) {
						oError = oXML.selectSingleNode("//error");
						if (oError == null) {
							var periods = oXML.selectNodes("//p");
							legalDates = [];
							for (var i = 0; i < periods.length; i++) {
								legalDates[legalDates.length] = oXML.getText(periods[i].selectSingleNode("@arr"));				
							}

							displayCalendar = true;

							objIframe.initializeCalendar( {
								flatCallback : houseCBCalendar,
								closeCallback : hideCalendar,
								date : str2date(objForm.yearmonth.value +"-"+ objForm.day.value),
								weekNumbers : true,
								showOthers : false,
								firstDay : 1,
								legalDays : [],
								legalDates : legalDates,
								duration : objForm.duration.value,
								range : [DT_MIN_YEAR, DT_MAX_YEAR],
								maxDate : DT_MAX_DATE
							});

							oIframe.style.height = objIframe.myHeight +"px";
							oIframe.style.width = objIframe.myWidth +"px";
							positionCalendar();
						}
					}
				}
			}
			toggleLoading(true, reqKey);
			oXMLHttp.load();
			waitObj.run();

			myRequests.add(reqKey, oXMLHttp, waitObj);
			
		}
	}
}





function positionCalendar() {
	if (ua["dom"]) {
		if (displayCalendar) {
			var objCalendarIcon = document.getElementById("calendarIcon");
			var objIframe = document.getElementById("calendarFrame");
			if ((objCalendarIcon != null) && (objIframe != null)) {
				var pos = findPos(objCalendarIcon);
				var dX = getPageDim().x - pos[0] - objIframe.offsetWidth;
				var pX = pos[0];
				var pY = pos[1];
				if (dX < 20) {
					pX = getPageDim().x - objIframe.offsetWidth - 20;
				}
				objIframe.style.top = pY +"px";
				objIframe.style.left = pX + "px";
			}
		}
	}
}


function clickedOutsideCalendar(evt) {
	var objIcon = document.getElementById("calendarIcon");
	var objCal = document.getElementById("calendarFrame");
	var obj = null;
	obj = (window.event ? getEventTarget(window.event) : getEventTarget(evt));
	while (obj != null) {
		if ((obj == objIcon) || (obj == objCal)) {
			return false;
		}
		obj = obj.offsetParent;
	}
	return true;
}

function getEventTarget(evt) {
	var targ = (evt.target ? evt.target : evt.srcElement);
	if (targ != null) {
		if (targ.nodeType == 3) {
			targ = targ.parentNode;
		}
	}
	return targ;
}


addEvent(window, "resize", positionCalendar);





function trimInput(obj) {
	if (ua["dom"]) {
		obj.value = obj.value.trim();
	}
	return false;
}

function trimEmailInput(obj) {
	if (ua["dom"]) {
		var s = obj.value.trim();
		obj.value = (isEmail(s) ? s : "");
	}
}

function validateSTF(objForm) {
	var res = true;
	var msg = "";
	if (ua["dom"]) {
		var objFromName = objForm.stfFromName;
		var objFromEmail = objForm.stfFromEmail;
		var objToName = objForm.stfToName;
		var objToEmail = objForm.stfToEmail;
		var objMessage = objForm.stfMessage;

		trimInput(objFromName);
		trimInput(objFromEmail);
		trimInput(objToName);
		trimInput(objToEmail);
		trimInput(objMessage);

		msg = "Fehler in:\n";

		if (objFromName.value == "") {
			res = false;
			msg += "- Uw naam" +"\n";
		}	

		if (!isEmail(objFromEmail.value)) {
			objFromEmail.value = "";
			res = false;
			msg += "- uw e-mail" +"\n";
		}

		if (objToName.value == "") {
			res = false;
			msg += "- Ontvanger (naam)" +"\n";
		}

		if (!isEmail(objToEmail.value)) {
			objToEmail.value = "";
			res = false;
			msg += "- Ontvanger (e-mail)" +"\n";
		}
	
		if (!res) {
			alert(msg);
		}
		else {
					
			var reqKey = "stf";
			myRequests.remove(reqKey);
			
			var oResponse = document.getElementById("stfResponse");
			var oFormDiv = document.getElementById("stfForm");
			
			var oXML = new XMLObject();
			var oXMLHttp = new XMLHttpRequestObject();
			oXMLHttp.async = true;
			oXMLHttp.src = "/custom/site/booking/sendtofriendxml.asp?language_id=3";

			var params = "";
			params += "fname="+ encodeURIComponent(objFromName.value);
			params += "&femail="+ encodeURIComponent(objFromEmail.value);
			params += "&tname="+ encodeURIComponent(objToName.value);
			params += "&temail="+ encodeURIComponent(objToEmail.value);
			params += "&m="+ encodeURIComponent(objMessage.value);

			oXMLHttp.args = params;


			var waitObj = new waitForIt();

			waitObj.waitFor = function() {
				return oXMLHttp.completed();
			}

			waitObj.whenDone = function() {
				if (oXMLHttp.xml != null) {
					if (oXML.loadXML(oXMLHttp.xml)) {
						var bStatus = (oXML.getText(oXML.selectSingleNode("sendtofriendxml/@status")) == "true");
						if (bStatus) {
							oResponse.innerHTML = "Uw wenslijstje wordt nu aan <fragment:email/> gezonden ".replace("<fragment:email/>", objToEmail.value);
							oResponse.style.display = "block";
							oFormDiv.style.display = "none";
						}
					}
				}
				toggleLoading(false, reqKey);			
			}

			toggleLoading(true, reqKey);
			oXMLHttp.load();
			waitObj.run();
			myRequests.add(reqKey, oXMLHttp, waitObj);
		}
	}
	return false;
}




function gotoCart() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringHouse"];
		if (objForm != null) {
			var loc = "idd333.asp";
			loc += "?state=4&houseid="+ objForm.houseid.value +"&startdate="+ objForm.yearmonth.value +"-"+ objForm.day.value +"&duration="+ objForm.duration.value +"&visitors="+ objForm.visitors.value;
			window.location = loc;
		}
	}
	return false;
}

function validateVisitors(obj) {
	if (ua["dom"]) {
		var rx = /^\d+$/;
		obj.value = (obj.value.match(rx) ? obj.value : 0);

		var objAdults = obj.form.adults;
		var objChildren = obj.form.children;

		var cAdults = parseInt(objAdults.value, 10);
		var cChildren = parseInt(objChildren.value, 10);

		if (obj.name == "adults") {
			if (cAdults > 0) {
				if (cAdults > objBooking.maxvisitors) {
					cAdults -= (cAdults - objBooking.maxvisitors);
				}
				if (cAdults + cChildren > objBooking.maxvisitors) {
					cAdults = objBooking.maxvisitors - cChildren;
				}
			}
		}
		else {
			if (cChildren > 0) {
				if (cChildren > objBooking.maxvisitors) {
					cChildren -= (cChildren - objBooking.maxvisitors);
				}
				if (cAdults + cChildren > objBooking.maxvisitors) {
					cChildren = objBooking.maxvisitors - cAdults;
				}
			}
		}

		if (cAdults + cChildren == 0) {
			cAdults = 1;
		}


		objAdults.value = cAdults;
		objChildren.value = cChildren;
		checkPriceWarning(cAdults + cChildren);
	
	}
}

function checkPriceWarning(v) {
	if (objBooking != null) {
		var objForm = document.forms["ferieringBooking"];

		if (objForm != null) {
			var dt = str2date(objForm.startdate.value);
			if (dt <= DT_OPTION) {

				var objWarning = document.getElementById("priceWarning");
				var objPeriodPrice = document.getElementById("periodPrice");

				var reqKey = "pricecheck";
				myRequests.remove(reqKey);

				var oXML = new XMLObject();
				var oXMLHttp = new XMLHttpRequestObject();	
				oXMLHttp.async = true;
				oXMLHttp.src = "/custom/site/booking/houseperiodsxml.asp?language_id=3";

				var params = "";
				params += "houseid=" + encodeURIComponent(objForm.houseid.value);
				params += "&duration="+ encodeURIComponent(objForm.duration.value);
				params += "&startdate="+ encodeURIComponent(objForm.startdate.value);
				params += "&visitors="+ encodeURIComponent(v);
				params += "&e=1"; 

				oXMLHttp.args = params;

				var waitObj = new waitForIt();
				waitObj.waitFor = function() {
					return oXMLHttp.completed();
				}

				waitObj.whenDone = function() {
					if (oXMLHttp.xml != null) {
						if (oXML.loadXML(oXMLHttp.xml)) {
							oError = oXML.selectSingleNode("//error");
							if (oError == null) {

								var objP = oXML.selectSingleNode("//p");
								if (objP != null) {
									var p = parseFloat(oXML.getText(objP.selectSingleNode("@t")));
									var c = oXML.getText(objP.selectSingleNode("@curr"));
							
									if (p != objBooking.price) {
										
										objWarning.innerHTML = "<div id=\"priceWarningContent\">"+ "Bemerken Sie bitte, der Preis in der Periode für <fragment:visitors/> Anzahl Person(en) ist <fragment:price/>.".replace("<fragment:visitors\/>", v).replace("<fragment:price\/>", formatPrice(p, 2, c)) +"</div>";		
										objWarning.style.display = "block";
										objBooking.price = p;
										objPeriodPrice.innerHTML = formatPrice(p, 2, c);

										refreshBookingTotal();
									}
									else {
										objWarning.innerHTML = "";
										objWarning.style.display = "none";
									}
								}
							}
						}
					}
				}

				oXMLHttp.load();
				waitObj.run();

				myRequests.add(reqKey, oXMLHttp, waitObj);
			}
		}
	}
}

function validateBooking(objForm) {
	if (ua["dom"]) {
		refreshBookingTotal();

		var res = true;
		var msg = "";

		trimInput(objForm.firstname);
		trimInput(objForm.lastname);
		trimInput(objForm.address);
		trimInput(objForm.zipcode),
		trimInput(objForm.city);
		trimInput(objForm.phone);
		trimEmailInput(objForm.email);
		trimInput(objForm.adults);
		trimInput(objForm.children);
		
		if (objForm.firstname.value == "") {
			res = false;
			msg += "- Voornaam ingeven \n"; 
		}
		if (objForm.lastname.value == "") {
			res = false;
			msg += "- Achternaam ingeven \n"; 
		}
		if (objForm.address.value == "") {
			res = false;
			msg += "- Adres ingeven \n"; 
		}
		if (objForm.zipcode.value == "") {
			res = false;
			msg += "- Postcode ingeven \n";  
		}
		if (objForm.city.value == "") {
			res = false;
			msg += "- Stad ingeven \n"; 
		}
		if (objForm.phone.value == "") {
			res = false;
			msg += "- Telefoonnummer ingeven \n"; 
		}

		if (parseInt(objForm.adults.value, 10) + parseInt(objForm.children.value, 10) == 0) {
			res = false;
			msg += "- Please enter at least 1 traveller\n"; 
		}
		else {
			if (parseInt(objForm.adults.value, 10) + parseInt(objForm.children.value, 10) > objBooking.maxvisitors) {
				res = false;
				msg += "- Too many travellers\n"; 
			}
		}

		if (!objForm.accept_terms.checked) {
			res = false;
			msg += "- You must accept the rental terms and conditions\n"; 
		}


		if (!res) {
			alert(msg);
		}

		return res;

	}
	return false;
}

function initBooking() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringBooking"];
		if (objForm != null) {
			objForm.reset();
		}
	}
}

function refreshBookingTotal() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringBooking"];
		if (objForm != null) {
			
			var objPets = objForm.pets;
			var objPetsFee = null;
			for (var i = 0; i < FR_PETFEES.length; i++) {
				objPetsFee = objForm.elements.namedItem("prod_"+ FR_PETFEES[i]);
				if (objPetsFee != null) {
					break;
				}
			}
	
			if (objPets != null) {
				if (objPetsFee != null) {
					objPetsFee.value = objPets.value;
				}
			}
		


			var startdate = str2date(objForm.startdate.value);

			var baseprice = objBooking.price;
			var total = baseprice;

			var rxProd = /^prod_(\d+)$/;
			var rxInt = /^\d+$/;
			var aInput = objForm.getElementsByTagName("INPUT");
			
			var objTotal = document.getElementById("house_total");

			var obj = null;
			var prod_id = 0;
			var prod_quantity = 0;
			var prod_price = 0;
			var prod_total = 0;
			var objProdTotal = null;

			for (var i = 0; i < aInput.length; i++) {
				obj = aInput[i];
				if (obj.id.match(rxProd)) {
					prod_id = obj.id.replace(rxProd, "$1");
					prod_price = objBooking.productprices[prod_id];
					objProdTotal = document.getElementById("prodtotal_"+ prod_id);

					switch (obj.type) {
						case "checkbox" :
						case "radio" :
							prod_quantity = (obj.checked ? 1 : 0);
							prod_total = prod_quantity * prod_price;

							total += prod_total;
							if (objProdTotal != null) {
								objProdTotal.innerHTML = formatPrice(prod_total, 2, FR_CURRENCYCODE);
							}
							break;

						case "text" :
							if (!obj.value.match(rxInt)) {
								obj.value = 0;
							}
							prod_quantity = parseInt(obj.value, 10);
							prod_total = prod_quantity * prod_price;
							total += prod_total;
							if (objProdTotal != null) {
								objProdTotal.innerHTML = formatPrice(prod_total, 2, FR_CURRENCYCODE);
							}
							break;

						case "hidden" :
							prod_quantity = parseInt(obj.value, 10);
							prod_total = prod_quantity * prod_price;
							total += prod_total;
							if (objProdTotal != null) {
								objProdTotal.innerHTML = formatPrice(prod_total, 2, FR_CURRENCYCODE);
							}
							break;
					}
				}
			}

			if (objTotal != null) {
				if (startdate <= DT_OPTION) {
					objTotal.innerHTML = formatPrice(total, 2, FR_CURRENCYCODE);
				}
			}


		}
	}
}

function toggleHouseThumb(src) {
	if (ua["dom"]) {
		var oBigThumb = document.getElementById("hMainImg");
		if (oBigThumb != null) {
			var oImg = new Image();
			oImg.src = src;

			var waitObj = new waitForIt();
			waitObj.waitFor = function() {
				return oImg.complete;
			}
			waitObj.whenDone = function() {
				oBigThumb.src = oImg.src;
				oBigThumb.width = 300;
				oBigThumb.height = (oImg.height / oImg.width) * 300;
			}

			waitObj.run();
		}
	}
	return false;
}


function checkHouseSearch(objForm) {
	if (ua["dom"]) {
		var rx = /^[a-z0-9]+$/;
		var houseId = objForm.houseid.value.trim();
		if (!houseId.match(rx)) {
			houseId = "";
		}
		objForm.houseid.value = houseId;

		if (houseId != "") {
			window.location = "/vakantiewoningen/vakantiewoning-"+ houseId +".htm";
		}
	}
	return false;
}


function checkSimpleSearch(objForm) {
	if (ua["dom"]) {
		var dtValidation = validateSearchDate(objForm, getDTStr(objForm));
		toggleDTWarning(dtValidation);
		if (dtValidation.state == DT_OK) {
			window.location = generateSimpleSearchUrl();		
		}
	}
}

function updateSimpleSearch() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSimpleSearch"];
		var dtValidation = validateSearchDate(objForm, getDTStr(objForm));
		toggleDTWarning(dtValidation);
	}
}


function initDirectionsOverlay(obj) {
	if (obj != null) {
		obj.style.display = "block";
	}
}

function openDirections(obj) {
	var objForm = obj.form;
	if (objForm != null) {
		var saddr = objForm.hdfFrom.value.trim();
		var daddr = (objForm.hdfOffice.checked ? objForm.hdfOTo.value +" to:" : "").trim() + objForm.hdfTo.value.trim();

		if (saddr != "") {
			window.open("http://maps.google.com?saddr="+ encodeURIComponent(saddr) +"&daddr="+ encodeURIComponent(daddr));
		}

	}
	return false;
}




/********* JH07052009 **********/


var current_loc;
current_loc = "";

function toggleLoc(id) {
	var aLocs = $(".inet_loc");
	
	aLocs.each(function() {
		var locImg = $(this).find("img.loc_img");
		var locTitle = $(this).find(".loc_title a:first");

		if ($(this).attr("id") == id) {
			locImg.attr("src", "/site/images/loc_hover.gif");
			locTitle.css("color", "#c9252b");
		}
		else {
			locImg.attr("src", "/site/images/loc.gif");
			locTitle.css("color", "#576d77");
		}

	});
}


function resetLocs() {
	var aLocs = $(".inet_loc");
	
	aLocs.each(function() {
		var locImg = $(this).find("img.loc_img");
		var locTitle = $(this).find(".loc_title a:first");	
		locImg.attr("src", "/site/images/loc.gif");
		locTitle.css("color", "#576d77");
	});
}


function setLoc(id) {
	if (ua["dom"]) {
		current_loc = id;

		var objForm = document.forms["ferieringSearch"];
		if (objForm != null) {
			if (id != "") {
				initField(objForm, "area", id);
				toggleLoc(id);
			}
			else {
				resetLocs();
			}
			
			var objQS = document.getElementById("quickSearchResults");
			if (objQS != null) {
				doFerieringQuickSearch2();
			}
		}
		
	}
	return false;
}

function returnFalseForSafari(obj) {
	if ($.browser.safari && ($.browser.version.substr(0, 1) == "3")) {
		$.each(obj, function() {
			this.onclick = function() { return false; }
		});
	}
}


function toggleCalendar2(obj) {
	var objForm = document.forms["ferieringSearch"];
	var objIframe = window.frames["calendarFrame"];
	var oIframe = document.getElementById("calendarFrame");
	if ((objIframe != null) && (objForm != null)) {
		var objDoc = (typeof objIframe.document != "undefined" ? objIframe.document : objIframe.contentDocument);
		var objBody = objDoc.body;

		if (displayCalendar) {
			displayCalendar = false;
			oIframe.style.top = "0px";
			oIframe.style.left = "-1000px";

		}
		else {
			displayCalendar = true;
			var legalDates = generateLegalDates(objForm.duration.value);

			objIframe.initializeCalendar( {
				flat : "calendarContainer",
				flatCallback : searchCBCalendar2,
				closeCallback : hideCalendar,
				date : str2date(objForm.yearmonth.value +"-"+ objForm.day.value),
				weekNumbers : true,
				showOthers : false,
				firstDay : 1,
				legalDays : (legalDates.length == 0 ? legalDays : []),
				legalDates : generateLegalDates(objForm.duration.value),
				illegalDates : generateIllegalDates(),
				duration : objForm.duration.value,
				range : [DT_MIN_YEAR, DT_MAX_YEAR],
				maxDate : DT_MAX_DATE
			});

			oIframe.style.height = objIframe.myHeight +"px";
			oIframe.style.width = objIframe.myWidth +"px";

			positionCalendar();
		}
	}
	return false;
}

function searchCBCalendar2(objCal) {
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		if (objCal.dateClicked) {
			
			var dtValidation = validateSearchDate(objForm, date2str(objCal.date))

			switch (dtValidation.state) {
				case DT_OK :
					
					if (dtValidation.dt <= DT_MAX_DATE) {
						setDateFields2(objForm, dtValidation.vdt);
						toggleCalendar();
					}
					else {
						dtValidation.state = DT_ERR_AFTERMAX;
						alert(getDTWarning(dtValidation));
					}
					break;

				default :
					alert(getDTWarning(dtValidation));
					break;
			}
		}
	}
}

function setDateFields2(objForm, dt) {
	var objYearMonth = objForm.yearmonth;
	var objDay = objForm.day;
	var objPrettyDate = objForm.prettydate;

	if ((objYearMonth != null) && (objDay != null)) {
		dt = date2str(dt);
		var y = dt.substr(0, 4);
		var m = dt.substr(5, 2);
		var d = dt.substr(8, 2);
		var ym = dt.substr(0, 7);
		var prettydate = d + "-"+ m +"-"+ y;
		var b = false;

		if (ym != objYearMonth.value) {
			b = true;
			objYearMonth.value = ym;
		}

		if (d != objDay.value) {
			b = true;
			objDay.value = d;
		}
		
		if (prettydate != objPrettyDate.value) {
			objPrettyDate.value = prettydate;
		}

		if (b) {
			var objQS = document.getElementById("quickSearchResults");
			if (objQS != null) {
				doFerieringQuickSearch2();
			}	
		}
	}
}


function doFerieringQuickSearch2() {
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		var dtValidation = validateSearchDate(objForm, getDTStr(objForm));
		toggleDTWarning(dtValidation);
		if (dtValidation.state == DT_OK) {
			checkFerieringQuickSearch2();
		}
	}
}

function checkFerieringQuickSearch2() {
	
	if (ua["dom"]) {
		var objForm = document.forms["ferieringSearch"];
		if (objForm != null) {
			if (arguments.length == 0) {
				objForm.page.value = 1;
			}

			var reqKey = "ferieringsearch";
			myRequests.remove(reqKey);

			var oXML = new XMLObject();
			var oXMLHttp = new XMLHttpRequestObject();
			oXMLHttp.async = true;
			oXMLHttp.src = "/custom/site/booking/searchxml.asp?language_id=3";

			var params = "";
			params += "duration="+ encodeURIComponent(objForm.duration.value);

			params += "&startdate="+ encodeURIComponent(objForm.yearmonth.value +"-"+ objForm.day.value);

			params += "&visitors="+ encodeURIComponent(objForm.visitors.value);
			params += "&bedrooms="+ encodeURIComponent(objForm.bedrooms.value);
			params += "&pets="+ encodeURIComponent(objForm.pets.value);
			params += "&area="+ encodeURIComponent(objForm.area.value);
			params += "&pagesize="+ 10;
			params += "&page="+ encodeURIComponent(objForm.page.value);

			if (objForm.aproxydate != null) {
				params += (objForm.aproxydate.checked ? "" : "&aproxydate=0");
			}


			
			var facRx
			facRx = /^fac_.+$/;
			for (var i = 0; i < objForm.elements.length; i++) {
				var objItem = objForm.elements.item(i)
				if (objItem.name.match(facRx)) {
					switch(objItem.type) {
						case "checkbox" :
						case "radio" :
							if (objItem.checked) {
								params += "&"+ objItem.name +"="+ encodeURIComponent(objItem.value);
							}
							break;
						default :
							params += "&"+ objItem.name +"="+ encodeURIComponent(objItem.value);
							break;
					}
				}
			}

			params += "&qs=1"; 

			

			oXMLHttp.args = params;

			var waitObj = new waitForIt();

			waitObj.waitFor = function() {
				return oXMLHttp.completed();
			}

			waitObj.whenDone = function() {
				toggleQuickSearchLoading(false);
				toggleCloseActive(true);
				if (oXMLHttp.xml != null) {
					if (oXML.loadXML(oXMLHttp.xml)) {
						oError = oXML.selectSingleNode("//error");
						if (oError == null) {
							parseFerieringQuickSearchData2(oXML);
						}
					}
				}
				toggleResults(true, 1500);
			}

			toggleQuickSearchLoading(true);
			toggleCloseActive(false);
			toggleOverlay(true, 500);
			oXMLHttp.load();
			waitObj.run();

			myRequests.add(reqKey, oXMLHttp, waitObj);
			updateFerieringSearchCookie("");
		}
	}
	
	return false;
}



function parseFerieringQuickSearchData2(oXML) {
	var totalItems = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@totalItems")), 10);
	var firstItem = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@firstItem")), 10);
	var itemCount = parseInt(oXML.getText(oXML.selectSingleNode("searchxml/@itemCount")), 10);

	var objForm = document.forms["ferieringSearch"];
	var page = parseInt(objForm.page.value, 10);
	var pageSize = 10;

	var objPrev = document.getElementById("qsPrev");
	var objNext = document.getElementById("qsNext");
	var objTotal = document.getElementById("qsTotal");
	var objDetails = document.getElementById("qsDetails");
	var objPage = document.getElementById("qsPage");
	var objData = document.getElementById("quickSearchResultsData");
	//var objTemp = document.getElementById("quickSearchResultsTemp");
	var objBBar = document.getElementById("quickSearchResultsBarBottom");

	if (totalItems > 0) {
		var maxPerRow = 5;


		if (page > 1) {
			objPrev.href = generateSearchUrl(page - 1)
			objPrev.style.visibility = "visible";		
		}
		else {
			objPrev.style.visibility = "hidden";
			objPrev.href = "#";
		}

		if (page < Math.ceil(totalItems / pageSize)) {
			objNext.href = generateSearchUrl(page + 1);
			objNext.style.visibility = "visible";
		}
		else {
			objNext.style.visibility = "hidden";
			objNext.href = "#";
		}

		objTotal.style.visibility = "visible";
		objPage.style.visibility = "visible";

		objTotal.innerHTML = totalItems + (totalItems > 1 ? " vakantiewoningen" : " vakantiewoning");

		objPage.innerHTML = (totalItems > pageSize ? "Pagina "+ page +"/"+ Math.ceil(totalItems / pageSize) : "");

		objDetails.innerHTML = "<a href=\""+ generateSearchUrl(1) +"\">Erweiterte Suchergebnisse zeigen</a>";

		var objTable = document.createElement("TABLE");
		objTable.className = "items";
		objTable.setAttribute("border", "0");
		objTable.setAttribute("cellpadding", "0");
		objTable.setAttribute("cellspacing", "0");

		var objTBody = document.createElement("TBODY");
		objTable.appendChild(objTBody);

		var houseNodes = oXML.selectNodes("//house");

		var numRows = Math.ceil(itemCount / maxPerRow);
		var rowNum = 0;

		objTR = objTBody.insertRow(objTBody.rows.length);	
		var j = 1;


		var hAddress1 = "";
		var hArea = "";
		var hId = "";

		for (var i = 0; i < houseNodes.length; i++) {
			houseNode = houseNodes[i];
			houseUrl = generateHouseUrl(houseNode);

			hAddress1 = oXML.getText(houseNode.selectSingleNode("address1"));
			hArea = oXML.getText(houseNode.selectSingleNode("area"));
			hId = oXML.getText(houseNode.selectSingleNode("@id"));


			rowNum = Math.ceil(j / maxPerRow);

			if ((j % maxPerRow) == 1) {
				if (j == 1) {
					objTR.className = "first";
				}
				else if (rowNum == numRows) {
					objTR.className = "last";
				}
			}

			objTD = objTR.insertCell(objTR.cells.length);
			
			if ((j % maxPerRow) == 1) {
				objTD.className = "first";
			}
			else if (((j % maxPerRow) == 0) || (j == itemCount)) {
				objTD.className = "last";
			}
		
			oItemDiv = document.createElement("DIV");
			oItemDiv.className = "item";

			
			oImgDiv = document.createElement("DIV");
			oImgDiv.className = "img";

			imgNode = houseNode.selectSingleNode("image");

			if (imgNode != null) {
				objA = document.createElement("A");
				objA.href = houseUrl;
				objA.title = "Vakantiewoning "+ hId + " - Denemarken";
				objA.innerHTML = "<img src=\""+ oXML.getText(imgNode.selectSingleNode("@src")) +"\" width=\"160\" alt=\"Vakantiewoning "+ hId +" - Denemarken\" />";
				oImgDiv.appendChild(objA);
			}

			oItemDiv.appendChild(oImgDiv);

			
			
			oAddressDiv = document.createElement("DIV");
			oAddressDiv.className = "address";
			oH2 = document.createElement("H2");
			oA = document.createElement("A");

			oA.href = houseUrl;

			oH2.innerHTML = "<a href=\""+ oA.href +"\" title=\"Vakantiewoning "+ hAddress1 +" - "+ hArea +" - Denemarken\"><span>"+ hAddress1 +"<span> <span>"+ hArea +"</span></a>";
			oAddressDiv.appendChild(oH2);
			oItemDiv.appendChild(oAddressDiv);

			
			price = parseFloat(oXML.getText(houseNode.selectSingleNode("period/@price")));
			discount = parseFloat(oXML.getText(houseNode.selectSingleNode("period/@discount")));
			total = parseFloat(oXML.getText(houseNode.selectSingleNode("period/@total")));
			curr = oXML.getText(houseNode.selectSingleNode("period/@curr"));

			if (discount > 0) {
				addClassName(objTD, "discount");
			}



			bMemo = (oXML.getText(houseNode.selectSingleNode("@memo")) == "true");
			lId = parseInt(oXML.getText(houseNode.selectSingleNode("@lId")), 10);
			dtArr = oXML.getText(houseNode.selectSingleNode("period/@arrival"));

			oPriceBeforeDiv = document.createElement("DIV");
			oPriceBeforeDiv.className = "priceBefore";
			oPriceBeforeDiv.innerHTML = (str2date(dtArr) > DT_OPTION ? "&nbsp;" : (discount > 0 ? "<del>"+ formatPrice(price, 2, curr) +"</del>" : "&nbsp;"));
			oItemDiv.appendChild(oPriceBeforeDiv);

			oTotalPriceDiv = document.createElement("DIV");
			oTotalPriceDiv.className = "price";
			oTotalPriceDiv.innerHTML = (str2date(dtArr) > DT_OPTION ? "OPTION" : formatPrice(total, 2, curr));

			oItemDiv.appendChild(oTotalPriceDiv);

			
			maxVisitors = oXML.getText(houseNode.selectSingleNode("@maxvisitors"))
			var oMaxVisitorsDiv = document.createElement("DIV");
			oMaxVisitorsDiv.className = "capacity";
			oMaxVisitorsDiv.innerHTML = "Max. "+ maxVisitors +" Personen";
			oItemDiv.appendChild(oMaxVisitorsDiv);
			

			
			m2 = oXML.getText(houseNode.selectSingleNode("@m2"));
			var oM2Div = document.createElement("DIV");
			oM2Div.className = "m2";
			oM2Div.innerHTML = m2 +"m²";
			oItemDiv.appendChild(oM2Div);

			if (lId > 0) {
				oMemoDiv = document.createElement("DIV");
				oMemoA = document.createElement("A");
				oMemoA.href = "#";
				setMemoClick(!bMemo, oMemoA, lId, dtArr, objForm.duration.value);
				oMemoA.className = "memo "+ (bMemo ? "remove" : "add");
				oMemoA.innerHTML = (bMemo ? "Entfernen" : "Keuzelijst");

				oMemoDiv.appendChild(oMemoA);
				oItemDiv.appendChild(oMemoDiv);
			}

			objTD.appendChild(oItemDiv);

			if (((j % maxPerRow) == 0) || (j == itemCount)) {
				objTR = objTBody.insertRow(objTBody.rows.length);
			}

			j += 1;
		}
		/*if (objData.innerHTML != "") {
			objTemp.innerHTML = "";
			objTemp.appendChild(objTable);
			var h_before = $(objData).height();
			var h_after = $(objTemp).height();
			$(objData).css("height", h_before+"px");
			objData.innerHTML = "";
			$(objData).animate({height: h_after+"px"}, 500, "swing");
			objData.appendChild(objTable);
			objTemp.innerHTML = "";

		}
		else {
			objData.innerHTML = "";
			objData.appendChild(objTable);
		}*/
		objData.innerHTML = "";
		objData.appendChild(objTable);
		objBBar.style.display = "block";
	}
	else {
		objPrev.style.visibility = "hidden";
		objNext.style.visibility = "hidden";
		objTotal.innerHTML = ""
		objTotal.style.visibility = "visible";
		objBBar.style.display = "block";
		objPage.innerHTML = "";
		objData.innerHTML = "<br/><h2>Bedaure. Kein Ferienhaus entsprach Ihren Suchkriterien.</h2>";
		objDetails.innerHTML = "";
		//objData.style.display = "none";
		//objData.style.height = "auto";
		//objBBar.style.display = "none";
	}
}



function decQSPage2() {
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		var p = parseInt(objForm.page.value, 10);
		p--;
		if (p < 1) {
			p = 1;		
		}
		objForm.page.value = p;
		checkFerieringQuickSearch2(true);
	}
	return false;
}

function incQSPage2() {
	var objForm = document.forms["ferieringSearch"];
	if (objForm != null) {
		var p = parseInt(objForm.page.value, 10);
		p++;
		objForm.page.value = p;
		checkFerieringQuickSearch2(true);
	}
	return false;
}


function toggleOverlay(b, speed) {
	var objOverlay = $("#inet_fp_altSearch");
	if (b) {
		if (objOverlay.css("display") == "none") {
			objOverlay.show("slide", {direction: "up"}, speed);
		}
	}
	else {
		if (objOverlay.css("display") == "block") {
			objOverlay.hide("slide", {direction: "up"}, speed, clearResults);
		}
	}
}

function toggleResults(b, speed) {
	var objResults = $("#quickSearchResults");
	var objResultsData = $("#quickSearchResultsData");
	
	if (b) {
		if (objResultsData.css("display") == "none" && objResultsData.html() != "") {
			objResultsData.css("display", "block");
			objResults.show("slide", {direction: "up"}, speed);
		}
	}
	else {
		objResults.hide("slide", {direction: "up"}, speed);
	}
}

function toggleImg(b) {
	var objImg = $("#inet_front_flash");
	
	if (b) {
		objImg.css("display", "block");
	}
	else {
		objImg.css("display", "none");
	}
}

function toggleCloseActive(b) {
	var aClose = $("span.qsClose a");
	if (b) {
		aClose.bind("click", function() {
			toggleOverlay(false, 1500);
			return false;
		});
	}
	else {
		aClose.unbind();
		aClose.bind("click", function() {
			return false;
		});
	}

	returnFalseForSafari(aClose);
}

function clearResults() {
	var objData = document.getElementById("quickSearchResultsData");
	var objPrev = document.getElementById("qsPrev");
	var objNext = document.getElementById("qsNext");
	var objTotal = document.getElementById("qsTotal");
	var objPage = document.getElementById("qsPage");
	var objBBar = document.getElementById("quickSearchResultsBarBottom");
	
	objPrev.style.visibility = "hidden";
	objNext.style.visibility = "hidden";
	objTotal.innerHTML = "&nbsp;";
	objTotal.style.visibility = "hidden";
	objPage.innerHTML = "";
	objData.innerHTML = "";
	objData.style.display = "none";
	//objData.style.height = "auto";
	objBBar.style.display = "none";
}

