
/*-----------------------------------------------------------------------------------------------
'
'Nom du fichier		: checkForm.js
'
'Auteur(s)		: Chhor-Chou Khauv
'Date de création	: 5 septembre 2002
'Date de révision	: 20 septembre 2002 - J.F.M.
'
'Description	:	Fichier qui contient les fonctions 
'					pour valider les champs requis d'un 
'					formulaire(champs de texte, bouton
'					radio, case a cocher, liste de choix)
'					le format de courriel et la longueur
'					du zone de texte).
'
'Entrée         :	Le formulaire:  this
'					La langue: 'Fr'/'En'
'					Le nom du input du courriel: 'txtEmail' ou ''
'
'Sortie         :	true/false
'		
'PROCEDURE A SUIVE:
'	1)Appel sur le formulaire:
'			onSubmit="return checkForm(this,'Fr','txtEmail');"
'	
'	2)Inclure dans la partie <head>:
'			<script language="JavaScript" src="/lib/checkForm.js"></script>
'	
'	3)Nomemcloture de nom des elements du formulaire:
'			-Le 1er caractere du nom d'input est tres important:
'				T:textfield or textarea
'				R:radio button
'				C:checkbox
'				D:droplist
'			-Exemple:
'				<input type="text" name="TxtNom" value="test">
'	
'	4)Declarer les variables dans la partie <head>:
'			-Exemples:
'				//Nom elements obligatoires du formulaires(<input type="text" name="TxtField" value="testing">)
'				var requiredFields = new Array("TxtField","TxtArea", "Chkbox1", "DrpList", "RbButton")
'				//Nom de l'element a afficher sur le message d'erreur en anglais
'				var fieldNamesEn = new Array("Textfield","Textarea", "Checkbox", "Droplist", "Radio button")
'				//Nom de l'element a afficher sur le message d'erreur en francais
'				var fieldNamesFr = new Array("Champ texte","Zone de texte", "Boite a cocher", "List de selection", "Radio bouton")
'				
'				//Nom des zones de textes ou la longueur ne doit pas depasser une limite
'				var AreaCtrNames = new Array("TxtArea1", "TxtArea2")
'				//Nom de l'element a afficher sur le message d'erreur en anglais
'				var AreaNameEn = new Array("Textarea name 1", "Textarea name 2")
'				//Nom de l'element a afficher sur le message d'erreur en francais
'				var AreaNameFr = new Array("Nom du zone de texte 1", "Nom du zone de texte 2")
'				//Limite maximale du nbr de caracteres acceptes
'				var AreaLength = new Array(100, 200)
'	
-----------------------------------------------------------------------------------------------*/


//******Declaration of global variables******************************//
var FinalMsg; //Error message
var fieldCheck;	//flag to show or not error message
var fieldNum; //Counter of number of input to be checked
var fieldNames; //Varibles contening inputs names
var msg //message
		
fieldNames = ""
fieldNum = 0;

					
//*********Validate form input***************************************//
function checkForm(recForm, recLg, recEmailCtrName) {
	
	var item = "";
	var firstChar = "";
	var AreaName = "";
	FinalMsg = "";
	msg	= "";
	fieldCheck = true;
	
	var Msg_Fr = "Les champs marqués d'un \"!\" sont requis pour compléter le formulaire.\nLes champs suivants sont manquants: \n";
	var Msg_En = "The fields marked with a \"!\" are required to complete the process.\nThese fields must have a value to submit: \n";
		
	if (recLg == "Fr"){
		fieldNames = fieldNamesFr
		msg = Msg_Fr;
	}else{
		fieldNames = fieldNamesEn
		msg = Msg_En;
	}
		
	//---Check email format---
	if (recEmailCtrName != '') {
		emailCheck(recForm, recEmailCtrName, recLg);
	}
		
	//---Put appropriate textarea name (fr/en)---
	if (recLg == 'Fr'){
		AreaName = AreaNameFr 
	}else{
		AreaName = AreaNameEn
	}	
		
	//---Check length of textarea---
	if (AreaCtrNames.length != 0) {
		for (fieldNum=0; fieldNum < AreaCtrNames.length; fieldNum++){
			CheckLenMessage(recForm, AreaCtrNames[fieldNum], AreaName[fieldNum], AreaLength[fieldNum], recLg);
		}	
	}
		
	//---Loop to get all element to be checked---
	for(fieldNum=0; fieldNum < requiredFields.length; fieldNum++) {
		
		//Get first character of element
		item = requiredFields[fieldNum];
		//alert(item);
		firstChar = item.substring(0,1);
		switch (firstChar){
			//For textfield and textarea
			case "t":
				TextField(recForm, recLg) 
				break;
			//..radio button
			case "r":
				RadioButton(recForm, recLg) 
				break;
			//..checkbox
			case "c":
				CheckBox(recForm, recLg) 
				break;	
			//..drplist
			case "d":
				DropList(recForm, recLg) 
				break;
		}
				    
	}
	
	//alert("final msg: " + FinalMsg);		
	//---Some required fields are missing values---
	if (fieldCheck == false){
	   alert(FinalMsg);
	   return false;
		
	//---All required fields are inputed ---
	}else{ 
		return true;   
	}
			
}
	
	
//***Function that check if textfield or textarea is field******************//
function TextField(rForm, rLg){
		//alert("TEXTFIELD\nform: " + rForm + "\nlg: " + rLg + "\nfieldNum: " + fieldNum + " \nTextfield: " + rForm.elements[requiredFields[fieldNum]].value);
	if ((rForm.elements[requiredFields[fieldNum]].value == "") ||
	    (rForm.elements[requiredFields[fieldNum]].value == " ")) {
			
		if (FinalMsg.indexOf(msg) == -1) {
			RequiredTxt(rLg);
		}
		FinalMsg += "     " + fieldNames[fieldNum] + "\n";
	    fieldCheck = false;
		    
		    
	}
	return FinalMsg;
		
}
	
	
//***Function that check if checkbox is checked****************************//
function CheckBox(rForm, rLg){
		//alert('CHECKBOX: ' + rForm.elements[requiredFields[fieldNum]].value);
	var flgCheck = false;
	if (rForm.elements[requiredFields[fieldNum]].checked){
		flgCheck = true;
	}
		
	if (flgCheck == false){
			
		if (FinalMsg.indexOf(msg) == -1) {
			RequiredTxt(rLg);
		}
		fieldCheck = false;
		FinalMsg += "     " + fieldNames[fieldNum] + "\n";
	}
	return FinalMsg;
		
}
	
	
//***Fucntion that check if radion button is selected*********************//
//Worked for many radio buttons with same name but different vaues and..
//1 radio button with 1 value
function RadioButton(rForm, rLg) {
		//alert('RADIOBUTTON: ' + rForm.elements[requiredFields[fieldNum]].length);
	var flgCheck = false;
	for (var i=0; i < rForm.elements[requiredFields[fieldNum]].length; i++){
		if (rForm.elements[requiredFields[fieldNum]][i].checked){
			flgCheck = true;
		}
	}
	
	if (flgCheck == false){
		if (FinalMsg.indexOf(msg) == -1) {
			RequiredTxt(rLg);
		}
		fieldCheck = false;
		FinalMsg += "     " + fieldNames[fieldNum] + "\n";
	}
	return FinalMsg;
}
	
	
	
//***Function that checked if value of droplist is selected****************//
function DropList(rForm, rLg){
	//alert('DROPLIST: ' + rForm.elements[requiredFields[fieldNum]].selectedIndex);
	var selectIndex	= rForm.elements[requiredFields[fieldNum]].selectedIndex;
	if ( selectIndex == ""){
		if (FinalMsg.indexOf(msg) == -1) {
			RequiredTxt(rLg);
		}
		fieldCheck = false;
		FinalMsg += "     " + fieldNames[fieldNum] + "\n";
	}
		
	return FinalMsg;
}
	
//***Function to put intro texte for required fields*********************//
function RequiredTxt(receiveLg){
		
	if (receiveLg == "Fr"){
		fieldNames = fieldNamesFr
		FinalMsg += msg;
	}else{
		fieldNames = fieldNamesEn
		FinalMsg += msg;
	}
}
	
	
//***Function to checked format of email*********************************//
function emailCheck(FormToCheck, CtrlName, Langue) {
	
		
	email = FormToCheck.elements[CtrlName].value;
	invalidChars = "/:,;";
	
	//Message
	var InvalidFr = "Adresse de courriel:\n     Les caractères invalides ne sont pas permises !\n\n";
	var InvalidEn = "Email address:\n     Invalid Characters are not allowed in an email address !\n\n";
	var MustAFr = "Adresse de courriel:\n     Il doit avoir un @ dans l\'adresse d'un courriel !\n\n";
	var MustAEn = "Email address:\n     You must have @ in your email address !\n\n";
	var JustAFr = "Adresse de courriel:\n     Il est permis d'avoir seulement un @ dans l'adresse du courriel !\n\n";
	var JustAEn = "Email address:\n     Only one @ is allowed in your email address !\n\n";
	var PointReqFr = "Adresse de courriel:\n     Un point est requis après le @ dans votre adresse de courriel !\n\n";
	var PointReqEn = "Email address:\n     A point must follow the @ in your email address !\n\n";
	var Must2Fr	= "Adresse de courriel:\n     Il doit avoir au moins 2 caractères après le point !\n\n";
	var Must2En = "Email address:\n     Must have at least 2 characters after the point.\n\n";
	var Least1Fr = "Adresse de courriel:\n     Vous devez avoir au moin 1 caractère avant le point !\n\n";
	var Least1En = "Email address:\n     Your email address must have at least 1 characters before the point !\n\n";
	var Invalid, MustA, JustA, PointReq, Must2, Least1;

	if (Langue == 'Fr'){
		Invalid = InvalidFr;
		MustA = MustAFr;
		JustA = JustAFr;
		PointReq = PointReqFr;
		Must2 = Must2Fr; 
		Least1 = Least1Fr; 
	}else{
		Invalid = InvalidEn;
		MustA = MustAEn;
		JustA = JustAEn;
		PointReq = PointReqEn;
		Must2 = Must2En;
		Least1 = Least1En;
	}

	if (email == ""){
		return FinalMsg;
	}
	
	for(i=0; i<invalidChars.length; i++){
		badChar = invalidChars.charAt(i);
		if (email.indexOf(badChar,0) > -1){
			FinalMsg += Invalid; 
			return FinalMsg;
		}
	}

	atPos = email.indexOf("@",1)
	if (atPos == -1){
		fieldCheck = false;
		FinalMsg += MustA
		return FinalMsg;
	}
	
	if (email.indexOf("@",atPos+1) != -1){
		fieldCheck = false;
		FinalMsg += JustA
		return FinalMsg;
	}
	
	periodPos = email.indexOf(".",atPos)
	if (atPos + 1 == periodPos){
		fieldCheck = false;
		FinalMsg += Least1
		return FinalMsg;
	}
	
	if (periodPos == -1){
		fieldCheck = false;
		FinalMsg += PointReq
		return FinalMsg;
	}
	
			
	if (periodPos+3 > email.length){
		fieldCheck = false;
		FinalMsg += Must2
		return FinalMsg;
	}
			
}


//***Function to checked for message length*********************************//
function CheckLenMessage(FormToCheck, CtrlName, OutputName, MaxLen, vLangue){


	var str1 = FormToCheck.elements[CtrlName].value.substring(MaxLen,MaxLen+10); 
	var msgFr = OutputName + ':\n     Vous ne devez pas dépasser ' + MaxLen + ' caractères.\n     Voici les 10 caractères suivant le ' + MaxLen + 'ièmes:\n     ' + str1 + '\n\n';
	var msgEn = OutputName + ':\n     Text area:\n You shouldn\'t have more than ' + MaxLen + ' caracteres.\n     Here is the last 10 caracter before the ' + MaxLen + ':\n     ' + str1 + '\n\n';
	var msg;
	
	if (FormToCheck.elements[CtrlName].value.length > MaxLen){
		
		fieldCheck = false; 
		if (vLangue == 'Fr'){
			FinalMsg += msgFr;
		}else{
			FinalMsg += msgEn;
		}
		return FinalMsg;
	}
}	