var form_validation_debug = 0;
var form_validation_langs = new Array;
var form_validation_messages = new Array;
var form_validation_inputs = new Array;

// show error messages or not ?
var form_validation_current_message_mode = 1;

// default is french
var form_validation_current_lang = 0;

if (form_validation_debug >= 3) alert("Loading SetCurrentLang ...");
function SetCurrentLang (langId) {
	if(GetLang(langId)) {
		form_validation_current_lang = langId;
		return true;
	}
	
	return false;
}

if (form_validation_debug >= 3) alert("Loading GetCurrentLang ...");
function GetCurrentLang (langId) {
	return GetLang(form_validation_current_lang);
}

if (form_validation_debug >= 3) alert("Loading SetLang ...");
function SetLang (langId,langValue) {
	if (form_validation_debug >= 2) alert('SetLang(langId,langValue)');

	if (!form_validation_langs)
		form_validation_langs = new Array;

	if (!form_validation_langs)
		return false;

	form_validation_langs[langId] = langValue;

	if (!form_validation_langs[langId])
		return false;

	return true;
}

if (form_validation_debug >= 3) alert("Loading GetLang ...");
function GetLang (langId) {
	if (form_validation_debug >= 2) alert('GetLang(langId)');

	if (!form_validation_langs ||
		!form_validation_langs[langId])
		return null;
	else
		return form_validation_langs[langId];
}

if (form_validation_debug >= 3) alert("Loading SetMessage ...");
function SetMessage (messageId,langId,messageFormat) {
	if (form_validation_debug >= 2)	alert('SetMessage('+messageId+','+langId+','+messageFormat+')');

	if (!form_validation_messages)
		form_validation_messages = new Array;

	if (!form_validation_messages)
		return false;

	if (!form_validation_messages[messageId])
		form_validation_messages[messageId] = new Array;

	if (!form_validation_messages[messageId])
		return false;

	if (!GetLang(langId))
		SetLang(langId,'lang_'+form_validation_langs.length);
	
	if (!GetLang(langId))
		return false;

	form_validation_messages[messageId][langId] = messageFormat;

	if (form_validation_debug >= 2)	alert('SetMessage('+messageId+','+langId+','+messageFormat+')='+form_validation_messages[messageId][langId]);
}

if (form_validation_debug >= 3) alert("Loading GetMessage ...");
function GetMessage (messageId,langId) {
	if (form_validation_debug >= 2) alert('GetMessage(messageId,langId)');

	if (!form_validation_messages ||
		!form_validation_messages[messageId] ||
		!form_validation_langs ||
		!form_validation_langs[langId] ||
		!form_validation_messages[messageId][langId])
		return null;
	else
		return form_validation_messages[messageId][langId];
}

if (form_validation_debug >= 3) alert("Loading GetDefaultMessage ...");
function GetDefaultMessage(messageId) {
	if (form_validation_debug >= 2) alert('GetDefaultMessage(messageId)');
	return GetMessage(messageId,form_validation_current_lang);
}

if (form_validation_debug >= 3) alert("Loading ShowMessage ...");
function ShowMessage(messageId,langId) {
	if (form_validation_debug >= 2) alert('ShowMessage(messageId,langId)');

	if (GetMessage(messageId,langId) && form_validation_current_message_mode)
		alert(GetMessage(messageId,langId));
}

if (form_validation_debug >= 3) alert("Loading ShowDefaultMessage ...");
function ShowDefaultMessage(messageId) {
	if (form_validation_debug >= 2) alert('ShowDefaultMessage(messageId)');
	ShowMessage(messageId,form_validation_current_lang);
}

if (form_validation_debug >= 3) alert("Loading GetElementValue ...");
function GetElementValue (element) {
	if (form_validation_debug >= 2) alert('GetElementValue(element)');
	
	// dma_dump(element);
	
	if (element && element.type.indexOf('checkbox') > -1) {
		if (element && element.type.indexOf('checkbox') > -1 && element.checked) {
			if (form_validation_debug >= 1) alert('GetElementValue(element)[checkbox]='+element.value);
			return element.value;
		} else {
			if (form_validation_debug >= 1) alert('GetElementValue(element)[checkbox]=null');
			return null;
		}
	} else if (element && element.value) {
		if (form_validation_debug >= 1) alert('GetElementValue(element)[input.value]='+element.value);
		return element.value;
	} else {
		if (element && element.selectedIndex > -1 && element.options && element.options[element.selectedIndex] && element.options[element.selectedIndex].value) {
			if (form_validation_debug >= 1) alert('GetElementValue(element)[select['+element.selectedIndex+'].value]='+element.options[element.selectedIndex].value);
			return element.options[element.selectedIndex].value;
		}
	}

	if (form_validation_debug >= 2) alert('GetElementValue(element)=null');

	return null;
}

if (form_validation_debug >= 3) alert("Loading SetElementValue ...");
function SetElementValue (element,value) {
	if (form_validation_debug >= 2) alert('setElementValue(element,value)');

	if (element && element.value) {
		element.value = value;
		return true;
	}
	else if (element && element.selectedIndex && element.options[element.selectedIndex] && element.options[element.selectedIndex].value) {
		element.options[element.selectedIndex].value = value;
		return true;
	}
		
	return false;
}

if (form_validation_debug >= 3) alert("Loading CheckInput ...");
function CheckInput	(form_name, input_name) {
	if (form_validation_debug >= 2) alert('CheckInput(form_name,input_name)');

	if (!form_name || (isNaN(parseInt(input_name)) && !input_name)) {
		if (form_validation_debug >= 1) alert("CheckInput : Formulaire et/ou Entrée non identifié\(es\) \(" + form_name + "," + input_name + "\).");
		ShowDefaultMessage(0);
		return false;
	}
	
	var input = document.forms[form_name].elements[input_name];
	if (!input) {
		if (form_validation_debug >= 1) alert("CheckInput : Entrée inexistante \(" + form_name + "," + input_name + "\).");
		ShowDefaultMessage(1);
		return false;
	}
	
	return true;
}

if (form_validation_debug >= 3) alert("Loading IsEmpty ...");
function IsEmpty	(form_name, input_name) {
	if (form_validation_debug >= 2) alert('IsEmpty(form_name,input_name)');
	
	if (!CheckInput(form_name,input_name))
		return true;
	else if (!GetElementValue(document.forms[form_name].elements[input_name]))
		return true;
	else
		return false;
}

if (form_validation_debug >= 3) alert("Loading IsNumeric ...");
function IsNumeric	(form_name, input_name) {
	if (form_validation_debug >= 2) alert('IsNumeric(form_name,input_name)');

	if (!CheckInput(form_name,input_name))
		return false;
	else if (!GetElementValue(document.forms[form_name].elements[input_name]))
		return true;
	else {
		var input = document.forms[form_name].elements[input_name];
		if (isNaN(Number(GetElementValue(input))))
			return false;
		else {
			SetElementValue(input,Number(GetElementValue(input)));
			return true;
		}
	}
	
	return false;			
}

if (form_validation_debug >= 3) alert("Loading IsInteger ...");
function IsInteger	(form_name, input_name) {
	if (form_validation_debug >= 2) alert('IsInteger(form_name,input_name)');

	if (!CheckInput(form_name,input_name))
		return false;
	else if (!GetElementValue(document.forms[form_name].elements[input_name]))
		return true;
	else {
		var input = document.forms[form_name].elements[input_name];
		if (isNaN(parseInt(GetElementValue(input))))
			return false;
		else {
			SetElementValue(input,parseInt(GetElementValue(input)));
			return true;
		}
	}
	
	return false;			
}

if (form_validation_debug >= 3) alert("Loading IsDate ...");
// valid date format is jj/mm/aaaa
function IsDate (form_name, input_name) {
	if (form_validation_debug >= 2) alert('IsDate(form_name,input_name)');

	if (!CheckInput(form_name,input_name))
		return false;
	
	if (!document.forms[form_name].elements[input_name].value)
		return true;
	
	var input_value = document.forms[form_name].elements[input_name].value;
	
	if (input_value.length < 8 || input_value.length > 10) {
		return false;
	}
	
	if (input_value.indexOf("/") < 0 || input_value.indexOf("/") > 2) {
		return false;
	}
	
	var tableauDate = input_value.split("/");
	
	if ( tableauDate.length != 3 ) {
		return false;
	}
	
	if ( isNaN(parseInt(tableauDate[0])) || isNaN(parseInt(tableauDate[1])) || isNaN(parseInt(tableauDate[2])) ) {
		return false;
	}
	
	var jj = new Number(tableauDate[0]);
	var mm = new Number(tableauDate[1]);
	var aaaa = new Number(tableauDate[2]);
	
	if ( jj < 1 || jj > 31 ) {
		return false;
	}
	
	if ( mm < 1 || mm > 12 ) {
		return false;
	}
	
	if ( aaaa < 1000 || aaaa > 9999 ) {
		return false;
	}
				
	// alert("" + jj + "/" + mm + "/" + aaaa);
	
	var input = document.forms[form_name].elements[input_name];
	
	input.value = "" + ( (jj < 10) ? ( "0" + jj ) : jj ) + "/" + ( (mm < 10) ? ( "0" + mm ) : mm ) + "/" + aaaa;
	
	return true;
}

if (form_validation_debug >= 3) alert("Loading IsHour ...");
// valid hour format is hh:mm
function IsHour (form_name, input_name) {
	if (form_validation_debug >= 2) alert('IsHour(form_name,input_name)');

	if (!CheckInput(form_name,input_name))
		return false;
	
	if (!document.forms[form_name].elements[input_name].value)
		return true;
	

	var input_value = document.forms[form_name].elements[input_name].value;
	
	if (input_value.length != 5) {
		return false;
	}
	
	if (input_value.indexOf(":") < 0) {
		return false;
	}
	
	if (input_value.indexOf(":") != 2) {
		return false;
	}
	
	var tableauHeure = input_value.split(":");

	if ( tableauHeure.length != 2 ) {
		return false;
	}
	
	if ( isNaN(parseInt(tableauHeure[0])) || isNaN(parseInt(tableauHeure[1])) ) {
		return false;
	}
	
	var hh = new Number(tableauHeure[0]);
	var mm = new Number(tableauHeure[1]);
	
	
	if ( hh < 0 || hh > 24 ) {
		return false;
	}
	
	if ( mm < 0 || mm > 59 ) {
		return false;
	}
	
	// alert("" + hh + ":" + mm);
	
	var input = document.forms[form_name].elements[input_name];
	input.value = "" + ( (hh < 10) ? ( "0" + hh ) : hh ) + ":" + ( (mm < 10) ? ( "0" + mm ) : mm );
	
	return true;

}

var IsEmailMessage = "";

if (form_validation_debug >= 3) alert("Loading IsEmail ...");
function IsEmail (form_name, input_name) {
	if (form_validation_debug >= 2) alert('IsEmail(form_name,input_name)');

	IsEmailMessage = GetDefaultMessage(2) + " : ";
	
	if (!CheckInput(form_name,input_name))
		return false;
	else if (!document.forms[form_name].elements[input_name].value)
		return true;
	else {
		var input_value = document.forms[form_name].elements[input_name].value;
		
		if (input_value.indexOf("@") < 0) {
			IsEmailMessage = IsEmailMessage + GetDefaultMessage(3);
			return false;
		} else if (input_value.indexOf("@") < 1) {
			IsEmailMessage = IsEmailMessage + GetDefaultMessage(4);
			return false;
		} else {
			var tableauEmail = input_value.split("@");
			if (tableauEmail[1].indexOf(".") < 0) {
				IsEmailMessage = IsEmailMessage + GetDefaultMessage(5);
				return false;
			} else if (tableauEmail[1].indexOf(".") < 1 || (tableauEmail[1].indexOf(".") == (tableauEmail[1].length -1))) {
				IsEmailMessage = IsEmailMessage + GetDefaultMessage(6);
				return false;
			}
		}
		return true;
	}
	
	return false;
}

if (form_validation_debug >= 3) alert("Loading SetInputLabel ...");
function SetInputLabel (inputName,inputLabel) {
	if (form_validation_debug >= 2) alert('SetInputLabel(inputName,inputLabel)');

	if (!form_validation_inputs)
		form_validation_inputs = new Array;
		
	if (!form_validation_inputs)
		return false;

	if(!GetInputLabel(inputName))
		form_validation_inputs[form_validation_inputs.length] = [inputName,inputLabel];

	if(!GetInputLabel(inputName))
		return false;
	
	return true;
}

if (form_validation_debug >= 3) alert("Loading GetInputLabel ...");
function GetInputLabel (inputName) {
	if (form_validation_debug >= 2) alert('GetInputLabel(inputName,inputLabel)');
	
	if (!form_validation_inputs || !form_validation_inputs.length)
		return null;
	else {
		var inputId = -1;
		
		for (var i=0; i<form_validation_inputs.length; ++i) {
			if (form_validation_inputs[i] &&
				form_validation_inputs[i][0] &&
				form_validation_inputs[i][0].length == inputName.length &&
				form_validation_inputs[i][0].indexOf(inputName) == 0 &&
				form_validation_inputs[i][1]) {
				inputId = i;
				break;
			}
		}
		
		if (inputId >= 0)
			return form_validation_inputs[i][1];
	}
	
	return null;
}

if (form_validation_debug >= 3) alert("Loading display_cool ...");
function display_cool (input_name) {
	if (form_validation_debug >= 2) alert('display_cool(input_name)');

	if (GetInputLabel(input_name))
		return GetInputLabel(input_name);
	
	if (input_name.indexOf(".") < 1) {
		return_input_name = input_name;	
	} else {
		tableauName = input_name.split(".");
		return_input_name = tableauName[tableauName.length - 1];
	}
	
	while (return_input_name.indexOf("_")>0)
		return_input_name = return_input_name.replace("_"," ");
	
	return return_input_name;
}

if (form_validation_debug >= 3) alert("Loading CheckForm ...");
function CheckForm	(form_name, input_names) {
	if (form_validation_debug >= 2) alert('CheckForm(form_name,input_name)');

	var return_message	= "";
	var return_value	= true;
	var return_focus	= "";
	
	if (!input_names || input_names.length < 1) {
		if (form_validation_debug >= 1) alert("CheckForm failed (" + form_name + ") : the input_names are not valid.");
		return_message	= GetDefaultMessage(7);
		return_value	= false;
	} else {
		var requiered_input_names	= input_names[0];
		var numeric_input_names		= input_names[1];
		var integer_input_names		= input_names[2];
		var email_input_names		= input_names[3];
		var date_input_names		= input_names[4];
		var hour_input_names		= input_names[5];
		var password_input_names	= input_names[6];
		
		if (!numeric_input_names) numeric_input_names	= new Array;
		if (!integer_input_names) integer_input_names	= new Array;
		if (!email_input_names) email_input_names		= new Array;
		if (!date_input_names) date_input_names			= new Array;
		if (!hour_input_names) hour_input_names			= new Array;
		if (!password_input_names) password_input_names	= new Array;
		
		if (!document.forms[form_name]) {
			if (form_validation_debug >= 1) alert("CheckForm failed (" + form_name + ") : the form is not valid.");
			return_message	= GetDefaultMessage(8);
			return_value	= false;
		} else {
	
			if (form_validation_debug >= 2) alert('CheckForm: checking requiered inputs');

			if (requiered_input_names && requiered_input_names.length > 0) {
				for (var i=0; i<requiered_input_names.length; ++i) {
					if (!requiered_input_names[i] || IsEmpty(form_name,requiered_input_names[i])) {
						return_message	= return_message + display_cool(requiered_input_names[i]) + " : " + GetDefaultMessage(9);
						if (!return_focus)
							return_focus=requiered_input_names[i];
						return_value	= false;
					}
				}
			}
	
			if (form_validation_debug >= 2) alert('CheckForm: checking requiered ok');

			if (form_validation_debug >= 2) alert('CheckForm: checking numeric inputs');

			if (numeric_input_names && numeric_input_names.length > 0) {
				for (var i=0; i<numeric_input_names.length; ++i) {
					if (!numeric_input_names[i] || !IsNumeric(form_name,numeric_input_names[i])) {
						return_message	= return_message + display_cool(numeric_input_names[i]) + " : " + GetDefaultMessage(10);
						if (!return_focus) return_focus=numeric_input_names[i];
						return_value	= false;
					}
				}
			}

			if (form_validation_debug >= 2) alert('CheckForm: checking numeric ok');

			if (form_validation_debug >= 2) alert('CheckForm: checking integer inputs');

			if (integer_input_names && integer_input_names.length > 0) {
				for (var i=0; i<integer_input_names.length; ++i) {
					if (!integer_input_names[i] || !IsInteger(form_name,integer_input_names[i])) {
						return_message	= return_message + display_cool(integer_input_names[i]) + " : " + GetDefaultMessage(11);
						if (!return_focus) return_focus=integer_input_names[i];
						return_value	= false;
					}
				}
			}
	
			if (form_validation_debug >= 2) alert('CheckForm: checking integer ok');

			if (form_validation_debug >= 2) alert('CheckForm: checking email inputs');

			if (email_input_names && email_input_names.length > 0) {
				for (var i=0; i<email_input_names.length; ++i) {
					if (!email_input_names[i] || !IsEmail(form_name,email_input_names[i])) {
						return_message	= return_message + display_cool(email_input_names[i]) + " : " + GetDefaultMessage(12);
						if (IsEmailMessage) return_message	= return_message + "  - " + IsEmailMessage;
						if (!return_focus) return_focus=email_input_names[i];
						return_value	= false;
					}
				}
			}

			if (form_validation_debug >= 2) alert('CheckForm: checking email ok');

			if (form_validation_debug >= 2) alert('CheckForm: checking date inputs');

			if (date_input_names && date_input_names.length > 0) {
				for (var i=0; i<date_input_names.length; ++i) {
					if (!date_input_names[i] || !IsDate(form_name,date_input_names[i])) {
						return_message	= return_message + display_cool(date_input_names[i]) + " : " + GetDefaultMessage(13);
						if (!return_focus) return_focus=date_input_names[i];
						return_value	= false;
					}
				}
			}

			if (form_validation_debug >= 2) alert('CheckForm: checking date ok');

			if (form_validation_debug >= 2) alert('CheckForm: checking hour inputs');

			if (hour_input_names && hour_input_names.length > 0) {
				for (var i=0; i<hour_input_names.length; ++i) {
					if (!hour_input_names[i] || !IsHour(form_name,hour_input_names[i])) {
						return_message	= return_message + display_cool(hour_input_names[i]) + " : " + GetDefaultMessage(14);
						if (!return_focus) return_focus=hour_input_names[i];
						return_value	= false;
					}
				}
			}
			
			if (form_validation_debug >= 2) alert('CheckForm: checking hour ok');

			if (form_validation_debug >= 2) alert('CheckForm: checking password inputs');

			if (password_input_names && password_input_names.length == 2) {
				var name1 = password_input_names[0];
				var name2 = password_input_names[1];

				if (!document.forms[form_name].elements[name1].value || !document.forms[form_name].elements[name2].value) {
					return_value = false;
				}
				else if (document.forms[form_name].elements[name1].value != document.forms[form_name].elements[name2].value) {
					return_message	= return_message + GetDefaultMessage(15);
					if (!return_focus) return_focus=password_input_names[1];
					return_value = false;
				}
			}

			if (form_validation_debug >= 2) alert('CheckForm: checking password ok');

		}
	}
	
	if (!return_value && return_message) alert(return_message);
	
	
	if (form_validation_debug >= 2) alert('CheckForm: returning focus ...');

	if (return_focus && document.forms[form_name].elements[return_focus]) {
		// document.forms[form_name].elements[return_focus].focus();
		if (form_validation_debug >= 2) alert('CheckForm: focus desactivate');
	}
	
	if (form_validation_debug >= 2) alert('CheckForm: focus ok');

	
	if (form_validation_debug >= 1) alert('CheckForm: return value = '+return_value);

	return return_value;
}

if (form_validation_debug >= 3) alert("Loading french messages ...");
SetMessage(0,0,'Formulaire et/ou Entrée non identifié\(es\)');
SetMessage(1,0,'Entrée inexistante');

SetMessage(2,0,'Validation d\'email');
SetMessage(3,0,'Le \'@\' n\'a pas été détecté dans l\'email.\n');
SetMessage(4,0,'Le nom avant le \'@\' n\'a pas été détecté dans l\'email.\n');
SetMessage(5,0,'La fin de l\'email n\'est pas correcte\n');
SetMessage(6,0,'La fin de l\'email n\'est pas correcte (.com, .uk, .fr, ...)\n');

SetMessage(7,0,'Le formulaire à vérifier n\'est pas valide.');
SetMessage(8,0,'Le formulaire à vérifier n\'est pas valide.');

SetMessage(9,0,'Ce champ ne doit pas être vide.\n');
SetMessage(10,0,'Ce champ doit être un numérique.\n');
SetMessage(11,0,'Ce champ doit être un entier.\n');
SetMessage(12,0,'Ce champ doit être une adresse email correcte.\n');
SetMessage(13,0,'Ce champ doit être une date valide (jj/mm/aaaa).\n');
SetMessage(14,0,'Ce champ doit être une heure valide (hh:mm).\n');
SetMessage(15,0,'Attention les mots de passe saisis sont différents!\n');

if (form_validation_debug >= 3) alert("Loading english messages ...");
SetMessage(0,1,'Formular and/or Input not identified');
SetMessage(1,1,'Unknown input');

SetMessage(2,1,'Email validation');
SetMessage(3,1,'The \'@\' have not been detected in the email.\n');
SetMessage(4,1,'The name before the \'@\' is not correct.\n');
SetMessage(5,1,'The end of the email is not correct\n');
SetMessage(6,1,'The end of the email must be of the form (.com, .uk, .fr, ...)\n');

SetMessage(7,1,'The formular is not valid.');
SetMessage(8,1,'The formular is not valid.');

SetMessage(9,1,'This field must not be empty.\n');
SetMessage(10,1,'This field must be a numeric.\n');
SetMessage(11,1,'This field must be an integer.\n');
SetMessage(12,1,'This field must be a correct email adresse.\n');
SetMessage(13,1,'This field must be a valid date (dd/mm/yyyy).\n');
SetMessage(14,1,'This field must be a valide hour (hh:mm).\n');
SetMessage(15,1,'The keywords you type are differentes!\n');

// SetInputLabel(inputName,inputLabel);

if (form_validation_debug >= 1) alert("Form_validation all loaded.");


