//
// JavaScript functies voor zoekpagina.
//
// Requirements: cookies.js, json.js
//

/**
 * Voordat het form verzonden wordt, de formvelden opslaan.
 * http://www.phpied.com/json-javascript-cookies/
 */

var prefs = {

	data: {},

	load: function (name) {

		var value = getCookie(name);
		if (value) {
			this.data = value.parseJSON();
			return true;
		}
		return false;
	},

	save: function (name, expires, path) {
		var d = expires || new Date(2020, 02, 02);
		var p = path || '/';
		setCookie(name, this.data.toJSONString(), expires, path);
	}
}


function saveFormValues() {

	if (prefs) {

		// Geselecteerde categorien omzetten naar een array
		var lCategorieElements = document.getElementById('zoeken').categorie
		var lCategories;

		// Als er meerdere categorien zijn
		if (lCategorieElements && lCategorieElements.length) {
			lCategories = new Array(lCategorieElements.length);
			var j = 0;
			for (var i = 0; i < lCategorieElements.length; i++) {
				if (lCategorieElements[i].checked) {
					lCategories[j] = lCategorieElements[i].value;
					j++;
				}
			}
		}
		// Als er een enkele categorie of geen categorie is
		else if (lCategorieElements && lCategorieElements.value && lCategorieElements.checked) {
			lCategories = new Array(1);
			lCategories[0] = lCategorieElements.value;
		} else {
			lCategories = new Array(0);
		}

		prefs.data.status = document.getElementById('status').value;
		prefs.data.vraagprijsvan = document.getElementById('vraagprijsVan').value;
		prefs.data.vraagprijstot = document.getElementById('vraagprijsTot').value;
		prefs.data.radius = document.getElementById('radius').value;
		prefs.data.citypostalcode = document.getElementById('citypostalcode').value;
		prefs.data.postalcode = document.getElementById('postalcode').value;

		prefs.data.objecttype = document.getElementById('objecttype').value;
		prefs.data.land = document.getElementById('land').value;
		prefs.data.extendedsearchenabled = document.getElementById('extendedsearchenabled').value;

		// extendedsearch
		prefs.data.categories = lCategories;
		prefs.data.aantalkamersoptie = document.getElementById('aantalkamersOptie').value;
		prefs.data.aantalkamers = document.getElementById('aantalkamers').value;
		prefs.data.perceeloppervlakteoptie = document.getElementById('perceeloppervlakteOptie').value;
		prefs.data.perceeloppervlakte = document.getElementById('perceeloppervlakte').value;

		// Opgeslagen waarden zijn 14 dagen geldig
		var lDate = new Date();
		lDate.setDate(lDate.getDate() + 14);

		prefs.save("searchPage", lDate, "/");
	}
}


/**
 * Voor het verzenden de inhoud van de formvelden opslaan.
 */
function loadFormValues() {

	if (prefs && prefs.load("searchPage")) {

		if (!prefs.data || prefs.data.length == 0) {
			return;
		}

		document.getElementById('status').value = (prefs.data.status) ? prefs.data.status : '';
		document.getElementById('vraagprijsVan').value = (prefs.data.vraagprijsvan) ? prefs.data.vraagprijsvan : '';
		document.getElementById('vraagprijsTot').value = (prefs.data.vraagprijstot) ? prefs.data.vraagprijstot : '';
		document.getElementById('radius').value = (prefs.data.radius) ? prefs.data.radius : '';
		document.getElementById('citypostalcode').value = (prefs.data.citypostalcode) ? prefs.data.citypostalcode : '';
		document.getElementById('postalcode').value = (prefs.data.postalcode) ? prefs.data.postalcode : '';

		document.getElementById('objecttype').value = (prefs.data.objecttype) ? prefs.data.objecttype : '';
		document.getElementById('land').value = (prefs.data.land) ? prefs.data.land : '';

		// extendedsearch
		document.getElementById('aantalkamersOptie').value = (prefs.data.aantalkamersoptie) ? prefs.data.aantalkamersoptie : '';
		document.getElementById('aantalkamers').value = (prefs.data.aantalkamers) ? prefs.data.aantalkamers : '';
		document.getElementById('perceeloppervlakteOptie').value = (prefs.data.perceeloppervlakteoptie) ? prefs.data.perceeloppervlakteoptie : '';
		document.getElementById('perceeloppervlakte').value = (prefs.data.perceeloppervlakte) ? prefs.data.perceeloppervlakte : '';

		// Categorien terugzetten
		var lCategories = prefs.data.categories;
		var lCategorieElements = document.getElementById('zoeken').categorie
		// Als er meerdere categorien zijn
		if (lCategorieElements) {
			for (var i = 0; i < lCategories.length; i++) {
				var lCategorie = lCategories[i];
				if (lCategorieElements.length) {
					for (var j = 0; j < lCategorieElements.length; j++) {
						if (lCategorieElements[j].value == lCategorie) {
							lCategorieElements[j].checked = true;
						}
					}
				} else {
					if (lCategorieElements.value == lCategorie) {
						lCategorieElements.checked = true;
					}
				}
			}
		}
	}
}


/**
 * Wel of niet zichtbaar maken, afhankelijk huidige status
 */
function toggleDetails() {

	var lExtraDetailsDiv = document.getElementById('extendedsearch');

	// Verbergen
	if (lExtraDetailsDiv.style.display == 'block') {
		displayDetails(false)
	} else {
		displayDetails(true)
	}
}


/**
 * Wel of niet zichtbaar maken, afhankelijk van parameter.
 */
function displayDetails(lDisplay) {

	var lExtraDetailsDiv = document.getElementById('extendedsearch');
	var lEnabled = document.getElementById('extendedsearchenabled');
	var lButtonShowDiv = document.getElementById('button_show');
	var lButtonHideDiv = document.getElementById('button_hide');

	if (!lDisplay) {
		lExtraDetailsDiv.style.display = 'none';
		lEnabled.value = "false";
		if (lButtonShowDiv) {
			lButtonShowDiv.style.display = 'block';
			lButtonHideDiv.style.display = 'none';
		}
	} else {
		lExtraDetailsDiv.style.display = 'block';
		lEnabled.value = "true";
		if (lButtonShowDiv) {
			lButtonShowDiv.style.display = 'none';
			lButtonHideDiv.style.display = 'block';
		}
	}
}


/**
 * format number
 * Made by Mathias Bynens <http://mathiasbynens.be/>
 *
 * @param a value
 * @param b precision
 * @param c decimal separator
 * @param d thousands separator
 */
function number_format(value, precision, decimalseparator, groupingseparator) {

	value = Math.round(value * Math.pow(10, precision)) / Math.pow(10, precision);
	var e = value + '';
	var f = e.split('.');
	if (!f[0]) {
		f[0] = '0';
	}
	if (!f[1]) {
		f[1] = '';
	}
	var g;
	if (f[1].length < precision) {
		g = f[1];
		for (var i = f[1].length + 1; i <= precision; i++) {
			g += '0';
		}
		f[1] = g;
	}
	var h;
	if (groupingseparator != '' && f[0].length > 3) {
		h = f[0];
		f[0] = '';
		for (var j = 3; j < h.length; j += 3) {
			i = h.slice(h.length - j, h.length - j + 3);
			f[0] = groupingseparator + i + f[0] + '';
		}
		j = h.substr(0, (h.length % 3 == 0) ? 3 : (h.length % 3));
		f[0] = j + f[0];
	}
	decimalseparator = (precision <= 0) ? '' : decimalseparator;
	//return f[0] + decimalseparator + f[1];
	// Toon niet de waarde achter de comma, maar een -
	return f[0] + decimalseparator + '-';
}


/**
 * Als status gewijzigd is van koop -> huur, de items voor prijsselectie updaten
 */
function statusChanged(statuselement, pricefromelement, pricetoelement) {

	// Controleer of alle vereiste variabelen gezet zijn
	if (!valuesrent || !valuessell || !valuesboth || !groupingseparator || !decimalseparator) {
		return;
	}

	var status = statuselement.options[statuselement.selectedIndex].value;
	var selectedfromvalue = pricefromelement.options[pricefromelement.selectedIndex].value;
	var selectedtovalue = pricetoelement.options[pricetoelement.selectedIndex].value;

	var values = valuessell;
	if (status == '') {
		values = valuesboth;
	} else if (status == 'Te huur') {
		values = valuesrent;
	}

	// Oude lijst leegmaken,
	// begin aan het einde van de lijst met leegmaken
	var lOldLength = pricefromelement.options.length;
	for (var i = lOldLength - 1; i >= 0; i--) {
		pricefromelement.remove(i)
	}
	lOldLength = pricetoelement.options.length;
	for (i = lOldLength - 1; i >= 0; i--) {
		pricetoelement.remove(i)
	}

	// Nieuwe items toevoegen aan de lijst
	for (var j = 0; j < values.length; j++) {
		var lValue = values[j];
		var formattedvalue = 0;
		if (lValue > 0) {
			formattedvalue = number_format(lValue, 2, decimalseparator, groupingseparator);
		}
		pricefromelement.options[j] = new Option(formattedvalue, lValue);

		// Oude selectie terugzetten
		if (selectedfromvalue == lValue) {
			pricefromelement.selectedIndex = j;
		}

		// Een uitzondering voor "geen limiet", deze moet niet gezien worden als een waarde,
		// daarom -1 geven, -1 heeft een speciale betekenis
		if (lValue == 0) {
			lValue = -1;
			formattedvalue = nolimit;
		}

		pricetoelement.options[j] = new Option(formattedvalue, lValue);

		// Oude selectie terug zetten
		if (selectedtovalue == lValue) {
			pricetoelement.selectedIndex = j;
		}
	}

	// Zet voor beide de selectie op 0, tenzij al gezet
	if (pricefromelement.selectedIndex < 0) {
		pricefromelement.selectedIndex = 0;
	}
	if (pricetoelement.selectedIndex < 0) {
		pricetoelement.selectedIndex = 0;
	}
}
