// valeur par défaut en milliseconde avant fermeture du menu si non-activité
var timer = 500;
// On initialise le timer
var timeout = false;


/** Fonction affichant un message d'erreur
* E : message (string) , message d'erreur à afficher dans le calque msg_erreur
**/
function Erreur( message )
{
	document.getElementById("msg_erreur").style.visibility="visible";
	document.getElementById("msg_erreur").style.display="block";
	document.getElementById("msg_erreur").innerHTML = message;
}


/** Fonction affichant de l'HTML dans un calque
* E : html (string) , html à afficher dans le calque
	: calque (string) , calque dans lequel on va afficher l'html
**/
function Affichage(html, calque)
{
	if( calque != "undefined"  &&  calque != "")
	{
		parent.document.getElementById(calque).innerHTML = html;
	}
}


/** Fonction permettant de cacher un calque
* E : calque (string) , nom du calque à cacher
**/
function CacherCalque( calque )
{
	if(document.getElementById(calque))
	{
		document.getElementById(calque).style.visibility='hidden';
		document.getElementById(calque).style.display='none';
	}
}


/** Fonction permettant de montrer un calque
* E : calque (string) , nom du calque à montrer
**/
function MontrerCalque( calque )
{
	if(document.getElementById(calque))
	{
		document.getElementById(calque).style.visibility='visible';
		document.getElementById(calque).style.display='block';
	}
}


/** Fonction affichant un sous menu qui se déroule de haut en bas
* E : sm (string) , nom du calque de sous-menu
	: nbre_sm (int) , nombre de sous-menu à afficher dans le calque sm
**/
function AfficherSousMenu( sm, nbre_sm )
{
	MontrerCalque(sm);
	document.getElementById(sm).style.width = document.getElementById(sm).offsetWidth; // Corrige un bug de IE
	if(document.getElementById(sm).style.height == "0px")
	{
		var count=0;
		var taille_max = nbre_sm * 25
		for (var i=0; i<=taille_max; i++)
		{
			count++;
			setTimeout('document.getElementById("'+sm+'").style.height = "'+i+'px";',count*1.3);
		}	
	}
}


/** Fonction cachant les sous-menus qui les rentre de bas en haut
**/
function FermerSousMenu()
{
	timer = 3000;
	if(timeout != false)
	{
		// On supprime le timer et on le réinitialise
		clearTimeout(timeout);
		timeout = false;
	}
	for(var i=1; i<=5; i++)
	{
		if( document.getElementById('sousmenu'+i) )
		{
			var taille = document.getElementById('sousmenu'+i).offsetHeight;
			if(taille != 0)
			{
				var count=0;
				for (var j=taille; j>=0; j--)
				{
					count++;
					setTimeout('document.getElementById("sousmenu'+i+'").style.height = "'+j+'px";',count);
				}
			}
		}
	}
}




/** Fonction
**/
function lancement_timer()
{
	if(timer>0)
	{
		timer = timer-1000;
		timeout = setTimeout('lancement_timer();',1000);
	}
	else
	{
		IncrementerTimer();
		FermerSousMenu();
	}
}

function IncrementerTimer()
{
	timer = 3000;
}



/** Fonction chargeant une page
* E : page (string) , fichier que l'on va charger
	: param (string) , 1 GET
	: js_local : fichier javascript contenu dans le dossier Fonctions
	: js_distant : fichier javascript situé sur un autre site
	: calque (string) , dans quel calque on va charger la page
**/
function ChargePage(page, param, js_local, js_distant, calque)
{
	if(calque!="")
	{
		// On cache le calque d'erreur
		CacherCalque('msg_erreur');
		// On montre le calque dans lequel on veut afficher
		MontrerCalque(calque);
	}
	
	var http_request = false;

	if (window.XMLHttpRequest) // Mozilla, Safari,...
	{ 
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType)
		{
			http_request.overrideMimeType('text/html; charset=ISO-8859-15');
		}
	}
	else if (window.ActiveXObject) // IE
	{
		try
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e)
			{
			}
		}
	}

	if (!http_request)
	{
		Erreur('Abandon : Impossible de créer une instance XMLHTTP.');
		return false;
	}
	
	
	http_request.onreadystatechange = function()
	{ 
		if (http_request.readyState == 4)
		{
			if (http_request.status == 200)
			{
				charge_js(js_local,js_distant);
				Affichage(http_request.responseText,calque);
			}
			else
			{
				Erreur("<font color='#CC0000'>La page <b>"+page+"</b> est introuvable ...</font>");
				CacherCalque(calque);
			}
		}
	};
	
	url = page;
	if (param != "")
	{
		url += "?"+param;
	}
	http_request.open('GET', url, true);
	http_request.send(null);
}



function charge_js(file_local, file_distant)
{
	
	if(file_distant != "")
	{
		var Head = document.getElementsByTagName('head')[0];
		var head_inc = document.createElement('script');
		head_inc.setAttribute('type','text/javascript');
		head_inc.setAttribute('src',file_distant);
		Head.appendChild(head_inc);
	}
	
  	if (file_local != "")
	{
		var Head = document.getElementsByTagName('head')[0];
		var head_inc = document.createElement('script');
		head_inc.setAttribute('language','javascript');
		head_inc.setAttribute('type','text/javascript');
		head_inc.setAttribute('src',file_local);
		Head.appendChild(head_inc);
	}
	
}


var retour = null; // variable temporaire permettant de savoir quand le serveur a traité la requete
var compteur = 0; // variable permettant une temporisation afin d'obtenir la réponse de la requete xhr
function EnvoieFormulaire(form,page,param,reponse,calque,fonction)
{
	function getXhr()
	{
		var xhr = null; 
		if(window.XMLHttpRequest) // Firefox et autres
		xhr = new XMLHttpRequest(); 
		else if(window.ActiveXObject)
		{ // Internet Explorer 
			try
			{
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		}
		else
		{ // XMLHttpRequest non supporté par le navigateur 
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
			xhr = false; 
		} 
		return xhr
	}
			

	var xhr = getXhr()
	
	if(form != "")
	{
		formulaire = document.getElementById(form);
		
		// input
		var TabInput = formulaire.getElementsByTagName('input');
		var input ="input=input";
		for(var i=0; i<TabInput.length; i++)
		{	if( TabInput[i].type!="checkbox" || TabInput[i].checked == true )
				input+= "&"+TabInput[i].name+"="+TabInput[i].value;
		}
		
		// textarea
		var textarea = "";
		var TabTextarea = formulaire.getElementsByTagName('textarea');
		for(i=0; i<TabTextarea.length; i++)
			textarea+= "&"+TabTextarea[i].name+"="+TabTextarea[i].value;
		textarea = textarea.replace(/\n/gi,"<br />");
			
		// select
		var selects = "";
		var TabSelects = formulaire.getElementsByTagName('select');
		for(i=0; i<TabSelects.length; i++)
			selects+= "&"+TabSelects[i].name+"="+TabSelects[i].value;
	}
	else
	{
		var input ="input=input";
		var textarea = "";
		var selects = "";
	}
	
	
	xhr.open("POST",page,true);
	
	// On défini ce qu'on va faire quand on aura la réponse
	xhr.onreadystatechange = function()
	{
		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
		if(xhr.readyState == 4 && xhr.status == 200)
		{
			if(reponse == "alert")
				alert(xhr.responseText);
			else if(reponse == "html")
				ChargePage(page, input+textarea+selects+"&"+param, '', '', calque);
			else if(reponse == "fonction"  &&  fonction != "")
			{
				if( fonction.indexOf("(") != -1  ||  fonction.indexOf("%") != -1  ||  fonction.indexOf("&") != -1 )
					alert("Vous etes victime d'une attaque XSS. Veuillez en avertir l'administrateur du site.");
				else
					eval(fonction+"('"+xhr.responseText+"');");
			}
		}
	}
	
	if (xhr.overrideMimeType)
	{
		xhr.overrideMimeType('text/html; charset=ISO-8859-15');
	}
	// Obligatoire pour transmettre des données en POST
	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	
	// Envoie de toutes les données	
	xhr.send(input+textarea+selects);
}

function IncrementerCompteur()
{
	compteur++;
}


/*************  INLINE EDITION ******************/
function Supprimer(page,id)
{
	if(confirm("Voulez vous supprimer cette ligne ?"))
	{
		Affichage("","PageAdmin");
		ChargePage(page,"action=supprimer&id="+id,"","","PageAdmin");
	}
}

function Associer(page,id)
{
	if(confirm("Voulez vous associer cette ligne avec l'immeuble choisi?"))
	{
		Affichage("","PageAdmin");
		ChargePage(page,"action=associer&id="+id,"","","PageAdmin");
	}
}

function Ajouter(form,page)
{
	EnvoieFormulaire(form,page,"","html","PageAdmin");
}




/*************************************** INFOBULLE *******************************************************/
function GetId(id)
{
	return document.getElementById(id);
}
var bulle=false; // La variable bulle nous dit si la bulle est visible ou non


function move(e)
{
	if(bulle)
	{  // Si la bulle est visible, on calcul en temps reel sa position ideale
		if (navigator.appName!="Microsoft Internet Explorer")
		{ // Si on est pas sous IE
			GetId("curseur").style.left=e.pageX + 10+"px";
			GetId("curseur").style.top=e.pageY + 0+"px";
		}
		else
		{ 
			if(document.documentElement.clientWidth > 0)
			{
				GetId("curseur").style.left=20+event.x+document.documentElement.scrollLeft+"px";
				GetId("curseur").style.top=10+event.y+document.documentElement.scrollTop+"px";
			}
			else
			{
				GetId("curseur").style.left=20+event.x+document.body.scrollLeft+"px";
				GetId("curseur").style.top=10+event.y+document.body.scrollTop+"px";
			}
		}
	}
}


function montre(text)
{
	if(bulle==false)
	{
		MontrerCalque("curseur");
		GetId("curseur").innerHTML = text; // Cette fonction est a améliorer, il parait qu'elle n'est pas valide (mais elle marche)
		bulle=true;
	}
}


function cache()
{
	if(bulle==true)
	{
		CacherCalque("curseur"); // Si la bulle etais visible on la cache
		bulle=false;
	}
}
document.onmousemove=move; // des que la souris bouge, on appelle la fonction move pour mettre a jour la position de la bulle.

/************************************************************* FIN INFOBULLE ****************************************************/

/************* VERIFICATION DES FORMULAIRE DE SAISIE DE FOURNISSEURS, ADMINISTRATION, ET URGENCES *******************/
function verif_formulaireAdminGeneralite(form)
{
	formulaire = document.getElementById(form);
	
	if(formulaire.nom.value == "")  {
		alert("Veuillez entrer un nom.");
		formulaire.nom.focus();
		return false;
	}
	if(formulaire.tel.value != "")
	{
	var chkZ = 1;
	for(i=0;i<formulaire.tel.value.length;++i)
	if(formulaire.tel.value.charAt(i) < "0" || formulaire.tel.value.charAt(i) > "9")
	 chkZ = -1;
	if(chkZ == -1) {
		alert("Ce numéro de téléphone ne comporte pas que des chiffres !");
		formulaire.tel.focus();
		return false;
	}
		if(formulaire.tel.value.length <10 || formulaire.tel.value.length >10)  {
			alert("Veuillez entrer un numéro de téléphone à 10 chiffres");
			formulaire.tel.focus();
			return false;
		}
	}
	if(formulaire.telPortable.value != "")
	{
	var chkZ = 1;
	for(i=0;i<formulaire.telPortable.value.length;++i)
	if(formulaire.telPortable.value.charAt(i) < "0" || formulaire.telPortable.value.charAt(i) > "9")
	 chkZ = -1;
	if(chkZ == -1) {
		alert("Ce numéro de téléphone ne comporte pas que des chiffres !");
		formulaire.telPortable.focus();
		return false;
	}
		if(formulaire.telPortable.value.length <10 || formulaire.telPortable.value.length >10)  {
			alert("Veuillez entrer un numéro de téléphone à 10 chiffres");
			formulaire.telPortable.focus();
			return false;
		}
	}
	if((formulaire.telPortable.value == "") && (formulaire.tel.value == "")){
		alert("Veuillez entrer un numéro de téléphone.");
		formulaire.tel.focus();
		return false;
	}
	if(formulaire.adresse.value == "")  {
		alert("Veuillez entrer une adresse.");
		formulaire.tel.focus();
		return false;
	}
	if(formulaire.ville.value == "")  {
		alert("Veuillez entrer une ville.");
		formulaire.ville.focus();
		return false;
	}
	if( formulaire.cp.value == "") {
		alert("Veuillez entrer un code postal.");
		formulaire.cp.focus();
		return false;
	}

	if(formulaire.cp.value != "")
	{
	var chkZ = 1;
	for(i=0;i<formulaire.cp.value.length;++i)
	if(formulaire.cp.value.charAt(i) < "0" || formulaire.cp.value.charAt(i) > "9")
	 chkZ = -1;
	if(chkZ == -1) {
		alert("Ce code postal ne comporte pas que des chiffres !");
		formulaire.cp.focus();
		return false;
	}
		if(formulaire.cp.value.length <4 || formulaire.cp.value.length >5)  {
			alert("Veuillez entrer un code postal à 4 ou 5 chiffres");
			formulaire.cp.focus();
			return false;
		}
	}
	if(formulaire.url.value != "") {
		if(formulaire.url.value.indexOf('.') == -1) {
			alert("Ce site n'est pas valide.");
			formulaire.url.focus();
			return false;
		}
	}
	if(formulaire.mail.value != "") {
		if(formulaire.mail.value.indexOf('@') == -1) {
			alert("Cette adresse électronique n'est pas valide.");
			formulaire.mail.focus();
			return false;
		}
		if(formulaire.mail.value.indexOf('.') == -1) {
			alert("Cette adresse électronique n'est pas valide.");
			formulaire.mail.focus();
			return false;
		}
	}
return true;
}
function verif_formulaireAdminEmail(form)
{
	formulaire = document.getElementById(form);
	if(formulaire.email.value == "") {
		alert("Veuillez entrer une adresse électronique.");
		formulaire.email.focus();
		return false;
	}
	if(formulaire.email.value.indexOf('@') == -1) {
		alert("Cette adresse électronique n'est pas valide.");
		formulaire.email.focus();
		return false;
	}
	if(formulaire.email.value.indexOf('.') == -1) {
		alert("Cette adresse électronique n'est pas valide.");
		formulaire.email.focus();
		return false;
	}
return true;
}
/************* FIN VERIFICATION DES FORMULAIRE DE SAISIE DE FOURNISSEURS, ADMINISTRATION, ET URGENCES *******************/

/***************************** GOOGLE ****************************/

var chargement = false;
