// 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;
}
 
// [1] 
// 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;
	   //alert(document.getElementById(div).outerHTML);
   }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);
}

function loadAjax2(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;
	   //alert(document.getElementById(div).outerHTML);
   }else{document.getElementById(div).innerHTML = '';}
  } else {
   var chargement = '<font class=bleu12>chargement en cours...</font>';
   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, pour les niceforms
function loadAjaxNice(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!=''){
	   // spécial niceforms : on récupère les proppriété de style de l'ancienne balise
	   var styles = document.getElementById(div).style;
	   // on remplace le outer
	   document.getElementById(div).outerHTML = retour;
	   // on remet les styles
	   document.getElementById(div).style.width = styles.width;
	   document.getElementById(div).style.height = styles.height;
	   // comptage 
	   compteurVO();
   }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 //////////////////////////////////////////
// [2] 
// 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>
//
// controle champ
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 '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 { // vérification en base
	   	var Ajax = getAjax();
		// On défini 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;
				if(retour==1){document.getElementById('check_email').innerHTML='Cet email est d&eacute;j&agrave; inscrit !';valide=false;}
				else{document.getElementById('check_email').innerHTML='';}
			} 
		}
		// poste la page
		Ajax.open("POST",'ajax/verif_email.php',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('email='+test);
   }*/
  break;
  // ci dessous special parrainnage
  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';}
  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';}
  break;
  case 'email3':
   // 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';}
  break;
  case 'daten':
   if (test.length!=10) valid=false;
   if (test.substring(0,2)>31 || test.substring(0,2)=='00') valid=false;
   if (test.substring(3,5)>12 || test.substring(3,2)=='00') valid=false;
   if (test.substring(6)<1930) valid=false;
   if (test.substring(2,3)!='/' || test.substring(5,6)!='/') valid=false;
   if(valid==false){message='date non valide';}
  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':
   var login=document.forms[form].elements['log'].value
   if(test.length<6){valid=false;message='mot de passe trop court';}
   else if(test==login){valid=false;message='identique au login';}
  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";}
  //document.forms[form].elements[champ].className += " alerte2";
  
 } 
 else{
  //document.getElementById(span).innerHTML='';
  document.getElementById(span).className=document.getElementById(span).className.replace('alerte','');
 }
 return valid;
}

// controle à validation
function check(form){
	var controle = true;
	var inputs = document.getElementsByTagName( 'input' );
	for ( var i=0; i<inputs.length; i++ ) {
		classe = inputs[i].className;
		if (classe.indexOf('controle') > -1 && inputs[i].form.name == form){
			if(controle_champ(inputs[i].form.name,inputs[i].name)==false){controle = false;}
		}
	}
	var textareas = document.getElementsByTagName( 'textarea' );
	for ( var i=0; i<textareas.length; i++ ) {
		classe = textareas[i].className;
		if (classe.indexOf('controle') > -1 && textareas[i].form.name == form){
			if(controle_champ(textareas[i].form.name,textareas[i].name)==false){controle = false;}
		}
	}
	return controle;
}

