// fonction.js
// les deux fonctions suivantes ajoutent la propriété outerHTML pour Mozilla
var _emptyTags = {
   "IMG":   true,
   "BR":    true,
   "INPUT": true,
   "META":  true,
   "LINK":  true,
   "PARAM": true,
   "HR":    true
};

if(typeof(HTMLElement)!="undefined"){
	HTMLElement.prototype.__defineGetter__("outerHTML", function () {
	   var attrs = this.attributes;
	   var str = "<" + this.tagName;
	   for (var i = 0; i < attrs.length; i++)
		  str += " " + attrs[i].name + "=\"" + attrs[i].value + "\"";
	
	   if (_emptyTags[this.tagName])
		  return str + ">";
	
	   return str + ">" + this.innerHTML + "</" + this.tagName + ">";
	});
	
	HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
	   var r = this.ownerDocument.createRange();
	   r.setStartBefore(this);
	   var df = r.createContextualFragment(sHTML);
	   this.parentNode.replaceChild(df, this);
	});
}


 
/////////////////////////////////////////// AJAX ///////////////////////////////////
//
// fonction ajax principale
//
function getAjax(){ // initialise l'utilisation de l'ajax
 var Ajax = null;
 if(window.XMLHttpRequest) // Firefox et autres
  Ajax = new XMLHttpRequest(); 
 else if(window.ActiveXObject){ // Internet Explorer 
  try {Ajax = new ActiveXObject("Msxml2.XMLHTTP");} 
  catch (e) {Ajax = new ActiveXObject("Microsoft.XMLHTTP");}
 } else { // XMLHttpRequest non supporté par le navigateur 
  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  Ajax = false;
 } 
    return Ajax;
}
 

// fonction ajax avec requete
//
function loadAjax(div,page,vars){ 
 var Ajax = getAjax();
 // On définit ce qu'on va faire quand on aura la réponse
 Ajax.onreadystatechange = function(){
  // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
  if(Ajax.readyState == 4 && Ajax.status == 200){
   retour = Ajax.responseText;
   // On met a jour la div transmise
   if(page!=''){
	   document.getElementById(div).innerHTML = retour;
   }else{document.getElementById(div).innerHTML = '';}
  } else {
   var chargement = '<br><font class=bleu12>chargement en cours...</font><br>&nbsp;';
   document.getElementById(div).innerHTML = chargement;
  }
 }
 // poste la page
 Ajax.open("POST",page,true);
 // ne pas oublier ça pour le post
 Ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 // arguments
 //var menu = document.getElementById('journee');
 //var journee = menu.options[menu.selectedIndex].value;
 Ajax.send(vars);
}


// outerHTML au lieu de inner
function loadAjaxOuter(div,page,vars){ 
 var Ajax = getAjax();
 // On définit ce qu'on va faire quand on aura la réponse
 Ajax.onreadystatechange = function(){
  // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
  if(Ajax.readyState == 4 && Ajax.status == 200){
   retour = Ajax.responseText;
   // On met a jour la div transmise
   if(page!=''){
	   // on remplace le outer
	   document.getElementById(div).outerHTML = retour;
   }else{document.getElementById(div).innerHTML = '';}
  } else {
   var chargement = '<span class=bleu12>chargement en cours...</span>';
   document.getElementById(div).innerHTML = chargement;
  }
 }
 // poste la page
 Ajax.open("POST",page,true);
 // ne pas oublier ça pour le post
 Ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 // arguments
 //var menu = document.getElementById('journee');
 //var journee = menu.options[menu.selectedIndex].value;
 Ajax.send(vars);
}

 
////////////////////////////////////// VOILAGE //////////////////////////////////////////

// fonction d'affichage d'un objet
//
function affiche(div) {
 document.getElementById(div).style.display='block';
}
//
function affiche2(div) {
 document.getElementById(div).style.display='inline';
}
//
// visibility au lieu de display
function affichev(div) {
 document.getElementById(div).style.visibility='visible';
}
// [3] 
// fonction de voilage d'un objet
//
function cache(div) {
 document.getElementById(div).style.display='none';
} 
//
// visibility au lieu de display
function cachev(div) {
 document.getElementById(div).style.visibility='hidden';
}
// [3bis] 
// fonction de voilage/affichage d'un objet
//
function alterne(div) {
 if(document.getElementById(div).style.display=='none'){document.getElementById(div).style.display='block';}
 else{document.getElementById(div).style.display='none';}
}  
// [4] 
// fonction d'affichage d'un objet PARENT
//
function p_affiche(div) {
 parent.document.getElementById(div).style.display='block';
}
// [5] 
// fonction de voilage d'un objet PARENT
//
function p_cache(div) {
 parent.document.getElementById(div).style.display='none';
}
 
//////////////////////////////////// CONTROLE CHAMP STANDARD ////////////////////////////
// [6] 
// fonction de controle d'un champ unique
//
// pré-requis : le nom des champs spéciaux doivent correspondre au tests effectués : 
// email (contrôle de cohérence),cp (5 chiffres),telephone (10 chiffres),login (6 char min),pass (6 char min)
// par défaut, on contrôle juste si le champ est vide
// 
// affichage du code erreur : une div doit être présente à côté de chaque champ avec un id comme 'ctl_email' par ex.
//
// ex d'utilisation : <input type="text" name="nom" id="nom" style="width:220px;" onBlur="controle_champ('inscription',this.name);"><span id="ctl_nom" class="rouge12"></span>
//
function controle_champ(form,champ){
 var test=document.forms[form].elements[champ].value;
 var span= 'ctl_'+champ;
 var valid=true;
 var message="";
 switch(champ) {
  case 'captcha': 
    // vérification captcha JS
	if(test=='' || test!=c){valid=false;message='probl&egrave;me de v&eacute;rification';}
  break;
  case 'email':
   // test de l'email
   var atom = "[!#-'*+\\-\\/-9=?A-Z^-~]+";
   var regex_adresse = new RegExp("^"+atom+"(\\."+atom+")*@"+atom+"(\\."+atom+")*\\.[a-zA-Z]{2,4}$");
   if(test=='' || test.search(regex_adresse)!=0 || test.length>150){valid=false;message='email non valide';}
   //else { valid = check_email(test,span);} // -> pas beoin de vérification en base
  break;
  case 'email1':
   // test de l'email
   var atom = "[!#-'*+\\-\\/-9=?A-Z^-~]+";
   var regex_adresse = new RegExp("^"+atom+"(\\."+atom+")*@"+atom+"(\\."+atom+")*\\.[a-zA-Z]{2,4}$");
   if(test=='' || test.search(regex_adresse)!=0 || test.length>150){valid=false;message='email non valide';}
  else {check_email(test,span);} // -> pas beoin de vérification en base
  break;
  case 'email2':
   // test de l'email
   var atom = "[!#-'*+\\-\\/-9=?A-Z^-~]+";
   var regex_adresse = new RegExp("^"+atom+"(\\."+atom+")*@"+atom+"(\\."+atom+")*\\.[a-zA-Z]{2,4}$");
   if(test=='' || test.search(regex_adresse)!=0 || test.length>150){valid=false;message='email non valide';}
   //else {check_email(test,span);} -> pas beoin de vérification en base
  break;
  case 'cp':
   if(isNaN(test) || test.length!=5){valid=false;message='code-postal non valide';}
  break;
  case 'telephone':
   if(isNaN(test) || test.length!=10){valid=false;message='t&eacute;l&eacute;phone non valide';}
  break;
  case 'login':
   if(test.length<6){valid=false;message='login trop court';}
   //else {check_login(test,span);} -> pas beoin de vérification en base
  break;
  case 'pass':
   if(typeof(document.forms[form].elements['log'])!="undefined"){
	   var login=document.forms[form].elements['log'].value;
	   valid=false;message='identique au login';
   }
   if(test.length<4){
	   valid=false;message='mot de passe trop court';
   } 
  break;
  case 'mdp':
	   if(typeof(document.forms[form].elements['log'])!="undefined"){
		   var login=document.forms[form].elements['log'].value;
		   valid=false;message='identique au login';
	   }
	   if(test.length<4){
		   valid=false;message='mot de passe trop court';
		   // special schuller
		   // affichev('passcomments');
	   } 
	  break;
  default:
   if(document.forms[form].elements[champ].type == 'select-one'){
	   var champ_temp = document.forms[form].elements[champ];
	   if(champ_temp.options[champ_temp.selectedIndex].value == ""){valid=false; message='champ obligatoire';}
   } else if (document.forms[form].elements[champ].length>1){
	   var champ_temp = document.forms[form].elements[champ];
	   var validTemp = false;
	   for(var j=0; j<champ_temp.length;j++){
		   if((champ_temp[j].type == "radio" || champ_temp[j].type  == "checkbox") && champ_temp[j].checked == true){validTemp=true;}
	   }
	   if(validTemp == false){valid=false; message='champ obligatoire';}
   } else if (test == "" && document.forms[form].elements[champ].type != "radio" && document.forms[form].elements[champ].type != "checkbox"){
	   valid=false;message='champ obligatoire';
   }
  break;
 }
 if(valid==false){
  //document.getElementById(span).innerHTML='&nbsp;&nbsp;'+message;
  if(document.getElementById(span).className.indexOf('alerte')==-1){document.getElementById(span).className+=" alerte";}
 } 
 else{
  //document.getElementById(span).innerHTML='';
  document.getElementById(span).className=document.getElementById(span).className.replace('alerte','');
 }
 return valid;
}



// récupération en JS des éléments d'un formulaire puis transmission ajax à page pour mise à jour de div
// attention : récupère seulement les input, pas les textarea ni les select...
function form_data(formname,page,div){
	var form = document.forms[formname];
	var data = "";
	// on récupère les input du formulaire
	var inputs = document.getElementsByTagName("input");
	// on les traite pour préparer la requete ajax
	for (var i = 0; i < inputs.length; i++){
		if(inputs[i].type == "checkbox"){
			var checkbox = form.elements[inputs[i].name];
			var datac = "";
			if(checkbox.length>1){
				for(var j = 0;j<checkbox.length;j++){
					alert(checkbox[j].checked);
					if(checkbox[j].checked == true){
						if (datac != ""){
							datac += "|";
						}
						datac += checkbox[j].value;
						alert(checkbox[j].value);
					}
				}
				if (data != ""){
					data += "&";
				}
				data += inputs[i].name + "=" + datac;
				i = i+(checkbox.length - 1);
			} else {
				if(checkbox.checked == true){
					if (datac != ""){
						datac += "|";
					}
					datac += checkbox.value;
					alert(checkbox.value);
				}
				if (data != ""){
					data += "&";
				}
				data += inputs[i].name + "=" + datac;
				i = i+1;
			}
		} else if(inputs[i].type == "radio"){
			if(inputs[i].checked == true){
				if (data != ""){
					data += "&";
				}
				data += inputs[i].name + "=" + inputs[i].value;
			}
		} else {
			if (data != ""){
				data += "&";
			}
			data += inputs[i].name + "=" + inputs[i].value;
		}
	}
	// transmission ajax
	var Ajax = getAjax();
	// On définit ce qu'on va faire quand on aura la réponse
	Ajax.onreadystatechange = function(){
		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
		if(Ajax.readyState == 4 && Ajax.status == 200){
			retour = Ajax.responseText;
			// On met a jour la div transmise
			if(page!=''){
				// on remplace
				document.getElementById(div).innerHTML = retour;
			}else{document.getElementById(div).innerHTML = '';}
		} else {
			var chargement = '<span class=bleu12>chargement en cours...</span>';
			document.getElementById(div).innerHTML = chargement;
		}
	}
	// poste la page
	Ajax.open("POST",page,true);
	// ne pas oublier ça pour le post
	Ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	// arguments
	Ajax.send(data);
}
