/* ---------------------------
** copyleft (c) 2004
** this script is under CeCILL 1.0 licence and Ao Dev' Team Additionnal Conditions.
   you can USE it for free. For the others conditions check those websites:
   - (CeCILL licence)
   - www.phparustools.com (AoDTeam_AC & CeCILL licence)
** 
** author	: raphaël rudler  - raphael.rudler@laposte.net
** version	: 2.1
** How To	:
	<script language="javascript" src="[yourpath/]formNeeded.js"></script>
	<script language="javascript">
	<? include '[yourpath/]lang_modif.tpl'; ( for multi-language implemented systems ) ?>
	var need  = new Array('field1' [, ...]);
	var needC = new Array();
	needC['field1'] = 'field libelle';
	[...]
	
	var passwd= new Array('field_of_password1', 'confirmation_field_of_password1' [, ...]);
	var email = new Array('field_of_email1' [, ...]);
	var nums  = new Array('number_type_field' [, ...]);
	var dates = new Array('date_type_field' [, ...]);
	</script>
** --------------------------- */

var stopc = false;
var need  = false;	/* fields that are needed */
var needE = false;	/* needed fields libelle -- for older version(s) compatibility */
var needC = false;	/* needed fields libelle (Associative tab  'field' => 'libelle') */
var email = false;	/* fields that are emails */
var passwd= false;	/* fields that are passwords :: Array('pass1_field', 'confirmation_field_of_pass1', ...) */
var nums  = false;  /* fields that are numbers */
var dates = false;  /* fields that are dates */
var dtformat = 'fra';
var dtlike= false;

var thefield = 'le champ';
var thedtfformat = 'le format du champ date';
var notnum	 = "n'est pas numérique";
var notinfer = "ne peut être inféreur à";
var notvalid = 'n\'est pas valide';
var prestr	 = 'vous avez oublié de remplir '+thefield+' obligatoire';
var defstr	 = 'vous avez oublié de remplir un champ obligatoire';
var pssErr	 = 'le mot de passe et sa confirmation ne correspondent pas';

function	not_needed(fieldname){
	ret = true;
	for(var i=0; ret && need[i]; i++){
		if(need[i] == fieldname){ ret = false; }
	}
	return ret;
}

function	get_value(nform, field){
	ret = '';
	if (document.getElementById(field)){
		ret = document.getElementById(field).value;
	} else {
		ret = document.forms[nform][field].value;
	}
	return ret;
}

function	verif(nform, field){
	var ret = false;
	if (document.getElementById(field)){
		if (document.getElementById(field) && document.getElementById(field).value)
			ret = true;
	} else {
		if (document.forms[nform][field] && document.forms[nform][field].value)
			ret = true;
	}
	return(ret);
}

function	needed(nform){
	var ret = true;
	for(var i=0; ret && need[i]; i++){
		ret = verif(nform, need[i]);
		if (ret == false){
			libel = (needC[need[i]]) ? needC[need[i]] : ((needE[i]) ? needE[i] : false);
			if (libel != false){
				alert(prestr+' "'+libel+'"');
			} else { alert(defstr); }
		}
	}
	return(ret);
}

function	verifpss(nform){
	var ret = true;
	for (var i=0; ret && passwd[i]; i+=2){
		var j = (i+1);
		if (document.getElementById(passwd[i])){
			if (document.getElementById(passwd[i]).value != document.getElementById(passwd[j]).value)
				ret = false;
		} else {
			if (document.forms[nform][passwd[i]].value != document.forms[nform][passwd[j]].value)
				ret = false;
		}
		if (ret == false){
			alert(pssErr);
	}}
	return(ret);
}

function	verifemails(nform){
	ret = true;
	var regexp = /^[0-9a-zA-Z_-]+[.[0-9a-zA-Z_-]+]?@[0-9a-zA-Z-]{2,}[.[0-9a-zA-Z-]+]?[.][a-zA-Z]{2,3}$/;
	for (var i=0; ret && email[i]; i++){
		str = get_value(nform, email[i]);
		if(str){
			if (regexp.exec(str) == null)
				ret = false;
			if (ret == false){
				emlibel = (needC[email[i]]) ? needC[email[i]] : email[i];
				alert(thefield+" '"+emlibel+"' "+notvalid);
		}}else{ ret = not_needed(dates[i]); }
	}
	return ret;
}

function	verifnums(nform){
	ret = true;
	var regexp = /^[0-9]+$/;
	for (var i=0; ret && nums[i]; i++){
		str = get_value(nform, nums[i]);
		if(str){
			if (regexp.exec(str) == null)
				ret = false;
			if (ret == false){
				emlibel = (needC[nums[i]]) ? needC[nums[i]] : nums[i];
				alert(thefield+" '"+emlibel+"' "+notnum);
		}}else{ ret = not_needed(dates[i]); }
	}
	return ret;
}

function	formatdate(format){
	var regexp = /^([0-9]{4})([-|\/])((0{1}[0-9]{1})|(1{1}[0-2]{1}))([-|\/])(([0-2]{1}[0-9]{1})|(3{1}[0-1]{1}))$/;
	if(dtlike == true)
		regexp = /^(([0-9]{4})|(%))([-|\/])(((0{1}[0-9]{1})|(1{1}[0-2]{1}))|(%))([-|\/])((([0-2]{1}[0-9]{1})|(3{1}[0-1]{1}))|(%))$/;
	if(format == 'fra'){
		regexp = /^(([0-2]{1}[0-9]{1})|(3{1}[0-1]{1}))([-|\/])((0{1}[0-9]{1})|(1{1}[0-2]{1}))([-|\/])([0-9]{4})$/;
		if(dtlike == true)
			regexp = /^((([0-2]{1}[0-9]{1})|(3{1}[0-1]{1}))|(%))([-|\/])(((0{1}[0-9]{1})|(1{1}[0-2]{1}))|(%))([-|\/])(([0-9]{4})|(%))$/;
	}
	return regexp;
}

function	verifdates(nform){
	ret = true;
	var regexp = formatdate(dtformat);
	for (var i=0; ret && dates[i]; i++){
		str = get_value(nform, dates[i]);
		if(str){
			if (regexp.exec(str) == null)
				ret = false;
			if (ret == false){
				emlibel = (needC[dates[i]]) ? needC[dates[i]] : dates[i];
				alert(thedtfformat+" '"+emlibel+"' "+notvalid);
		}}else{ ret = not_needed(dates[i]); }
	}
	return ret;
}

function	stopit(){
	stopc = true;
}

function	check(nform){
	var ret = false;
	if(stopc == true){ return true; }
	else{
		ret = needed(nform);
		if (ret != false && passwd)
			ret = verifpss(nform);
		if (ret != false && nums)
			ret = verifnums(nform);
		if (ret != false && email)
			ret = verifemails(nform);
		if (ret != false && dates)
			ret = verifdates(nform);
		return(ret);
}}