﻿
function obtainTargetArray(language) {
	// as of 10/02/00 hku
	var messageArray =  
		[["english","Please correct the following problems:\n","-- more --",
		  ["text", "Cannot be blank"],
		  ["word", "Check your entry"],
		  ["words", "Check your entry"],
		  ["checkbox", "Please select at least one"],
		  ["radio", "Please check one"],
		  ["select", "Please make at least one selection"],
		  ["phone", "Invalid phone number"],
		  ["usphone", "Invalid US phone number"],
		  ["email", "Invalid e-mail address"],
		  ["emailwithanglebraces", "Invalid e-mail address"],			
		  ["emails", "Invalid e-mail address(es)"],
		  ["zip", "Invalid zip code"],
		  ["card", "Invalid credit card number"],
		  ["routing", "Invalid bank routing number"],		  
		  ["pin", "Invalid PIN"],
		  ["alphanumeric", "Invalid entry"],
		  ["numeric", "Invalid entry"],
		  ["decimal", "Invalid entry"],		  
		  ["file", "Check your entry"],		  
		  ["date", "Invalid date"],
		  ["datetime", "Invalid date/time"],
		  ["url", "Invalid URL"],
		  ["identifier","Invalid entry"]],
		["spanish","Corrija por favor los siguientes problemas:\n","-- más --",
		  ["text", "Valor inválido"],
		  ["word", "Verifique el valor ingresado"],
		  ["words", "Verifique el valor ingresado"],
		  ["checkbox", "Seleccione al menos uno"],
		  ["radio", "Marque uno"],
		  ["select", "Efectúe al menos una selección"],
		  ["phone", "Número de teléfono inválido"],
		  ["usphone", "Número de teléfono inválido"],
		  ["email", "Dirección de e-mail inválida"],
		  ["emailwithanglebraces", "Dirección de e-mail inválida"],						
		  ["emails", "Dirección de e-mail inválida"],
		  ["zip", "Código postal inválido"],
		  ["card", "Número de tarjeta de crédito inválido"],
		  ["routing", "Valor inválido"],
		  ["pin", "Contraseña inválida"],
		  ["alphanumeric", "Verifique el valor ingresado"],
		  ["numeric", "Valor inválido"],
		  ["decimal", "Valor inválido"],		  
		  ["file", "Verifique el valor ingresado"],		  
		  ["date", "Verifique el valor ingresado"],		  
		  ["datetime", "Verifique el valor ingresado"],	
		  ["identifier", "Valor inválido"]],
		["dutch","Corrigeer de volgende problemen:\n","-- more --",
		  ["text", "Ongeldige invoer"],
		  ["word", "Controleer uw invoer"],
		  ["words", "Controleer uw invoer"],
		  ["checkbox", "Selecteer minstens 1 waarde"],
		  ["radio", "Kruis 1 waarde aan"],
		  ["select", "Maak minstens 1 keuze"],
		  ["phone", "Ongeldig telefoonnummer"],
		  ["usphone", "Ongeldig telefoonnummer"],
		  ["email", "Ongeldig e-mailadres"],
		  ["emailwithanglebraces", "Ongeldig e-mailadres"],						
		  ["emails", "Ongeldig e-mailadres"],
		  ["zip", "Ongeldige postcode"],
		  ["card", "Ongeldig creditcardnummer"],
		  ["routing", "Ongeldige invoer"],	
		  ["pin", "Ongeldige PIN"],
		  ["alphanumeric", "Controleer uw invoer"],
		  ["numeric", "Ongeldige invoer"],
		  ["decimal", "Ongeldige invoer"],		  
		  ["file", "Controleer uw invoer"],		  
		  ["date", "Controleer uw invoer"],		  
		  ["datetime", "Controleer uw invoer"],	
		  ["identifier","Ongeldige invoer"]],
		["french","Veuillez corriger suivants les problèmes:\n","-- plus --",
		  ["text", "Saisie incorrecte"],
		  ["word", "Vérifiez votre saisie"],
		  ["words", "Vérifiez votre saisie"],
		  ["checkbox", "Veuillez faire une sélection"],
		  ["radio", "Veuillez cocher une option"],
		  ["select", "Veuillez faire une sélection"],
		  ["phone", "Numéro de téléphone incorrect"],
		  ["usphone", "Numéro de téléphone incorrect"],
		  ["email", "Adresse électronique incorrecte"],
		  ["emailwithanglebraces", "Adresse électronique incorrecte"],									
		  ["emails", "Adresse électronique incorrecte"],
		  ["zip", "Code postal incorrect"],
		  ["card", "INuméro de carte de crédit incorrect"],
		  ["routing", "Saisie incorrecte"],
		  ["pin", "Code incorrect"],
		  ["alphanumeric", "Vérifiez votre saisie"],
		  ["numeric", "Saisie incorrecte"],
		  ["decimal", "Saisie incorrecte"],
		  ["file", "Vérifiez votre saisie"],		  
		  ["date", "Vérifiez votre saisie"],		  
		  ["datetime", "Vérifiez votre saisie"],		  
		  ["identifier","Saisie incorrecte"]],
		["german","Beheben Sie bitte die folgenden Probleme:\n","-- mehr --",
		  ["text", "Ungültige Eingabe"],
		  ["word", "Prüfen Sie ihre Eingabe"],
		  ["words", "Prüfen Sie ihre Eingabe"],
		  ["checkbox", "Mindestens eine Auswahl erforderlich"],
		  ["radio", "Bitte wählen Sie eine Option"],
		  ["select", "Mindestens eine Auswahl erforderlich"],
		  ["phone", "Ungültige Telefonnummer"],
		  ["usphone", "Ungültige Telefonnummer"],
		  ["email", "Ungültige eMail-Adresse"],
		  ["emailwithanglebraces", "Ungültige eMail-Adresse"],				
		  ["emails", "Ungültige eMail-Adresse"],
		  ["zip", "Ungültige Postleitzahl"],
		  ["card", "ngültige Kreditkartennummer"],
		  ["routing", "Ungültige Eingabe"],
		  ["pin", "Ungültige PIN"],
		  ["alphanumeric", "Prüfen Sie ihre Eingabe"],
		  ["numeric", "Ungültige Eingabe"],
		  ["decimal", "Ungültige Eingabe"],		  
		  ["file", "Prüfen Sie ihre Eingabe"],		  
		  ["date", "Prüfen Sie ihre Eingabe"],		  
		  ["datetime", "Prüfen Sie ihre Eingabe"],	
		  ["identifier","Ungültige Eingabe"]],			  
		["italian","Correggere prego i seguenti problemi:\n","-- più --",
		  ["text", "Dati immessi non validi"],
		  ["word", "Verifica i dati immessi"],
		  ["words", "Verifica i dati immessi"],
		  ["checkbox", "Scegli almeno una voce"],
		  ["radio", "Spunta una voce"],
		  ["select", "Effettua almeno una scelta"],
		  ["phone", "Numero di telefono non valido"],
		  ["usphone", "Numero di telefono non valido"],
		  ["email", "Indirizzo e-mail non valido"],
		  ["emailwithanglebraces","Indirizzo e-mail non valido"],				
		  ["emails", "Indirizzo e-mail non valido"],
		  ["zip", "Codice di avviamento postale non valido"],
		  ["card", "Numero di carta di credito non valido"],
		  ["routing", "Dati immessi non validi"],
		  ["pin", "PIN non valido"],
		  ["alphanumeric", "Verifica i dati immessi"],
		  ["numeric", "Dati immessi non validi"],
		  ["decimal", "Dati immessi non validi"],		  
		  ["file", "Verifica i dati immessi"],		  
		  ["date", "Verifica i dati immessi"],		  
		  ["datetime", "Verifica i dati immessi"],
		  ["identifier","Dati immessi non validi"]],			 
		["portuguese","Corrija por favor os seguintes problemas:\n","-- mais --",
		  ["text", "Entrada inválida"],
		  ["word", "Verifique seus dados de entrada"],
		  ["words", "Verifique seus dados de entrada"],
		  ["checkbox", "Marque uma opção"],
		  ["radio", "Faça ao menos uma escolha"],
		  ["select", "Selecione ao menos uma opção"],
		  ["phone", "Número de telefone inválido"],
		  ["usphone", "Número de telefone inválido"],
		  ["email", "Endereço eletrônico inválido"],
		  ["emailwithanglebraces","Endereço eletrônico inválido"],						
		  ["emails", "Endereço eletrônico inválido"],
		  ["zip", "CEP incorreto"],
		  ["card", "Número de cartão de crédito incorreto"],
		  ["routing", "Entrada inválida"],
		  ["pin", "Senha incorreta"],
		  ["alphanumeric", "Verifique seus dados de entrada"],
		  ["numeric", "Entrada inválida"],
		  ["decimal", "Entrada inválida"],		  
		  ["file", "Verifique seus dados de entrada"],		  
		  ["date", "Verifique seus dados de entrada"],		  
		  ["datetime", "Verifique seus dados de entrada"],		  
		  ["identifier","Entrada inválida"]],
		["swedish","Please correct the following problems:\n","-- more --",
		  ["text", "Ogiltigt värde"],
		  ["word", "Kontrollera det du skrev in"],
		  ["words", "Kontrollera det du skrev in"],
		  ["checkbox", "Markera minst en"],
		  ["radio", "Markera en"],
		  ["select", "Välj minst en"],
		  ["phone", "Ogiltigt telefonnummer"],
		  ["usphone", "Ogiltigt telefonnummer"],
		  ["email", "Ogiltig e-postadress"],
		  ["emailwithanglebraces","Ogiltig e-postadress"],					
		  ["emails", "Ogiltig e-postadress"],
		  ["zip", "Ogiltigt postnummer"],
		  ["card", "Ogiltigt kreditkortsnummer"],
		  ["routing", "Ogiltigt värde"],
		  ["pin", "Ogiltig PIN-kod"],
		  ["alphanumeric", "Kontrollera det du skrev in"],
		  ["numeric", "Ogiltigt värde"],
		  ["decimal", "Ogiltigt värde"],		 
		  ["file", "Kontrollera det du skrev in"],		  
		  ["date", "Kontrollera det du skrev in"],		  
		  ["datetime", "Kontrollera det du skrev in"],
		  ["identifier","Ogiltigt värde"]]
		  ];

	// pick the array to be use
	languageUsed = language.toLowerCase(); 
	for (var i=1; i<messageArray.length; i++) {
		if (messageArray[i][0] == languageUsed) { return messageArray[i]; break; }
	}
	return messageArray[0]; // default language is "English"
}

function finalizeMsg(toBeMsg, type, lookUpArray) {
	// as of 04/19/00 hku
	var type;
	if (!toBeMsg) {
		var splitArr = type.split("_");		
		if (splitArr.length>1) {
			type = splitArr[0];
		}
		for (var j=3; j<lookUpArray.length; j++) {
			if (type == lookUpArray[j][0]) {
				return lookUpArray[j][1];
			}
		}
		return "Invalid Entry";
	}
	
	return toBeMsg;
}

function finalizeMsgArray(toBeArray, typeArray, lookUpArray) {
	// as of 04/19/00 hku
	var type;
	for (var k=0; k<toBeArray.length; k++) { 
		if (toBeArray[k] == null || toBeArray[k] == "") {
			var splitArr = typeArray[k].split("_");		
			splitArr.length>1 ? type = splitArr[0] : type = typeArray[k];
			for (var j=3; j<lookUpArray.length; j++) {
				if (type == lookUpArray[j][0]) {
					toBeArray[k] = lookUpArray[j][1];
					break;
				}
			}
			if (!toBeArray[k]) toBeArray[k]="Invalid Entry";
		}
	}
	return toBeArray;
}

function validateField() {
	// as of 10/3/00 hku	*** Display alert message(if any), then return a boolean ***
	var message = fieldValidate(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6]);	
	if (message == "") {
		return true;
	} else {
		alert (message);
		return false;
	}
}

// pre load images globally
var errImage = new Image(15, 15);
errImage.src = "/ssi/images/error.gif";
var normImage = "/ssi/images/spacer.gif";

var theDocument = document;

function fieldValidate() {
	// as of 10/3/00 hku	*** Return a string for display and/or additional retouch ***
	var formNum = arguments[0];
	var fields = arguments[1];
	var types = arguments[2]; 
	var language = arguments[3]; 
	var friendlyNames = arguments[4]; 
	var messageArray = arguments[5]; 
	var maxMsgs = arguments[6];
	var form;
		
	if (formNum.toString() == '[object]') {
		form = formNum;
		theDocument = form.document;
	} else {
		if (formNum == null || formNum == "") {
			formNum = 0;
		}
		form = document.forms[formNum];
	}

	if (language == null || language == "") language = "English";
	if (fields == null || fields == "") {
		var fields = new Array();
		var types = new Array();
		var type, name;
		outerFor: for (var i=0,j=0; i<form.elements.length; i++) {
			type = form.elements[i].type;
			name = form.elements[i].name;
			switch (type) {
				case "select-multiple"	:
				case "select-one"		:	fields[j] = name;  types[j] =  "select"; j++; continue;			
				case "checkbox"	: 
				case "radio"	:	for (var k=0; k<j; k++) { if (fields[k] == name) continue outerFor; }
									fields[j] = name;  types[j] = type; j++; continue;
				case "file"		:
				case "textarea"	:
				case "password" :
				case "text"		:	fields[j] = name;  types[j] = "text";  j++; continue;
				default : continue;
			}
		}
	}
	if (types == null || types == "") {
		var tempArray = new Array(fields.length);
		types = new Array(fields.length);		
		var type;
		for ( var j=0; j<fields.length; j++) {
			type = eval("form." + fields[j] + ".type");
			switch (type) {
				case "select-multiple"	:	
				case "select-one"		: types[j] = "select"; continue;
				case "checkbox"	: 
				case "radio"	: types[j] = type; continue;
				case "file"		:
				case "textarea"	:
				case "password" :
				case "text"		: types[j] = "text"; continue;
				default : continue;
			}
		}
	}

	if (friendlyNames == null || friendlyNames == "") {
		friendlyNames = fields;
	} else {
		for ( var i=0; i<friendlyNames.length; i++) {
			if (friendlyNames[i] == "") friendlyNames[i] = fields[i];
		}
	}
	if (typeof messageArray == "undefined" || messageArray == "") {
		messageArray = new Array(); messageArray.length = types.length;
	}
	var infoArray = new Array();	// Obtain the Information Array base on language
	infoArray = obtainTargetArray(language);
	messageArray = finalizeMsgArray(messageArray, types, infoArray);
	var alertPromptHeader = infoArray[1];
	var alertPromptMore = infoArray[2];
	if (typeof maxMsgs == "undefined" || maxMsgs == "" || isNaN(maxMsgs) || maxMsgs > fields.length) {
		maxMsgs = fields.length;
	}
	var msgs = new Array();
	var focusObj = "";
	for (var i=0; i<fields.length; i++) {
		var splitArr = types[i].split("_");
		var skip=false;
		if (splitArr.length>1) {
		   var obj = eval("form." + fields[i]);
		   if (splitArr[1] == "opt" && (types[i] !="checkbox" && types[i] !="select" && types[i] !="radio")) {
		      obj.value=="" ? skip=true :  types[i]=splitArr[0];
		   } else { types[i]=splitArr[0]; }
		} 
		if (!skip) {
			//switch(curType) {
			switch(types[i]) {   
			  case "checkbox":
				if (! checkboxChecked(form, fields[i])) {
					//if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
				break;
			  case "radio":
				var checked = false;
				for ( var j=0; j< eval("form."+fields[i]+".length"); j++) {
					if (eval("form." + fields[i] + "["+j+"].checked")) { checked = true; break;	}
				}
			    if (! checked) {
					//if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "select":
			    var temp = eval("form." + fields[i] + ".selectedIndex");
			    if (temp == -1) { msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i]; showErrImage(fields[i]); break; }
			    var tempValue = eval("form."+fields[i]+".options["+temp+"].value");
			    if ( tempValue == "") {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  default:   // Text types
			    if(fields[i]) {
					var str = eval("form." + fields[i] + ".value");
					if (!validateTextValue(str, types[i])) {
						msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
						if (focusObj == "") focusObj = fields[i];
						showErrImage(fields[i]);
					} else { showNormImage(fields[i]); }
				}
			}
		}
	} // end for
	
	if (msgs.length > maxMsgs) { msgs[maxMsgs] = alertPromptMore;  msgs.length = maxMsgs + 1; }
	
	var message = "";
	for (var k=0; k<msgs.length; k++) {
		if (msgs[k] != "") message += "\n" + msgs[k];
	}
	if (message != "") message = alertPromptHeader + message;
	if (focusObj != "") {
	 	var type = eval("form." + focusObj + ".type")
		if (type != "hidden" && type != "radio") eval("form." + focusObj + ".focus()");
    }

	return message;
}


function singleFieldValidate() {
	
	var field = arguments[0];
	
	var type = field.getAttribute("validation");

	if (!type) {
		return "";
	}
	
	var form = field.form;
	theDocument = form.document;
	
	var name = field.getAttribute("name");
	
	var language = form.getAttribute("validation_language");
	if (!language) {
		language = "English";
	}
	
	var friendlyName = field.getAttribute("validation_name") ? field.getAttribute("validation_name") : name;
	var message = field.getAttribute("validation_message") ? field.getAttribute("validation_message") : "";

	var infoArray = obtainTargetArray(language);// Obtain the Information Array base on language
	message = finalizeMsg(message, type, infoArray);
	var alertPromptHeader = infoArray[1];
	var alertPromptMore = infoArray[2];

	var focusObj = null;
	var success = true;

	var splitArr = type.split("_");
	var skip=false;
	if (splitArr.length>1) {
	   if (splitArr[1] == "opt" && (type !="checkbox" && type !="select" && type !="radio")) {
		  field.value=="" ? skip=true :  type=splitArr[0];
	   } else { type=splitArr[0]; }
	} 
	if (!skip) {
		//switch(curType) {
		switch(type) {   
		  case "checkbox":
		  case "radio":
		  	success = false;
		  	var elements = form.document.getElementsByName(name);
			for (j=0; j<elements.length; j++) {
				var elm = elements[j];
				if (elm.name == name && elm.type == type && elm.checked) {
					success = true;
					break;
				}
			}
			break;
		  case "select":
			success = (field.selectedIndex != -1) && field.options[field.selectedIndex].value != "";
			break;
		  default:   // Text types
			var str = field.value;
			success = validateTextValue(str, type);
		}
	}
	
	var msg;
	if (success) {
		msg="";
		showNormImage(name);
	} else {
		msg = friendlyName + " ... " + message;
		if (field.type != "hidden" && field.type != "radio" && field.type != "checkbox") {
			field.focus();
		}
		showErrImage(name);
	}
	
	return msg;
}


function validateTextValue(str, type) {
	if ( (str==null) || (str.length==0) ) {
		return false;
	}
	
	switch (type) {
	case "text":		//as long as it is non-whitespace character
		return str.match(/[\S]+/);

	case "word":
		return str.match(/^[a-z]+([-']?[a-z]+)?$/i);
		
	case "words":
		return str.match(/^([a-z]+([-']?[a-z]+)?)+(\s+[a-z]+([-']?[a-z]+)?)*$/i);

	case "phone":
		str = str.replace(/[-( )]/g, "");		//remove '-', '(', ')' and SPACEs
		return str.match(/^\d{8,20}$/) && USphoneVerified(str);
	
	case "usphone":
		// validate US phones have exactly 10 digits and do not start with '0' or '1'.
		str = str.replace(/[-( )]/g, "");		//remove '-', '(', ')' and SPACEs
		return str.match(/^\d{10}$/) && (str.substr(0,1)!='0') && (str.substr(0,1)!='1');

	case "email":	
		return str.match(/^[\w-]*(\.[-\w]+)*@[-\w]+(\.[\w-]+)*\.(com|gov|edu|org|mil|net|biz|info|name|museum|coop|aero|pro|\w{2})$/i);
		
	case "emailwithanglebraces":
	{
		var strExp = "[\\w-]+(\\.[-\\w]+)*@[-\\w]+(\\.[\\w-]+)*\\.(com|gov|edu|org|mil|net|biz|info|name|museum|coop|aero|pro|\\w{2}|\\w{3}|\\w{4})";
		strExp = "^[\\w\\' ]*(<" + strExp + ">){1}[\\w ]*$|^" + strExp+"$";
		var regExp = new RegExp(strExp,"gi");
		return str.match( regExp ) ;
	}
		
	case "emails":			
		var arr = str.split(";")
		for (var icount =0; icount < arr.length; icount++) {
			str = arr[icount].replace(/^\s*/, "").replace(/\s*$/, "");
			
			if ((str.length==0) || !str.match(/^[\w-]*(\.[-\w]+)*@[-\w]+(\.[\w-]+)*\.(com|gov|edu|org|mil|net|biz|info|name|museum|coop|aero|pro|\w{2})$/i)) {
				return false;
			}
		}
		return true;

	case "zip":
		return str.match(/^\d{5}([ |-]\d{4})?$/);
	
	case "card":
		//remove spaces and dashes
		str = str.replace(/[ -]/g,"");
		// check entry and verify Mod 10
		return str.match(/(^\d{13,16}$)/) && Mod10Verified(str);
	
	case "routing":
		//remove spaces and dashes
		str = str.replace(/[ -]/g,"");		
		// check entry and verify Mod 10
		return str.match(/(^\d{9}$)/) && RoutingVerified(str);

	case "pin":
		return str.match(/^\d{4,}$/);
		
	case "alphanumeric":
		return str.match(/^\w+$/);
		
	case "numeric":
		return str.match(/^\d+$/);
		
	case "date": 	
		return dateVerified(str);
		
	case "file":
		return str.match(/([a-z]:\\|\\\\)([\w]+[\w %\-&(){}\[\]!@#$^&]*\\)*([\w]+[\w %\-&(){}\[\]!@#$^&]*)\.[\w]*/i);
		
	case "decimal":
		return str.match(/^[\+|-]?(\d*[\.]?\d+|\d+[\.]?\d*)$/);
		
	case "identifier":
		return str.match(/^[a-z_$][\w_$]+$/i);
		
	case "datetime":
		return isDateTime(str);
		
	case "url":
		return str.match(/^\/|http:\/\/|https:\/\//);
		
	default: 
		if ((type != null) && (type.length>1) && (type.charAt(0) == '/')) {
			var reg, flags, lastSlash;
			lastSlash = type.lastIndexOf("/");
			reg = type.substr(1,lastSlash-1);
			flags = type.substr(lastSlash+1);
			var re = new RegExp(reg, flags);
			return str.match(re);
		} else {
			return true;
		}
	}
}

function USphoneVerified(cbNum) {
	if (cbNum.substring(0,1) == "1") { 
		return (cbNum.length == 11 && cbNum.substring(2,4) != "11") }
	else return true;
}

function checkboxChecked(form, groupName) {
// HKu 01/20/2000 - verifying if a chekbox group been checked
	var elements = form.elements;
	var foundAndChecked = false;
	for(var i=0; i<elements.length; i++) {
		if(elements[i].type == "checkbox" && elements[i].name == groupName && elements[i].checked) {
			foundAndChecked = true;
			break;
		}
	}
	return foundAndChecked;
}

function Mod10Verified(newStr) {
//YK - 05/25/1999 HKu Modified 05/11/2000 CC checks 
// JW- 5/15/2003 Fixed bug- this should have been calculated in reverse
	var jNum = newStr.length;
	var jName = new Array();
	var jSub;
	var j = 0;
	// create array of CC numbers in reverse
	for (i = jNum-1; i>-1;  i--) { jName[j] = newStr.charAt(i);j++; }  
	// loop through even digits and double value, then add sum of digits
	for (i = 1; i < jNum; i += 2) {
		jSub = jName[i] * 2;
		if (jSub >= 10) {
			jz = jSub.toString();
			jx = parseFloat(jz.charAt(0)) + parseFloat(jz.charAt(1));
		} else {
			jx = jSub;
		}
		jName[i] = jx;
	}
	var value = 0;
	// loop through numbers and add values
	for (i = 0; i < jNum; i++) { value += parseFloat(jName[i]);	}
	value=value.toString();
	return (value.charAt(1) != 0) ? false : true;
}

function RoutingVerified(newStr) {
var r_no = 0, ctr = 1;
for(var i=0;i<8;i++) {
   ctr = (eval(ctr*2)+1)%14
   r_no += (newStr.charAt(i) * ctr)
}
r_no = Math.round((Math.ceil(r_no/10)-(r_no/10))*10)
if(newStr.charAt(i) != r_no) return false;
return true;
}

function isDateTime(dtstr) {
	//Check the format is MM/DD/YY HH:MM:SS AM/PM and validate the date and the time portions
	if (dtstr.length > 10 && dtstr.indexOf(" ") > 5) {
		var spc = dtstr.indexOf(" ");
		return (dateVerified(dtstr.substring(0,spc)) && timeVerified(dtstr.substr(spc+1)));
	}
	return false;
}

function timeVerified(timeStr) {
// Checks if time is in HH:MM:SS AM/PM format.
// The seconds and AM/PM are optional.
	var timePat = /^([01]?[0-9]|[2][0-3]):([0-5][0-9])(:[0-5][0-9])?(\s?(AM|am|PM|pm))?$/;
	var matchArray = timeStr.match(timePat);
	if (matchArray == null)
		return false;
	var hour = matchArray[1];
	var ampm = matchArray[4];
	if (hour <= 12 && ampm == "")
		return false;
	if  (hour > 12 && ampm != "")
		return false;
	return true;
}

function dateVerified(dateStr) {
	if (! dateStr.match(/^(1[0-2]|0?[1-9])\/(0?[1-9]|[12][0-9]|3[01])\/(19|20)?\d{2}$/)) return false;
	var monthEntered = dateStr.substring(0,dateStr.indexOf("/"));
	var thatDate = new Date(dateStr);
	var theMonth = thatDate.getMonth()+1;
	return (theMonth == monthEntered) ? true : false;
}

function existImage(imgName){
// checks if image exists on the form in order to swap it (AF)
   if(theDocument.images[imgName]) { return true; }
   return false;
} // existImage

function showErrImage(imgName) {
   imgName = "img" + imgName;
   if (existImage(imgName)) { theDocument.images[imgName].src = errImage.src; }
} // showErrImage()

function showNormImage(imgName, imgLocation) { // imgLocation is optional
   imgName = "img" + imgName;
   if (existImage(imgName)) {
      if (imgLocation) {
         theDocument.images[imgName].src = imgLocation;
      } else { theDocument.images[imgName].src = normImage; }
   }
} // showNormImage()

