//<!--
//modified event signature-rms-013003
var browser = navigator.appName;
var os = navigator.platform;
var ie = "Microsoft Internet Explorer";
var netscape = "Netscape";
var mac = "MacPPC"
var isIE = browser == ie
var isNN = browser == netscape
var isNN4 = (document.layers)? true:false
//var isNN4 = ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) == 4))
var isIE4 = (document.all)? true:false

var agt=navigator.userAgent.toLowerCase(); 
var is_major = parseInt(navigator.appVersion); 
var is_minor = parseFloat(navigator.appVersion); 
var is_ie   = (agt.indexOf("msie") != -1); 
var is_ie3  = (is_ie && (is_major < 4)); 
var is_ie4  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")==-1) ); 
var is_ie4up  = (is_ie  && (is_major >= 4)); 
var is_ie5  = (is_ie && (is_major == 4) && (agt.indexOf("msie 5.0")!=-1) ); 
var is_ie5up  = (is_ie  && !is_ie3 && !is_ie4);     

// For Password field focus 
var flag = 0;

// Generic cross-browser show function
function Show(item, vposition) {
	if (browser == netscape) {
		document.layers[item].visibility = 'visible';
		document.layers[item].top = vposition;
		}
	else if (browser == ie) {
		document.all[item].style.visibility = 'visible';
		document.all[item].style.pixelTop = vposition;
		}
	}
// Generic cross-browser hide function
function Hide(item) {
	if (browser == netscape) {
		document.layers[item].visibility = 'hidden';
		}
	else if (browser == ie) {
		document.all[item].style.visibility = 'hidden';
		}
	}

// The following functions handle form controls and validation
// Regular expression typing for control validation
var reCUR = /^((-?\d{1,14}(\.\d{0,2})?)|(-?(\d{0,14})?\.\d{1,4}))$/;
var reNUMERIC = /^((-?\d{1,14}(\.\d{0,2})?)|(-?(\d{0,14})?\.\d{1,4}))$/; //as of now same as currency=>SQLNumeric(18,4) would accept.
var reSignedINT = /^(-?\d{1,14})$/; //14digits with leading -ve sign
var reUnSignedINT = /^(\d{1,14})$/; //14digits 
var reCC = /^(\d{1,20})$/; //20digits
var reSSN = /(\d{3})-?(\d{2})-?(\d{4})/;
var reAlphaNumeric= /^(\d|\s)$/;
var reIDN = /(\d{2})-?(\d{7})/;
var reDATE2 = /^(\d{1,2})(\/|-|:|,|\s)(\d{1,2}|\d{4})$/;
var reDATE3 = /^(\d{1,2})(\/|-|:|,|\s)(\d{1,2})(\/|-|:|,|\s)(\d{2}|\d{4})$/;
var reDATEDELIMITER = /\/|-|:|,|\s/;
var reXBox = /^(x?)|(X?)/;
var rePer = /^((\d{1,4}(\.\d{0,4})?)|((\d{0,4})?\.\d{1,4}))$/;
// Capture keypress and change events for NN4. It doesn't otherwise see them when the element is in a table.
if (isNN4) {
	document.captureEvents(Event.KEYPRESS | Event.CHANGE);	
	document.onkeypress = checkCharNN;
	document.onchange = validateNN;
	}

// Process keypress events for NN4.
function checkCharNN(e,datatype) {
	return checkChar(e,datatype);
	}

// Process change events for NN4.
function validateNN(e,datatype) {
	return validate(e,datatype);
	}

// Check each character as entered against allowable characters for specific controls
function checkChar(e,datatype) {
	var valid = false;
	var keypressed;     // ASCII code of character just pressed
	var type;           // Type of control, determined by control naming convention
	if (navigator.appName.indexOf("Microsoft") != -1) e=window.event;
	if (isIE4) {
		keypressed = e.keyCode;
		type = e.srcElement.name.substring(0,2);}
	if (isNN4||isNN) {
		keypressed = e.which;
		if (e.target.name){
			type = e.target.name.substring(0,2);
		}
		else {return false;}
		}
	//alert('isnn:'+ isNN + 'keypressed:' + keypressed);
	// ASCII: 8 = backspace; 48 = '0'; 57 = '9'; 45 = '-'; 46 = '.'; 47 = '/'; 34 = '"'; 32 = ' ';//a=97 ,z=122,A=65,Z=90
	
	// Netscape requires allowing backspace; IE lets it flow through
	// Netscape requires allowing Tab:0; IE lets it flow through 
	
	//type = type.toLowerCase();
	datatype=datatype.toLowerCase();
	//type replace by datatype-rms 1/30/03
	
	switch(datatype) {		
		case 'm_': 
			// currency: Allow dashes, digits, decimal points and backspace
			if ((keypressed >= 48 && keypressed <= 57) || keypressed == 45 || keypressed == 46 || keypressed == 8 || keypressed == 0) valid = true;
			break;
		case 'd_':
			//date: Allow dashes, digits, forward slashes, space and backspace
			if ((keypressed >= 48 && keypressed <= 57) || keypressed == 45 || keypressed == 47 || keypressed == 32 || keypressed == 8 || keypressed == 0) valid = true;
			break;
		case 'f_':
			// Don't allow double quote (messes up SQL statements)
			if (keypressed != 34) valid = true;
			break;
		case 'n_':
			// numeric :Allow digits,decimal and backspace
			if ((keypressed >= 48 && keypressed <= 57) || keypressed == 46 || keypressed == 8 || keypressed == 0) valid = true;		
			break;	
		case 'i+':
			// numeric integers:Allow digits and backspace//unsigned integer
			if ((keypressed >= 48 && keypressed <= 57) || keypressed == 8 || keypressed == 0) valid = true;		
			break;	
		case 'i_':
			// numeric integers:Allow digits and dash and backspace and tab //signed integer
			if ((keypressed >= 48 && keypressed <= 57) || keypressed == 45 || keypressed == 8 || keypressed == 0) valid = true;		
			break;	
		case 'in':
			// numeric integers:Allow digits and dash and backspace and tab //signed integer
			if ((keypressed >= 48 && keypressed <= 57) || keypressed == 45 || keypressed == 8 || keypressed == 0) valid = true;		
			break;	
		case 'an':
			// alpha numeric integers:Allow digits,characters and backspace and tab //signed integer
			if ((keypressed >= 48 && keypressed <= 57) || (keypressed >= 65 && keypressed <= 90) || (keypressed >= 97 && keypressed <= 122) || keypressed == 8 || keypressed == 0) valid = true;		
			break;	
		case 'cc':
			// numeric integers:Allow digits and backspace//unsigned integer
			if ((keypressed >= 48 && keypressed <= 57) || keypressed == 8 || keypressed == 0) valid = true;		
			break;	
		
		default:
			// Validation type not found
			//alert("Couldn't validate this field type!");
			valid=true;
			break;
		}
	if (valid == false) {
		if (isIE4) e.returnValue = false;
		//if (isNN4) return false;
		return false;}
	}

function validateTA(thing,intLength)
{
	if (thing.value=="") return;
	var tempvar = new String();
	tempvar=thing.value;
	if (tempvar.length>intLength)
		{	alert("Allowed length for this box is only " + intLength + " characters.\n Entered length is:" + tempvar.length );
			thing.select();thing.focus();return false;
		 }
}

// Check the control for validity against the matching regular expression upon leaving
function validate(thing,datatype, maxval, minval, regexp) {
	//var type = thing.name.substring(0, 2);
	type=datatype;  //commented above and added this line
	
	type = type.toLowerCase();
	var required = ((thing.name.substring(thing.name.length - 1, thing.name.length)) == "*") ? true : false;
	if (required == false && thing.value.length == 0) return true; // If nothing entered don't validate
	var valid = false;
	var pcrvalid=false;
	var tempstring;     // Holds reformatted input if valid
	var msg = "";       // Holds error message	
	// if required = true, need to process it...
	// If regexp passed in, need to set new type here to check against...
	switch(type) {
		case 'f_':
			tempstring = thing.value;
			valid = true;
			break;
		case 'm_':
			// Validate currency input box
			msg = "Entry does not match required format: (-)99999999999999.9999.\n";
			if (reCUR.test(thing.value)) {
				//round to nearest two decimals
				//tempstring = String(parseInt(Math.round(thing.value)));
				tempstring = String(parseFloat(Math.round(thing.value * 100)/100));
				valid = true;}
			break;
		case 'd_':
			// Validate date input box
			var temp=thing.value;
			temp=stripWhitespace(temp);
			var Allow999999 // 			
			//var datetype = maxval.toUpperCase();   //parameter maxval contains the date validation type
			var v = new String("" + thing.value);  //convert to string
			var itmatches = "";                    //for pretesting matches (required for Netscape)
			var result = "";
			var month = "";
			var day = "";
			var year = "";
			msg = "Enter date in one of these two formats: MM/DD/YY or MM/DD/YYYY.\n";		
			if (reDATE3.test(v)) {valid=true;tempstring=temp} 
			break;
		case 'n_':
			//reNUMERIC
			msg = "Entry does not match required format: (-)99999999999999.9999.\n";
			if (reNUMERIC.test(thing.value)) {
				//round to nearest 2 decimals-ms11/18 - changed from 100 to 1000
				//tempstring = String(parseInt(Math.round(thing.value)));
				tempstring = String(parseFloat(Math.round(thing.value * 100)/100));
				valid = true;}
			/*	
			 Validate numeric input box//todo for max and min values
			msg = "Value must be between " + minval + " and " + maxval + "\n";
			valid = true;
			tempstring = thing.value;
			if ((tempstring > maxval) || (tempstring < minval)) {valid = false;}
			*/
			
			break;
		case 'i_':
			// Validate numeric input box//todo for max and min values
			msg="Enter digits with an optional leading -ve sign in this field.\n";
			//msg = "Value must be between " + minval + " and " + maxval + "\n";
			if (reSignedINT.test(thing.value)) {
				valid = true;}
			
			tempstring = thing.value;
			//if ((tempstring > maxval) || (tempstring < minval)) {valid = false;}
			break;
		case 'i+':
			//msg = "Value must be between " + minval + " and " + maxval + "\n";
			msg="Enter digits only in this field.\n";
			if (reUnSignedINT.test(thing.value)) {
				valid = true;}
			tempstring = thing.value;
			//if ((tempstring > maxval) || (tempstring < minval)) {valid = false;}
			break;
		case 'cc':
			//msg = "Value must be between " + minval + " and " + maxval + "\n";
			msg="Enter digits only in this field.\n";
			if (reCC.test(thing.value)) {
				valid = true;}
			tempstring = thing.value;
			//if ((tempstring > maxval) || (tempstring < minval)) {valid = false;}
			break;
		
		case 'in':
			//integer with no validation as of now
			tempstring = thing.value;
			valid=true;
			break;
		case 'an':
			//alphanumeric reAlphaNumeric
			msg="Enter characters or digits in this field.\n";
			//if (reAlphaNumeric.test(thing.value)) {
			//	valid = true;}
			tempstring = thing.value;
			valid=true;
			break;
			
		default:
			// Validation type not found
			alert("Couldn't validate the current field!");
			break;
	} //endswitch(type)

	if (!valid) {
		if (thing.value=="")
			alert(msg + "The value you have entered doesn't seem to be valid input for this field.")
		else
			alert(msg + thing.value + " doesn't seem to be valid input for this field.");
			
		if (isIE4){	thing.select();	thing.focus();}
		else{thing.value='';thing.focus();} //NN7 seem to select, focus but allows tab to go to next field instead of staying there. so delete illegal value
		return false;
		}   
	else {
		thing.value = tempstring;
		return true;
		}
	}

function CtrlArrRetVal(CtrlName, form) {
	var strg;
	//for (i = 0; i < document.form1.elements.length && document.form1.elements[i].name != CtrlName; i++);
	for (i = 0; i < form.elements.length && form.elements[i].name != CtrlName; i++); {
		strg = form.elements[i];		
		}
	return strg;
	}
function setValueCheckBox(ctrlName){
	var ctrl=eval("document.form1.f_" + ctrlName);
	if (ctrl.value=="1") ctrl.value="0"
	else ctrl.value="1"
	return;
	}
function HandleNavCombo(obj,indx,Desc) {
	obj.options[indx].selected = true;
	alert("Please go to " + Desc + " section and delete all data before changing this answer.");
	}

function HandleSelClick() {
	var objSel = document.all.item(window.event.srcElement.name)(0);
	objSel.value = objSel.selectedIndex;
	}

function isPosInteger(inputVal) {
	// needed for LoadCombo function below...
	var inputStr = inputVal.toString();
	for (var i=0; i<inputStr.length; i++) {
		var oneChar = inputStr.charAt(i);
		if (oneChar < "0" || oneChar > "9") {
			return false;
		}
	}
	return true;
}
/*
function checkInput(field,usragent) {
	var valid = 1;
	if (field.value.length!=0) {
		switch (field.name) {
			case 'txtUID':
				if (field.value.length < 4 || field.value.length > 25 || field.value.indexOf(" ") != -1) {
					alert("Your user ID must be 4 - 25 characters in length and should contain no spaces. Please re-enter.");
					valid = 0;
					}
				break;
			case 'txtPWD':
				if (field.value.length < 6 || field.value.length > 12 || field.value.indexOf(" ") != -1) {
					alert("Your password must be 6 - 12 characters in length and should contain no spaces. Please re-enter.");
					valid = 0;
					}
				break;
			default:
			}
		}
	if (valid==0) {
		if (usragent!=4) {
			field.select();
			field.focus();
			}			
		if ((usragent ==4) || (isNN)) {						
			field.value="";					
			field.focus();
			}
			
		}
	}
*/
function onSubmit() {
	//alert ("Submit of function.js");
}

// Grab all Navigator events that might get through to form elements while dialog is open. For IE, disable form elements.
function blockEvents() {
	if (isNN4) {
		window.captureEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS)
		window.onclick = deadend
	} else {
		disableForms()
	}
	window.onfocus = checkModal
}

function unblockEvents() {
	if (isNN4) {
		window.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS)
		window.onclick = null
	} else {
		enableForms()
	}
	window.onfocus = null
}

function DiscardEnterKey(e)
{
	//Dummy function for suppressing return key
}	

// Removes all characters which appear in string bag from string s.
function stripCharsInBag (s, bag)

{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}
function stripWhitespace (s)
{   var whitespace = " \t\n\r";
	return stripCharsInBag (s, whitespace)
}

function InitUpper(tempVal)
{
	if (tempVal=='') return tempVal;
	var temp;
	tempVal=tempVal.toLowerCase();
	temp=tempVal.substring(0,1);
	tempVal=temp.toUpperCase() + tempVal.substring(1);
	//alert(tempVal);
	return tempVal;
}

//-->
