﻿function MorphineVerfiForm() {
	this.idCounter = 0 ;
	this.instances = new Array();
}
MorphineVerfiForm.prototype.addVerifControl = function(idVerif, formul, txtIntro, beforeCallback) {
		var inst = new MorphineVerfiFormControl(idVerif, formul, txtIntro, beforeCallback);
		this.instances[idVerif] = inst ;
}
/*
morphine_verif.addVerifControl("idVerif1", document.formulaire) ;
morphine_verif.addItem("idVerif1", "monChamps", "isValidString", "Veuillez saisir la date au format correct", "min=3;max=10") ;
*/
MorphineVerfiForm.prototype.addItem = function(idVerif, elName, handlerTxt, txt, options) {
	this.instances[idVerif].addItem(elName, handlerTxt, txt, options) ;
}
MorphineVerfiForm.prototype.analyseOptions = function(options) {
	tabOptions = new Array() ;
	if (!options) return tabOptions ;
	var tabElmts = (options).split(";") ;
	tabOptions = new Array() ;
	for (i=0 ; i<tabElmts.length ; i++) {
		var tabTemp = (tabElmts[i]).split("=") ;
		tabOptions[tabTemp[0]] = tabTemp[1] ;
	}
	return tabOptions ;
}

MorphineVerfiForm.prototype.isValidDate = function(chaineDate, options) {
	tabOptions = morphine_verif.analyseOptions(options) ;
	if (chaineDate == "") {
		if (tabOptions['vide']=="yes") return true ;
		else return false ;
	}
	var ladate = (chaineDate).split("/");
	if ((ladate.length != 3) || isNaN(parseInt(ladate[0])) || isNaN(parseInt(ladate[1])) || isNaN(parseInt(ladate[2]))) return false;
	var unedate = new Date(ladate[2],ladate[1]-1,ladate[0]);
	var annee = unedate.getYear();
	if ((Math.abs(annee)+"").length < 4) annee = annee + 1900 ;
	return ((unedate.getDate() == ladate[0]) && (unedate.getMonth() == ladate[1]-1) && (annee == ladate[2])) ;
}
MorphineVerfiForm.prototype.isValidEmail = function(chaine, options) {
	tabOptions = morphine_verif.analyseOptions(options) ;
	invalidChars = " /:,;"
	if (chaine == "") {
		if (tabOptions['vide']=="yes") return true ;
		else return false ;
	}
	for (i=0; i<invalidChars.length; i++) {
		badChar = invalidChars.charAt(i) ;
		if (chaine.indexOf(badChar,0) > -1) return false ;
	}
	atPos = chaine.indexOf("@",1) ;
	if (atPos == -1) return false ;
	if (chaine.indexOf("@",atPos+1) > -1) return false ;
	periodPos = chaine.indexOf(".",atPos) ;
	if (periodPos == -1) return false ;
	if (periodPos+3 > chaine.length) return false ;
	return true ;
}
MorphineVerfiForm.prototype.isValidString = function(chaine, options) {
	var ok = true ;
	tabOptions = morphine_verif.analyseOptions(options) ;
	if (chaine == "") {
		if (tabOptions['vide']=="yes") return true ;
		else return false ;
	}
	if (!tabOptions["min"]) tabOptions["min"]=3 ;
	if (!tabOptions["max"]) tabOptions["max"]=-1 ;
	if (!tabOptions["acceptDoubleQuote"]) tabOptions["acceptDoubleQuote"]="no" ;
	
	if (chaine.length < tabOptions["min"]) ok=false ;
	if (tabOptions["max"]>0 && chaine.length>tabOptions["max"]) ok=false ;
	if (tabOptions["acceptDoubleQuote"]=="no") {
		if (chaine.indexOf('"') !=-1) ok=false ;
	}
	return ok ;
}
MorphineVerfiForm.prototype.isValidInt = function(chaine, options) {
	var ok = true ;
	tabOptions = morphine_verif.analyseOptions(options) ;
	if (chaine == "") {
		if (tabOptions['vide']=="yes") return true ;
		else return false ;
	}
	if (!tabOptions["min"]) tabOptions["min"]=-1 ;
	if (!tabOptions["max"]) tabOptions["max"]=-1 ;
	
	if (!morphine_verif.isValidNumeric(chaine)) ok=false ;
	if (isNaN(parseInt(chaine))) ok=false ;
	else {
		nombre = parseInt(chaine) ;
		if (tabOptions["min"]>=0 && nombre < tabOptions["min"]) ok=false ;
		if (tabOptions["max"]>=0 && nombre > tabOptions["max"]) ok=false ;
	}
	return ok ;
}
MorphineVerfiForm.prototype.isValidNumeric = function(num) {
	var exp = new RegExp("^[0-9-.]*$","g");
	return exp.test(num);
}
MorphineVerfiForm.prototype.isNotFirstSelect = function(objSelect) {
	if (objSelect.selectedIndex==0) return false ;
	return true ;
}

MorphineVerfiForm.prototype.isValidDouble = function(chaine, options) {
	var ok = true ;
	tabOptions = morphine_verif.analyseOptions(options) ;
	if (chaine == "") {
		if (tabOptions['vide']=="yes") return true ;
		else return false ;
	}
	if (!tabOptions["min"]) tabOptions["min"]=-1 ;
	if (!tabOptions["max"]) tabOptions["max"]=-1 ;
	if (!tabOptions["acceptComma"]) tabOptions["acceptComma"]="no" ;
	if (!tabOptions["acceptInt"]) tabOptions["acceptInt"]="yes" ;
	
	virgule = new RegExp(",","gi") ;
	if (virgule.test(chaine)) {
		if (tabOptions["acceptComma"]=="yes") {
			chaine = chaine.replace(virgule,"." ) ;
		} else ok=false ;
	}
	if (!morphine_verif.isValidNumeric(chaine)) ok=false ;
	if (chaine.indexOf(".")==-1 && tabOptions["acceptInt"]=="no") ok=false ;
	if (isNaN(parseFloat(chaine))) ok=false ;
	else {
		nombre = parseFloat(chaine) ;
		alert(nombre);
		if (tabOptions["min"]>=0 && nombre < tabOptions["min"]) ok=false ;
		if (tabOptions["max"]>=0 && nombre > tabOptions["max"]) ok=false ;
	}
	return ok ;
}
MorphineVerfiForm.prototype.goVerif = function(e) {
	if (!e) e = window.event ;
	var formul = (e.target) ? e.target : e.srcElement ;
	for (var idInstance in morphine_verif.instances) {
		if (morphine_verif.instances[idInstance].formulaire==formul)
			return morphine_verif.instances[idInstance].goVerif() ;
	}
}

function MorphineVerfiFormControl(idVerif, formul, txtIntro, beforeCallback) {
	this.idVerif = idVerif ;
	this.formulaire = formul ;
	this.txtIntro = txtIntro ;
	this.beforeCallback = beforeCallback ;
	//morphine_base.addEvent(this.formulaire, "submit", MorphineVerfiForm.prototype.goVerif) ;
	this.formulaire.onsubmit = MorphineVerfiForm.prototype.goVerif ;
	this.tabElements = new Array();
}
MorphineVerfiFormControl.prototype.addItem = function(elName, handlerTxt, txt, options) {
	this.tabElements[elName] = new Array();
	this.tabElements[elName]['txt'] = txt ;
	this.tabElements[elName]['handler'] = handlerTxt ;
	this.tabElements[elName]['options'] = options ;
}
MorphineVerfiFormControl.prototype.removeItem = function(elName) {
	delete this.tabElements[elName] ;
}
MorphineVerfiFormControl.prototype.goVerif = function() {
	/*
	for (i=0 ; i<this.formulaire.elements.length ; i++) {
		var el = this.formulaire.elements[i] ;
		el.style.backgroundColor = "red" ;
	}
	*/
	if (this.beforeCallback!=null && !this.beforeCallback()) return false ;
	okFinal = true ;
	txtFinal = "" ;
	if (this.txtIntro) txtFinal += this.txtIntro+"\n" ;
	for (var elName in this.tabElements) {
		el = eval("this.formulaire."+elName) ;
		if (el) {
			handlerVrai = eval("morphine_verif."+this.tabElements[elName]['handler']) ;
			if (el.type == "select-one") {
				ok = handlerVrai(el, this.tabElements[elName]['options']) ;				
			} else {
				ok = handlerVrai(el.value, this.tabElements[elName]['options']) ;
			}
			if (!ok) {
				el.style.backgroundColor = "red" ;
				txtFinal += "- "+this.tabElements[elName]['txt']+"\n" ;
				okFinal=false ;
			} else {
				el.style.backgroundColor = "" ;
			}
		}
	}
	if (!okFinal) alert(txtFinal) ;
	return okFinal ;
}

var morphine_verif = new MorphineVerfiForm() ;

function confirmerEff(url) {
	if (window.confirm("Souhaitez vous effacer cette fiche ?")) {
		window.open(url,"_self") ;
	}
}
