
document.observe("dom:loaded", function() {
	document.body.oncontextmenu = function(){return false;};
});

function finChargementPage()
{
	//document.getElementById('divTexte').style.show(500);
	$("divTexte").hide(500);
	$("divTexte").show('slow');
	
}
/**
 * Si l'input est vide, on remet le texte initial
 * @param id
 */
function remettreInitialInputText(id)
{
	input = $(id);
	if(input.value == "")
		input.value = input.defaultValue;
}

/**
 * Vide un champ input text pré-rempli
 * @param id : celui du input
 * @param txt : le txt de départ
 */
function viderInputText(id, txt)
{
	input = $(id);
	if(input.value == txt)
	{
		input.value = "";
	}
}

///////////////////// DATES ////////////////////////

// Vérifie la date et change de couleur
function verifDate(d)
{
	var texte = document.getElementById('texteDate');
	if(!isDate(d))
	{
		texte.style.color='red';
		texte.style.textDecoration='blink';
	}
	else
	{
		texte.style.color='green';
		texte.style.textDecoration='none';
	}		
}

// Cette fonction permet de vérifier la validité d'une date au format jj/mm/aa ou jj/mm/aaaa
function isDate(d) 
{
	
	 if (d == "") // si la variable est vide on retourne faux
		 return false;
	
	 e = new RegExp("^[0-9]{1,2}\/[0-9]{1,2}\/([0-9]{2}|[0-9]{4})$");
	
	 if (!e.test(d)) // On teste l'expression réguliére pour valider la forme de la date
		 return false; // Si pas bon, retourne faux
	
	 // On sépare la date en 3 variables pour vérification, parseInt() converti du texte en entier
	 j = parseInt(d.split("/")[0], 10); // jour
	 m = parseInt(d.split("/")[1], 10); // mois
	 a = parseInt(d.split("/")[2], 10); // année
	
	 // Si l'année n'est composée que de 2 chiffres on compléte automatiquement
	 if (a < 1000) 
	 {
		 if (a < 89) a+=2000; // Si a < 89 alors on ajoute 2000 sinon on ajoute 1900
		 else a+=1900;
	 }
	
	 // Définition du dernier jour de février
	 // Année bissextile si annnée divisible par 4 et que ce n'est pas un siécle, ou bien si divisible par 400
	 if (a%4 == 0 && a%100 !=0 || a%400 == 0) fev = 29;
	 else fev = 28;
	
	 // Nombre de jours pour chaque mois
	 nbJours = new Array(31,fev,31,30,31,30,31,31,30,31,30,31);
	
	 // Enfin, retourne vrai si le jour est bien entre 1 et le bon nombre de jours, idem pour les mois, sinon retourn faux
	 return ( m >= 1 && m <=12 && j >= 1 && j <= nbJours[m-1] );
}


///////////////////////// AJAX //////////////////////////

/**
* action envoi une requéte ajax é l'adresse "adresse" (1er paramétre) vers la fonction javascript "reponse" (2e paramétre) 
* paramétre:
*		-adresse: adresse du serveur virtuel
*		-reponse: nom de la fonction qui traite le retour de "adresse"
* resultat: "reponse".
*/
function ajax(adresse,reponse)
{
	// Requete AJAX assynchrone
	if(window.ActiveXObject)
		try{	xhr=new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){xhr=new ActiveXObject("MSXML2.XMLHTTP");	}
	else if(window.XMLHttpRequest)
		xhr=new XMLHttpRequest();
	
	// Définissions de la fonction récupérant le résultat de la requete AJAX
	xhr.onreadystatechange=reponse;	
	// Adresse ou l'on va effectuer la requete SQL, paramétre true => asynchonisme
	xhr.open("POST",adresse, true);		
	// Envoi de la requéte
	xhr.send(null);	
}

function ajaxBis(adr,reponse, input)
{	
	// On coche l'entité sélectionnée.
	input.checked = 1;
	//alert(adr);
	ajax(adr,reponse);
}

//////////////////////// DOM /////////////////////////////

/* Créé un objet DOM depuis une chaine de caractére é la sauce XML.*/
function loadXMLDepuisChaine(chaine)
{
	var doc;
	
	if (window.ActiveXObject) // IE
	{
		var doc = new ActiveXObject("Msxml2.DOMDocument.3.0" );
		doc.async = false;
		doc.loadXML(chaine);
	}
	else // Autres navigateurs.
	{
		var parser = new DOMParser();
		doc = parser.parseFromString(chaine, "text/xml");
	}
	return doc;
}

/* Charge un fichier XML ou XSL sous forme DOM é partir de son URL*/
function loadXMLDoc(url)
{
	// Firefox
	if (window.XMLHttpRequest)
	{
		xhttp=new XMLHttpRequest();
	}
	else
	{	
		xhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	xhttp.open("GET",url,false);
	xhttp.send("");
	
	return xhttp.responseXML;
}
 
//////////////////////// TRANSFORMATION XSL ////////////////////////////////

/*
      xmlFile: adresse du XML é charger
      xslFile: adresse du XSL é charger
      id: ID du paragraphe dans lequel la transformation va étre affichée.
*/
function transform(xmlFile, xslFile, id)
{
	var xsl = loadXMLDoc(xslFile);
	var xml = loadXMLDoc(xmlFile);

	transformationXSL(xml, xsl, id);
}

/*
      xmlDOM: racine du document XML
      xslFile: racine du document xsl
      id: ID du paragraphe dans lequel la transformation va étre affichée.
      action: 1 insertion, 2: modification
*/
function transformationXSL(xmlDOM, xslDOM, id, action)
{	
	try 
	{
		// Noeud cible
		var target = $(id);
		
		// On créé deux expressionx réguliéres pour effectuer un remplacement de chaines.
		var reg1=new RegExp("cochee", "gi");
		var reg2=new RegExp("case_cocher", "gi");
		var reg3=new RegExp("img_xsl", "gi");
		
		// Firefox
		if (window.XSLTProcessor)
		{
			var xsltProcessor = new XSLTProcessor();
			var ownerDocument = document.implementation.createDocument("", "test", null);
			xsltProcessor.importStylesheet(xslDOM);
			
			var fragment = xsltProcessor.transformToFragment(xmlDOM, document);
			
			switch(action)
			{
				case 1: target.appendChild(fragment);break;
				case 2: target.innerHTML="";target.appendChild(fragment);break;
				default: target.innerHTML="";target.appendChild(fragment);break;
			}
		} 
		else if (window.ActiveXObject)
		{
			var fragment = xmlDOM.transformNode(xslDOM);
			//alert(fragment);
			// ActiveX pour Internet Explorer
			switch(action)
			{
				case 1: target.innerHTML += fragment;break;
				case 2: target.innerHTML = fragment;break;
				default: target.innerHTML = fragment;break;
			}
		}
		// On remplace "case_cocher" par "input" et "cochee" par "checked"
		target.innerHTML = target.innerHTML.replace(reg1, "checked"); 
		target.innerHTML = target.innerHTML.replace(reg2, "input"); 
		target.innerHTML = target.innerHTML.replace(reg3, "img"); 
		
		//alert(target.innerHTML);

	} catch (e)	{
		alert('erreur dans transformationXSL(): type d erreur: '+ e.name+'\n message: '+e.message);
		target.innerHTML = e.message;
	}

}

/////////////////////////////// AUTRES //////////////////////////////
function ToutCocher(oInput)
{
	var oTable = oInput.parentNode.parentNode.parentNode.parentNode;
	var inputs = oTable.getElementsByTagName("input");
	for(i=0; i<inputs.length; i++)
		inputs[i].checked = oInput.checked;
	
	//alert(oTable);
}


function valider(objet)
{
	objet.submit();
}



 function resolver() {
     return 'http://www.w3.org/2005/Atom';
 }
 
 function closeApplication(lang) 
 {
	text = 'Voulez-vous reellement quitter l\'application ?';
	if(lang == "en")
		text = 'Do you really want to close the application?';
	 
	if (confirm(text)) 
	{
		window.open('','_parent','');
		window.close();
		return true;
	}	
	else
		return false;
}

/** 
* input1: objet input du nouveau mot de passe
* input2: objet input du nouveau mot de passe à confirmer
* id: ID du bloc div oé l'on va insérer le message.
* lang: en quelle langue afficher le message.
*/
function verifierChaine(input1,input2,id, lang)
{
	// Phrases é afficher en fonction de la langue
	if(lang == 'en')
	{
		var TXT_MSG_VIDE = 'Be careful, your password must have, at least, 6 characters.';
		var TXT_MSG_DIFF = 'Be careful, passwords are not all the same.';
	}
	else
	{
		var TXT_MSG_VIDE = 'Attention, votre mot de passe doit contenir au moins 6 caract\350res.';
		var TXT_MSG_DIFF = 'Attention, les mots de passe ne sont pas identiques.';
	}	
		
	var bloc = document.getElementById(id);
	// test si vides 
	if(input1.value.length < 6  || input2.value.length < 6)
	{
		bloc.innerHTML = "<br/>"+TXT_MSG_VIDE;
		bloc.style.color = "red";
		input1.value = ""; input2.value = "";
	}
	else
	{
		// test si égaux
		if(input1.value == input2.value)
			return true;
		else
		{
			bloc.innerHTML = "<br/>"+TXT_MSG_DIFF;
			bloc.style.color = "red";
			input1.value = ""; input2.value = "";
		}
	}
	return false;
}
///////////////////////////// TABLEAUX ////////////////////////
/**
* action : change la couleur de l'objet HTML passé en paramétre.
*/
function selectionLigne(obj)
{
	//alert(obj+" "+obj.style.background);
	if(obj.style.background.split(' ')[0] == "green")
	{
		obj.style.background = "white";
		obj.style.color= "black";
	}
	else{
		obj.style.background = "green";
		obj.style.color= "white";
	}
}

/**
* action: passe les éléments sélectionnés du tableau gauche vers le tableau droit.
* paramétres: 
*		-idG: Identifiant du DIV qui contient le tableau gauche
*		-idD: Identifiant du DIV qui contient le tableau droite.
* résultat: aucun.
*/
function changer(idG,idD)
{
	// On se place sur les deux tableaux (HTML:table).
	var temp = document.getElementById(idG);
	var tabG = temp.getElementsByTagName("table")[0];
	temp = document.getElementById(idD);
	var tabD = temp.getElementsByTagName("tbody")[0];
	
	// Tableau contenant les lignes sélectionnées.
	var tabSelect = new Array();
	// on récupére les lignes
	var tabTr = tabG.getElementsByTagName("tr");
	
	// On récupére les lignes sélectionnées.
	for(i=0; i< tabTr.length; i++)
	{
		var couleur = tabTr[i].style.background.split(' ');
		if(couleur[0] == "green")
		{	
			ligne = tabTr[i];
			// On check la checkbox
			cell = ligne.getElementsByTagName("td")[1];
			check = ligne.getElementsByTagName("input")[0];
			check.checked = !check.checked;
			// On ajoute la ligne au tableau
			tabSelect.push(ligne);
		}
	}
	// On fait passer les lignes d'un coté é l'autre
	for(i=0; i<tabSelect.length; i++)
	{
		tabD.appendChild(tabSelect[i]);
	}
}
/**
* action:effectue un changement entre les deux tableaux en fonction du paramétre sens.
* paramétres: 
*		-idG: Identifiant du DIV qui contient le tableau gauche
*		-idD: Identifiant du DIV qui contient le tableau droite.
*		-sens: 1: gauche vers droite, autre: droite vers gauche.
* résultat: aucun.
*/
function deplacer(idG,idD,sens)
{
	if(sens == 1)
		changer(idG,idD);
	else
		changer(idD,idG);
}

function parcoursTable(mot, form)
{
	//~ alert(mot);
	var oTable = form.getElementsByTagName("table")[0];
	//~ alert(oTable);
	// On parcours la table
	var lignes = oTable.rows;
	
	document.write('lignes '+lignes.length+'<br>');
	
	for(i=0; i<lignes.length; i++)
	{
		document.write('<br>');
		var ligne = lignes.item(i);
		var cells = ligne.cells;
		document.write('cellules '+cells.length+'<br>');
		
		for(j=0; j<cells.length; j++)
		{
			var cell = cells.item(j);
			document.write('valeur '+cell.innerHTML+'<br>');
		}
	}
}

function filtrerTableau(form, chaine,searchById)
{
	if(searchById)
	{
		var oDiv = document.getElementById(form);
		var oTable = oDiv.getElementsByTagName("table")[0];
	}
	else
		var oTable = form.getElementsByTagName("table")[0];
	
	// Parcours de l'arbre "oTable"
	var lignes = oTable.rows;	
	for(i=1; i<lignes.length; i++)
	{
		var ligne = lignes.item(i);
		var cells = ligne.cells;
		var cell = cells.item(0);
		var login = cell.innerHTML;
		// On recherche la chaine qui nous intéresse dans le login
		var txt=new RegExp(chaine,'i');
		if(login.search(txt) != 0)
		{
			// On cache les lignes qui ne correspondent pas é ce que le user a entré dans le champ de recherche.
			ligne.style.display = "none";
			// On décoche les lignes cachées
			//~ var cellInput = cells.item(3);
			//~ var input = cellInput.getElementsByTagName("input")[0];
			//~ input.checked = 0;
		}
		else
			ligne.style.display = "";
	}
}	
 
 ///////////////////////////// TOUCHES //////////////////////////////////
 // Bloque CTRL, F4 et F5
function bloqueTouche()
 {
	if(event.ctrlKey) 
		event.returnValue=false;
	if (event.keyCode == 122 || event.keyCode == 116)
	{
		event.keyCode=0;
		return false;
	}
}
//document.onkeydown =bloqueTouche;


//////////////////////////////// DEBUG ////////////////////////////////////
 
function debugageDOM(docTemp,tag){
	
	var e0 = docTemp.getElementsByTagName(tag).item(0);  //  Lire le premier élément avec DOM
	var e1 = e0.firstChild;
	alert(e1.nodeName+" "+e1.data);
	
}

function debugSimple(doc)
{
	alert('1er noeud: '+doc.firstChild.nextSibling.nodeName);
}
