// ============================== begin: Ajax functions. ==============================
if (!window.XMLHttpRequest){
    window.XMLHttpRequest = function(){
        var types = ['Microsoft.XMLHTTP',
                'MSXML2.XMLHTTP.5.0',
                'MSXML2.XMLHTTP.4.0',
                'MSXML2.XMLHTTP.3.0',
                'MSXML2.XMLHTTP' ];
		
        for(var i = 0; i < types.length; i++){ 
            try
			{
                return new ActiveXObject(types[i]);
            }
            catch(e) {}
        }
		
        return undefined;
    }
}

var req = [];
// ============================== end: Ajax functions. ==============================


//
// Index search form functions
//
function callMeNow(callButton, number, message, messageError, txtEnkele, txtMinuten) {
	numberEl = document.getElementById(number);
	if(numberEl == null) return;

	numberElRegexp = new RegExp('0[0-9]{9}');
	if(!numberEl.value.match(numberElRegexp)) {
		alert(messageError);
		return false;
	}

	callButton.disabled = true;
	
	var reqCnt = req.length;
	req[reqCnt] = new XMLHttpRequest();

	req[reqCnt].open("POST", "/ajax_call.php?" + number + "=" + numberEl.value, true);
	req[reqCnt].onreadystatechange = function(){
		if(req[reqCnt].readyState==4 || req[reqCnt].readyState=="complete"){
			result = req[reqCnt].responseXML.documentElement.getElementsByTagName('result')[0].firstChild ? req[reqCnt].responseXML.documentElement.getElementsByTagName('result')[0].firstChild.nodeValue : 0;
			resultMessage = req[reqCnt].responseXML.documentElement.getElementsByTagName('resultMessage')[0].firstChild ? req[reqCnt].responseXML.documentElement.getElementsByTagName('resultMessage')[0].firstChild.nodeValue : '';
			
			if(result < 0) {
				alert(messageError);
				callButton.disabled = false;
				
				return false;
			}
			
			if(resultMessage == 0) {
				message = message.replace('%s', txtEnkele);
			} else {
				message = message.replace('%s', (resultMessage * 5) + " " + txtMinuten);
			}
			
			var elCallMeNow = document.getElementById('callmenow');
			elCallMeNow.innerHTML = message;
			
			return true
		}
	}
	req[reqCnt].send(null);
}


//
// Index search form functions
//
function updateArrivalPeriod(selCountry, selPeriod, selMonth, sel, initial) {
	var selCountryEl = document.getElementById(selCountry);
	if(selCountryEl == null) return;

	var selPeriodEl = document.getElementById(selPeriod);
	if(selPeriodEl == null) return;

	var selMonthEl = document.getElementById(selMonth);
	if(selMonthEl == null) return;

	var selEl = document.getElementById(sel);
	if(selEl == null) return;

	var selPeriodElValue = selPeriodEl.value;
	if(selMonthEl.value == "") {
		updateArrivalDate(selCountry, selPeriod, selMonth, sel);
		return;
	}

	selPeriodEl.disabled = true;
	selPeriodEl.options.length = 0;
	selPeriodEl.options.add(new Option(lBusy, ''));
	addClass(selPeriodEl, 'busy');
	
	var reqCnt = req.length;
	req[reqCnt] = new XMLHttpRequest();

	req[reqCnt].open("GET", "/ajax_vrijbezet.php?" + selCountry + "=" + selCountryEl.value + "&view=period", true);
	req[reqCnt].onreadystatechange = function(){
		if(req[reqCnt].readyState==4 || req[reqCnt].readyState=="complete"){
			//var innerHTML = '<option>' + lSelectPeriod + '</option>'; // Fix for Safari 3.0
			selPeriodEl.options.length = 0;
			selPeriodEl.options.add(new Option(lSelectPeriod, ''));

			var elements = req[reqCnt].responseXML.documentElement.getElementsByTagName('option');
			for(var i = 0; i < elements.length; i++){
				id = elements[i].getAttribute('value');
				title = elements[i].firstChild.nodeValue;
				
				//innerHTML += '<option value="' + id + '">' + title + '</option>';
				var option = new Option(title, id);
				selPeriodEl.options.add(option);
			}
			
			//selPeriodEl.innerHTML = innerHTML;
			
			selPeriodEl.disabled = false;
			removeClass(selPeriodEl, 'busy');

			selPeriodEl.value = ( initial ) ? valPeriod : selPeriodElValue;

			if(initial === true || (selMonthEl.value != "" && selPeriodEl.value != "") ) {
				updateArrivalDate(selCountry, selPeriod, selMonth, sel);
			}
		}
	}
	req[reqCnt].send(null);
}

function updateArrivalDate(selCountry, selPeriod, selMonth, sel) {
	var selCountryEl = document.getElementById(selCountry);
	if(selCountryEl == null) return;

	var selPeriodEl = document.getElementById(selPeriod);
	if(selPeriodEl == null) return;

	var selMonthEl = document.getElementById(selMonth);
	if(selMonthEl == null) return;

	var selEl = document.getElementById(sel);
	if(selEl == null) return;
	
	if ( selMonthEl.value == "" ) {
		selPeriodEl.disabled = true;
		selPeriodEl.options.length = 0;
		selPeriodEl.options.add(new Option(lSelectFirstMonth, ''));

		selEl.disabled = true;
		selEl.options.length = 0;
		selEl.options.add(new Option(lSelectFirstMonthPeriod, ''));
		
		return;
	} else if ( selMonthEl.value != "" && selPeriodEl.value == "" ) {
		updateArrivalPeriod(selCountry, selPeriod, selMonth, sel);
		
		selEl.disabled = true;
		selEl.options.length = 0;
		selEl.options.add(new Option(lSelectFirstPeriod, ''));
		
		return;
	}
	
	var selElText;
	if(selEl.selectedIndex != -1)
		selElText = selEl.options[selEl.selectedIndex].text;

	selEl.disabled = true;
	selEl.options.length = 0;
	selEl.options.add(new Option(lBusy, ''));
	addClass(selEl, 'busy');

	var reqCnt = req.length;
	req[reqCnt] = new XMLHttpRequest();

	req[reqCnt].open("GET", "/ajax_vrijbezet.php?" + selCountry + "=" + selCountryEl.value + "&" + selPeriod + "=" + selPeriodEl.value + "&" + selMonth + "=" + selMonthEl.value, true);
	req[reqCnt].onreadystatechange = function(){
		if(req[reqCnt].readyState==4 || req[reqCnt].readyState=="complete"){
			//var innerHTML = '<option>' + lSelectArrivalDate + '</option>'; // Fix for Safari 3.0
			selEl.options.length = 0;
			selEl.options.add(new Option(lSelectArrivalDate, ''));

			var elements = req[reqCnt].responseXML.documentElement.getElementsByTagName('option');
			if(elements.length == 0) {
				addClass(selEl, 'inactive');
				selEl.options.length = 0;
				selEl.options.add(new Option(lEmptyArrivalDate, ""));
			} else {
				removeClass(selEl, 'inactive');

				for(var i = 0; i < elements.length; i++){
					id = elements[i].getAttribute('value');
					title = lArrivalDateAround + " " + elements[i].firstChild.nodeValue;
	
					//innerHTML += '<option value="' + id + '">' + title + '</option>';
					var option = new Option(title, id);
					selEl.options.add(option);
				}
				
				//selEl.innerHTML = innerHTML;
			}
			
			selEl.disabled = false;
			removeClass(selEl, 'busy');

			var i = selEl.options.length;
			while(i--) {
				if(selEl.options[i].text == selElText)
					selEl.selectedIndex = i;
			}
		}
	}
	req[reqCnt].send(null);
}

function updateCalendar(secondid, calStart, calNumOfMonths, busy, book, intro, introEmpty, langPrev, langNext) {
	var el = document.getElementById('calendar');
	if(el == null) return;
	
	el.innerHTML = '<span class="busy">' + busy + '</span>';

	var reqCnt = req.length;
	req[reqCnt] = new XMLHttpRequest();

	req[reqCnt].open("GET", "/ajax_calendar.php?fh_secondid=" + secondid + "&calStart=" + calStart + "&calNumOfMonths=" + calNumOfMonths + "&busy=" + busy+ "&book=" + book + "&intro=" + intro + "&introEmpty=" + introEmpty+ "&langPrev=" + langPrev + "&langNext=" + langNext, true);
	req[reqCnt].onreadystatechange = function(){
		if(req[reqCnt].readyState==4 || req[reqCnt].readyState=="complete"){	
			el.innerHTML = req[reqCnt].responseText;
		}
	}
	req[reqCnt].send(null);	
}

var updateAvailHash = false;

function updateAvail(secondid, time, timestamp, busy, book, intro, introEmpty, manual, bel_text, abs_link, new_booking) {
	if (bel_text == null) {
	    bel_text = '';
	}

	var el = document.getElementById('avail');
	if(el == null) return;

	elBody = firstChild(el);
	
	var elIntro = document.getElementById('availIntro');
	if(elIntro == null) return;

	document.getElementById('availInfo').style.display = 'none';

	var elInfoBijkomend = document.getElementById('availInfoBijkomend');
	if(elInfoBijkomend == null) return;

	// Display intro message
	elIntro.innerHTML = intro + ": <strong>" + time + "</strong>.";

	// Display busy message
	var nodes = elBody.childNodes;
	var nodesLength = i = nodes.length;
	while(i--) {
		if(isIgnorable(nodes[i]))
			elBody.removeChild(nodes[i]);
	}

	while(elBody.childNodes.length > 2) {
		elBody.removeChild(elBody.lastChild);
	}
	updateAvailBusy(elBody, busy);

	if(manual === undefined)
		manual = false;
		
	var reqCnt = req.length;
	req[reqCnt] = new XMLHttpRequest();

	req[reqCnt].open("GET", "/ajax_detail.php?fh_secondid=" + secondid + "&timestamp=" + timestamp + "&manual=" + manual, true);
	req[reqCnt].onreadystatechange = function(){
		if(req[reqCnt].readyState==4 || req[reqCnt].readyState=="complete"){
			while(elBody.childNodes.length > 2) {
				elBody.removeChild(elBody.lastChild);
			}

			if(req[reqCnt].responseXML.documentElement.getElementsByTagName('bijkomendekosten').length > 0) {
				elInfoBijkomend.innerHTML = req[reqCnt].responseXML.documentElement.getElementsByTagName('bijkomendekosten')[0].firstChild.nodeValue;
			}
			
			var periods = req[reqCnt].responseXML.documentElement.getElementsByTagName('period');
			if(periods.length == 0)
				return;
			
			var period, periodTitle;
			var avails, avail, availCheckbox, availStart, availEnd, selected;
			var availCount = 0;
			var persons, person, personPrice, personPromo, personPromoPrice;
			var personsRow = false;
			
			for(var i = 0; i < periods.length; i++) {
				period = periods[i];
				periodTitle = period.getElementsByTagName('title')[0].firstChild.nodeValue;
				avails = period.getElementsByTagName('availability');
				
				if(avails.length == 0)
					continue;
				
				for(var j = 0; j < avails.length; j++) {
					availCount++;
					avail = avails[j];
					availCheckbox = avail.getElementsByTagName('checkbox')[0].firstChild.nodeValue;
					availStart = avail.getElementsByTagName('start')[0].firstChild.nodeValue;
					availEnd = avail.getElementsByTagName('end')[0].firstChild.nodeValue;
					selected = avail.getAttribute('selected');
					personPrice = new Array();
					personPromo = new Array();
					personPromoPrice = new Array();
					
					persons = avail.getElementsByTagName('person');
					for(var k = 0; k < persons.length; k++) {
						person = persons[k];
						personPrice.push(person.getElementsByTagName('price')[0].firstChild ? person.getElementsByTagName('price')[0].firstChild.nodeValue : '');
						personPromo.push(person.getElementsByTagName('promo')[0].firstChild ? person.getElementsByTagName('promo')[0].firstChild.nodeValue : '');
						personPromoPrice.push(person.getElementsByTagName('promoprice')[0].firstChild ? person.getElementsByTagName('promoprice')[0].firstChild.nodeValue : '');
					}
					
					if(j > 0) periodTitle = "";

					updateAvailRow(elBody, secondid, periodTitle, availStart, availEnd, personPrice, personPromo, personPromoPrice, availCheckbox, book, selected,bel_text,abs_link, new_booking);
				}
			}
			
			if(availCount == 0) {
				updateAvailBusy(elBody, introEmpty);
			}
			
			updateAvailPersons('vbpless', vbpless, timestamp);
			updateAvailPersons('vbpmore', vbpmore, timestamp);
			
			if(updateAvailHash == false) {
				updateAvailHash = true;
				window.location.hash = "availA";
			}
			
			tableFadeBg('avail', '#EB5F06', 30);
		}
	}
	req[reqCnt].send(null);		
}

function updateAvailBusy(tableBody, busy) {
	var tableRow = document.createElement('tr');
	tableBody.appendChild(tableRow);

	var tableCol1 = document.createElement('td');
	tableCol1.innerHTML = busy;
	tableCol1.setAttribute('class', 'busy');
	tableCol1.setAttribute('className', 'busy');	
	tableCol1.setAttribute('colSpan', '4');	
	tableRow.appendChild(tableCol1);
}

function updateAvailRow(tableBody, secondid, periodTitle, start, end, price, promo, promoprice, checkbox, book, selected,bel_text,abs_link, new_booking) {
	var tableRow = document.createElement('tr');
	if(periodTitle != "") {
		tableRow.setAttribute('class', 'head' + (selected != null ? " selected" : ""));
		tableRow.setAttribute('className', 'head' + (selected != null ? " selected" : ""));		
	} else if (selected != null) {
		tableRow.setAttribute('class', 'selected');
		tableRow.setAttribute('className', 'selected');		
	}
	tableBody.appendChild(tableRow);

	var tableCol1 = document.createElement('td');
	tableCol1.innerHTML = periodTitle;
	tableCol1.setAttribute('class', 'period');
	tableCol1.setAttribute('className', 'period');	
	tableRow.appendChild(tableCol1);

	var tableCol2 = document.createElement('td');
	tableCol2.innerHTML = start + " - " + end;
	tableCol2.setAttribute('class', 'perioddate');	
	tableCol2.setAttribute('className', 'perioddate');		
	tableRow.appendChild(tableCol2);

	tableRow.appendChild(document.createElement('td'));

	var vbp_end_index = vbp_start_index + 3;
	if(vbp_end_index > price.length)
		vbp_end_index = price.length;

	for(var i = vbp_start_index; i < vbp_end_index; i++) {
		if(promoprice[i] > 0) {
			priceText = '<span class="strike">' + price[i] + '</span> <span class="special">' + promoprice[i] + "</span>";
		} else {
			priceText =  price[i];
		}
		
		if(promo[i] == 1) {
			priceText += ' <img src="http://www.belvilla.nl/images/verwijzing_excl.gif" alt="">';
			document.getElementById('availInfo').style.display = '';
		}
	
		var tableCol3 = document.createElement('td');
		tableCol3.innerHTML = priceText;
		tableCol3.setAttribute('class', 'price');
		tableCol3.setAttribute('className', 'price');
		tableRow.appendChild(tableCol3);
	}
	
	tableRow.appendChild(document.createElement('td'));	
	
	var tableCol4 = document.createElement('td');
	if ( periodTitle == "Veiling" ) {
		tableCol4.innerHTML = '<form method="post" action="veiling.php"><input type="submit" class="button inline" value="Bekijk veiling"></form>';
	} else {
		if(new_booking == "yes"){
		  tableCol4.innerHTML = '<form method="post" action="'+abs_link+'/chalets/book_new.php?home_id=' + secondid + '&fh_book_period=' + checkbox + '" onClick="_hbLink(\'boeken\');"><input type="submit" class="button inline" value="' + book + '"></form>';
		}
		else if(new_booking == "no") {
		  tableCol4.innerHTML = '<form method="post" action="'+abs_link+'/chalets/book.php?home_id=' + secondid + '&fh_book_period=' + checkbox + '" onClick="_hbLink(\'boeken\');"><input type="submit" class="button inline" value="' + book + '"></form>';
		}
		else if(new_booking == "yes_staging")
		{
    		  tableCol4.innerHTML = '<form method="post" action="'+abs_link+'/book_new.php?home_id=' + secondid + '&fh_book_period=' + checkbox + '" onClick="_hbLink(\'boeken\');"><input type="submit" class="button inline" value="' + book + '"></form>';
        	}
		
	}
	tableCol4.setAttribute('class', 'book');
	tableCol4.setAttribute('className', 'book');	
	tableRow.appendChild(tableCol4);
	
	var tableCol5 = document.createElement('td');
	tableCol5.innerHTML = bel_text;
	tableCol5.setAttribute('class', 'book_bel_text');	
	tableCol5.setAttribute('className', 'book_bel_text');		
	tableRow.appendChild(tableCol5);
}

function updateAvailPersons(vbpId, vbp, timestamp) {
	var el = document.getElementById(vbpId);
	if ( el == null ) return;
	
	el.setAttribute('href', vbp + "timestamp=" + timestamp);
}


/**
 * Display busy box
 */
function displayBusy(el, textTitle, text, busyImage) {
	el.style.position = 'relative';

	var content = ""
	if(busyImage) content += '<img src="/styles/images/lightbox/loading.gif" width="32" height="32">';
	if(busyImage) content += '<div class="imgText">';
	if(textTitle) content += '<strong>' + textTitle + '</strong><br>';
	if(text) content += text;
	if(busyImage) content += '</div>';
	
	var elBusyContainer = document.createElement('DIV');
	elBusyContainer.className = 'busyContainer';
	elBusyContainer.style.width = (el.offsetWidth) + 'px';
	elBusyContainer.style.height = (el.offsetHeight) + 'px';
	
	var elBusy = document.createElement('DIV');
	elBusy.className = 'busy';

	elBusy.innerHTML = content;
	el.appendChild(elBusy);
	el.appendChild(elBusyContainer);

	elBusy.style.left = ((elBusyContainer.offsetWidth - elBusy.offsetWidth) / 2) + 'px';
	elBusy.style.top = ((elBusyContainer.offsetHeight - elBusy.offsetHeight) / 2) + 'px';

	new Effect.Appear(elBusyContainer, { duration: 0.2, from: 0.0, to: 0.25 });
	
	
	
	return new Array(elBusyContainer, elBusy);
}

/**
 * Hide busy box (takes the returned value from displayBusy as argument)
 */
function hideBusy(els) {
	new Effect.Appear(els[0], { duration: 0.2, from: 0.25, to: 0 });
	
	var i = els.length;
	while(i--) {
		els[i].parentNode.removeChild(els[i]);
	}
}

var busyImage = new Image();
busyImage.src = '/styles/images/lightbox/loading.gif';
