/**
 * St. Barths Online Stylesheet
 *
 * http://www.st-barths.com/
 * Copyright (c) 2010-2011 All rights reserved.
 *
 * @charset utf-8
 * @version 2.2
 *
 * @author Daniel (v2.0 - jun/2010)
 *  - Première version
 * @author Rémi (v2.1 - aug/2011)
 *  - Ajout des trackers GA
 * @author Rémi (v2.2 - nov/2011)
 *  - Refactoring du code + suppression code carmanager
 *  - Ajout de commentaires
 *  - Optimisation du code (factorisation)
 */

// So 90's
var nav = (((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) >= 5 )) || ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4 )));

/******************** FONCTIONS UTILITAIRES ********************/

function writediv (texte, texte2) {
	document.getElementById('div1').innerHTML = texte;
	document.getElementById('div2').value = texte2;
}

function writedivlisting (resultrequest) {
	document.getElementById('listing_block').innerHTML = resultrequest;
}

/**
 * Verifier que le champ ayant l'id spécifié contient une valeur entière.
 * Note: cette fonction utilise document.getElementById qui n'est pas cross-plateforme.
 * Note: cette fonction reset la valeur du champ en cas d'erreur : ce comportement peut-être génant pour l'utilisateur.
 *
 * @param string id Identifiant du tag HTML
 * @return boolean
 * @version SBO v2.0
 * @author Daniel
 */
function TestInt (id) {
	var d = document.getElementById(id);
	if (d.value != "") {
		if (isNaN(d.value) == false) {
			d.value = parseInt(d.value);
		}
		else {
			d.value = '';
			alert('VOUS DEVEZ SAISIR UN ENTIER');
			document.getElementById(id).value = 1;
		}
	}
}

/**
 * Note: où peut bien servir une telle fonction ?! wtf
 *
 * @param mixed theDigit
 * @return void
 * @version SBO v2.0
 * @author Daniel
 */
function validateInt (theDigit) {
	switch (isInteger(theDigit)) {
		case true:
			alert(theDigit + " is an integer");
			break;
		case false:
			alert(theDigit + " is not an integer");
	}
}

/**
 * Note: où peut bien servir une telle fonction ?! wtf
 * Note: C'est la seule référence à frmInput dans tout le document...
 *
 * @return void
 * @version SBO v2.0
 * @author Daniel
 */
function validateRange () {
	var s = document.frmInput.txtInput.value;
	var A = document.frmInput.txtA.value;
	var B = document.frmInput.txtB.value;
	switch (isIntegerInRange(s, A, B)) {
		case true:
			alert(s + " is in range from " + A + " to " + B);
			break;
		case false:
			alert(s + " is not in range from " + A + " to " + B);
	}
}

/**
 * Renvoi true si s est compris entre a et b.
 * Note: où peut bien servir une telle fonction ?! wtf
 * 
 * @param numeric s
 * @param numeric a
 * @param numeric b
 * @return boolean
 * @version SBO v2.0
 * @author Daniel
 */
function isIntegerInRange (s, a, b) {
	if (isEmpty(s))
		if (isIntegerInRange.arguments.length == 1) return false;
	else return (isIntegerInRange.arguments[1] == true);
	// Catch non-integer strings to avoid creating a NaN below,
	// which isn't available on JavaScript 1.0 for Windows.
	if (!isInteger(s, false)) return false;
	// Now, explicitly change the type to integer via parseInt
	// so that the comparison code below will work both on
	// JavaScript 1.2 (which typechecks in equality comparisons)
	// and JavaScript 1.1 and before (which doesn't).
	var num = parseInt (s);
	return ((num >= a) && (num <= b));
}

/**
 * Renvoi true si s est un entier.
 * Note: où peut bien servir une telle fonction ?! wtf
 * Note: il semblerait que la fonction renvoi 0 aussi des fois.
 * 
 * @param string s
 * @return boolean
 * @version SBO v2.0
 * @author Daniel
 */
function isInteger (s) {
	var i;
	if (isEmpty(s))
		if (isInteger.arguments.length == 1) return 0;
	else return (isInteger.arguments[1] == true);
	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (!isDigit(c)) return false;
	}
	return true;
}

/**
 * Renvoi true si s est une string vide, ou un tableau vide, ou un objet vide.
 *
 * @param mixed s
 * @return boolean
 * @version SBO v2.0
 * @author Daniel
 */
function isEmpty(s) {
	return ((s == null) || (s.length == 0));
}

/**
 * Renvoi true si c est un chiffre entre 0 et 9
 * Note: ça marche s'te merde? on compare ici une string numériquement... au oui si ord() est utilisé... p'tet...
 *
 * @param string c
 * @return boolean
 * @version SBO v2.0
 * @author Daniel
 */
function isDigit (c) {
	return ((c >= "0") && (c <= "9"));
}

/**
 * Fabrique un objet de type XMLHttpRequest.
 * @return object|null
 * @version SBO v2.2
 * @author Rémi
 */
function ajax () {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}

/**
 * C'est cette fonction qui est appelée a chaque frappe dans le champ "pseudo" de notre formulaire. Elle verifie
 * la longueur du pseudo tapé (si le pseudo fait moins de 2 ou plus de 30 caracteres, un message d'erreur s'affiche)
 * puis, si tout est bon, lance la fonction file qui se connectera a notre script PHP pour verifier si le pseudo
 * tapé est libre.
 *
 * @version SBO v2.0
 * @author Daniel
 */
function verifPseudo (pseudo) {
	var hdn = "";
	if (pseudo != '') {
		if (pseudo.length<2)
			writediv('<span style="color:#ff0000"><b>'+pseudo+' :</b> cet email est trop court</span>');
		else if (pseudo.length>30)
			writediv('<span style="color:#ff0000"><b>'+pseudo+' :</b> cet email est trop long</span>');
		else if (texte = file('test_id.php?pseudo='+escape(pseudo))) {
			if(texte == 1)
				writediv('<span style="color:#ff0000"><b>'+pseudo+' :</b> cet email est deja pris</span>','0');
			else if(texte == 2)
				writediv('<span style=""><b>'+pseudo+' :</b> cet email est libre</span>','1');
			else
				writediv(texte);
		}
	}
}

/**
 * C'est la fonction qui se connecte a la page passée en parametre, et retourne son contenu.
 *
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *
 * @param string fichier
 * @return false|string
 * @version SBO v2.2
 * @author Daniel
 */
function file (fichier) {
	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}
	xhr_object.open("GET", fichier, false);
	xhr_object.send(null);
	if (xhr_object.readyState == 4) {
		return xhr_object.responseText;
	}
	else return false;
}

function couleur(obj) {
	if (nav) obj.style.backgroundColor = "#FFFFFF";
}

/******************** MOTEUR DE RECHERCHE HOTEL ********************/

/**
 * Rechercher des hotels en fonction du nombre d'étoiles.
 * Cette fonction va remplacer le contenu de la div #listing_block.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.1 :
 *  - Tracker Google Analytics
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *  - Ajout du paramètre filter
 *
 * @param string actuallanguage Le code language (ISO 639-1)
 * @param int productfeatureid ID de la feature dans la DB
 * @param string featurename Nom de la feature dans la langue donnée.
 * @param ? flagid TODO
 * @param string filter Spécifier un filtre de résultat. Par défaut, laisser null.
 * @return void
 * @version SBO v2.2
 * @author Daniel
 * @author Rémi
 */
function HotelSearchtByStar (actuallanguage, productfeatureid, featurename, flagid, filter) {

	var actuallanguagevalue		= actuallanguage;
	var productfeatureidvalue 	= productfeatureid;
	var featurenamevalue 		= featurename;
	var flagidvalue				= flagid;
	var filtervalue				= filter;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "sbo/hotels-v2.3/search_engine_listing_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() { 
		if (xhr_object.readyState == 4) {
			// Content update
			writedivlisting(xhr_object.responseText);
			// Google Analytics Events Tracking
			var fname = "Unknown";
			if (productfeatureid == 108) fname = "star2";
			else if (productfeatureid == 109) name = "star3";
			else if (productfeatureid == 110) fname = "star4";
			else if (productfeatureid == 111) fname = "star4L";
			else if (productfeatureid == 105) fname = "-200";
			else if (productfeatureid == 106) fname = "200-400";
			else if (productfeatureid == 107) fname = "400-";
			window["_gaq"].push(["_trackEvent", actuallanguage + ".hotels", "SearchByCriteria", fname]);
		}
	} 

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data10 = "actuallanguage="+actuallanguagevalue+"&productfeatureid="+productfeatureidvalue+"&featurename="+featurenamevalue+"&flagid="+flagidvalue+"&filter="+filtervalue;
	xhr_object.send(data10);

	writedivlisting('<img src="uploads/StBarthsOnlineV2.1/wait.gif" style="margin:50px 0 50px 49%;" />');
}

/**
 * Rechercher des hotels par critères : nombre de chambres, prix et emplacement géographique.
 * Cette fonction va remplacer le contenu de la div #listing_block.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.1 :
 *  - Tracker Google Analytics
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *  - Ajout du paramètre filter
 *
 * @param string actuallanguage Le code language (ISO 639-1)
 * @param string filter Spécifier un filtre de résultat. Par défaut, laisser null.
 * @return void
 * @version SBO v2.2
 * @author Daniel
 * @author Rémi
 */
function HotelSearchtHotelByCriterias (actuallanguage, filter) {

	var bedroomsnumber			= document.getElementById('search_bedroom').value;
	var bedroomsprices 			= document.getElementById('destination_search_price').value;
	var bedroomslocation		= document.getElementById('destination_search_location').value;
	var actuallanguage			= actuallanguage;
	var filtervalue				= filter;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "sbo/hotels-v2.3/search_engine_listing_multi_critrerias_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() {
		if (xhr_object.readyState == 4) {
			// Content update
			writedivlisting(xhr_object.responseText);
			// Google Analytics Events Tracking
			var fname_stars = "null";
			if (bedroomsnumber == 108) fname_stars = "2";
			else if (bedroomsnumber == 109) fname_stars = "3";
			else if (bedroomsnumber == 110) fname_stars = "4";
			else if (bedroomsnumber == 111) fname_stars = "4L";
			var fname_price = "null";
			if (bedroomsprices == 105) fname_price = "-200";
			else if (bedroomsprices == 106) fname_price = "200-400";
			else if (bedroomsprices == 107) fname_price = "400-";
			var fname = "stars="+fname_stars+",price="+fname_price+",location="+bedroomslocation;
			window["_gaq"].push(["_trackEvent", actuallanguage + ".hotels", "SearchByCriterias", fname]);
		}
	} 

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data11 = "bedroomsnumber="+bedroomsnumber+"&bedroomsprices="+bedroomsprices+"&bedroomslocation="+bedroomslocation+"&actuallanguage="+actuallanguage+"&filter="+filtervalue;
	xhr_object.send(data11);

	writedivlisting('<img src="uploads/StBarthsOnlineV2.1/wait.gif" style="margin:50px 0 50px 49%;" />');
}

/**
 * Rechercher des hotels par features.
 * Cette fonction va remplacer le contenu de la div #listing_block.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.1 :
 *  - Tracker Google Analytics
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *  - Ajout du paramètre filter
 *
 * @param string actuallanguage Le code language (ISO 639-1)
 * @param string filter Spécifier un filtre de résultat. Par défaut, laisser null.
 * @return void
 * @version SBO v2.2
 * @author Daniel
 * @author Rémi
 */
function HotelSearchtByGlobalFeatures (actuallanguage, filter) {

	var wifi					= document.getElementById('global_feature_3').value;
	var bar						= document.getElementById('global_feature_5').value;
	var airconditionning		= document.getElementById('global_feature_11').value;
	var beachview				= document.getElementById('global_feature_41').value;
	var petsallowed				= document.getElementById('global_feature_47').value;
	var handicapedaccessible	= document.getElementById('global_feature_48').value;
	var swimmingpool			= document.getElementById('global_feature_57').value;
	var concierge				= document.getElementById('global_feature_60').value;
	var blanchisserie			= document.getElementById('global_feature_62').value;
	var spa						= document.getElementById('global_feature_72').value;
	var gourmetrestaurant		= document.getElementById('global_feature_75').value;
	var restaurant				= document.getElementById('global_feature_76').value;
	var actuallanguage			= actuallanguage;
	var filtervalue				= filter;
	var msg = "";

	if (document.getElementById('global_feature_3').checked == false )
	{
		wifi=0;
	}
		if (document.getElementById('global_feature_5').checked == false )
	{
		bar=0;
	}
		if (document.getElementById('global_feature_11').checked == false )
	{
		airconditionning=0;
	}
		if (document.getElementById('global_feature_41').checked == false )
	{
		beachview=0;
	}
		if (document.getElementById('global_feature_47').checked == false )
	{
		petsallowed=0;
	}
		if (document.getElementById('global_feature_48').checked == false )
	{
		handicapedaccessible=0;
	}
		if (document.getElementById('global_feature_57').checked == false )
	{
		swimmingpool=0;
	}
		if (document.getElementById('global_feature_60').checked == false )
	{
		concierge=0;
	}
		if (document.getElementById('global_feature_62').checked == false )
	{
		blanchisserie=0;
	}
		if (document.getElementById('global_feature_72').checked == false )
	{
		spa=0;
	}
		if (document.getElementById('global_feature_75').checked == false )
	{
		gourmetrestaurant=0;
	}
	if (document.getElementById('global_feature_76').checked == false )
	{
		restaurant=0;
	}

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "sbo/hotels-v2.3/search_engine_listing_global_critrerias_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() {
		if (xhr_object.readyState == 4) {
			// Content update
			writedivlisting(xhr_object.responseText);
			// Google Analytics Events Tracking
			var fname = "";
			if (wifi) fname += "wifi,";
			if (bar) fname += "bar,";
			if (airconditionning) fname += "airconditionning,";
			if (beachview) fname += "beachview,";
			if (petsallowed) fname += "petsallowed,";
			if (handicapedaccessible) fname += "handicapedaccessible,";
			if (swimmingpool) fname += "swimmingpool,";
			if (concierge) fname += "concierge,";
			if (blanchisserie) fname += "blanchisserie,";
			if (spa) fname += "spa,";
			if (gourmetrestaurant) fname += "gourmetrestaurant,";
			if (restaurant) fname += "restaurant,";
			window["_gaq"].push(["_trackEvent", actuallanguage + ".hotels", "SearchByFeatures", fname]);
		}
	}

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data12 = "wifi="+wifi+"&bar="+bar+"&airconditionning="+airconditionning+"&beachview="+beachview+"&petsallowed="+petsallowed+"&handicapedaccessible="
		+handicapedaccessible+"&swimmingpool="+swimmingpool+"&concierge="+concierge+"&blanchisserie="+blanchisserie+"&spa="+spa+"&gourmetrestaurant="
		+gourmetrestaurant+"&restaurant="+restaurant+"&filter="+filtervalue+'&actuallanguage='+actuallanguage;
	xhr_object.send(data12);

	writedivlisting('<img src="uploads/StBarthsOnlineV2.1/wait.gif" style="margin:50px 0 50px 49%;" />');
}

/******************** MOTEUR DE RECHERCHE VILLA ********************/

/**
 * Rechercher des villas en fonction du nombre de chambres.
 * Cette fonction va remplacer le contenu de la div #listing_block.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.1 :
 *  - Tracker Google Analytics
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *  - Ajout du paramètre filter
 *
 * @param string actuallanguage Le code language (ISO 639-1)
 * @param int productfeatureid ID de la feature dans la DB
 * @param string featurename Nom de la feature dans la langue donnée.
 * @param ? flagid TODO
 * @param string filter Spécifier un filtre de résultat. Par défaut, laisser null.
 * @return void
 * @version SBO v2.2
 * @author Daniel
 * @author Rémi
 */
function VillaSearchtByBedroom (actuallanguage, productfeatureid, featurename, flagid, filter) {

	var actuallanguagevalue		= actuallanguage;
	var productfeatureidvalue 	= productfeatureid;
	var featurenamevalue 		= featurename;
	var flagidvalue				= flagid;
	var filtervalue				= filter;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "sbo/villas-v2.3/search_engine_listing_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() {
		if (xhr_object.readyState == 4) {
			// Content update
			writedivlisting(xhr_object.responseText);
			// Google Analytics Events Tracking
			var fname = "Unknown";
			if (productfeatureid == 88) fname = "bed1";
			else if (productfeatureid == 89) fname = "bed2";
			else if (productfeatureid == 90) fname = "bed3";
			else if (productfeatureid == 91) fname = "bed4";
			else if (productfeatureid == 92) fname = "bed5";
			else if (productfeatureid == 93) fname = "bed6";
			else if (productfeatureid == 94) fname = "-4000";
			else if (productfeatureid == 95) fname = "4000-8000";
			else if (productfeatureid == 96) fname = "8000-15000";
			else if (productfeatureid == 97) fname = "15000-";
			window["_gaq"].push(["_trackEvent", actuallanguage + ".villas", "SearchByCriteria", fname]);
		}
	} 

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data20 = "actuallanguage="+actuallanguagevalue+"&productfeatureid="+productfeatureidvalue+"&featurename="+featurenamevalue+"&flagid="+flagidvalue+"&filter="+filtervalue;
	xhr_object.send(data20);

	writedivlisting('<img src="uploads/StBarthsOnlineV2.1/wait.gif" style="margin:50px 0 50px 49%;" />');
}

/**
 * Rechercher des villas par critères : nombre de chambres, prix et emplacement géographique.
 * Cette fonction va remplacer le contenu de la div #listing_block.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.1 :
 *  - Tracker Google Analytics
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *  - Ajout du paramètre filter
 *
 * @param string actuallanguage Le code language (ISO 639-1)
 * @param string filter Spécifier un filtre de résultat. Par défaut, laisser null.
 * @return void
 * @version SBO v2.2
 * @author Daniel
 * @author Rémi
 */
function VillaSearchtVillaByCriterias(actuallanguage, filter) {

	var bedroomsnumber			= document.getElementById('search_bedroom').value;
	var bedroomsprices 			= document.getElementById('destination_search_price').value;
	var bedroomslocation		= document.getElementById('destination_search_location').value;
	var actuallanguage			= actuallanguage;
	var filtervalue				= filter;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "sbo/villas-v2.3/search_engine_listing_multi_critrerias_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() { 
		if (xhr_object.readyState == 4) {
			// Content update
			writedivlisting(xhr_object.responseText);
			// Google Analytics Events Tracking
			var fname_beds = "null";
			if (bedroomsnumber == 88) fname_beds = "bed1";
			else if (bedroomsnumber == 89) fname_beds = "bed2";
			else if (bedroomsnumber == 90) fname_beds = "bed3";
			else if (bedroomsnumber == 91) fname_beds = "bed4";
			else if (bedroomsnumber == 92) fname_beds = "bed5";
			else if (bedroomsnumber == 93) fname_beds = "bed6";
			var fname_price = "null";
			if (bedroomsprices == 94) fname_price = "-4000";
			else if (bedroomsprices == 95) fname_price = "4000-8000";
			else if (bedroomsprices == 96) fname_price = "8000-15000";
			else if (bedroomsprices == 97) fname_price = "15000-";
			var fname = "beds="+fname_beds+",price="+fname_price+",location="+bedroomslocation;
			window["_gaq"].push(["_trackEvent", actuallanguage + ".villas", "SearchByCriterias", fname]);
		}
	}

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data21 = "bedroomsnumber="+bedroomsnumber+"&bedroomsprices="+bedroomsprices+"&bedroomslocation="+bedroomslocation+"&actuallanguage="+actuallanguage+"&filter="+filtervalue;
	xhr_object.send(data21);

	writedivlisting('<img src="uploads/StBarthsOnlineV2.1/wait.gif" style="margin:50px 0 50px 49%;" />');
}


/**
 * Rechercher des villas par features.
 * Cette fonction va remplacer le contenu de la div #listing_block.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.1 :
 *  - Tracker Google Analytics
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *  - Ajout du paramètre filter, TODO expliquer
 *
 * @param string actuallanguage Le code language (ISO 639-1)
 * @param string filter Spécifier un filtre de résultat. Par défaut, laisser null.
 * @return void
 * @version SBO v2.2
 * @author Daniel
 * @author Rémi
 */
function VillaSearchtByGlobalFeatures (actuallanguage, filter) {

	var fitnesscenter			= document.getElementById('global_feature_74').value;
	var daylycleaning			= document.getElementById('global_feature_70').value;
	var housetaff				= document.getElementById('global_feature_69').value;
	var outsidejacuzzi			= document.getElementById('global_feature_65').value;
	var swimmingpool			= document.getElementById('global_feature_57').value;
	var childrenfriendly		= document.getElementById('global_feature_50').value;
	var whellchairfriendly		= document.getElementById('global_feature_49').value;
	var handicapedfriendly		= document.getElementById('global_feature_48').value;
	var petsallowed				= document.getElementById('global_feature_47').value;
	var oceanview				= document.getElementById('global_feature_42').value;
	var beachview				= document.getElementById('global_feature_41').value;
	var wifi					= document.getElementById('global_feature_3').value;
	var actuallanguage			= actuallanguage;
	var filtervalue				= filter;
	var msg = "";

	if (document.getElementById('global_feature_41').checked == false )
	{
		beachview=0;
	}
		if (document.getElementById('global_feature_42').checked == false )
	{
		oceanview=0;
	}
		if (document.getElementById('global_feature_47').checked == false )
	{
		petsallowed=0;
	}
		if (document.getElementById('global_feature_48').checked == false )
	{
		handicapedfriendly=0;
	}
		if (document.getElementById('global_feature_49').checked == false )
	{
		whellchairfriendly=0;
	}
		if (document.getElementById('global_feature_50').checked == false )
	{
		childrenfriendly=0;
	}
		if (document.getElementById('global_feature_57').checked == false )
	{
		swimmingpool=0;
	}
		if (document.getElementById('global_feature_65').checked == false )
	{
		outsidejacuzzi=0;
	}
		if (document.getElementById('global_feature_69').checked == false )
	{
		housetaff=0;
	}
		if (document.getElementById('global_feature_70').checked == false )
	{
		daylycleaning=0;
	}
		if (document.getElementById('global_feature_74').checked == false )
	{
		fitnesscenter=0;
	}
	if (document.getElementById('global_feature_3').checked == false )
	{
		wifi=0;
	}

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "sbo/villas-v2.3/search_engine_listing_global_critrerias_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() {
		if (xhr_object.readyState == 4) {
			// Content update
			writedivlisting(xhr_object.responseText);
			// Google Analytics Events Tracking
			// Rajouté en version v2.2
			var fname = "";
			if (fitnesscenter) fname += "fitnesscenter,";
			if (daylycleaning) fname += "daylycleaning,";
			if (housetaff) fname += "housetaff,";
			if (outsidejacuzzi) fname += "outsidejacuzzi,";
			if (swimmingpool) fname += "swimmingpool,";
			if (childrenfriendly) fname += "childrenfriendly,";
			if (whellchairfriendly) fname += "whellchairfriendly,";
			if (handicapedfriendly) fname += "handicapedfriendly,";
			if (petsallowed) fname += "petsallowed,";
			if (oceanview) fname += "oceanview,";
			if (beachview) fname += "beachview,";
			if (wifi) fname += "wifi,";
			window["_gaq"].push(["_trackEvent", actuallanguage + ".villas", "SearchByFeatures", fname]);
		}
	}

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data22 = "wifi="+wifi+"&beachview="+beachview+"&oceanview="+oceanview+"&petsallowed="+petsallowed+"&handicapedfriendly="
		+handicapedfriendly+"&whellchairfriendly="+whellchairfriendly+"&childrenfriendly="+childrenfriendly+"&swimmingpool="+swimmingpool
		+"&outsidejacuzzi="+outsidejacuzzi+"&housetaff="+housetaff+"&daylycleaning="+daylycleaning+"&fitnesscenter="+fitnesscenter
		+"&actuallanguage="+actuallanguage+"&filter="+filtervalue;
	xhr_object.send(data22);

	writedivlisting('<img src="uploads/StBarthsOnlineV2.1/wait.gif" style="margin:50px 0 50px 49%;" />');
}

/******************** BEHAVIOR SBO ********************/

/**
 * Ajouter un produit dans la session mystbarts.
 * Cette méthode appel une fichier PHP en ajax, et exécute (eval) le retour (wtf?!).
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *
 * @param int productid L'identifiant du produit
 * @param int contactid L'identifiant du contact (pourquoi ?)
 * @return void
 * @version SBO v2.2
 * @author Daniel
 */
function AddToMyStBarts(productid, contactid) {

	var contactidvalue = contactid;
	var productidvalue = productid;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "sbo/my_st_barts/add_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() { 
		if (xhr_object.readyState == 4) {
			eval(xhr_object.responseText);
		}
	} 

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data60 = "valcontactid="+contactidvalue+"&valproductid="+productidvalue;
	xhr_object.send(data60);
}

/**
 * Comportement spécial des numéros de téléphones.
 * Le visiteur doit cliquer sur le lien pour afficher le numéro.
 * L'objectif est de permettre le tracking de cette action, pour connaitre les stats d'utilisation.
 *
 * @version SBO v2.1
 * @author Rémi
 */
$(function () {
	$('.hiddenPhoneNumber').each(function () {
		// On masque le numéro
		$(this).attr('phonenumber', $(this).html());
		$(this).html($(this).html().substr(0, 8) + '...');
	})
	.mouseover(function (e) {
		// On affiche le popup au mouseover
		$('#hiddenPhonePopup').css('left', (e.pageX-56)+'px').css('top', (e.pageY-50)+'px').show();
	})
	.mouseout(function () {
		// On masque le popup au mouseover
		$('#hiddenPhonePopup').hide();
	})
	.click(function () {
		// On affiche le numéro
		$(this).html($(this).attr('phonenumber'));
		// On enrregistre l'event dans les stats
		window["_gaq"].push(["_trackEvent", actuallanguage + ".hiddenPhoneNumber", "Reveal", $(this).attr('phonenumber')]);
	});
});

/******************** BACK OFFICE ********************/

/**
 * ?????? TODO
 * Cette méthode appel une fichier PHP en ajax, et exécute (eval) le retour (wtf?!).
 * Utilisée dans le back office.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *
 * @param int contactid L'identifiant du contact
 * @param int customerid L'identifiant du customer
 * @return void
 * @version SBO v2.2
 * @author Daniel
 */
function UpdateLink(contactid, customerid){

	var contactidvalue = contactid;
	var customeridvalue = customerid;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "bo/contact/contact_customer_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() { 
			if (xhr_object.readyState == 4) {
			eval(xhr_object.responseText);
		}
	} 

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data = "valcontactid="+contactidvalue+"&valcustomerid="+customeridvalue;
	xhr_object.send(data);
}

/**
 * "Handle secondary categories creation and updates"
 * Cette méthode appel une fichier PHP en ajax, et exécute (eval) le retour (wtf?!).
 * Utilisée dans le back office.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *
 * @param int categoryid L'identifiant de la catégorie de produit
 * @param int productid L'identifiant du produit
 * @param boolean testisrecorded ?
 * @return void
 * @version SBO v2.2
 * @author Daniel
 */
function UpdateProductSecondarycategory(categoryid, productid, testisrecorded) {

	var categoryidvalue 	= categoryid;
	var productidvalue		= productid;
	var testisrecordedvalue	= testisrecorded;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "bo/products/product_select_secondary_categories_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() { 
		if (xhr_object.readyState == 4) {
			eval(xhr_object.responseText);
		}
	} 

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data5 = "categoryid="+categoryidvalue+"&productid="+productidvalue+"&testisrecorded="+testisrecordedvalue;
	xhr_object.send(data5);
}

/**
 * "Handle product features creation and updates"
 * Cette méthode appel une fichier PHP en ajax, et exécute (eval) le retour (wtf?!).
 * Utilisée dans le back office.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *
 * @param int productid L'identifiant du produit
 * @param int categoryid L'identifiant de la catégorie de produit
 * @param int featureid L'identifiant de la feature.
 * @return void
 * @version SBO v2.2
 * @author Daniel
 */
function UpdateProductFeatures(productid, categoryid, featureid) {

	var productidvalue 	= productid;
	var categoryidvalue = categoryid;
	var featureidvalue	= featureid;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "bo/products/product_select_features_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() { 
		if (xhr_object.readyState == 4) {
			eval(xhr_object.responseText);
		}
	} 

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data2 = "valproductid="+productidvalue+"&valcategoryid="+categoryidvalue+"&featureid="+featureidvalue;
	xhr_object.send(data2);
}

/**
 * "Handle product features creation and updates"
 * Cette méthode appel une fichier PHP en ajax, et exécute (eval) le retour (wtf?!).
 * Utilisée dans le back office.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *
 * @param int productid L'identifiant du produit
 * @param int categoryid L'identifiant de la catégorie de produit
 * @param int featureid L'identifiant de la feature.
 * @param string fieldname ?
 * @param string fieldnamevalue ?
 * @param int flagtypeid ?
 * @return void
 * @version SBO v2.2
 * @author Daniel
 */
function UpdateSpecificProductFeatures (productid, categoryid, featureid, fieldname, fieldnamevalue, flagtypeid) {

	var productidvalue 	= productid;
	var categoryidvalue = categoryid;
	var featureidvalue	= featureid;
	var fieldname		= fieldname;
	var fieldnamevalue	= fieldnamevalue;
	var flagtypeidvalue	= flagtypeid;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "bo/products/product_select_specific_features_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() {
		if (xhr_object.readyState == 4) {
			eval(xhr_object.responseText);
		}
	}

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data3 = "valproductid="+productidvalue+"&valcategoryid="+categoryidvalue+"&featureid="+featureidvalue+"&fieldname="+fieldname+"&fieldnamevalue="+fieldnamevalue+"&flagtypeid="+flagtypeidvalue;
	xhr_object.send(data3);
}

/**
 * Modifie la visibilité du produit.
 * Cette méthode appel une fichier PHP en ajax, et exécute (eval) le retour (wtf?!).
 * Utilisée dans le back office.
 * Note: la requête ajax n'est pas URL encoded
 *
 * Ajout de la v2.2 :
 *  - Utilisation de ajax() pour créer le XHR object
 *
 * @param int productid L'identifiant du produit
 * @param string visibilitystatus Status de visibilité.
 * @return void
 * @version SBO v2.2
 * @author Daniel
 */
function UpdateProductvisibility (productid, visibilitystatus){

	var productidvalue 	= productid;
	var visibilityvalue = visibilitystatus;

	var xhr_object = ajax();
	if (!xhr_object) {
		alert("Your browser doesn't support XMLHTTPRequest Object...");
		return;
	}

	xhr_object.open("POST", "bo/products/product_visibility_ajax_proc.php", true);

	xhr_object.onreadystatechange = function() { 
		if (xhr_object.readyState == 4) {
			eval(xhr_object.responseText);
		}
	} 

	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	var data4 = "valproductid="+productidvalue+"&visibilitystatus="+visibilityvalue;
	xhr_object.send(data4);

	// Note: on change ici l'icône de visibilité du produit, sans avoir la réponse du script ajax
	if (visibilityvalue == "0") {
		document.getElementById('product_visibility_'+productidvalue).innerHTML = '<a onclick =javascript:UpdateProductvisibility('+productidvalue+',1)><img width=14 height=14 src=img_bo/available.png /></a>';
	}
	else {
		document.getElementById('product_visibility_'+productidvalue).innerHTML = '<a onclick =javascript:UpdateProductvisibility('+productidvalue+',0)><img width=14 height=14 src=img_bo/forbidden.png /></a>';
	}
}

/******************** VERIFICATION DES FORMULAIRES ********************/

/**
 * Vérifie le formulaire de contact.
 * Cette méthode modifie les styles des éléments du formulaire.
 * Utilisée dans le back office.
 *
 * Ajout de la v2.2 :
 *  - Refactoring du code
 *
 * @return boolean
 * @version SBO v2.2
 * @author Daniel
 */
function CheckAddContact() {
	var msg = "";
	if (document.addcontact.contact_first_name.value== "") {
		msg += "Field 'FIRST NAME' is empty\n";
		if (nav) document.addcontact.contact_first_name.style.backgroundColor = "#B5E2E5";
	}
	if (document.addcontact.contact_last_name.value== "") {
		msg += "Field 'LAST NAME' is empty\n";
		if (nav) document.addcontact.contact_last_name.style.backgroundColor = "#B5E2E5";
	}
	if (document.addcontact.contact_qualification.value== "") {
		msg += "Field 'QUALIFICATION' is empty\n";
		if (nav) document.addcontact.contact_qualification.style.backgroundColor = "#B5E2E5";
	}
	if (document.addcontact.contact_email.value != "") {
		indexAroba = document.addcontact.contact_email.value.indexOf('@');
		indexPoint = document.addcontact.contact_email.value.indexOf('.');
		if ((indexAroba < 0) || (indexPoint < 0))
		{
			if (nav) document.addcontact.contact_email.style.backgroundColor = "#B5E2E5";
			msg += "Incorrect Email address \n";
		}
	}
	else {
		if (nav) document.addcontact.contact_email.style.backgroundColor = "#B5E2E5";
		msg += "Field 'EMAIL' is empty\n";
	}	
	if (msg == "") return true;
	alert(msg);
	return false;
}

/**
 * Vérifie le formulaire de catégorie de produit.
 * Cette méthode modifie les styles des éléments du formulaire.
 * Utilisée dans le back office.
 *
 * Ajout de la v2.2 :
 *  - Refactoring du code
 *
 * @return boolean
 * @version SBO v2.2
 * @author Daniel
 */
function CheckAddProductCategory () {
	var msg = "";
	if (document.addproductcategory.product_category_name.value== "") {
		msg += "Field 'CATEGORY NAME' is empty\n";
		if (nav) document.addproductcategory.product_category_name.style.backgroundColor = "#B5E2E5";
	}
	if (msg == "") return true;
	alert(msg);
	return false;
}

/**
 * Vérifie le formulaire de client.
 * Cette méthode modifie les styles des éléments du formulaire.
 * Utilisée dans le back office.
 *
 * Ajout de la v2.2 :
 *  - Refactoring du code
 *
 * @return boolean
 * @version SBO v2.2
 * @author Daniel
 */
function CheckAddClient () {
	var msg = "";
	if (document.addclient.client_name.value== "") {
		msg += "Field 'NAME' is empty\n";
		if (nav) document.addclient.client_name.style.backgroundColor = "#B5E2E5";
	}
	if (msg == "") return true;
	alert(msg);
	return false;
}

/**
 * Vérifie le formulaire de type de feature.
 * Cette méthode modifie les styles des éléments du formulaire.
 * Utilisée dans le back office.
 *
 * Ajout de la v2.2 :
 *  - Refactoring du code
 *
 * @return boolean
 * @version SBO v2.2
 * @author Daniel
 */
function Checkaddproductfeaturetype() {
	var msg = "";
	if (document.addproductfeaturetype.product_feature_type_name.value== "") {
		msg += "Field 'PRODUCT FEATURE TYPE NAME' is empty\n";
		if (nav) document.addproductfeaturetype.product_feature_type_name.style.backgroundColor = "#B5E2E5";
	}
	if (msg == "") return true;
	alert(msg);
	return false;
}

/**
 * Vérifie le formulaire de features.
 * Cette méthode modifie les styles des éléments du formulaire.
 * Utilisée dans le back office.
 *
 * Ajout de la v2.2 :
 *  - Refactoring du code
 *
 * @return boolean
 * @version SBO v2.2
 * @author Daniel
 */
function Checkaddproductfeature () {
	var msg = "";
	if (document.addproductfeature.product_feature_name.value== "") {
		msg += "Field 'PRODUCT FEATURE NAME EN' is empty\n";
		if (nav) document.addproductfeature.product_feature_name.style.backgroundColor = "#B5E2E5";
	}
	if (document.addproductfeature.product_feature_name_fr.value== "") {
		msg += "Field 'PRODUCT FEATURE NAME FR' is empty\n";
		if (nav) document.addproductfeature.product_feature_name_fr.style.backgroundColor = "#B5E2E5";
	}
	if (msg == "") return true;
	alert(msg);
	return false;
}

/**
 * Vérifie le formulaire de produit.
 * Cette méthode modifie les styles des éléments du formulaire.
 * Utilisée dans le back office.
 *
 * Ajout de la v2.2 :
 *  - Refactoring du code
 *
 * @return boolean
 * @version SBO v2.2
 * @author Daniel
 */
function Checkaddproduct() {
	var msg = "";
	if (document.addproduct.product_name_en.value== "") {
		msg += "Field 'PRODUCT NAME EN' is empty\n";
		if (nav) document.addproduct.product_name_en.style.backgroundColor = "#B5E2E5";
	}
	if (document.addproduct.product_name_fr.value== "") {
		msg += "Field 'PRODUCT NAME FR' is empty\n";
		if (nav) document.addproduct.product_name_fr.style.backgroundColor = "#B5E2E5";
	}
	if (document.addproduct.product_title_en.value== "") {
		msg += "Field 'PRODUCT TITLE EN' is empty\n";
		if (nav) document.addproduct.product_title_en.style.backgroundColor = "#B5E2E5";
	}
	if (document.addproduct.product_title_fr.value== "") {
		msg += "Field 'PRODUCT TITLE FR' is empty\n";
		if (nav) document.addproduct.product_title_fr.style.backgroundColor = "#B5E2E5";
	}
	if (document.addproduct.product_short_desc_en.value== "") {
		msg += "Field 'PRODUCT SHORT DESCRIPTION EN' is empty\n";
		if (nav) document.addproduct.product_short_desc_en.style.backgroundColor = "#B5E2E5";
	}
	if (document.addproduct.product_short_desc_fr.value== "") {
		msg += "Field 'PRODUCT SHORT DESCRIPTION FR' is empty\n";
		if (nav) document.addproduct.product_short_desc_fr.style.backgroundColor = "#B5E2E5";
	}
	if (msg == "") return true;
	alert(msg);
	return false;
}
