// JavaScript Document

var whiteSpace = 			/^[\s]+$/;
var courriel =				/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
var url = 					/^http\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4}(\/\S*)?$/
var speciaux = 				/^[A-Za-z0-9!@#$%_\^\&amp;\*\-\.\?]*$/
var codePostal = 			/^((\d{5}-\d{4})|(\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z]\s?\d[A-Za-z]\d))$/

// IMPORTANT À SAVOIR /////////////////////////////////////////////////////////////////////////
//
//	Les formulaire valider par cette fonction doivent avoir des spécification bien précise.
//  Les id des élement doivent être composé de la façon suivante.
//---------------------------------------------------------------------------------------------
//	Type de champs (prefixe)|
//	-------------------------
//	txt_ ---> champ texte
//	txta_ --> Texte
//	li_ ----> liste
//	cbox_ --> check box
//	rad_ ---> rad
//  EXEPTION les champs de date doivent tous porter le même préfixe pour la validation
//---------------------------------------------------------------------------------------------
//	Type de validation |
//	--------------------
//	Général:				_ob_	: valide si le champs est rempli
//							_spe_   : valide qu'il n'y est pas de caractère spéciaux
//	Dates:					_dat_ 	: valide une date
//							_dat_+  : doit être placer imédiatement apres _dat_
//									  valide que cette date est plus grande que la date précédente
//							_dat_-  : doit être placer imédiatement apres _dat_
//									  date precedante à la date la plus grande (simple indicateur,
//									  n'a pas vraiment d'importance)
//							_dat_np	: valide si la date est inferieur à la date d'ajourd'hui
//							_dat_dp	: valide si la date est supperieur à la date d'ajourd'hui
//	Téléphone:				_tel_ 	: valide un telephone
//	Code Postal:			_cp_ 	: valide un code postal
//	Mot de passe:			_pw_ 	: valide un mot de passe et sa confirmation
//	Courriel:				_cou_ 	: valide un courriel
//	Liste de Courriel:		_coul_ 	: valide une liste de courriel
//	URL:					_url_ 	: valide un url avec http://
//	Argant:					_arg_ 	: valide un prix ex. 45.99
//	Argant:					_user_ 	: valide que le username n'existe pas dans un tableau nommé "a_users"
//									  avec un champ hidden nomer temp_usager qui contien le nom d'usager
//									  courrant lors de la modification
//---------------------------------------------------------------------------------------------
//	genre de champs (suffixe)|
//	-------------------------
//	date	|	tel
//
//	_jour	|	_region
//	_mois	|	_debut
//	_annee	|	_fin
//			|	_poste
//---------------------------------------------------------------------------------------------
// exemple d'id  |
// ---------------
// txt_ob_nom
// --
// txt_dat_-_np_arriver_jour, txt_dat_-_np_arriver_mois, txt_dat_-_np_arriver_annee
// txt_dat_+_np_depart_jour, txt_dat_+_np_depart_mois, txt_dat_+_np_depart_annee
// --
// li_ob_ville
// --
// txt_spe_login
///////////////////////////////////////////////////////////////////////////////////////////////

function validerForm(formulaire){
	alert('je suis dans validerform');
	
	
	Err = 				false;
	msgErreur = 		errStart;
	
	// intitialisation de la variable contenant tout les champs à valider
	var a_validation = new Array()
	a_validation[0] = $(formulaire).elements[0].id;
	
	j= 1;
	for(i=0; i<$(formulaire).length; i++){
		temp = $(formulaire).elements[i].id;
		if(temp.indexOf("cbox_")!= -1 || temp.indexOf("rad_")!= -1 || temp.indexOf("_dat_")!= -1 || temp.indexOf("_tel_")!= -1 || temp.indexOf("_cp_")!= -1){
			if (temp.substring(0,temp.lastIndexOf("_")) != a_validation[j-1].substring(0,a_validation[j-1].lastIndexOf("_"))){ // pour ne garder qu'une fois les date, telephone, radio et check box.
				a_validation[j] = temp;
				j++;
			}
		}else{
			a_validation[j] = temp;
			j++;
		}
	}
	
	for (i=0;i<a_validation.length;i++){
		switch(a_validation[i].substring(0,a_validation[i].indexOf("_"))){
			case "cbox":
								if(a_validation[i].indexOf("_ob_")>-1) highlightTr($(a_validation[i]), false);
				 				var boxGroup = document.forms[formulaire][a_validation[i]];
								if (boxGroup.length == undefined){
									if($(a_validation[i]).checked==false && a_validation[i].indexOf("_ob_")>-1) addErr(a_validation[i],errCbox);
								}else{
									for(var j=0;j<boxGroup.length;j++){
										if(boxGroup[j].checked) break;
										if(j==boxGroup.length-1 && a_validation[i].indexOf("_ob_")>-1 ){
											addErr(a_validation[i],errCbox);
										}
									}
								}
				  				break; 
			case "rad":
								if(a_validation[i].indexOf("_ob_")>-1) highlightTr($(a_validation[i]), false);
								var radioGroup = document.forms[formulaire][a_validation[i]];
								if (radioGroup.length == undefined){
									if($(a_validation[i]).checked==false) addErr(a_validation[i],errRadio);
								}else{
									for(var j=0;j<radioGroup.length;j++){
										if(radioGroup[j].checked) break;
										if(j==radioGroup.length-1 && a_validation[i].indexOf("_ob_")>-1){
											addErr(a_validation[i],errRadio);
										}
									}
								}
				  				break;
			default:
								if($(a_validation[i]).type=='text'||$(a_validation[i]).type=='textarea'){
									$(a_validation[i]).value = $(a_validation[i]).value.replace(/^\s+|\s+$/g,"");
								}
				 				if(a_validation[i].indexOf("_ob_")>-1){
									if(a_validation[i].indexOf("_dat_")>-1){
										var objDate = getObjDate(a_validation[i]);
										if((objDate.jour==''||whiteSpace.test(objDate.jour))&&(objDate.annee==''||whiteSpace.test(objDate.annee))&&(objDate.mois=='no'||objDate.mois=='--'||objDate.mois=='')) addErr(a_validation[i],errText);
									}else if(a_validation[i].indexOf("_tel_")>-1){
										var ObjTelephone = getObjTelephone(a_validation[i]);
										if((ObjTelephone.region==''||whiteSpace.test(ObjTelephone.region))&&(ObjTelephone.debut==''||whiteSpace.test(ObjTelephone.debut))&&(ObjTelephone.fin==''||whiteSpace.test(ObjTelephone.fin))) addErr(a_validation[i],errText);
									}else if(a_validation[i].substring(0,a_validation[i].indexOf("_"))=="li"){
										if($(a_validation[i]).value=='no' || $(a_validation[i]).value=='--' || $(a_validation[i]).value=='') addErr(a_validation[i],errText);
									}else if(a_validation[i].indexOf("img_")>-1){
										if($('valide_'+a_validation[i].substring(a_validation[i].lastIndexOf("_")+1,a_validation[i].length))!=undefined){
											if($('valide_'+a_validation[i].substring(a_validation[i].lastIndexOf("_")+1,a_validation[i].length)).value==''&&($(a_validation[i]).value=='' || $(a_validation[i]).value=='http://' || whiteSpace.test($(a_validation[i]).value))) addErr(a_validation[i],errText);
										}else{
											if($(a_validation[i]).value=='' || $(a_validation[i]).value=='http://' || whiteSpace.test($(a_validation[i]).value)) addErr(a_validation[i],errText);
										}
									}else{
										if($(a_validation[i]).value=='' || $(a_validation[i]).value=='http://' || whiteSpace.test($(a_validation[i]).value)) addErr(a_validation[i],errText);
									}
								}
								if(a_validation[i].indexOf("_tel_")>-1){
									var ObjTelephone = getObjTelephone(a_validation[i]);
									if((ObjTelephone.region!=''&&!whiteSpace.test(ObjTelephone.region))||(ObjTelephone.debut!=''&&!whiteSpace.test(ObjTelephone.debut))||(ObjTelephone.fin!=''&&!whiteSpace.test(ObjTelephone.fin))){
										if(!validerTelephone(a_validation[i])) addErr(a_validation[i],errTelephone);
									}
								}
								if(a_validation[i].indexOf("_dat_")>-1){
									var objDate = getObjDate(a_validation[i]);
									if((objDate.jour!=''&&!whiteSpace.test(objDate.jour))||(objDate.annee!=''&&!whiteSpace.test(objDate.annee))||(objDate.mois!='no'&&objDate.mois!='--')&&objDate.mois!=''){
										switch(validerDate(a_validation[i])){
											case "date":	
												addErr(a_validation[i],errDate);
												break;
											case "dateDp":	
												addErr(a_validation[i],errDateDp);
												break;
											case "dateNp":	
												addErr(a_validation[i],errDateNp);
												break;
											default:
												if(a_validation[i].indexOf("_dat_+_")>-1){
													if(!validerDateCompare(a_validation[i],a_validation[i-1])) addErr(a_validation[i],errDateCompare);
												}
										}
									}
								}
								if(a_validation[i].indexOf("_cou_")>-1){
									if($(a_validation[i]).value!=''&&!whiteSpace.test($(a_validation[i]).value)){
										if(!courriel.test($(a_validation[i]).value)) addErr(a_validation[i],errMail);
									}
								}
								if(a_validation[i].indexOf("_coul_")>-1){
									var reg=new RegExp("[ ,;]+", "g");
									var courriel_individuel=$(a_validation[i]).value.split(reg);
									for (var e=0; e<courriel_individuel.length; e++) {
										if(courriel_individuel[e]!=''&&!whiteSpace.test(courriel_individuel[e])){
											if(!courriel.test(courriel_individuel[e])) addErr(a_validation[i],errMails);
										}
									}
								}
								if(a_validation[i].indexOf("_url_")>-1){
									if($(a_validation[i]).value!=''&&!whiteSpace.test($(a_validation[i]).value) && $(a_validation[i]).value!='http://'){
										if(!url.test($(a_validation[i]).value)) addErr(a_validation[i],errUrl);
									}
								}
								if(a_validation[i].indexOf("_cp_")>-1){
									if(($(a_validation[i]).value!=''&&!whiteSpace.test($(a_validation[i]).value))||($(a_validation[i].substring(0,a_validation[i].lastIndexOf("_"))+"_2").value!=''&&!whiteSpace.test($(a_validation[i].substring(0,a_validation[i].lastIndexOf("_"))+"_2")))){
										if(!codePostal.test($(a_validation[i].substring(0,a_validation[i].lastIndexOf("_"))+"_1").value+" "+$(a_validation[i].substring(0,a_validation[i].lastIndexOf("_"))+"_2").value)) addErr(a_validation[i],errCP);
									}
								}
								if(a_validation[i].indexOf("_spe_")>-1){
									if($(a_validation[i]).value!=''&&!whiteSpace.test($(a_validation[i]).value)){
										if(!speciaux.test($(a_validation[i]).value)) addErr(a_validation[i],errSpe);
									}
								}
								if(a_validation[i].indexOf("_pw_")>-1){
									if($(a_validation[i]).value!=''&&!whiteSpace.test($(a_validation[i]).value)){
										if(!speciaux.test($(a_validation[i]).value)) addErr(a_validation[i],errSpe);
										if(a_validation[i].substring(a_validation[i].length-2,a_validation[i].length)=="_c"){
											if($(a_validation[i]).value!=$(a_validation[i].substring(0,a_validation[i].length-2)+'_n').value) addErr(a_validation[i],errPW);
										}
									}
								}
								if(a_validation[i].indexOf("_arg_")>-1){
									if($(a_validation[i]).value!=''&&!whiteSpace.test($(a_validation[i]).value)){
										if(isNaN($(a_validation[i]).value)) addErr(a_validation[i],errArgent);
									}
								}
								if(a_validation[i].indexOf("_user_")>-1){
									if($(a_validation[i]).value!=''&&!whiteSpace.test($(a_validation[i]).value)){
										if(!speciaux.test($(a_validation[i]).value)){
											addErr(a_validation[i],errSpe);
										}else if(!validerUser($(a_validation[i]).value)){
											addErr(a_validation[i],errUser);
										}
									}
								}
		}
	}
	
	if (Err == true){
		alert(msgErreur);
		//$("boite_confirmation").innerHTML = "<p>"+msgErreur+"</p>";
		//$("boite_confirmation").className = 'boite_erreur';
		//$("boite_confirmation").style.display = 'block';
		//location.href = '#';
		return;
	}else{
		eval("document."+formulaire+".submit()");
	}

}

function validerDate(id){
	var objDate = 	getObjDate(id);
	var today =		new Date();
	if(!objDate) return "date";
	if(isNaN(objDate.jour) || isNaN(objDate.mois) || isNaN(objDate.annee)) return "date";
	if(objDate.heure!=''||objDate.minute!=''){
		if(objDate.heure==''||objDate.minute=='') return "date";
		if(isNaN(objDate.heure)||isNaN(objDate.minute)) return "date";
		if(objDate.heure<0 || objDate.heure>23) return "date";
		if(objDate.minute<0 || objDate.minute>59) return "date";
	}
	if(objDate.jour<1 || objDate.jour>31) return "date";
	if(objDate.mois<1 || objDate.mois>12) return "date";
	if(objDate.annee=='' || whiteSpace.test(objDate.annee)) return "date";
	var int_today = '' + today.getFullYear() + today.getMonth() + today.getDate(); // le '' set à ce que les chiffres ne s'aditionne pas
	var int_date = '' + objDate.annee + objDate.mois + objDate.jour;
	if (id.indexOf("_dp_")>-1){
		if (int_date < int_today){
			return "dateDp";
		}
	}else if (id.indexOf("_np_")>-1){
		if (int_date > int_today){
			return "dateNp";
		}
	}
	return true;
}

function validerDateCompare(idP,idM){
	var objDateP = 	getObjDate(idP);
	var objDateM = 	getObjDate(idM);
	var int_dateP = '' + objDateP.annee + objDateP.mois + objDateP.jour;
	var int_dateM = '' + objDateM.annee + objDateM.mois + objDateM.jour;
	if (objDateP.heure!=''&&objDateP.minute!=''&&objDateM.heure!=''&&objDateM.minute!=''){
		int_dateP += objDateP.heure + objDateP.minute;
		int_dateM += objDateM.heure + objDateM.minute;
	}
	if(objDateM&&objDateP){
		if (int_dateM > int_dateP){
			return false;
		}
	}
	return true;
}

function validerTelephone(id){
	var ObjTelephone = getObjTelephone(id);
	if(!ObjTelephone) return false;
	if(isNaN(ObjTelephone.region) || isNaN(ObjTelephone.debut) || isNaN(ObjTelephone.fin)) return false;
	if(ObjTelephone.region.length<3 || whiteSpace.test(ObjTelephone.region)) return false;
	if(ObjTelephone.debut.length<3 || whiteSpace.test(ObjTelephone.debut)) return false;
	if(ObjTelephone.fin.length<4 || whiteSpace.test(ObjTelephone.fin)) return false;
	
	return true;
}

function getObjDate(id){
	var id = 		id.substring(0,id.lastIndexOf('_'));
	var jour = 		$(id+'_jour');
	var mois = 		$(id+'_mois');
	var annee = 	$(id+'_annee');
	var heure = 	$(id+'_heure');
	var minute = 	$(id+'_minute');
	if(!jour || !mois || !annee){
		return false;
	}else{
		if(!heure || !minute){
			return {
			jour : 	$(jour).value.replace(/JJ/,''),
			mois : 	$(mois).value,
			annee : $(annee).value.replace(/AAAA/,''),
			heure : '',
			minute: ''
			};
		}else{
			return {
			jour : 	$(jour).value.replace(/JJ/,''),
			mois : 	$(mois).value,
			annee : $(annee).value.replace(/AAAA/,''),
			heure : $(heure).value.replace(/HH/,''),
			minute: $(minute).value.replace(/MM/,'')
			};
		}
	}
}

function getObjTelephone(id){
	var id = 		id.substring(0,id.lastIndexOf('_'));
	var region = 	$(id+'_region');
	var debut = 	$(id+'_debut');
	var fin = 		$(id+'_fin');
	if(!region || !debut || !fin) return false;
	else return {
		region : 	$(region).value,
		debut : 	$(debut).value,
		fin : 		$(fin).value
	};
}

function validerUser(user){
	for(k=0; k<a_users.length; k++){
		if(a_users[k].toLowerCase()==user.toLowerCase()&&$('temp_usager').value.toLowerCase()!=user.toLowerCase()){ 
			return false;
		}
	}
	return true;
}