// JavaScript Document

/*******************************************************************************/
/*******************************************************************************/
//
// Deux objets communs pour gérer 1) les formulaires et 2) les requetes ajax
//
/*******************************************************************************/
/*******************************************************************************/



/*******************************************************************************/
//
// Récupère les données d'un formulaire pour 
// les mettre dans une variable "data"
//
/*******************************************************************************/
function UmaForm(){
	
}

// Vérification d'un champs donnée de formulaire
UmaForm.prototype.verifForm = function(formName, champs, type){
	
	if(type == "text"){
		if(document.forms[formName].elements[champs].value == "")	return true;
		if(document.forms[formName].elements[champs].value == null)	return true;
	}
	
	if(type == "mail"){
		if(document.forms[formName].elements[champs].value.indexOf('@') == -1)	return true;
		if(document.forms[formName].elements[champs].value .lastIndexOf(".") < document.forms[formName].elements[champs].value.indexOf("@"))	return true;
	}
	if(type == "int"){
		if(document.forms[formName].elements[champs].value.isNaN())	return true;
	}
	
	
	return false;
	
}


UmaForm.prototype.form_get_content = function(formName){
	
	if(!arguments.length){
		formName = 0;
	}
	
	var data ="";
	
	for(i=0; i < document.forms[formName].elements.length; i++){
		if(data != "") data += "&";
		if(document.forms[formName].elements[i].type == "radio"){
			if( document.forms[formName].elements[i].checked){
				data += document.forms[formName].elements[i].name +"="+escape(document.forms[formName].elements[i].value);
			}
		}else if(document.forms[formName].elements[i].type == "checkbox"){
			if( document.forms[formName].elements[i].checked){
				data += document.forms[formName].elements[i].name +"="+ escape(document.forms[formName].elements[i].value);
			}
		}else if(document.forms[formName].elements[i].type == "file"){
			alert("fichier");
		}else{
			data += document.forms[formName].elements[i].name +"="+ escape(document.forms[formName].elements[i].value);
		}
	}

	return data;
	
}

/**********************************************************/
//
// Place les données dans le formulaire à partir 
// des données xml "data"
//
/**********************************************************/
UmaForm.prototype.form_set_content = function(dataXML,formName){
	
	if(arguments.length < 2){
		formName = 0;
	}
	
	if(dataXML.firstChild.hasChildNodes()){
		thisXml = dataXML.firstChild;
	}else{
		thisXml = dataXML.childNodes[1];
	}
	
	for(i=0; i < thisXml.childNodes.length; i++){
		
		if(thisXml.childNodes[i].hasChildNodes()){
			
			// Rechercher l'élément du formulaire du même nom
			for(j=0; j < document.forms[formName].elements.length; j++){
			
				if(document.forms[formName].elements[j].name == thisXml.childNodes[i].nodeName){

					if(document.forms[formName].elements[j].type == "radio"){
						if(document.forms[formName].elements[j].value == unescape(thisXml.childNodes[i].childNodes[0].nodeValue)){
							document.forms[formName].elements[j].checked = true;
						}
					}else if(document.forms[formName].elements[j].type == "checkbox"){
						if(document.forms[formName].elements[j].value == unescape(thisXml.childNodes[i].childNodes[0].nodeValue)){
							document.forms[formName].elements[j].checked = true;
						}
					}else if(document.forms[formName].elements[j].type == "select-one"){
						for (var k = 0; k < document.forms[formName].elements[j].options.length; k++) {
							document.forms[formName].elements[j].options[k].selected = false;
							if(unescape(thisXml.childNodes[i].childNodes[0].nodeValue) == document.forms[formName].elements[j].options[k].value){
								document.forms[formName].elements[j].options[k].selected = true;
							}
						}

					}else{
						myTextXml = "";
						// Boucle pour les textes long (Mozzilla)
						for (var k = 0, racine; racine = thisXml.childNodes[i].childNodes[k]; k++) {
							myTextXml += unescape(racine.nodeValue);
						}
						document.forms[formName].elements[j].value = myTextXml;
					}
				}
				
			}
			
		}
			
	}
	
}




/*******************************************************************************/
//
// Objet global de connexion et récupération de données
//
// method 	: POST ou GET
// data 	: suite des données 
// url 		: adresse à appeler sur le serveur
// callback	: fonction à apeller au retour
//
/*******************************************************************************/

function UmaAjax(method, data, url, callback){
	
	this.method 	= method;
	this.data		= data;
	this.url		= _ROOT+url;
	this.callback	= callback;
	this.req 		= this.create();
	
	// Quoi faire du retour...
	this.req.onreadystatechange=this.return_value(this);
	
	// déclencher la requete
	this.request();
	
}

// Creation d'un objet de connexion
/*******************************************************************************/
UmaAjax.prototype.create = function(){
	if(window.XMLHttpRequest) {
		// Firefox et autres
		var 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;
}

// Objet de retour
/*******************************************************************************/
UmaAjax.prototype.return_value = function(ajax){			

	function funcRef(){ 
		if (ajax.req.readyState ==4 && ajax.req.status == 200){ 
			// Masquer le loader s'il existe
			if(document.getElementById('loader_datas')){
				document.getElementById('loader_datas').style.display='none';
			}
			// Renvoi des données
			ajax.callback(ajax.req); 
		} 
	}
	
	return funcRef;
	
}

// Envoi d'une requete
/*******************************************************************************/
UmaAjax.prototype.request = function(){
	
	// Afficher le loader s'il existe
	if(document.getElementById('loader_datas')){
		document.getElementById('loader_datas').style.display='block';
	}
	
	this.req.open(this.method,this.url,true);
	// Ajouter les données en méthode POST
	send_data = null;
	if(this.method == "POST"){
		send_data = this.data;
		this.req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	}
	this.req.send(send_data);
}

// Abandonne une requete
/*******************************************************************************/
UmaAjax.prototype.abort = function(){
	
	this.req.abort();

}


/*******************************************************************************/
//
// FIN
//
/*******************************************************************************/