function ValidateAll() {
	var textName;
	var allOK = 1;
	
	for (count= 0; count < document.formUse.length; count++) {
		textName = document.formUse.elements[count].name;
		
		switch(GetType(textName)) {
		case "EMAIL":
			if (!ValidateFieldEmail(textName, GetMandatory(textName))) { allOK = 0; }
			break;
		case "TEXTLINE":
			if (!ValidateFieldTextLine(textName, GetMandatory(textName))) { allOK = 0; }
			break;
		case "TEXTBOX":
			if (!ValidateFieldTextBox(textName, GetMandatory(textName))) { allOK = 0; }
			break;
		case "NUMERIC":
			if (!ValidateFieldNumeric(textName)) { allOK = 0; }
			break;
		case "DATE":
			if (!ValidateFieldDate(textName, GetMandatory(textName))) { allOK = 0; }
			break;
		case "LISTGROUP":
			if (!ValidateListGroup(textName)) { allOK = 0; }
			break;
		case "LISTBOX":
			if (!ValidateListBox(textName)) { allOK = 0; }
			break;
		case "MEMBERNUMBER":
			if (!ValidateFieldMemberNumber(textName)) { allOK = 0; }
			break;
		case "BOXCUSTOMCONTACT":
			if (!ValidateFieldBoxCustomContact(textName)) { allOK = 0; }
			break;
		case "ZIPCODE":
			if (!ValidateFieldZipCode(textName, GetMandatory(textName))) { allOK = 0; }
			break;			
		case "CITY":
			if (!ValidateFieldCity(textName, GetMandatory(textName))) { allOK = 0; }
			break;						
		default:
			break;
		}
	}

	if (allOK == 0) {
		if (languageID==2) {
			/*French*/
			document.getElementById('lblErrorValidation').innerHTML = "<br>Le formulaire ne peut être sauvegardé. Veuillez vérifier que tous les champs sont remplis correctement.<br>";
		}
		else { 
			/*Dutch*/
			document.getElementById('lblErrorValidation').innerHTML = "<br>Het formulier kan niet bewaard worden. Kijk na of alle velden correct zijn ingevuld.<br>";
		}
		//scroll to the top
		document.location.href = "#top";		
		return false;
	}
	else {
		document.getElementById('lblErrorValidation').innerHTML = "";
	}
	
	return true;
}

function GetID(name) {
	var array = name.split("_");
	return array[0];
}

function GetType(name) {
	var array = name.split("_");
	return array[1];
}

function GetMandatory(name) {
	var array = name.split("_");
	return array[2];
}

function GetMinimumValue(name) {
	var array = name.split("_");
	return array[3];
}

function GetMaximumValue(name) {
	var array = name.split("_");
	return array[4];
}

function GetRootFieldID(name) {
	var array = name.split("_");
	return array[5];
}

function ValidateFieldDate(name, isMandatory) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';
	
	if (ValidateTextMandatory(name, isMandatory) == true) {
		if (document.getElementById(textID).value != '') {
			if (ValidateTextDate(name) == false) {
				return false;
			}
		}
	} else {
		return false;
	}
	
	return true;
}
			
function ValidateFieldBoxCustomContact(name) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';
	
	if (document.getElementById(textID).selectedIndex == 0 && GetMandatory(name) == '1') {
		if (languageID == 2) /*French*/
				document.getElementById(textID + 'Validator').innerHTML = 'Faites votre choix.';
			else /*Dutch*/
				document.getElementById(textID + 'Validator').innerHTML = 'Maak een keuze.';
			return false;
	}
	
	return true;
}

function ValidateFieldNumeric(name) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';
	
	if (ValidateTextMandatory(name, GetMandatory(name)) == true) {
		if (ValidateTextNumeric(name) == true) {
			if (document.getElementById(textID).value != '') {
				if (!ValidateTextMinimumMaximumValue(name, GetMinimumValue(name), GetMaximumValue(name))) {
					return false;
				}
			}
		} else {
			return false;
		}
	} else {
		return false;
	}
					
	return true;
}

function ValidateFieldTextBox(name, isMandatory) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';		
	return ValidateTextMandatory(name, isMandatory);
}

function ValidateFieldTextLine(name, isMandatory) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';		
	return ValidateTextMandatory(name, isMandatory);
}

function ValidateFieldEmail(name, isMandatory) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';		

	if (ValidateTextMandatory(name, isMandatory) == true) {
		if (ValidateTextEmail(name) == false) {
			return false;
		}
	} else {
		return false;
	}
	
	return true;
}
			
function ValidateFieldMemberNumber(name) {
	var textID = GetID(name);
	var mandatory = GetMandatory(name);
	document.getElementById(textID + 'Validator').innerHTML = '';
	
	if ((document.getElementById(textID + '_NALIOR').value == '') &&
			(document.getElementById(textID + '_NALISQ').value == '') &&
			(document.getElementById(textID + '_NALICD').value == '')) {
		if (mandatory == '1') {
			if (languageID == 2) /*French*/
				document.getElementById(textID + 'Validator').innerHTML = 'Ce champ est obligatoire.';
			else /*Dutch*/
				document.getElementById(textID + 'Validator').innerHTML = 'Dit is een verplicht veld.';
			return false;
		} else {
			return true;
		}						
	} else {
		var naliorRegExp = /[0-9]{2}/;
		var nalisqRegExp = /[0-9]{6}/;
		var nalicdRegExp = /[0-9]/;
		
		if (!naliorRegExp.test(document.getElementById(textID + '_NALIOR').value) ||
				!nalisqRegExp.test(document.getElementById(textID + '_NALISQ').value) ||
				!nalicdRegExp.test(document.getElementById(textID + '_NALICD').value)) {
			if (languageID == 2) /*French*/
				document.getElementById(textID + 'Validator').innerHTML = 'Le numéro de membre doit comporter 9 chiffres (xx/xxxxxx/x).';
			else /*Dutch*/
				document.getElementById(textID + 'Validator').innerHTML = 'Het lidnummer moet 9 cijfers bevatten (xx/xxxxxx/x).';
			return false;
		}
	}

	return true;
}

function ValidateFieldZipCode(name, isMandatory) {
	var textID = GetID(name);		
	document.getElementById(textID + 'Validator').innerHTML = '';	

	if (ValidateTextMandatory(name, GetMandatory(name)) == true) {			
		if (document.getElementById(textID).value != '')
		{
			return ValidateZipCode(name);
		}
		
		return true;
	} else {
		return false;
	}	

	return true;
}

function ValidateFieldCity(name, isMandatory) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';
	
	if (ValidateTextMandatory(name, GetMandatory(name)) == true) {
		if (document.getElementById(textID).value != '')
		{
			return ValidateCity(name);
		}		
		return true;
	} else {
		return false;
	}
	
	return true;
}

function ValidateZipCode(name) {
	var zipCodeTextID = GetID(name);
	
	//Get the old and new value
	var newzipcode = document.getElementById(zipCodeTextID).value;
	var oldzipcode = document.getElementById(zipCodeTextID + '_ORIGINAL').value;	

	//Compare the old value and the new value
	if (newzipcode != oldzipcode)
	{
		var rootFieldID =  GetRootFieldID(name);

		//Retrieve the name of the ZipLetter and City fields	
		var zipLetterTextID = FindFieldByTypeAndRoot('ZIPLETTER', rootFieldID);			
		var cityTextID = FindFieldByTypeAndRoot('CITY', rootFieldID);
		
		//Call the ZipCode window to obtain the correct city and zipcode
		var zipCode = window.open("ZipCode.aspx?Code=" + newzipcode + "&zipcode=" + zipCodeTextID + "&zipletter=" + zipLetterTextID + "&city=" + cityTextID, "ZipCode", 'scrollbars=yes,status=yes,width=500,height=510,top='+(screen.height-510)/2+',left='+(screen.width-500)/2);
		zipCode.focus();		

		return false;
	}
	return true;			
}

function ValidateCity(name) {
	var cityTextID = GetID(name);
	
	//Get the old and new value
	var newcity = document.getElementById(cityTextID).value;
	var oldcity = document.getElementById(cityTextID + '_ORIGINAL').value;	
	
	//Compare the old value and the new value
	if (newcity != oldcity)
	{
		var rootFieldID		= GetRootFieldID(name);
		var zipCodeTextID   = FindFieldByTypeAndRoot('ZIPCODE', rootFieldID);
		var zipLetterTextID = FindFieldByTypeAndRoot('ZIPLETTER', rootFieldID);
		var zipcode		    = document.getElementById(zipCodeTextID).value;
					
		//Call the ZipCode window to obtain the correct city and zipcode
		if (zipcode != null && zipcode != '') {
			var zipCode = window.open("ZipCode.aspx?Code=" + zipcode + "&zipcode=" + zipCodeTextID + "&zipletter=" + zipLetterTextID + "&city=" + cityTextID, "ZipCode", 'scrollbars=yes,status=yes,width=500,height=510,top='+(screen.height-510)/2+',left='+(screen.width-500)/2);
			zipCode.focus();
		}
		return false;
	}
	return true;			
}

function ValidateTextDate(name) {
	var textID = GetID(name);

	// DD/MM/YY   DD/MM/YYYY   DD-MM-YY   DD-MM-YYYY
	var dateStr = document.getElementById(textID).value;
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; // requires 4 digit year
	
	var matchArray = dateStr.match(datePat); // is the format ok?
	if (matchArray == null) {
		if (languageID == 2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Le format de la date n\'est pas valide.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'De datum staat niet in een geldig formaat.';		
		return false;
	}
	
	day = matchArray[1]; // parse date into variables
	month = matchArray[3];
	year = matchArray[4];
	
	if (month < 1 || month > 12) { // check month range
		if (languageID == 2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Le mois doit être compris entre 1 et 12.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'De maandwaarde moet tussen 1 en 12 liggen.';		
		return false;
	}
	
	if (day < 1 || day > 31) {
		if (languageID == 2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Le jour doit être compris entre 1 et 31.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'De dagwaarde moet tussen 1 en 31 liggen.';		
		return false;
	}
	
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		if (languageID == 2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Le mois ' + month + ' ne compte pas 31 jours.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Maand ' + month + ' heeft geen 31 dagen.';		
		return false;
	}
	
	if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			if (languageID == 2) /*French*/
				document.getElementById(textID + 'Validator').innerHTML = 'Février ' + year + ' ne compte pas ' + day + ' jours.';
			else /*Dutch*/
				document.getElementById(textID + 'Validator').innerHTML = 'Februari ' + year + ' heeft geen ' + day + ' dagen.';		
			return false;
		}
	}
	return true;
}

function ValidateTextEmail(name) {
	var textID = GetID(name);
	var text = document.getElementById(textID).value;

	var ampIndex = text.indexOf("@");
	var afterAmp = text.substring((ampIndex + 1), text.length);
	// find a dot in the portion of the string after the ampersand only
	var dotIndex = afterAmp.indexOf(".");
	// determine dot position in entire string (not just after amp portion)
	dotIndex = dotIndex + ampIndex + 1;
	// afterAmp will be portion of string from ampersand to dot
	afterAmp = text.substring((ampIndex + 1), dotIndex);
	// afterDot will be portion of string from dot to end of string
	var afterDot = text.substring((dotIndex + 1), text.length);
	var beforeAmp = text.substring(0,(ampIndex));
	var regex = /\;|#|\$|%|\^|&|\*|\(|\)|\+|\\|\/|\?|>|<|\{|\}|\,|\[|\]|\`|\|/;
	// index of -1 means "not found"
	if (((text.indexOf("@") != "-1") &&
			 (text.length > 5) &&
			 (afterAmp.length > 0) &&
			 (beforeAmp.length > 1) &&
			 (afterDot.length > 1) &&
			 !(regex.test(text)) ) || // Entry
		  (text.length == 0)) { // No entry
		return true ;
	} else { 
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Adresse e-mail non valide.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Dit is geen geldig emailadres.';		
		return false;
	}
}

function ValidateTextMandatory(name, isMandatory) {
	var textID = GetID(name);
	var text = document.getElementById(textID).value;
		
	if (isMandatory == 0)
		return true;
	
	if (text.length == 0) {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Ce champ est obligatoire.';		
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Dit is een verplicht veld.';		
		return false;
	} else {
		document.getElementById(textID + 'Validator').innerHTML = '';		
	}

	return true;
}

function ValidateTextMinimumMaximumValue(name, minimumValue, maximumValue) {
	var textID = GetID(name);
	var text = document.getElementById(textID).value;
	
	if ((Math.min(minimumValue,text) == text) && (minimumValue != text)) {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Valeur trop petite.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'De waarde is te klein.';
		return false;
	}
	
	if ((Math.max(maximumValue,text) == text) && (maximumValue != text)) {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Valeur trop élevée.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'De waarde is te groot.';
		return false;
	}
	
	return true;
}

function ValidateTextNumeric(name) {
	var textID = GetID(name);
	var text = document.getElementById(textID).value;
	
	if (isNaN(text.replace(",",".")) == true) {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Ceci n\'est pas un nombre.';		
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Dit is geen getal.';		
		return false;
	}
	
	return true;
}

function ValidateListGroup(name) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';
	var choices = 0;
	
	var subfields = document.getElementById(textID).value;
	var minchoices = parseInt(GetMinimumValue(name));
	var maxchoices = parseInt(GetMaximumValue(name));
	
	var array = subfields.split(";");
	
	for (i=0; i<array.length-1; i++) {
		if (document.getElementById(array[i]).checked)
			choices++;
	}

	if (choices == 0 && GetMandatory(name) == '1') {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Ce champ est obligatoire.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Dit is een verplicht veld.';
		return false;
	}
	else if (maxchoices < choices) {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Vous avez choisi trop d\'éléments de la liste.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Je hebt te veel elementen gekozen in de lijst.';
		return false;
	}
	
	if (minchoices > choices) {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Vous n\'avez pas choisi assez d\'éléments dans la liste.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Je hebt niet genoeg elementen gekozen in de lijst.';
		return false;
	}

	return true;
}

function ValidateListBox(name) {
	var textID = GetID(name);
	document.getElementById(textID + 'Validator').innerHTML = '';
	var choices = 0;
	
	var minchoices = parseInt(GetMinimumValue(name));
	var maxchoices = parseInt(GetMaximumValue(name));
	
	for (i=0; i<document.getElementById(name).options.length; i++) {
		if (document.getElementById(name).options[i].selected)
			choices++;
	}
	
	if (choices == 0 && GetMandatory(name) == '1') {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Ce champ est obligatoire.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Dit is een verplicht veld.';
		return false;
	}
	else if (maxchoices < choices) {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Vous avez choisi trop d\'éléments de la liste.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Je hebt te veel elementen gekozen in de lijst.';
		return false;
	}
	
	if (minchoices > choices) {
		if (languageID==2) /*French*/
			document.getElementById(textID + 'Validator').innerHTML = 'Vous n\'avez pas choisi assez d\'éléments dans la liste.';
		else /*Dutch*/
			document.getElementById(textID + 'Validator').innerHTML = 'Je hebt niet genoeg elementen gekozen in de lijst.';
		return false;
	}

	return true;
}

function CheckTextAreaLength(maxLength, textAreaID) {
	var textID = GetID(textAreaID);
	var text = document.getElementById(textID).value;

	if (text.length > maxLength)
		document.getElementById(textID).value = text.substr(0, maxLength);		
}

function FindFieldByTypeAndRoot(type, rootFieldID) {
	var inputName = '';
	var searchExp = new RegExp('^\\d*_' + type + '_[0|1]_\\d*_\\d*_' + rootFieldID + '$', 'i');
	var inputs = document.getElementsByTagName('input');
	
	for (i = 0; i < inputs.length; i++) {
		inputName = inputs[i].name;	
					
		if (inputName != null && inputName != '' && inputName.match(searchExp))
			return GetID(inputName);			
	}	

	return null;
}

function ComposeDateFromSelect(name) {
	var textID = GetID(name);
	var date;

	date = document.getElementById(textID + 'Day').options[document.getElementById(textID + 'Day').selectedIndex].value;
	date +=  '/' + document.getElementById(textID + 'Month').options[document.getElementById(textID + 'Month').selectedIndex].value;
	date +=  '/' + document.getElementById(textID + 'Year').options[document.getElementById(textID + 'Year').selectedIndex].value;
	document.getElementById(textID).value = date;
}

function ComposeDateFromText(name) {
	var textID = GetID(name);
	var date;

	date = document.getElementById(textID + 'Day').value;
	date +=  '/' + document.getElementById(textID + 'Month').value;
	date +=  '/' + document.getElementById(textID + 'Year').value;
	if (date == '//') 
		date = '';
	document.getElementById(textID).value = date;
}

function ComposeMemberNumber(name) {
	var membernumber;
	var textID = GetID(name);

	membernumber = document.getElementById(textID + '_NALIOR').value;
	membernumber += '/' + document.getElementById(textID + '_NALISQ').value;
	membernumber += '/' + document.getElementById(textID + '_NALICD').value;
	if (membernumber == '//')
		membernumber = '';
	document.getElementById(textID).value = membernumber;		
}