/** EVENTS JQUERY **/
// Attend que le DOM ai chargé
$(document).ready(
	function()
	{
		if($('div#aquaroma').length)
		{
			ajusterZonesAquaroma();
		}
		
		$('div.typo_hebergement a.bouton_valider').live('click', function(){
			var formToValid = 'formulaire_' + $(this).attr('id');
			infosParticipants(formToValid);
			$('#dialog-form a.bouton_valider').live('click', function(){
				majInputFormulaire(formToValid);
			});
		});
		
		/** infos bulles (afficherhebergements.tpl / afficherprixdispo.tpl / afficherprestations.tpl) **/
		$('[id^=infobulle_]').live('mouseover' , function () {
			$('div.tooltip p.texte_bulle').html(contenuInfobulles[this.id]);
			$('div.tooltip').show(500);
			$('div.tooltip img').css("display", "block");
		}).live('mousemove', move).live('mouseout', function () {
			$('div.tooltip').stop(true, true);
			$('div.tooltip').hide(500);
			showSelect();
		});
		
		$("form#formulaire").ready(function(){
			if(document.URL.indexOf("reservez-vos-vacances") !== -1)
			{
				$("div#prixDispos").css('display', 'block');
			}
		});
		
		$('#prixDisposResultats').ready(function(){
			if(getId('jour'))
			{
				for(var i = 1; i <= 7; i++)
					if($('#jour_' + i).length)
						$('#jour_' + i).removeClass('hebergement_courant').addClass('hebergement');
				
				$('#jour_' + getId('jour').value).removeClass('hebergement').addClass('hebergement_courant');
			}
		});
		
		
		$("div#reserver span.bouton_valider").click(function(){
			$('form#form_contact select').css('display', 'none');
			$('#moduleMaps').remove();
			
			// Suppresion du script de conversion google adWords lors du click pour afficher prixDispos
			// en raison d'un bug avec la fonction hide de jquery et des frames
			if($('#conversion_contact').length)
			{
				$('#conversion_contact').remove();
			}
			
			// Disparition du cadre google map 
			if(getId("cadre_google_map"))
			{
				if(browserVersion() == 'Internet Explorer 6' || browserVersion() == 'Internet Explorer 7')
				{
					$('div#centre').css('display', 'none');
					$('div#colonne_droite').css('display', 'none');
					$('div#contenuBas').css('display', 'none');
				}
				else
				{
					$('div#cadre_google_map').hide('slide', {}, 850);
					$('p#intro').hide('slide', {}, 850);
				}
			}
			else
			{
				if(browserVersion() == 'Internet Explorer 6' || browserVersion() == 'Internet Explorer 7')
				{
					$('div#centre').css('display', 'none');
					$('div#colonne_droite').css('display', 'none');
					$('div#contenuBas').css('display', 'none');
				}
				else
				{
					$("div#centre").hide('slide', {}, 850);
				}
			}
			
			if(getId("pub"))
			{
				$("div#pub").css('display', 'none');
			}
			
			
			var page = "";
			var typevacances = trim($('#codeTypeVacances').html());
			var path = trim($('#path').html());
			
			$.ajax({
				type: "POST",
				url: path + "prixdispo/afficherprixdispo",
				data: "&ajax=1",
				beforeSend: function(){
					if(browserVersion() != 'Internet Explorer 6' && browserVersion() != 'Internet Explorer 7')
					{
						$("div#contenuBas").hide(
							"slide",
							{direction: "left"},
							850,
							function(){
								$('div#colonne_droite').css('display', 'none');
								afficherLoader(typevacances, path);
							}
						);
					}
					else
					{
						afficherLoader(typevacances, path);
					}
					// alert('beforeSend ok');
				},
				success: function(data){
					// alert(data);
					page = data;
					// alert('success ok');
				},
				complete: function(){
					$('div#contenuBas').html(page);
					if(browserVersion() != 'Internet Explorer 6' && browserVersion() != 'Internet Explorer 7')
					{
						$('div#prixDispos').show('slide', {}, 850);
					}
					else
					{
						$('div#prixDispos').css('display', 'block');
					}
					// alert('complete ok');
				},
				error: function (xhr, ajaxOptions, thrownError){
					// $('div#contenuBas').html(xhr.responseText);
					alert(thrownError + "\n" + xhr.responseText);
				}
			});
		});
		
		/** charge google map api dans le cas ou le cadre pour la carte existe **/
		if(getId('cadre_google_map')) initialize();
	}
);

function initialize()
{
	// alert(latitude + "\n" + longitude + "\n\n" + station + "\n" + residence);
	
	// déclaration de la carte
	var position = new google.maps.LatLng(latitude, longitude);
	var myOptions = {
		zoom: 6,
		center: position,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var carte = new google.maps.Map(document.getElementById("cadre_google_map"), myOptions);
	
	// déclaration du marqueur
	var marker = new google.maps.Marker({
		position: position, 
		map: carte, 
		title: station + ' - ' + residence
	});
	
	var contentString = '<div id="infobulle_googlemap"><strong>' + residence + '</strong>'
					  + '<br /><em>[ ' + station  + ' - ' + region + ' ]</em>'
					  + '<img src="' + image + '" alt="Image ' + residence + '" /></div><br />';
	
	var infowindow = new google.maps.InfoWindow({
		content: contentString
	});
	
	google.maps.event.addListener(marker, 'click', function(){
		infowindow.open(carte, marker);
	});
}


/** retourne l'objet de l'élément dont l'id est passé en parametre **/
function getId(id)
{
	return document.getElementById(id);
}

/** permet d'opacifier un élément lors d'un survol **/
function setOpacityImage(id)
{
	if(navigator.appName == 'Microsoft Internet Explorer') getId(id).style.filter = 'alpha(opacity=15)';
	else getId(id).style.opacity = '0.15';
}

/** permet de désopacifier un élément lors d'un mouse out **/
function unsetOpacityImage(id)
{
	if(navigator.appName == 'Microsoft Internet Explorer') getId(id).style.filter = 'alpha(opacity=0)';
	else getId(id).style.opacity = '0';
}

/** Affiche le block pour faire patienter pendant la redirection **/
function afficherLoadingRedirect(urlRedirect)
{
	getId('redirection').style.display = 'block';
	getId('redirection').style.top = (document.documentElement.clientHeight - getId('redirection').offsetHeight)/2 + 'px';
	getId('redirection').style.left = (document.documentElement.clientWidth - getId('redirection').offsetWidth)/2 + 'px';
	
	setTimeout(function(){window.location.replace(urlRedirect);}, 2000);
}

/** permet de créer un effet coloré avec un fondu vers une autre couleur (en passant si nécessaire par une autre couleur définie) **/
// On peut appeler la fonction de cette façon : onclick="javascript:add_error_style('EditView', 'salutation', 'ERREUR !!');"
// Ne pas oublier de mettre une couleur de fond sur l'input ou modifier le js dans la fonction get_current_bgcolor ?
if(navigator.appName != 'Microsoft Internet Explorer')
{
	var inputsWithErrors = new Array();
	
	function add_error_style(formname, input, txt) // txt = message affiché à l'utilisateur
	{
		inputHandle = eval("getId('" + formname + "')['" + input + "']");
		style = get_current_bgcolor(inputHandle);
		
		if(inputHandle.parentNode.innerHTML.search(txt) == -1)
		{
			errorTextNode = document.createElement('span');
			errorTextNode.className = 'required';
			errorTextNode.innerHTML = '<br />' + txt; // Position d'affichage du message d'erreur à modifier si nécessaire
			inputHandle.parentNode.appendChild(errorTextNode);
		}
		
		inputHandle.style.backgroundColor = "#F78A20"; // Couleur de début
		inputsWithErrors.push(inputHandle);
		
		for(wp = 1; wp <= 10; wp++)
		{
			window.setTimeout('fade_error_style(style, ' + wp * 10 + ')', 1000 + (wp * 100));
		}
	}
	
	function getCurrentBgcolor(input) // Récupération de la couleur de fond
	{
		if(input.currentStyle) // ie 
		{
			style = input.currentStyle.backgroundColor;
			return style.substring(1,7);
		}
		else // moz
		{
			style = '';
			styleRGB = document.defaultView.getComputedStyle(input, '').getPropertyValue("background-color");
			comma = styleRGB.indexOf(',');
			style += dec2hex(styleRGB.substring(4, comma));
			commaPrevious = comma;
			comma = styleRGB.indexOf(',', commaPrevious+1);
			style += dec2hex(styleRGB.substring(commaPrevious+2, comma));
			style += dec2hex(styleRGB.substring(comma+2, styleRGB.lastIndexOf(')')));
			return style;
		}
	}
	
	function hexToDec(hex) // Découpage de la couleur
	{
		return(parseInt(hex,16));
	}
	
	var hexDigit = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
	
	function decToHex(dec)
	{
		return(hexDigit[dec>>4] + hexDigit[dec&15]);
	}
	
	function fadeErrorStyle(normalStyle, percent) //Eclaircissement
	{
		errorStyle = 'F78A20'; //Couleur intermédiaire
		var r1 = hex2dec(errorStyle.slice(0,2));
		var g1 = hex2dec(errorStyle.slice(2,4));
		var b1 = hex2dec(errorStyle.slice(4,6));
		
		var r2 = hex2dec(normalStyle.slice(0,2));
		var g2 = hex2dec(normalStyle.slice(2,4));
		var b2 = hex2dec(normalStyle.slice(4,6));
		
		
		var pc = percent / 100;
		
		r = Math.floor(r1+(pc*(r2-r1)) + .5);
		g = Math.floor(g1+(pc*(g2-g1)) + .5);
		b = Math.floor(b1+(pc*(b2-b1)) + .5);
		
		for(var wp = 0; wp < inputsWithErrors.length; wp++)
		{
			inputsWithErrors[wp].style.backgroundColor = "#" + dec2hex(r) + dec2hex(g) + dec2hex(b);
		}
	}
}

/** fonction qui permet d'ajouter ou d'enlever 7 jours a une date du calendrier */
function datePlusMoins(date_debut, modif, langue)
{
	if(langue == 'f')
	{
		var jour_debut = parseInt((date_debut.substr(0,1) == 0 ? date_debut.substr(1,1) : date_debut.substr(0,2)));
		var mois_debut = parseInt((date_debut.substr(3,1) == 0 ? date_debut.substr(4,1) : date_debut.substr(3,2)));
	}
	else
	{
		var mois_debut = parseInt((date_debut.substr(0,1) == 0 ? date_debut.substr(1,1) : date_debut.substr(0,2)));
		var jour_debut = parseInt((date_debut.substr(3,1) == 0 ? date_debut.substr(4,1) : date_debut.substr(3,2)));
	}
	var annee_debut = parseInt(date_debut.substr(6,4));
	
	date = new Date();
	date.setDate(jour_debut);
	date.setMonth(mois_debut-1);
	date.setFullYear(annee_debut);
	
	if(modif == 'plus') date.setDate(date.getDate() + 7);
	else if(modif == 'moins') date.setDate(date.getDate() - 7);
	strDay = (date.getDate() < 10 ? "0" : "") + date.getDate();
	month = date.getMonth() + 1; // Retourne le numéro du mois. Attention 0 correspond au mois de Janvier et 11 au mois de Décembre. C'est pour cela que l'on ajoute 1.
	strMonth = (month < 10 ? "0" : "")+month;
	if(langue == 'f') strDate = strDay+"/"+strMonth+"/"+date.getFullYear();
	else strDate = strMonth+"/"+strDay+"/"+date.getFullYear();
	
	return strDate;
}

/** fonction qui permet d'ajouter ou d'enlever 7 jours a une date du calendrier */
function majDatesCal()
{
	if(getId('calendrier_debut_container_hidden')) getId('calendrier_debut_container').value = getId('calendrier_debut_container_hidden').value;
	if(getId('calendrier_fin_container_hidden')) getId('calendrier_fin_container').value = getId('calendrier_fin_container_hidden').value;
}

/** Parcours d'une chaine en testant si ce qu'il y a dans s correspond bien a la liste b **/
function caraSp(s, b)
{
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (b.indexOf(c) == -1) return false;
	}
	return true;
}

/** test des caractères spéciaux **/
function testSpecialChar(chaine, msg)
{
	var v = chaine;
	if(!carasp(v, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmonpqrstuvwxyzÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÝÿýÑñ' -"))
	{
		alert(msg);
		return false;
	}
	else return true;
}

function testSpecialCharParam(chaine, msg, para)
{
	var v = chaine;
	
	if(para == "tel")
	{
		if(!carasp(v, "+.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmonpqrstuvwxyz "))
		{
			alert(msg + "+.0123456789, ABCDEFGHIJKLMNOPQRSTUVWXYZ, abcdefghijklmonpqrstuvwxyz et espace");
			return false;
		}
		else return true;
	}
	else if(para == "code_postal")
	{
		if(!carasp(v, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ "))
		{
			alert(msg + "0123456789, ABCDEFGHIJKLMNOPQRSTUVWXYZ et espace");
			return false;
		}
		else return true;
	}
	else if(para == "ville")
	{
		if(!carasp(v, ".,?;:!0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmonpqrstuvwxyzÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÝÿýÑñ "))
		{
			alert(msg + ".0123456789, ABCDEFGHIJKLMNOPQRSTUVWXYZ, abcdefghijklmonpqrstuvwxyz, virgule et espace");
			return false;
		}
		else return true;
	}
	else if(para == "adresse")
	{
		if(!carasp(v, "'\-.,;:!?0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmonpqrstuvwxyzÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÝÿýÑñ "))
		{
			alert(msg + ".0123456789, ABCDEFGHIJKLMNOPQRSTUVWXYZ, abcdefghijklmonpqrstuvwxyz, tiret, apostrophe, virgule et espace");
			return false;
		}
		else return true;
	}
}

/** teste si les caracteres passés en parametre sont présents dans la chaine **/
function testChar(chaine, msg, carateres) 
{
	if(!carasp(chaine, carateres))
	{
		alert(msg);
		return false;
	}
	else return true;
}

/** met en majuscules la premiere lettre d'une chaine **/
function ucFirst(chaine)
{
	var debut = chaine.charAt(0).toUpperCase();
	var fin = chaine.substr(1, chaine.length-1).toLowerCase();
	var result = debut+fin;
	return result;
}

/** met en majuscules la premiere lettre de chaques mots d'une chaine **/
function ucWords(chaine)
{
	var tabMots = chaine.split(/[ ]/);
	var tailleTab = tabMots.length;
	
	var result = '';
	var i;
	for(i = 0; i < tailleTab; i++)
	{
		result += ucFirst(tabMots[i]);
		if(i != tailleTab-1) result += ' ';
	}
	
	return result;
}

/** remplace les caracteres spéciaux par les caracteres standards **/
function replaceSpecialChar(chaine)
{
	var remplaceA = /[ÀÁÂÃÄÅàáâãäå]/g;
	var remplaceO = /[ÒÓÔÕÖØòóôõöø]/g;
	var remplaceE = /[ÈÉÊËèéêë]/g;
	var remplaceC = /[Çç]/g;
	var remplaceI = /[ÌÍÎÏìíîï]/g;
	var remplaceU = /[ÙÚÛÜùúûü]/g;
	var remplaceY = /[Ýÿý]/g;
	var remplaceN = /[Ññ]/g;
	
	chaine = chaine.replace(remplaceA, "a");
	chaine = chaine.replace(remplaceO, "o");
	chaine = chaine.replace(remplaceE, "e");
	chaine = chaine.replace(remplaceC, "c");
	chaine = chaine.replace(remplaceI, "i");
	chaine = chaine.replace(remplaceU, "u");
	chaine = chaine.replace(remplaceY, "y");
	chaine = chaine.replace(remplaceN, "n");
	
	return chaine;
}

/** fait clignoter les elements font qui ont pour classes 'blink' **/
function blink()
{
	var elems = document.getElementsByTagName('font');
	var x = elems.length;
	
	for(var i = 0; i < x; i++)
	{
		if(elems[i].className == 'blink')
		{
			if(elems[i].style.visibility == "hidden") var etat = 'hidden';
			
			if(elems[i].style.visibility == "hidden") elems[i].style.visibility = "visible";
			else elems[i].style.visibility = "hidden";
		}
	}
	
	// alternance du timeout
	if(etat != 'hidden') setTimeout('blink()', 500); // éteint
	else setTimeout('blink()', 1500); // allumé
}

/** retourne la version du navigateur (FF pour Firefox ; 5, 6, 7... pour IE en fonction des versions) **/
function navVersion()
{
	var version;
	
	if(navigator.appName == 'Microsoft Internet Explorer') version = navigator.appVersion.substr(22, 1);
	else version = 'FF';
	
	return version;
}

/** fonction pour connaitre exactement le navigateur et sa version (dans le cas IE et FF) **/
function browserVersion()
{
	var version;
	
	switch(navigator.appName)
	{
		case 'Microsoft Internet Explorer':
			version = 'Internet Explorer ' + navigator.appVersion.substr(22, 1);
			break;
		
		case 'Opera':
			version = 'Opera';
			break;
		
		case 'Netscape':
			if(navigator.userAgent.indexOf('Firefox') != -1) version = 'Firefox ' + navigator.userAgent.substr((navigator.userAgent.lastIndexOf('/')+1), 1);
			else if(navigator.userAgent.indexOf('Chrome') != -1) version = 'Chrome';
			else if(navigator.userAgent.indexOf('Safari') != -1) version = 'Safari';
			break;
		
		default:
			version = 'Other...';
			break;
	}
	
	return version;
}

/** cache les selects **/
function hideSelect()
{
	if(navVersion() == '6')
	{
		var elems = document.getElementsByTagName('select');
		var x = elems.length;
		
		for(var i = 0; i < x; i++) elems[i].style.visibility = "hidden";
	}
}

/** montre les selects **/
function showSelect()
{
	var elems = document.getElementsByTagName('select');
	var x = elems.length;
	
	for(var i = 0; i < x; i++) elems[i].style.visibility = "visible";
}

/** cache les flash **/
function hideFlash()
{
	var elems = document.getElementsByTagName('object');
	var x = elems.length;
	
	for(var i = 0; i < x; i++)
	{
		elems[i].style.visibility = "hidden";
		elems[i].style.display = "none";
	}
}

/** montre les flash **/
function showFlash()
{
	var elems = document.getElementsByTagName('object');
	var x = elems.length;
	
	for(var i = 0; i < x; i++)
	{
		elems[i].style.visibility = "visible";
		elems[i].style.display = "block";
	}
}

/** affiche l'overlay noir **/
function opacityOn()
{
	getId('overlay').className = 'overlay_active';

	hideFlash();
	hideSelect();
	
	setOpacity(70, 'overlay');
}

/** cache l'overlay noir **/
function opacityOff()
{
	getId('overlay').className = 'overlay_passive';
	
	showFlash();
	showSelect();
}

/** retourne la position d'un élément **/
function findPos(element_id)
{
	AObject = getId(element_id);
	
	var posX = 0, posY = 0;
	do
	{
		posX += AObject.offsetLeft;
		posY += AObject.offsetTop;
		AObject = AObject.offsetParent;
	}
	while( AObject != null );
	
	var pos = [];
	pos['X'] = posX;
	pos['Y'] = posY;
	
	return pos;
}

/** retourne la taille d'un élément (plus ses borders) **/
function findSize(element_id)
{
	AObject = getId(element_id);
	
	var sizeX = 0, sizeY = 0;
	
	sizeX += AObject.offsetWidth;
	sizeY += AObject.offsetHeight;
	
	var size = [];
	size['X'] = sizeX;
	size['Y'] = sizeY;
	
	return size;
}

/** fonction de test - afficher avec un alert la taille d'un element, ainsi que sa position **/
function size(element_id)
{
	var size = findSize(element_id)
	var pos = findPos(element_id)
	
	alert('Width : ' + size['X'] + 'px\nHeight : ' + size['Y'] + 'px\n\nLeft : ' + pos['X'] + 'px\nTop : ' + pos['Y'] + 'px');
}

/** fonction pour les hovers de la carte en fullscreen **/
function carteOnMouseOver(pays, region)
{
	getId('carte_pays').src = 'site/media/cartes/' + pays + '/' + region + '.gif';
	getId('carte_pays').style.cursor = 'pointer';
}

/** fonction pour les hovers de la carte en fullscreen **/
function carteOnMouseOut(pays, region)
{
	getId('carte_pays').src = 'site/media/cartes/' + pays + '/' + region + '_active.gif';
	getId('carte_pays').style.cursor = 'crosshair';
}

/** fonction pour faire patienter lors d'un desabonnement **/
function formDesaboLoading()
{
	getId('cadre_form_desabo').innerHTML = '<img src="site/media/newsletter/big_loader_blue.gif" id="load_desabo" alt="loading..." />';
}

/** fonction pour réinitialiser le formulaire de desabonnement **/
function newDesabo()
{
	getId('cadre_form_desabo').innerHTML = getId('desabo_hidden').innerHTML;
}

/** permet de changer la couleur des champs input du site en orange **/
function inputFocus(id)
{
	getId(id).style.backgroundColor = '#F7E0A8';
}

/** permet de changer la couleur des champs input du site en blanc **/
function inputBlur(id)
{
	getId(id).style.backgroundColor = '#FFFFFF';
}

/** ouvre le calendrier au mois correspondant à la date selectionnée **/
function goDate(cal, input)
{
	if(langueCal == 'f')
	{
		var mois = parseInt(input.value.substr(3, 2), 10) - 1; // On précise 10 comme second argument (signifie base 10) afin de contrer le bug du parseInt (avec 08 et 09)
		var jour = parseInt(input.value.substr(0, 2), 10);
	}
	else
	{
		var mois = parseInt(input.value.substr(0, 2), 10) - 1; // On précise 10 comme second argument (signifie base 10) afin de contrer le bug du parseInt (avec 08 et 09)
		var jour = parseInt(input.value.substr(3, 2), 10);
	}
	var annee = parseInt(input.value.substr(6, 4), 10); // Toujours concernant le bug parseInt => http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C85006A6604
	
	cal.goToMonth(annee, mois);
	cal.selectDates(new Array(new Date(annee, mois, jour)), true, true, true)
}

/** fonction pour cacher le formulaire d'envoi à un ami **/
function fermerEnvoiAmi()
{
	getId('envoyer_ami').style.display = 'none'; 
	opacityOff();
	getId('loading_login_envoi_ami').innerHTML = getId('descriptif_envoi_ami').innerHTML;
}

/** fonction pour savoir si un nombre est pair ou impair **/
function pair(nombre)
{
	if(nombre/2 == Math.round(nombre/2)) return 1;
	else return 0;
}

/** fonction getElementsByClassName pour IE qui ne l'implémente pas de base **/
function getElementsByClassNameIE(oElm, strClassName)
{
	var arrElements = oElm.all;
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements);
}

/** désactive loading() **/
function unLoading()
{
	if(getId('status') || getId('status_marche'))
	{
		opacityOff();
		getId('status').style.display = 'none';
		getId('status_marche').style.display = 'none';
	}
}

/** fonction in_array fonctionnant comme en php ^^ **/
function inArray(needle, haystack, argStrict)
{
	// http://kevin.vanzonneveld.net
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: vlado houba
	// *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
	// *     returns 1: true
	// *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
	// *     returns 2: false
	// *     example 3: in_array(1, ['1', '2', '3']);
	// *     returns 3: true
	// *     example 3: in_array(1, ['1', '2', '3'], false);
	// *     returns 3: true
	// *     example 4: in_array(1, ['1', '2', '3'], true);
	// *     returns 4: false
	
	var key = '', strict = !!argStrict;
	
	if (strict)
	{
		for (key in haystack)
		{
			if (haystack[key] === needle) return true;
		}
	}
	else
	{
		for (key in haystack)
		{
			if (haystack[key] == needle) return true;
		}
	}
	
	return false;
}

/** FONCTION DE TEST PERMETTANT D'AFFICHER LES OBJETS JAVASCRIPT **/
function print_r(obj)
{
	win_print_r = window.open('about:blank', 'win_print_r');
	win_print_r.document.write('<html><body>');
	r_print_r(obj, win_print_r);
	win_print_r.document.write('</body></html>');
}
function r_print_r(theObj, win_print_r) // fonction indispensable à la fonction précédente
{
	if(theObj.constructor == Array || theObj.constructor == Object)
	{
		if (win_print_r == null)
		win_print_r = window.open('about:blank', 'win_print_r');
	}
	for(var p in theObj)
	{
		if(theObj[p].constructor == Array|| theObj[p].constructor == Object)
		{
			win_print_r.document.write("<li>["+p+"] =>"+typeof(theObj)+"</li>");
			win_print_r.document.write("<ul>");
			r_print_r(theObj[p], win_print_r);
			win_print_r.document.write("</ul>");
		}
		else win_print_r.document.write("<li>["+p+"] =>"+theObj[p]+"</li>");
	}
	win_print_r.document.write("</ul>");
}

/** fonction de stockage des scripts à charger **/
FuncOL = new Array();

function onLoad(Obj)
{
	FuncOL[FuncOL.length] = Obj;
}

function afficherInfobullePresse(article)
{
	getId('infobulle_'+article).style.display = 'block';
	getId('titre_defaut').style.display = 'none';
	getId('img_defaut').style.display = 'none';
}

function cacherInfobullePresse(article)
{
	getId('infobulle_'+article).style.display = 'none';
	getId('titre_defaut').style.display = 'block';
	getId('img_defaut').style.display = 'block';
}

/**fonction de sauvegarde d'event et de desactivation de bouton pour évtier double validation AJAX ( calcul du prix, compte client etc.) **/
function saveOnclick(id)
{
	var onclick = getId(id).onclick;
	return onclick;
}

/** sauvegarde le style d'un élément **/
function saveStyleColor(id)
{
	var style_color = getId(id).style.color;
	return style_color;
}

/**Desactivation d'un bouton de validation pour eviter les doubles validation AJAX **/
function desactiverBouton(id,color)
{
	var onclick = save_onclick(id);
	var style_color = save_style_color(id);
	var save_button = new Array(onclick,style_color);
	
	getId(id).onclick = function() { void(0); }
	getId(id).style.color = color; //permet de visualiser que la désactivation est effective
	return save_button;
	
}

/** Réactivation du bouton valider seulement si la requête à aboutie **/
function reactiverBouton(id,save_button)
{
	getId(id).onclick = save_button[0];
	getId(id).style.color = save_button[1];
}

/** =================================================================================== **/
/**							FONCTIONS POUR LES GALERIES PHOTOS							**/
/** =================================================================================== **/

var manuel;
var fading;
var currentOpacity;
var play;
var galleryContainer;
var imagesArray;
var imagesTotalNumber;
var activeImage;
var nextActiveImage;
var timeBetweenSlides;
var reInitGalleryDone = false;

function initGallery()
{
	getImages();
	
	for(var i = 0; i < imagesTotalNumber; i++)
	{
		if(document.all) getId('big_img_' + i).style.filter = 'alpha(opacity=100)';
		else getId('big_img_' + i).style.opacity = '0.99';
		
		getId('big_img_' + i).style.visibility = 'hidden';
	}
	
	getId('big_img_0').style.visibility = 'visible';
	
	activeImage = -1;
	nextActiveImage = 0;
	timeBetweenSlides = 2000;
	currentOpacity = 100;
	play = false;
	manuel = false;
	fading = true;
}

function getImages()
{
	galleryContainer = getId('cadre_image_principale');
	
	imagesArray = galleryContainer.getElementsByTagName('IMG');
	imagesTotalNumber = imagesArray.length;
}

function startSlide()
{
	play = true;
	manuel = false;
	
	setTimeout('nextImages()', timeBetweenSlides);
}

function stopSlide()
{
	play = false;
}

function nextImages()
{
	if(!manuel)
	{
		activeImage = nextActiveImage;
		
		if(nextActiveImage + 1 == imagesTotalNumber) nextActiveImage = 0;
		else nextActiveImage++;
	}
	
	if(fading)
	{
		if(!manuel) setTimeout('showImage()', timeBetweenSlides);
		else showImage();
	}
	else
	{
		getId('big_img_' + nextActiveImage).style.visibility = 'visible';
		getId('big_img_' + activeImage).style.visibility = 'hidden';
		
		if(play) setTimeout('nextImages()', timeBetweenSlides);
	}
}

function showImage()
{
	if(currentOpacity == 100) getId('big_img_' + nextActiveImage).style.visibility = 'visible';
	
	currentOpacity = currentOpacity - 3;
	
	if(document.all) // IE
	{
		getId('big_img_' + activeImage).style.filter = 'alpha(opacity=' + currentOpacity + ')';
		getId('big_img_' + nextActiveImage).style.filter = 'alpha(opacity=' + (100 - currentOpacity) + ')';
	}
	else // FF
	{
		getId('big_img_' + activeImage).style.opacity = Math.max(0.01, currentOpacity / 100); // Can't use 1 and 0 because of screen flickering in FF
		getId('big_img_' + nextActiveImage).style.opacity = Math.min(0.99, (1 - (currentOpacity / 100)));
	}
	
	if(play || manuel)
	{
		if(currentOpacity > 0) setTimeout('showImage()', 40);
		else
		{
			manuel = false;
			currentOpacity = 100;
			if(play) nextImages();
		}
	}
	else
	{
		currentOpacity = 100;
		
		for(var i = 0; i < imagesTotalNumber; i++)
		{
			if(document.all) getId('big_img_' + i).style.filter = 'alpha(opacity=100)';
			else getId('big_img_' + i).style.opacity = '0.99';
			
			getId('big_img_' + i).style.visibility = 'hidden';
		}
		
		getId('big_img_' + nextActiveImage).style.visibility = 'visible';
	}
}

function switchImages(id,reInitGallery,hideElement) //id de l'image a afficher, galerie à reactiver si desactivée, element à cacher (qui avait pris la place de la galerie) si besoin
{
	if(reInitGallery == true && reInitGalleryDone != true)/** si la galerie a été arrêté entre temps, par exemple lorsqu'une video s'affiche a la place de la galerie**/
	{
		initGallery(); // on reinitialise
		getId(hideElement).style.display = 'none'; //on cache l'élement 'video' par exemple
		getId('cadre_image_principale').style.display = 'block'; //on reaffiche le bloc de la galery
		reInitGalleryDone = true;
	}
	activeImage = nextActiveImage;
	stopSlide();
	manuel = true;
	nextActiveImage = id;
	nextImages();
}

function move(e)
{
	// Si la bulle est visible, on calcul en temps reel sa position ideale
	
	hideSelect();
	
	if (navigator.appName != "Microsoft Internet Explorer") // Si on est pas sous IE
	{
		$('div.tooltip').css("left" , e.pageX + 8 +"px");
		$('div.tooltip').css("top" , e.pageY - 10 + "px");
	}
	else
	{ 
		if(browserVersion() == 'Internet Explorer 6' || browserVersion() == 'Internet Explorer 7')
		{
			$('div.tooltip').css("left" , 6 + event.x + document.documentElement.scrollLeft + "px");
			$('div.tooltip').css("top" , event.y + document.documentElement.scrollTop - 13 + "px");
		}
		else
		{
			$('div.tooltip').css("left" , 6 + event.x + "px");
			$('div.tooltip').css("top" , event.y - 13 + "px");
		}
	}
}

function afficherLoader(typevacances, path)
{
	$('div#contenuBas').css('display', 'block');
	// $('div#blocLoader img#loader').attr('src', path + 'medias/prixdispo/ajax-loader_' + typevacances + '.gif');
	$('div#blocLoader').css('display', 'block');
}

/** supprime les espaces autour d'une chaine **/
function trim(string)
{
	return string.replace(/^\s+/g,'').replace(/\s+$/g,'');
}

/** MODULE PRIXDISPO **/

function directionResalag(form)
{
	var id = form.id;
	var tabId = id.split("_");
	id = 'semaine_' + tabId[2] + '_' + tabId[1];
	var value = getId(id).value;
	var tabValue = value.split('|');
	
	var dateDebut = tabValue[0];
	var dateFin = tabValue[1];
	var prixBase = tabValue[2];
	var prixReduit = tabValue[3];
	
	var inputDateDebut = document.createElement('input');
	inputDateDebut.setAttribute('type', 'hidden');
	inputDateDebut.setAttribute('name', 'dateDebut');
	inputDateDebut.setAttribute('value', dateDebut );
	form.appendChild(inputDateDebut);
	
	var inputDateFin = document.createElement('input');
	inputDateFin.setAttribute('type', 'hidden');
	inputDateFin.setAttribute('name', 'dateFin');
	inputDateFin.setAttribute('value', dateFin );
	form.appendChild(inputDateFin);
	
	var inputPrixBase = document.createElement('input');
	inputPrixBase.setAttribute('type', 'hidden');
	inputPrixBase.setAttribute('name', 'prixBase');
	inputPrixBase.setAttribute('value', prixBase );
	form.appendChild(inputPrixBase);
	
	var inputPrixVente = document.createElement('input');
	inputPrixVente.setAttribute('type', 'hidden');
	inputPrixVente.setAttribute('name', 'prixReduit');
	inputPrixVente.setAttribute('value', prixReduit );
	form.appendChild(inputPrixVente);
}

function googleAnalyticsSnippet(idFormElementToPost)
{
	// Suppression (temporaire ?) de la gestion du POST analytics car augmentation abusive et bizare du trafic
	getId(idFormElementToPost).submit(); // On post le formulaire
}

/** Créé les inputs correspondant aux onglets sélectionnés dans prixDispos **/
function informationsPrixDispo(obj)
{
	var inputFormuleChoisie = document.createElement('input');
	inputFormuleChoisie.setAttribute('type', 'hidden');
	inputFormuleChoisie.setAttribute('name', 'formuleChoisie');
	
	var inputSaison = document.createElement('input');
	inputSaison.setAttribute('type', 'hidden');
	inputSaison.setAttribute('name', 'saison');
	
	var inputDevise = document.createElement('input');
	inputDevise.setAttribute('type', 'hidden');
	inputDevise.setAttribute('name', 'devise');
	
	inputSaison.value = getId('saison').value;
	inputDevise.value = '&euro;';
	inputFormuleChoisie.value = getId('code_formule').value + '_' + getId('libelle_formule').value;
	
	obj.appendChild(inputSaison);
	obj.appendChild(inputDevise);
	obj.appendChild(inputFormuleChoisie);
}

/** change le jour du début de séjour **/
function changerJour(jour)
{
	$("img#prixdispo_loader").css('display', 'block'); 
	
	setTimeout(
		function(){
			$("img#prixdispo_loader").css('display', 'none');
			
			for(var i = 1; i <= 7; i++)
				if($('#jour_' + i).length)
					$('#jour_' + i).removeClass('hebergement_courant').addClass('hebergement');
			
			$('#jour_' + jour).removeClass('hebergement').addClass('hebergement_courant');
		},
		300
	);
}

/** Défini le nombre de participants au voyage **/
function infosParticipants(idForm)
{
	$("#dialog-form").dialog({
		autoOpen: false,
		title: 'Nombre de participants',
		width: 512,
		minHeight: 156,
		show: 'blind',
		hide: 'blind',
		modal: true,
		stack: true,
		dialogClass: 'boiteDeDialogue',
		position: 'center',
		resizable: false,
		draggable: true
	});
	$('#dialog-form').dialog('open');
}

/** Défini le nombre de participants au voyage **/
function majInputFormulaire(idForm)
{
	var formulaire = getId(idForm);
	
	var nbAdultes = $('#dialog-form select#nbAdultes').attr('value');
	var nbEnfants = $('#dialog-form select#nbEnfants').attr('value');
	
	$('<input/>', {'type': 'hidden', 'name': 'nbAdultes', 'value': nbAdultes }).appendTo(formulaire);
	$('<input/>', {'type': 'hidden', 'name': 'nbEnfants', 'value': nbEnfants }).appendTo(formulaire);
	
	if(parseFloat(nbEnfants) > 0)
	{
		ageEnfants = Array();
		$('#dialog-form select[id^="ageEnfants_"]').each(function(index){
			ageEnfants[index] = $(this).attr('value');
		});
		
		$("<input/>", {"type": "hidden", "name": "ageEnfants", "value": ageEnfants.join('_') }).appendTo(formulaire);
	}
	
	informationsPrixDispo(formulaire);
	directionResalag(formulaire);
	$('#dialog-form').dialog('close');
	googleAnalyticsSnippet(idForm)
}

/** Change le prix affiché dans le module prix dispo **/
function changerPrix(jour, idCourant, symboleMonnaie)
{
	var prixBase, prixVente, idSelect;
	var tab = getId(idCourant).value.split('|');
	
	var numeroSemaine = tab[4];
	
	var selectsTypos = getId('jour_' + jour).getElementsByTagName('select');
	var nbSelects = selectsTypos.length;
	
	for(var i = 0; i < nbSelects; i++)
	{
		idSelect = selectsTypos[i].id;
		typo = idSelect.substr(10);
		
		if(getId('dates_' + jour + '_' + typo + '_' + numeroSemaine))
		{
			getId('dates_' + jour + '_' + typo + '_' + numeroSemaine).selected = "selected";
			// alert('dates_' + jour + '_' + typo + '_' + numeroSemaine);
			
			tab = getId(idSelect).value.split('|');
			prixBase = tab[2];
			prixVente = tab[3];
			
			if(symboleMonnaie != '£')
			{
				getId('base_' + jour + '_' + typo).innerHTML = prixBase + ' ' + symboleMonnaie;
				getId('vente_' + jour + '_' + typo).innerHTML = prixVente + ' ' + symboleMonnaie;
			}
			else
			{
				getId('base_' + jour + '_' + typo).innerHTML = symboleMonnaie + ' ' + prixBase;
				getId('vente_' + jour + '_' + typo).innerHTML = symboleMonnaie + ' ' + prixVente;
			}
			
			if(prixBase == prixVente)
			{
				getId('base_' + jour + '_' + typo).className = 'prix_base';
				getId('vente_' + jour + '_' + typo).className = 'prix_vente_seul';
			}
			else
			{
				getId('base_' + jour + '_' + typo).className = 'prix_base_barre';
				getId('vente_' + jour + '_' + typo).className = 'prix_vente';
			}
		}
	}
}

/** Change la durée en jour du séjour **/
function changerDuree(duree)
{
	if(duree == 'semaine')
	{
		getId('bloc_court_sejour').className = 'duree_gris';
		getId('bloc_semaine').className = 'duree';
		getId('nb_jours').disabled = 'disabled';
		getId('nb_semaines').disabled = '';
	}
	else
	{
		getId('bloc_court_sejour').className = 'duree';
		getId('bloc_semaine').className = 'duree_gris';
		getId('nb_semaines').disabled = 'disabled';
		getId('nb_jours').disabled = '';
	}
}

/** change les styles des onglets en fonction de leur état (actif/inactif) **/
/* function changerOnglet(idLien)
{
	var liensOnglets = getId('onglets_formules').getElementsByTagName('a');
	var nbOnglets = liensOnglets.length;
	
	for(var i = 0; i < nbOnglets; i++)
	{
		var idOnglet = liensOnglets[i].id;
		var onglets = getId(idOnglet).getElementsByTagName('img');
		
		if(getId(idOnglet) == idLien)
		{
			getId(idOnglet).className = 'onglet_actif';
			
			onglets[0].src = 'medias/prixdispo/onglet_actif_gauche.gif';
			onglets[1].src = 'medias/prixdispo/onglet_actif_droite.gif';
		}
		else
		{
			getId(idOnglet).className = 'onglet_inactif';
			
			onglets[0].src = 'medias/prixdispo/onglet_inactif_gauche.gif';
			onglets[1].src = 'medias/prixdispo/onglet_inactif_droite.gif';
		}
	}
} */

/** 
*** Gère le nombre de participants. Si le nombre est trop élevé( ici 20 ), un message d'erreur est affiché.
*** Sinon si le nombre d'enfants à changer alors on créé les blocs
**/
function changeNbEnfants()
{
	var listeNbEnfants = getId('nbEnfants');
	var listeNbAdultes = getId('nbAdultes');
	
	var optionsListeEnfants = listeNbEnfants.getElementsByTagName('option');
	var nbEnfantsSelected = parseFloat(listeNbEnfants.value);
	var resteParticipants = 12 - parseFloat(listeNbAdultes.value);
	
	// alert("Valeur du reste de participants : " + resteParticipants);
	
	if( resteParticipants <= 0)
	{ 
		listeNbEnfants.value = 0;
		listeNbEnfants.disabled = true;
		// On met à jour le nombre de select pour les ages des enfants
		ageEnfants();
	}
	else
	{
		if(listeNbEnfants.disabled == true)
		{
			listeNbEnfants.disabled = false;
		}
		if( nbEnfantsSelected > resteParticipants)
		{
			listeNbEnfants.options[resteParticipants].selected = 'selected';
		}
		
		var i = optionsListeEnfants.length - 1 ;
		while ( i > resteParticipants) 
		{
			listeNbEnfants.removeChild(optionsListeEnfants[i]);
			i--;
		}
		
		// On met à jour le nombre de select pour les ages des enfants
		ageEnfants();
		
		if( optionsListeEnfants.length-1 < resteParticipants && optionsListeEnfants.length <= 6 )
		{
			var nbEnfants = range( optionsListeEnfants.length, 7 );
			
			for(var id in nbEnfants)
			{
				addOption(listeNbEnfants,nbEnfants[id],nbEnfants[id]);
			}
			optionsListeEnfants[listeNbEnfants.value].setAttribute('selected', 'selected');
		}
	}
}

/** Fonction d'affichage des blocs pour l'age des enfants **/
function ageEnfants()
{
	
	var nbEnfants = getId('nbEnfants').value;
	var formulaire = getId('formNombreParticipants');
	
	if(nbEnfants != '0')
	{
		var date = new Date();
		var tableauAnnee = range(0,13);
		var i = 0;
		
		if(!getId('blocAgeEnfants'))
		{
			var container = document.createElement("div");
			container.setAttribute('id', 'blocAgeEnfants');
			
			/** Création du block titre pour les ages **/
			var titre = document.createElement('h3');
			titre.setAttribute('id', 'titre');
			
			
			titre.innerHTML = "Age(s) Enfant(s)";
			
			container.appendChild(titre);
		}
		else
		{
			var container = getId('blocAgeEnfants');
			var listeDesDivs = container.getElementsByTagName('div');
			var listeDesListesAges = container.getElementsByTagName('select');
			var nbEnfantsOld = listeDesListesAges.length ;
			
			if(nbEnfantsOld > nbEnfants)
			{
				// Si il y a plus de liste que d'enfants nouvellement selectionnés
				// Alors on supprime les dernieres listes de manière à avoir le bon compte
				for(i = nbEnfantsOld-1; i >= nbEnfants ; i--)
				{
					container.removeChild(listeDesDivs[i]);
				}
				i = nbEnfants + 999;
			}
			else
			{
				i = nbEnfantsOld;
			}
		}
		
		for(i; i < nbEnfants ; i++)
		{
			var newInput = document.createElement('select');
			newInput.setAttribute('name', 'ageEnfants[]');
			newInput.setAttribute('id', 'ageEnfants_' + i, tableauAnnee[i]);
			newInput.setAttribute('class', 'inputForm');
			
			for(var id in tableauAnnee)
			{
				addOption(newInput, tableauAnnee[id], tableauAnnee[id]);
			}
			
			var newSpan = document.createElement('span');
			newSpan.className = 'annee';
			var newLabel = document.createElement('label');
			newLabel.setAttribute('for', 'ageEnfants_' + i);
			newLabel.className = 'labelForm';
			newLabel.innerHTML = "Enfant  " + (i+1) + " : " + ' '; // Pour IE...
			
			newSpan.innerHTML = "ans";
			
			var div = document.createElement('div');
			div.setAttribute('class', 'ageEnfants');
			
			div.appendChild(newLabel);
			div.appendChild(newInput);
			div.appendChild(newSpan);
			
			container.appendChild(div);
		}
		
		
		if(!getId('blocAgeEnfants'))
		{
			container.style.display = "none";
			formulaire.appendChild(container)
			
			$('div#blocAgeEnfants').slideDown(1000);
		}
	}
	else
	{
		$('div#blocAgeEnfants').slideUp(1000, function(){
			if(getId('blocAgeEnfants'))
			{
				formulaire.removeChild(getId('blocAgeEnfants'));
			}
		});
	}
}

function range(/*[start,] stop[, step]*/)
{
	if (!arguments.length)
	{
		return [];
	}
	
	var min, max, step;
	if (arguments.length == 1)
	{
		min = 0;
		max = arguments[0]-1;
		step = 1;
	}
	else
	{
		/* Step par défaut mis à 1 si non précisé */
		min = arguments[0];
		max = arguments[1]-1;
		step = arguments[2] || 1;
	}
	
	/* Transforme les pas négatifs en pas positifs en changeant l'ordre du tableau */
	if (step < 0 && min >= max)
	{
		step *= -1;
		
		var tmp = min;
		min = max;
		max = tmp;
		
		min += ((max-min) % step);
	}
	
	var a = [];
	for (var i = min; i <= max; i += step)
	{
		a[i] = i;
	}
	return a;
}

/** Ajoute des options à un select **/
function addOption(/*selectbox,text,value[, selected ]*/)
{
	var selectbox = arguments[0];
	var text = arguments[1];
	var value = arguments[2];
	
	var optn = document.createElement("option");
	optn.text = text;
	optn.value = value;
	if(arguments[3]) optn.setAttribute('selected', 'selected');
	selectbox.options.add(optn);
}

/** Adapte la taille de la zone de liste résidence (page aquaroma) **/
function ajusterZonesAquaroma()
{
	// getId('fond_transparent_1').style.height = getId('contenu_1').offsetHeight + 'px';
	// getId('fond_transparent_2').style.height = getId('contenu_2').offsetHeight + 'px';
	// getId('fond_transparent_3').style.height = getId('contenu_3').offsetHeight + 'px';
	getId('fond_transparent_4').style.height = getId('contenu_4').offsetHeight + 'px';
	getId('fond_transparent_5').style.height = getId('contenu_5').offsetHeight + 'px';
}


