//Pointer vers le formulaire ... sera initialisé par validateForm()
var oForm=null;

//function permettant de récuperer le contenu du tags <LABEL FOR=..> ..</LABEL> associé à un champ ..
function labelField(oField) {
	var cLabels=document.getElementsByTagName("LABEL")
	var sLabel=null;
	var sIdentifier=(/^(checkbox|radio)$/i.test(oField.type))?oField.name:oField.id;
	for (m=0;m<cLabels.length;m++) {
		if (cLabels[m].getAttribute("htmlFor")==sIdentifier) {
			sLabel=cLabels[m].innerText.replace(/[\*:]|[\r\n]/gi,"");
			sLabel=sLabel.replace(/\s+$/,"");
			break;
		}
	}
	if (sLabel!=null) 
		return sLabel;
	else 
		return oField.name.replace(/[\-_]/g," ");
}

//permet de créer et initialiser ou modifier un champ du type hidden 
function setHidden(sField,sValue,sForm) {
	if (sForm) oForm=document.forms[sForm];
	var cFields=document.getElementsByName(sField);
	var oField=null;
	for (k=0;k<cFields.length;k++) {
		if (cFields[k].type=="hidden") {
			oField=cFields[k];
			break;
		}
	}
	if (oField==null) {
		if (document.all) {
			//pour forcer que IE positionne le NAME correctement 
			oField=document.createElement("<INPUT NAME='" + sField + "'>");
		}
		else {
			oField=document.createElement("INPUT");
			oField.name=sField;
		}
		oField.type="hidden";
		oForm.appendChild(oField);
	}
	oField.value=sValue;
}

//function permetant de supprimer un champ hidden ... 
function delHidden(sField) {
	var cFields=document.getElementsByName(sField);
	for (k=0;k<cFields.length;k++) {
		if (cFields[k].type=="hidden") {
			oField.removeNode();
			break;
		}
	}
}

//function pour afficher le message d'erreur ...
function showError(oField) {
	if(oField.onbeforeactivate)	oField.onbeforeactivate();
	//alert("Le champ " + labelField(oField) + " est obligatoire." + (oField.getAttribute("help")?"\n\n"+oField.getAttribute("help").replace(/\\n/g,"\n"):""))
	alert(aMessage[10004].include(labelField(oField)) + (oField.getAttribute("help")?"\n\n"+oField.getAttribute("help").replace(/\\n/g,"\n"):""));
	oField.focus();
	return false;
}

/*
	function permettant de controler la valeur d'un champ 
	avec une expression régulaire précisée par le rédacteur dans l'attribut PATTERN
*/
function checkPattern(oField) {
	var rPat=new RegExp(oField.getAttribute("pattern"),"gi");
	if (!rPat.test(oField.value)) {
		var sHelp=(oField.getAttribute("help")?"\n"+oField.getAttribute("help").replace(/\\n/g,"\n"):"");
		if(oField.onbeforeactivate)	oField.onbeforeactivate();
		//alert("La valeur du champ " + labelField(oField) + " est incorrect.\n" + sHelp);
		alert(aMessage[10005].include(labelField(oField)) +"\n"+ sHelp);
		oField.focus();
		return false;
	}
	return true;
}

//function pour mettre à jour le champ sMailFrom ...
function setEmail(oField,soPrenom,soNom) {
	if (oForm==null) oForm=oField.form;
	var sMailFrom="";
	if (soPrenom) sMailFrom+=oForm.elements[soPrenom].value+" ";
	if (soNom) sMailFrom+=oForm.elements[soNom].value;
	sMailFrom+="<" +oField.value+ ">";
	setHidden("sMailFrom",sMailFrom);
}

// vérifie la validité de la date
//-------------------------------
function verifDate(oField)
{
if (oField.value.length==0) 
	return true;
var aDate=oField.value.split(/[\s-_\/]/);
var iYear=parseInt(new Number(aDate[2]));
if (iYear<100) {
	iYear+=2000;
	}
var iMonth=parseInt(new Number(aDate[1]));
var iDay=parseInt(new Number(aDate[0]));
if (isNaN(iMonth)||1>iMonth || iMonth>12) {
		if(oField.onbeforeactivate)	oField.onbeforeactivate();
		//alert("Le mois est incorrect.")
		alert(aMessage[10006]);
		oField.focus();
		return false;
	}

var iDayMax=30;
switch (iMonth) {
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		iDayMax=31;
		break;
	case 2: 
		iDayMax=((iYear%4==0&&iYear%100!=0)||(iYear%1000==0))?29:28;
		break;
	default: 
		iDayMax=30;
		break;
	}

if (isNaN(iDay) || 1>iDay || iDay>iDayMax) {
		if(oField.onbeforeactivate)	oField.onbeforeactivate();
		//alert("Le jour est incorrect.")
		alert(aMessage[10007]);
		oField.focus();
		return false;
	}

if (isNaN(iYear)) {
		if(oField.onbeforeactivate)	oField.onbeforeactivate();
		//alert("L'année est incorrect.")
		alert(aMessage[10008]);
		oField.focus();
		return false;
	}
if (iDay<10) aDate[0]="0" + iDay;
if (iMonth<10) aDate[1]="0" + iMonth;
return true;
}

//Controle format email
function verifEmail(oField) {
	var rEmail=new RegExp("^[-_\.a-z0-9]+@[-_\.a-z0-9]+[\.][a-z\.]+$","ig");
	if (!rEmail.test(oField.value)) {
		if(oField.onbeforeactivate)	oField.onbeforeactivate();
		//alert("La valeur du champ " + labelField(oField) + " n'est pas un adresse Email.")
		alert(aMessage[10009].include(labelField(oField)));
		oField.focus();
		return false;
	}
	//mise à jour adresse email ...
	var rSetEmail=new RegExp("setemail","ig")
	if (rSetEmail.test(oField.onchange)) oField.onchange();
	return true;
}

//controle format numerique
function verifNumeric(oField) {
	var rNum=new RegExp("^\-?[0-9]+$");
	if (!rNum.test(oField.value)) {
		if(oField.onbeforeactivate)	oField.onbeforeactivate();
		//alert("La valeur du champ " + labelField(oField) + " devrait être numérique (sans décimales).")
		alert(aMessage[10010].include(labelField(oField)));
		oField.focus();
		return false;
	}
	return true;
}

//controle format numerique
function verifTime(oField) {
	if (!/\d{2}\:\d{2}/g.test(oField.value)) {
		if(oField.onbeforeactivate)	oField.onbeforeactivate();
		//alert("La valeur du champ " + labelField(oField) + " n'a pas le bon format (HH:MM).")
		alert(aMessage[10011].include(labelField(oField)));
		oField.focus();
		return false;
	}
	
	var aTime=oField.value.split(/\:/);
	var iHour=parseInt(aTime[0]);
	var iMin=parseInt(aTime[1]);
	if (iHour > 24 || iMin>60 || (iHour==24 && iMin!=0)) {
		if(oField.onbeforeactivate)	oField.onbeforeactivate();
		//alert("La valeur du champ " + labelField(oField) + " n'a pas le bon format (HH:MM).")
		alert(aMessage[10011].include(labelField(oField)));
		oField.focus();
		return false;
	}
	return true;
}

//A ajouter les functions pour numerique, argent, date ...
function verifText(oField) {
	var sFormat=oField.getAttribute("format")
	if (sFormat!=null && oField.value.length>0) {
		switch (sFormat.toLowerCase()) {
			case "date" : 
				if (!verifDate(oField)) return false;
				break;
			case "email" : 
				if (!verifEmail(oField)) return false;
				break;
			case "numeric" : 
			case "numerique" : 
				if (!verifNumeric(oField)) return false;
				break;
			case "time" : 
				if (!verifTime(oField)) return false;
				break;
		}
	}

	if (oField.getAttribute("required")!=null && !oField.disabled && oField.value.replace(/\s/gi,"").length==0) {
		return showError(oField);
	}

	if (oField.getAttribute("pattern")!=null && oField.value) {
		return checkPattern(oField);
	}
	return true;
}

function verifRadio(oField) {
	//établir la collection des radios en cours 
	var cRadio=document.getElementsByName(oField.name)
	var bRadioObl=false;
	var bRadioCkd=false;
	for (j=0;j<cRadio.length;j++) {
		if (cRadio[j].getAttribute("required")!=null) bRadioObl=true;
		if (cRadio[j].checked) bRadioCkd=true;
	}
	if (bRadioObl && !bRadioCkd) {
		return showError(oField);
	}
	//mettre valeur defaut pour checkbox ...
	if (oField.type=="checkbox" && oField.getAttribute("default")) {
		if (oField.checked) {
			delHidden(oField.name);
		}
		else {
			setHidden(oField.name,oField.getAttribute("default"));
		}
	}
	return true;
}

function verifSelect(oField) {
	if (oField.getAttribute("required")!=null && oField.selectedIndex==-1) {
		return showError(oField);
	}
	return true;
}

var bDict=false;
function validateForm(olForm) {
	//if submit event trigerred by hitting [enter] key ... return false ...
	try {
		oForm=olForm; 
		//check if dictionary exists ... if not load it
		if(typeof(oDict)=="undefined" && !bDict)	{
			var oScript=document.createElement("SCRIPT");
			oScript.setAttribute("src",document.location.href.replace(/^(.+)\/admin\/.+$/i,"$1/admin/js/dictionary.js"));
			oScript.setAttribute("type","text/javascript");
			document.body.appendChild(oScript);
			for (i=0;i<oForm.elements.length;i++) {
				if(oForm.elements[i].type=="submit") {
					oForm=oForm.elements[i];
					window.setTimeout("oForm.click()",300);
					window.status="Initializing dictionary, please wait ...";
					break;
				}
			}
			bDict=true;
			return false;
		}
		for (i=0;i<oForm.elements.length;i++) {
			switch (oForm.elements[i].type) {
				case "button" :
				case "hidden" :
				case "image" :
				case "reset" :
				case "submit" :
					break;
				case "file" :
				case "password" :
				case "text" :
				case "textarea" :
					if (!verifText(oForm.elements[i])) return false;
					break;
				case "radio" :
				case "checkbox" :
					if (!verifRadio(oForm.elements[i])) return false;
					break;
				case "select-one" :
				case "select-multiple" :
					if (!verifSelect(oForm.elements[i])) return false;
					break;
				default : 
					//window.status=oForm.elements[i].tagName +" :: "+ ((oForm.elements[i].type)?oForm.elements[i].type:"notTyped");
					break;
			}
		}
	
		return true;
	}
	catch(e) {
		alert(e.description);
		return false;
	}
}
