window.onload=demarrer;

function demarrer() {
  desactiveSubmit();
	SetFocus();
}
function SetFocus() {
  if (document.forms.length > 0) {
    var field = document.forms[0];
    for (i=0; i<field.length; i++) {
      if ( (field.elements[i].type != "image") &&
           (field.elements[i].type != "hidden") &&
           (field.elements[i].type != "reset") &&
           (field.elements[i].type != "submit") ) {

        document.forms[0].elements[i].focus();

        if ( (field.elements[i].type == "text") || (field.elements[i].type == "password") ) {
          document.forms[0].elements[i].select();
	        break;
				}
      }
    }
  }
}

// action sur submit
function desactiveSubmit() {

  if (document.forms.length > 0) {
		var nombreForms=document.forms.length;
		for(j=0; j<nombreForms; j++) {
			//var inputSubmitType = '';
			var field = document.forms[j];
			var fieldName=field.getAttribute('name');

			for (i=0; i<field.length; i++) {
				var inputSubmit=field.elements[i];
				var inputSubmitType=inputSubmit.type;
				var inputSubmitName=inputSubmit.name;
				var inputSubmitValue=inputSubmit.value;
				//inputSubmitType=field.childNodes[i].type;
				//alert(' inputSubmitType : '+inputSubmitType+' ; inputSubmitName : '+inputSubmitName+' ; inputSubmitValue : '+inputSubmitValue);
			if (inputSubmitType == "submit") 
			// || inputSubmitType == "image") DOM ne lit pas le type image ...
			{
					inputSubmit.onclick=function() 
					//inputSubmit.onmouseout=function(j,i) 
					//inputSubmit.onsubmit=function() 
					{
						activeSubmit();
						var subQueryString="";
						var inputName = this.name;
						var inputValue = this.value;
						var subParent = this.parentNode;
						var formName=subParent.getAttribute('name');
						var subChildren = subParent.childNodes;
						
						// recupérer les input placés dans ce formulaire
						for(var k=0; k<subChildren.length; k++) {
							if(subChildren[k].name) {
								var ceformulaire=this.form;
								var ceformulaireName=ceformulaire.getAttribute('name');
								var ceinputName=subChildren[k].name;
								var ceinputValue=subChildren[k].value;

								var clePrimaireName='';
								if(clePrimaire) clePrimaireName=clePrimaire; 
									
									//alert(' ceformulaire : '+ceformulaire+' ;  ceformulaireName : '+ceformulaireName+' ; ceinputName : '+ceinputName+' ; ceinputValue : '+ceinputValue );
									//alert('if clePrimaire === clePrimaire : '+clePrimaire+' ; clePrimaireName : '+clePrimaireName) ; 
								
								switch(ceinputName) {
									case 'cle_primaire' : 
										var clePrimaire = ceinputValue ; 
										//alert('case cle_primaire === cle_primaire : '+ceinputName+' ; clePrimaire : '+clePrimaire) ; 
									break;
									case clePrimaireName : case clePrimaireName+'[]' :
										var clePrimaireValue = ceinputValue ; 
										//alert('case clePrimaireName === clePrimaireName : '+ceinputName+' ; clePrimaireValue : '+clePrimaireValue) ; 
									break;
									case 'table' :
										var Table = ceinputValue ; 
										//alert('case table === ceinputName : '+ceinputName+' ; ceinputValue : '+ceinputValue) ; 
									break;
									case 'new_data' :
										// appel ajax
										if(inputName==ceinputName && Table && clePrimaireName) {
											this.disabled=true;
											//affiche_newAndEdit(Table,clePrimaireName,0);
											affiche_cetTableDatas('div_newAndEdit',Table,clePrimaireName,0);
											return false;
										}
										return true;
									break;
									case 'view_data' :
										// appel ajax : 
										if(inputName==ceinputName && Table && clePrimaireName && clePrimaireValue) {
										//alert(inputName+'=='+ceinputName+' && '+Table+' && '+clePrimaireName+' && '+clePrimaireValue) ; 
											affiche_cetTableDatas('div_view_data',Table,clePrimaireName,clePrimaireValue);
											this.disabled=true;
											return false;
										}
										return true;
									break;
									case 'insert_new_data' :
										if(inputName==ceinputName) {
											return verifieJit(ceformulaire);
										}
									break;
									case 'edit_data' :
										// faire un appel ajax
										//alert('edit_data ::::::::  '+inputName+'=='+ceinputName+' && '+Table+' && '+clePrimaireName+' && '+clePrimaireValue) ; 
										if(inputName==ceinputName && Table && clePrimaireName && clePrimaireValue) {
										//	affiche_newAndEdit(Table,clePrimaireName,clePrimaireValue);
											affiche_cetTableDatas('div_newAndEdit',Table,clePrimaireName,clePrimaireValue);
											// variable globale pour ne pas activer le click sur la range
											no_click_on_row = true;
											//alert("no_click_on_row : "+no_click_on_row);
											this.disabled=true;
											return false;
										}
										return true;
									break;
									case 'update_data' :
										if(inputName==ceinputName) {
											var no_message_erreur = verifieJit(ceformulaire);
										
											if(no_message_erreur==true) {
												//alert("update_data -- no_message_erreur : "+no_message_erreur);
											
												if(phraseConfirm) {
													var valeurOriginale=this.value;
													this.value="Requête en cours";
													this.disabled=true;
													// confirmer 
													if(confirm(phraseConfirm)==true){
														this.value="Requête en cours";
														this.disabled=false;
														return true;
													}
													this.value=valeurOriginale;
													this.disabled=false;
													return false;
												}
												else return true;
											}
											else return false;	
										}									
									break;

									case 'delete_data' :
										if(inputName==ceinputName) {
											if(inputLabelValueId) {
												var phraseConfirm="Voulez-vous réellement supprimer "+inputLabel+" N° "+inputLabelValueId+"  ?";
											}
											else {
												var phraseConfirm="Voulez-vous réellement supprimer cet enregistrement  ?";
											}
											this.value="Requête en cours";
											this.disabled=true;
											// confirmer la suppression 
											if(confirm(phraseConfirm)==true){
												this.value="Supprimer";
												this.disabled=false;
												return true;
											}
											this.value="Supprimer";
											this.disabled=false;
											return false;
										}
									break;
									case 'action_page': // action_page est en dernier, il récupère les post précédents
										// non, voir new_data, view_data , edit_data
									break;
									case 'envoyer' :
										if(inputName==ceinputName) {
											return verifieJit(ceformulaire);
										}
									break;
									case 'enter_admin' :
										//alert("formulaire: "+ceformulaire+" ; ceformulaireName: "+ceformulaireName+" ; subParent : "+subParent+" ; ceformName="+ceformName+" ; ceinputName="+ceinputName+" ; ceinputValue="+ceinputValue);
										return verifieJit(ceformulaire);
									break;
									case 'annuler': 
										annuler();
										return false;
									break;
								}
								subQueryString += subChildren[k].name+"="+subChildren[k].value;
								if(k<subChildren.length) subQueryString += "&";
								//alert("subParent : "+subParent+" ;  formName : "+formName+" ; inputName : "+inputName+" ; subQueryString : "+subQueryString);
							}
						}
						while(subQueryString.substr((subQueryString.length)-1,subQueryString.length)=='&') {
							subQueryString=subQueryString.substr(0,(subQueryString.length)-1);
						}
					}
				}
			}
		}
  }
}

function verifieJit(Formulaire) {
	// récupérer les champs du formulaire à vérifier
	var champs = Formulaire.elements;
	var nbre_champs=champs.length;
	//alert("nbre_champs : "+nbre_champs);
	var messageAverts=Array;
	var messageAvert = '';
	var msgErreur = "";
	var j=0;
	for(var i=0; i<nbre_champs; i++) {
		var champNode=champs[i];

		if(champNode.className=='requis') {
			var champType=champNode.type;
			var champName=champNode.name;
			var regExpRecherche = /\[[0-9]+\]$/; // recherche le type Array
			var regExec = regExpRecherche.exec(champName)  ;
			if(regExec!=null) champName=champName.substr(0,champName.indexOf('['));
			//alert('champName : '+champName+' ; regExec : '+regExec);
			var champValue=champNode.value;
			var champLabel='';

			// cas special : language
			if(champName== 'language_name')	
				var champLabel_lang_name= champValue; 
			if(champName== 'language_code')	
				var champLabel_lang_code= champValue; 

			if(champValue=="" || champValue=="0") {
				j++;
			 //alert("----- champType : "+champType+" ; champName : "+champName+" ; champValue : "+champValue+"\n");
			// récupérer le label 
				switch (champName) {
					case 'pseudo' : champLabel = 'votre login';	break;
					case 'pseudo_mail' : champLabel = 'votre courriel'  ;	break;
					case 'mot_de_passe' : champLabel = 'votre mot de passe';	break;
					case 'name' : champLabel =  (champLabel_lang_code && champLabel_lang_code=='en') ? 'your name' : 'votre nom';	break;
					case 'email' : champLabel = (champLabel_lang_code && champLabel_lang_code=='en') ? 'your email' : 'votre courriel';	break;
					case 'enquiry':	champLabel =  (champLabel_lang_code && champLabel_lang_code=='en') ? 'your message' : 'votre message';	break;
					case 'designation':
						// précise le nom du language	
						champLabel = 'le nom '+champLabel_lang_name;
					break;

				}
				messageAverts[j] = champLabel;
			}
			if(champName== 'email') {	
				if(champValue!='') {
					//alert("valeur mail : "+champValue);
					return verifierAdresse(Formulaire, champValue, champLabel_lang_code);
				}	
			}
			
		}
	}
	if(messageAverts.length>0) {
		for(var k=1; k<=j; k++) {
			messageAvert += messageAverts[k];
			messageAvert += k<(j-1) ? ', ' : (k==(j-1) ? ((champLabel_lang_code && champLabel_lang_code=='en') ? ' and ' : ' et ') : '');
		}
	}
	if(messageAvert!='') {
		msgErreur = (champLabel_lang_code && champLabel_lang_code=='en') ? 'Please enter ' : "Veuillez renseigner " ;
		msgErreur += messageAvert;
		afficheMsgErreur(Formulaire, msgErreur);
		return false;
	}
	else
		return true;
}

function afficheMsgErreur(Formulaire,msg) {
	var msgErreur = msg;
	var messageErreur = document.getElementById("messageBox");
	var ParentErreur = Formulaire ;
	var ParentForm = Formulaire.parentNode;
	
	if(!messageErreur) {
		var div_messageBox = document.createElement("div");
		div_messageBox.setAttribute("id","messageBox");
		var messageErreur = ParentForm.appendChild(div_messageBox);
		ParentForm.insertBefore(div_messageBox,Formulaire);
	}
	else {
		messageErreur.innerHTML="";
		messageErreur.style.display="none";
	}
	
	if(messageErreur) {
		messageErreur.innerHTML=msgErreur;
		messageErreur.style.display="block";
	}
	return false;
	//alert('Formulaire : '+Formulaire+' ; msgErreur : '+msgErreur);
}

function activeSubmit() {
	if(document.getElementById("messageBox")) {
		document.getElementById("messageBox").innerHTML="";
		document.getElementById("messageBox").style.display="none";
	}
	var nombreForms=document.forms.length;
	for(j=0; j<nombreForms; j++) {
		var field = document.forms[j];
		for (i=0; i<field.length; i++) {
			var inputSubmit=field.elements[i];
			var inputSubmitType=inputSubmit.type;
			var inputSubmitName=inputSubmit.name;
			if (inputSubmitType == "submit") {
				//alert('inputSubmitType : '+inputSubmitType+' ; inputSubmitName : '+inputSubmitName);
				inputSubmit.disabled=false;
			}
		}
	}
}


//////// verification adresse mail /////////////
function verifierAdresse(Formulaire, val, langCode){
	var m = val;
	var msgErreur='';
	if(m == null || m.length == 0 || m.indexOf(".") == -1 || m.indexOf("@") == -1 || m.indexOf(" ") != -1) {
		//msgErreur += "Assurez-vous que l'adresse mail ne contienne pas d'espace et soit bien valide.";
		msgErreur = langCode=='en' ? "The email address is not valid" : "Le courriel n'est pas valide.";
	}
	var regex = /(^\w{1,}\.?\w{2,})@/;
	var _match = regex.exec(m);
	if(_match) {
		user=RegExp.$1;
		//alert("user : "+user);
	}
	else {
		//msgErreur += "<br />Assurez-vous que le nom contient plus de 2 caractères, ne commence pas ou ne se termine pas par un point (.), et ne soit pas invalide.";
		msgErreur = langCode=='en' ? "The email address is not valid" : "Le courriel n'est pas valide.";
	}
	regex = /@(\[\d{1,3}\.d{1,3}\.d{1,3}.\d{1,3}\])$/;
	_match = regex.exec(m);
	if(_match) {
		domain=RegExp.$1;
		return true;
	}
	else {
		regex=/@(\w{2,}\.(\w{2,}\.)?[a-zA-Z]{2,3})$/;
		_match = regex.exec(m);
		if(_match) {
			domain = RegExp.$1;
		}
		else {
			//msgErreur += "<br />Le domaine de l'adresse mail contient moins de 2 caractères ou n'est pas valide.";
		}
	}
	if(msgErreur != '') {
		afficheMsgErreur(Formulaire, msgErreur);
		//return false;
	}
}

