

function countChar(form) {

	var nombre=form.message.value.length;
	form.caracteres.value=nombre;
}


// avant de commencer la balise body de la page d'accueil
// doit comporter la balise <body  onmousemove=\"deplacer_fenetre(event)\" >


var zindex=5; // z-index de depart
var compteur=0 ;
var fenetre_deplacee=0; // variable pemettant de savoir si la fenetre est en cours de deplacement
var fenetre_deplacee_difx=0; // variable calculant l'abscisse de la difference entre la position du curseur et la coin haut gauche du div genere
var fenetre_deplacee_dify=0; // variable calculant l'ordonnee de la difference entre la position du curseur et la coin haut gauche du div genere


// fonction qui permet de rajouter un evenement sur un div 
// fonction compatible IE (attachEvent)  et firefox (addEventListener)
function addEvent(tag,event,fct)
{
	if(tag.attachEvent)
    tag.attachEvent('on' + event, fct);
    else
    tag.addEventListener(event, fct, true);
} 

function fermer_fen(elmt) 
{
		elmt.parentNode.removeChild(elmt);		
}

function creer_fenetre_texte(top, left, width, height, titre, texte, params) 
{	

	var masque = document.createElement("div"); // creation du div qui va masquer le menu    
      
    masque.setAttribute("id","masque");
    document.body.appendChild(masque); // on insere la fenetre principale dans le body
    masque.style.display='block'; // on fait apparaitre la fenetre   
	
    this.zindex++;
    var fenetre = document.createElement("div"); // creation du div de la fenetre principale
	fenetre.setAttribute("id","popup");
    fenetre.style.left=left+"px"; // on donne l'abscisse absolue
    fenetre.style.top=top+"px"; // on donne l'ordonnee absolue
    fenetre.style.width=width+"px"; // on donne le width
    fenetre.style.height=height+"px"; // on donne le height  
    fenetre.style.zIndex=zindex;
    
    //fenetre.style.backgroundColor="#AAAAAA";      
    addEvent(fenetre,"mousedown",function (){premier_plan(fenetre)}); // on positionne les evenements et les fonctions associees 
    
      
    var barre_titre = document.createElement("div"); // creation du titre
    barre_titre.className="titre";
    barre_titre.style.width=(width-39)+"px";
    addEvent(barre_titre,"mousedown",function (event){commencer_deplacement(event,fenetre)});
    addEvent(barre_titre,"mouseup", arreter_deplacement);
    txt= document.createTextNode(titre); // creation du noed texte
    barre_titre.appendChild(txt); // ajout du noeud texte au div ce qui permet d'avoir un titre
        
    var bouton_close = document.createElement("div"); // creation du div qui permettra de fermer la fenetre
    bouton_close.className="close";
    bouton_close.style.backgroundImage='url(../images/close.gif)';
	addEvent(bouton_close,"click", function (){fermer_fenetre(fenetre, masque)}); // evenement pour fermer la fenetre
		
	
	var ctnPopup= document.createElement("div"); // creation du titre
    ctnPopup.className="ctnPopup";    
    ctnPopup.style.width=(width-2)+"px";
    ctnPopup.style.height=(height-25) +"px";
		
    var contenu = document.createElement("div"); 
    contenu.setAttribute("id", this.zindex ); // creation d'un attribut id sur la fenetre
    contenu.style.marginTop=5+"px";
    contenu.style.marginLeft=10+"px";
    contenu.style.width=(width-20)+"px";
    contenu.style.height=(height-45) +"px";
    
    ctnPopup.appendChild(contenu);    
    
    //texte= document.createTextNode(texte);
    
    //contenu.appendChild(texte);
        
    // on insere tous les div dans la fenetre principale 
    fenetre.appendChild(barre_titre);
    fenetre.appendChild(bouton_close);
    fenetre.appendChild(ctnPopup);       

	
    document.body.appendChild(fenetre); // on insere la fenetre principale dans le body
    reqSync('GET', texte, params, this.zindex);
 
    fenetre.style.display='block'; // on fait apparaitre la fenetre
	

}

function premier_plan(fenetre) {
     this.zindex++; //On incrémente la variable globale
     fenetre.style.zIndex=zindex; //On affecte sa valeur au z-index de la fenetre concernée
}
 
function commencer_deplacement(ev,fnt) {
     fenetre_deplacee=fnt; //la variable pointe desormais sur la fenêtre à déplacer
     old_mouseCoords=mouseCoords(ev); //On récupere la position absolue de la souris grace a la fonction mouseCoords(ev) qui prend comme argument l'evenement du onmosedown
     old_windowCoords=getPosition(fenetre_deplacee); // on recupere la position du curseur a l'interieur de la fenetre principale
     fenetre_deplacee_difx=old_mouseCoords.x - old_windowCoords.x; // on l'abscisse de la difference
     fenetre_deplacee_dify=old_mouseCoords.y - old_windowCoords.y; // on recupere l'ordonnee de la difference
}

function arreter_deplacement() {
     fenetre_deplacee= 0 ; //des que la fenetre cesse d'etre en movement on lui attribut la valeur 0
}

function deplacer_fenetre(ev) {
	
	if(fenetre_deplacee!=0) { //On effectue le déplacement que si la fenetre est en mouvement
     	// on recupere les coordonnees du deplacement
     	if(ev.pageX || ev.pageY){
        var lastX=ev.pageX; // valable pour IE
        var lastY=ev.pageY; // valable pour IE
        }
        else {
        var lastX=ev.clientX + document.body.scrollLeft - document.body.clientLeft; // valable pour les autres navigateurs
        var lastY=ev.clientY + document.body.scrollTop  - document.body.clientTop;  // valable pour les autres navigateurs
        }
    // la nouvelle position de la fenetre est calcule en enlevant difx et difx a la nouvelle position du curseur    
	fenetre_deplacee.style.left=lastX - fenetre_deplacee_difx +"px";
    fenetre_deplacee.style.top= lastY - fenetre_deplacee_dify +"px";    
    }
}

// calcul des coordonnees absoulues de la souris 

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
    return {x:ev.pageX, y:ev.pageY};
    }
    return {x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
        	y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	}
}

// calul des coordionnes relatives de la souris dans le div de la fenetre principal
// le calcul se fait en parcourant tous les div contenu "popup" et en additionnat tous les distance trouves
function getPosition(e){

        var left = 0;
        var top  = 0;
        while (e.offsetParent){
                left += e.offsetLeft;
                top  += e.offsetTop;
                e     = e.offsetParent;
        }
        left += e.offsetLeft;
        top  += e.offsetTop;
        return {x:left, y:top};
}

// fonction qui permet de faire disparaitre la fenetre pop
function fermer_fenetre(elmt, el) {
		elmt.parentNode.removeChild(elmt);
		el.parentNode.removeChild(el);		
}








function checkForm(form, reqHttp,  url, destination, opt){

var nbElmt	= form.elements.length ; // nombre total de champs dans le formulaire
var err 	= 0;
var params  = 'buxton=on' ;
var message	= 'Liste des erreurs : \n \n';
var msg ;   

	// on boucle sur tous les elements du formulaire
	for (x=0 ; x< nbElmt ; x++){	
		// valeur de l'attribut type
		var typeAttrib  = form.elements[x].type ;
		
		// si le type de l'element est text, hidden ou textarea on rentre dans la boucle
		if ( typeAttrib =='text' || typeAttrib =='hidden' || typeAttrib =='textarea' || typeAttrib =='select-one' ) {			
				
			//valeur de l'attribut id
			var idElmt      = form.elements[x].id ;
		    // valeur d el'attribut name
		    var nameElmt    = form.elements[x].name ;
			// valeur de l'attribut value
			var valueElmt   = form.elements[x].value ;	
			// taille de l'element
			var valueElmtSize = valueElmt.length ;		
		
			
			var regex="";						
			// on supprime les espaces avant et apres le string
			var regx=new RegExp("(^ +)|( +$)", "g");
	   		valueElmt = valueElmt.replace(regx, "");			
		    			
			// taille de l'attribut name		
			var nameElmtSize = nameElmt.length ;			
			// on récupère la première lettre de l'attribut name
			var bg = nameElmt.substr(0,1) ;
			// on recupere les autres caracteres de l'attribut name
			var ed = nameElmt.substring(1, nameElmtSize) ;			
							
				// si la premiere lettre du name est un N le champs ne doit pas etre vide
				if (bg=="N"){ 		   	   		
		   	   		//si la valeur est vide on remonte une erreur
		   	   		if(valueElmt==""){
			   	   		err++ ;
			   	   		message += '- Le champs ' + idElmt + ' ne peut etre vide \n'
		   	   		}   	   	
		   	   	}
		   	   	
		   	   	// si le textearea a pour nom commentaire et si il a plus de 4096 caractères on remonte une erreur  	   	
		   	   	if (nameElmt=="commentaire"){		   	   		
		   	   		if(valueElmtSize >500){
		   	   		err++ ;
		   	   		message += '- Le texte est limité a 4096 caractères \n'
		   	   		ed="" ; 
		   	   		}   
		   	   	}	
						// on attribue une expression reguliere en fonction de la valeur du champ name	   	   	
		   	   			switch(idElmt) {
			               
			               case "mail":
			               		// il ne doit pas avoir d'espaces dans l'adresse mail
			                  	regex=new RegExp("^[a-z0-9_]([.-]?[a-z0-9_]+)+@[a-z0-9_]([.-]?[a-z0-9_]+)+\.([a-z]{2,4}|[a-z]{6})$", "gi");
			                  	// si l'adresse mail est vide on modifie l'expression reguliere pour qu'elle accepte la chaine vide
			                  	if (valueElmt==""){regex=new RegExp(".*", "gi")}; 
			                  	msg = 'L\'adresse mail n\'est pas conforme' ;
			                  	break;                  
			               case "tel":
			               		// le champs téléphone contient des chiffres, des espaces et le caractere + 
			                  	regex=new RegExp("^[0-9\+\\s]+$", "gi");
			                  	msg = 'Le champ téléphone n\'accepte que des chiffres et le caractère +' ;
			                  	break; 
			              case "jour":
			               		// le champs doit etre numerique 
			                  	regex=new RegExp("^[0-9]+$", "gi");
			                  	msg = 'Le champ jour doit etre renseigné' ;
			                  	break;
			              case "mois":
			               		// le champs doit etre numerique 
			                  	regex=new RegExp("^[0-9]+$", "gi");
			                  	msg = 'Le champ mois doit etre renseigné' ;
			                  	break; 
			              case "annee":
			               		// le champs doit etre numerique 
			                  	regex=new RegExp("^[0-9]+$", "gi");
			                  	msg = 'Le champ année doit etre renseigné' ;
			                  	break;                   
			              case "login":
			              	   // le champs login ne contient que des lettres minuscules
			                   regex=new RegExp("^[a-z]+$", "gi");
			                   msg = 'Le champ login ne contient que des lettres minuscules' ;
			                   break;   
			              case "mdp":
			              	   // le champs mot de passe contient des caracteres alphanumériques plus les caractères "@" et "_"  	
			                   regex=new RegExp("^[a-zA-Z0-9@_¤]+$", "gi");
			                   msg = 'Le champ mot de passe n\'accepte que des caracteres et les caractères @ ou _';
			                   break;     
			              case "texte":
			                  // le champs texte peut contenir tous les caractères
			                  regex=new RegExp(".*", "gi");
			                  break;  
			              case "prenom":
			              	  // le champs prenom contient des caractères alphabetiques, "'" et "-"
			                  regex=new RegExp("^[a-zA-Z\-\'\\s]+$", "gi");
			                  msg = 'Le champ prenom n\'accepte que des caractères alphabétiques et les caractères \' ou -';
			                  break;
			              case "nom":
			              	  // le champs nom contient des caractères alphabetiques, "'" et "-"
			                  regex=new RegExp("^[a-zA-Z\-\'\\s]+$", "gi");
			                  msg = 'Le champ nom n\'accepte que des caractères alphabétiques et les caractères \' ou -';
			                  break;
			              case "societe":
			              	  // le champs societe contient des caractères alphabetiques, "'" et "-"
			                  regex=new RegExp("^[a-zA-Z\-\'\\s]+$", "gi");
			                  msg = 'Le champ société n\'accepte que des caractères alphabétiques et les caractères \' ou -';
			                  break;
			              case "ville":
			                  // le champs ville contient des caractères alphabetiques, "'" et "-"
			                  regex=new RegExp("^[a-zA-Z\-\'\\s]+$", "gi");
			                  msg = 'Le champ ville n\'accepte que des caractères alphabétiques et les caractères \' ou -';
			                  break;
			              case "pays":
			                  // le champs pays contient des caractères alphabetiques, "'" et "-"
			                  regex=new RegExp("^[a-zA-Z\-\'\\s]+$", "gi");
			                  msg = 'Le champ pays n\'accepte que des caractères alphabétiques et les caractères \' ou -';
			                  break;
			              case "code_postal":
			              	  // le champs code postal contient des caractères alphanumerique et le caractère "-"
			                  regex=new RegExp("^[a-zA-Z0-9\-\\s]+$", "gi");
			                  msg = 'Le champ code postal ne contient que des caractères alphanumériques et le caractère -';
			                  break;   
			              case "adresse":
			              	  // le champs adresse contient des caractères alphanumerique et le caractère - , '
			                  regex=new RegExp("^[a-zA-Z0-9\-,\'\\s]+$", "gi");
			                  msg = 'Le champ adresse contient des caractères invalides';
			                  break;    
			        	  case "telephone":
			              	  // le champs adresse contient des caractères alphanumerique et le caractère - , '
			                  regex=new RegExp("^[0-9\+\\s]+$", "gi");
			                  msg = 'Le champs telephone ne contient que des chiffres et le sigle +';
			                  break;                              
			           }
			        
   
   					// si l'expression reguliere n'est pas vide on la teste' ;
   					if (regex!="" && valueElmt!="" && !regex.test(valueElmt) ){
	   						// si le test est negatif on remonte une erreur//		
	   						err++;
	  						message += '- ' + msg +'\n' ;	        
					}
					
					// si l'id n'est pas vide on fait une concatenation pour contruire l'url de parametres
					if (idElmt !=''){	 
					valueElmt  = encodeURIComponent(valueElmt) ;				
					params    += '&'+ idElmt +'='+ valueElmt;
					}			   	   	   	
		}

	}	
	
	//Si il y a des erreurs on les affiche dans le cas contraire on transmet les paramètres a la fct ajax
	if (err !=0){	
		alert (message);
	} else {
		reqSync(reqHttp, url, params, destination, opt);
	}

}






function confirmDelete(reqHttp, url, params, destination, opt) {
       if (confirm("Voulez-vous vraiment supprimer cet element ?")) { 
               reqSync(reqHttp, url, params, destination, opt);
       }
}



// fonctions Ajax
function xhrSyncGet (fichier, params){
    var nba=Math.random(); // nombre aleatoire pour eviter l'effet de cache	
    var xhr=null;
    reponse=null;	
    
	if (window.XMLHttpRequest) { 
        xhr = new XMLHttpRequest();
    }
    else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
     	
    xhr.open("GET", fichier + '?'+ params+ '&nba=' + nba, false); //on appelle le fichier de reponse
    xhr.send(null); 

    var reponse = xhr.responseText ;
    return reponse ;
 	 
}

function xhrSyncPost (fichier, params){
    var nba=Math.random(); // nombre aleatoire pour eviter l'effet de cache	
    var xhr=null;
    reponse=null;	
    
	if (window.XMLHttpRequest) { 
        xhr = new XMLHttpRequest();
    }
    else {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
     	
    xhr.open("POST", fichier +  '?nba=' + nba , false); //on appelle le fichier de reponse
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xhr.send(params);  

    var reponse = xhr.responseText ;
    return reponse ;
    
}

function reqSync (reqHttp, fichier,  params, destination, opt) {

    var xhrReponse=null ;
    var htmlReponse=null ;
	    if (reqHttp =='POST') {
	    	xhrReponse= xhrSyncPost(fichier, params);
	    } else {
	    	xhrReponse= xhrSyncGet(fichier, params);
	    }	
        
    htmlReponse= xhrReponse ;     
    document.getElementById(destination).innerHTML = htmlReponse;	
    

    
    if (typeof opt != "undefined") {    	
    	var tab_opt = opt.split('|') ;
    	for (var x in tab_opt) {
    	eval(tab_opt[x]) ;
    	}
    }
}

function closePopup() {

    var Obj = document.getElementById('popup');
  	var Parent = Obj.parentNode;
	  	if (Parent.removeChild( Obj)) {    
	    	var Obj = document.getElementById('menuMasque');
	  		var Parent = Obj.parentNode;
	  		Parent.removeChild( Obj); 
	  	}
}



   














