
function obtainTargetArray(language, typeArray, msgArray) {
	// 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"],
		  ["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"],
		  ["identifier","Invalid entry"]],
		["spanish","Corrija por favor siguientes los problemas:\n","-- más --",
		  ["text", "Valor no vá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 no válido"],
		  ["usphone", "Número de teléfono no válido"],
		  ["email", "Dirección de correo electrónico no válida"],
		  ["emails", "Dirección de correo electrónico no válida"],
		  ["zip", "Código postal no válido"],
		  ["card", "Número de tarjeta de crédito no válido"],
		  ["routing", "Valor no válido"],
		  ["pin", "Contraseña no válida"],
		  ["alphanumeric", "Verifique el valor ingresado"],
		  ["numeric", "Valor no válido"],
		  ["decimal", "Valor no válido"],		  
		  ["file", "Verifique el valor ingresado"],		  
		  ["date", "Verifique el valor ingresado"],		  
		  ["datetime", "Verifique el valor ingresado"],	
		  ["identifier", "Valor no vá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"],
		  ["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"],
		  ["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"],
		  ["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"],
		  ["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"],
		  ["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"],
		  ["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 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";

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];
	if (formNum == null || formNum == "") formNum = 0;
	var 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, types, messageArray);
	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 "text":		//as long as it is non-whitespace character
			    var str = eval("form." + fields[i] + ".value");
			    if (! str.match(/[\S]+/)) {
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					if (focusObj == "") focusObj = fields[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "word":
				var str = eval("form." + fields[i] + ".value");
				if (! str.match(/^[a-z]+([-']?[a-z]+)?$/i)) {
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					if (focusObj == "") focusObj = fields[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
				break;
			  case "words":
				var str = eval("form." + fields[i] + ".value");
				if (! str.match(/^([a-z]+([-']?[a-z]+)?)+(\s+[a-z]+([-']?[a-z]+)?)*$/i)) {
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					if (focusObj == "") focusObj = fields[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
				break;
			  case "checkbox":
				if (! checkboxChecked(formNum, 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;
			  case "phone":
			    var str = eval("form." + fields[i] + ".value");
			    str = str.replace(/[-( )]/g, "");		//remove '-', '(', ')' and SPACEs
			    if (! (str.match(/^\d{8,20}$/) && USphoneVerified(str))) {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }	  	
			    break;
			  case "usphone":
				// validate US phones have exactly 10 digits and do not start with '0' or '1'.
			    var str = eval("form." + fields[i] + ".value");
			    str = str.replace(/[-( )]/g, "");		//remove '-', '(', ')' and SPACEs
			    if (! (str.match(/^\d{10}$/) && !(str.substr(0,1)=='0' || str.substr(0,1)=='1'))) {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }	  	
			    break;
			  case "email":			
				var str = eval("form." + fields[i] + ".value");
				var emailOk = str.length > 0 ;
				if ( emailOk ) // Sting.match works on Mac only is length>0
				{
					var regExp = /^[\w-]*(\.[-\w]+)*@[-\w]+(\.[\w-]+)*\.(com|gov|edu|org|mil|net|biz|info|name|museum|coop|aero|pro|\w{2})$/i;
					emailOk = str.match(regExp)
				}
				if (!emailOk) 
				{
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
				
			    break;
			  case "emails":			
				var str = eval("form." + fields[i] + ".value");
				var arr = str.split(";")
				var emailOk = str.length > 0 ;
				for (var icount =0; icount < arr.length; icount++) {
					str = arr[icount];
					
					if ( emailOk ) // Sting.match works on Mac only is length>0
					{
						var regExp = /^ *[\w-]*(\.[-\w]+)*@[-\w]+(\.[\w-]+)*\.(com|gov|edu|org|mil|net|biz|info|name|museum|coop|aero|pro|\w{2} *)$/i;
						emailOk = str.match(regExp)
						if (!emailOk) break;
					}
				}
				if (!emailOk) 
				{
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
				
			    break;  
			  case "zip":
			    var str = eval("form." + fields[i] + ".value");
			    if (! str.match(/^\d{5}([ |-]\d{4})?$/)) {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "card":
			    var CCNo = eval("form." + fields[i] + ".value");
				CCNo = CCNo.replace(/[ -]/g,"");		//remove spaces and dashes
														// check entry and verify Mod 10
				if (! ( CCNo.match(/(^\d{13,16}$)/) && Mod10Verified(CCNo) ))
				{
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }	  	
			    break;
			  case "routing":
			    var routeNo = eval("form." + fields[i] + ".value");
				routeNo = routeNo.replace(/[ -]/g,"");		//remove spaces and dashes
														// check entry and verify Mod 10
				if (! ( routeNo.match(/(^\d{9}$)/) && RoutingVerified(routeNo) ))
				{
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }		  	
			    break;			    
			  case "pin":
			    var str = eval("form." + fields[i] + ".value");
				if (! str.match(/^\d{4,}$/)) {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "alphanumeric":
			    var str = eval("form." + fields[i] + ".value");
			    if (! str.match(/^\w+$/)) {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "numeric":
			    var str = eval("form." + fields[i] + ".value");
				if (! str.match(/^\d+$/)) {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "date": 	
			    var str = eval("form." + fields[i] + ".value");
				if (! dateVerified(str)) {
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					if (focusObj == "") focusObj = fields[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "datetime": 	
			    var str = eval("form." + fields[i] + ".value");
				if (! isDateTime(str)) {
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					if (focusObj == "") focusObj = fields[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "file":
			    var str = eval("form." + fields[i] + ".value");
				if (! str.match(/([a-z]:\\|\\\\)([\w]+[\w %\-&(){}\[\]!@#$^&]*\\)*([\w]+[\w %\-&(){}\[\]!@#$^&]*)\.[\w]*/i)) {
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					if (focusObj == "") focusObj = fields[i];				
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "decimal":
			    var str = eval("form." + fields[i] + ".value");
				if (! str.match(/^[\+|-]?(\d*[\.]?\d+|\d+[\.]?\d*)$/)) {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  case "identifier":
			    var str = eval("form." + fields[i] + ".value");
			    if (! str.match(/^[a-z_$][\w_$]+$/i)) {
					if (focusObj == "") { focusObj = fields[i]; }
					msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
					showErrImage(fields[i]);
				} else { showNormImage(fields[i]); }
			    break;
			  default: 
			  // check for regexp
			  if (fields[i]) {
				  var str = eval("form." + fields[i] + ".value");
				  if (types[i].charAt(0) == '/') {
					  var reg, flags, lastSlash;
					  lastSlash = types[i].lastIndexOf("/");
					  reg = types[i].substr(1,lastSlash-1);
					  flags = types[i].substr(lastSlash+1);
					  var re = new RegExp(reg, flags);
					  if (! str.match(re)) {
						if (focusObj == "") { focusObj = fields[i]; }
							msgs[msgs.length] = friendlyNames[i] + " .. " + messageArray[i];
							showErrImage(fields[i]);
						} else { showNormImage(fields[i]); }
				  }			  
			  }
			  break;
			}
		}
	} // 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 USphoneVerified(cbNum) {
	if (cbNum.substring(0,1) == "1") { 
		return (cbNum.length == 11 && cbNum.substring(2,4) != "11") }
	else return true;
}

function checkboxChecked(theForm, groupName) {
// HKu 01/20/2000 - verifying if a chekbox group been checked
	var elements = document.forms[theForm].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(document.images[imgName]) { return true; }
   return false;
} // existImage

function showErrImage(imgName) {
   imgName = "img" + imgName;
   if (existImage(imgName)) { document.images[imgName].src = errImage.src; }
} // showErrImage()

function showNormImage(imgName, imgLocation) { // imgLocation is optional
   imgName = "img" + imgName;
   if (existImage(imgName)) {
      if (imgLocation) {
         document.images[imgName].src = imgLocation;
      } else { document.images[imgName].src = normImage; }
   }
} // showNormImage()
