	
	function keyDownAlpha(){
	
		var lkeyCode
	
		lkeyCode = window.event.keyCode
		//alert(lkeyCode)

		if ( ((lkeyCode >=35) && (lkeyCode <=40)) || //Allow End, Home, Left Arrow, Up Arrow, Right Arrow, Down Arrow
			 (lkeyCode == 46) || (lkeyCode == 8) || (lkeyCode == 9) || //Allow Delete, Backspace, Tab
			 (window.event.ctrlKey && //Check ctrl key
				( (lkeyCode == 67) || (lkeyCode == 88) || //Allow (C)opy, (X)Cut 
				  (lkeyCode == 86) || (lkeyCode == 90)) ) ) //Allow (V)Paste, (Z) Undo
			{
				window.event.returnValue = true;
				
			}
		
		else

				//Check for valid key
			if ( ((lkeyCode >= 65) && (lkeyCode <= 90)) || ((lkeyCode >= 97) && (lkeyCode <= 122)) || (lkeyCode == 222) ) { //Allow Alpha Characters				
					window.event.returnValue = true;

				}
		
				//invalid key
			else
				window.event.returnValue = false;
			
		//Now cancel the bubble-up so that nothing else receives the key
		window.event.cancelBubble = true;
			
	}

	function keyDownInteger(bAllowNeg){
	
		var lkeyCode
	
		lkeyCode = window.event.keyCode

		if ( ((lkeyCode >=35) && (lkeyCode <=40)) || //Allow End, Home, Left Arrow, Up Arrow, Right Arrow, Down Arrow
			 (lkeyCode == 46) || (lkeyCode == 8) || (lkeyCode == 9) || //Allow Delete, Backspace, Tab
			 (window.event.ctrlKey && //Check ctrl key
				( (lkeyCode == 67) || (lkeyCode == 88) || //Allow (C)opy, (X)Cut 
				  (lkeyCode == 86) || (lkeyCode == 90)) ) ) //Allow (V)Paste, (Z) Undo
			{
			window.event.returnValue = true;
			
			}
		
		else

				//Check for valid key
			if ( ((lkeyCode >=48) && (lkeyCode <=57)) || //Allow Keyboard Numbers
				 ((lkeyCode >=96) && (lkeyCode <=105)) || //Allow Keypad Numbers
				 (bAllowNeg && (lkeyCode == 189 || lkeyCode == 109)) ){ //Allow Keyboard - and Keypad - if bAllowNeg is true
				
					//check for Shift + number key - don't allow !@#$%^&*()
				if (window.event.shiftKey)
					window.event.returnValue = false;
				else {
					window.event.returnValue = true;

				}
			}
		
				//invalid key
			else
				window.event.returnValue = false;
			
		//Now cancel the bubble-up so that nothing else receives the key
		window.event.cancelBubble = true;
			
	}

	function keyDownFloat(bAllowNeg){
	
		var lkeyCode
	
		lkeyCode = window.event.keyCode

		if ( ((lkeyCode >=35) && (lkeyCode <=40)) || //Allow End, Home, Left Arrow, Up Arrow, Right Arrow, Down Arrow
			 (lkeyCode == 46) || (lkeyCode == 8) || (lkeyCode == 9) || //Allow Delete, Backspace, Tab
			 (window.event.ctrlKey && //Check ctrl key
				( (lkeyCode == 67) || (lkeyCode == 88) || //Allow (C)opy, (X)Cut 
				  (lkeyCode == 86) || (lkeyCode == 90)) ) ) //Allow (V)Paste, (Z) Undo
			{
			window.event.returnValue = true;
			
			}
		
		else
		
				//Check for valid key
			if ( ((lkeyCode >=48) && (lkeyCode <=57)) || //Allow Keyboard Numbers
				 ((lkeyCode >=96) && (lkeyCode <=105)) || //Allow Keypad Numbers
				 ((lkeyCode ==110) || (lkeyCode ==190)) || //Allow Keyboard decimal and Keypad decimal
				 (bAllowNeg && (lkeyCode == 189 || lkeyCode == 109)) ){ //Allow Keyboard - and Keypad - if bAllowNeg is true
				
					//check for Shift + number key - don't allow !@#$%^&*()
				if (window.event.shiftKey)
					window.event.returnValue = false;
				else {
					window.event.returnValue = true;

				}
			}
		
				//invalid key
			else
				window.event.returnValue = false;
			
		//Now cancel the bubble-up so that nothing else receives the key
		window.event.cancelBubble = true;
			
	}
	
	function keyDownCurrency(bAllowNeg){
	
		var lkeyCode
	
		lkeyCode = window.event.keyCode

		if ( ((lkeyCode >=35) && (lkeyCode <=40)) || //Allow End, Home, Left Arrow, Up Arrow, Right Arrow, Down Arrow
			 (lkeyCode == 46) || (lkeyCode == 8) || (lkeyCode == 9) || //Allow Delete, Backspace, Tab
			 (window.event.ctrlKey && //Check ctrl key
				( (lkeyCode == 67) || (lkeyCode == 88) || //Allow (C)opy, (X)Cut 
				  (lkeyCode == 86) || (lkeyCode == 90)) ) ) //Allow (V)Paste, (Z) Undo
			{
			window.event.returnValue = true;
			
			}

		else
		
				//Check for valid key
			if ( ((lkeyCode >=48) && (lkeyCode <=57)) || //Allow Keyboard Numbers
				 ((lkeyCode >=96) && (lkeyCode <=105)) || //Allow Keypad Numbers
				 ((lkeyCode ==110) || (lkeyCode ==190)) || //Allow Keyboard decimal and Keypad decimal
				 (bAllowNeg && (lkeyCode == 189 || lkeyCode == 109)) ){ //Allow Keyboard - and Keypad - if bAllowNeg is true
				
					//check for Shift + number key - don't allow !@#%^&*()
					//Allow $
					//Removed check for $ (don't allow entering of it either - since all dollar signs are outside textbox now)
				//if ((window.event.shiftKey) && !(lkeyCode==52))
				if (window.event.shiftKey)
					window.event.returnValue = false;
				else {
					window.event.returnValue = true;

				}
			}
		
				//invalid key
			else
				window.event.returnValue = false;
			
		//Now cancel the bubble-up so that nothing else receives the key
		window.event.cancelBubble = true;
			
	}

	function keyDownDate(){
		var lkeyCode
	
		lkeyCode = window.event.keyCode

		if ( ((lkeyCode >=35) && (lkeyCode <=40)) || //Allow End, Home, Left Arrow, Up Arrow, Right Arrow, Down Arrow
			 (lkeyCode == 46) || (lkeyCode == 8) || (lkeyCode == 9) || //Allow Delete, Backspace, Tab
			 (window.event.ctrlKey && //Check ctrl key
				( (lkeyCode == 67) || (lkeyCode == 88) || //Allow (C)opy, (X)Cut 
				  (lkeyCode == 86) || (lkeyCode == 90)) ) ) //Allow (V)Paste, (Z) Undo
			{
			window.event.returnValue = true;
			}

		else
						
				//Check for valid key
			if ( ((lkeyCode >=48) && (lkeyCode <=57)) || //Allow Keyboard Numbers
				 ((lkeyCode >=96) && (lkeyCode <=105)) || //Allow Keypad Numbers
				 (lkeyCode ==191) || (lkeyCode ==111) ) { //Allow Keyboard / and KeyPad /
 				
					//check for Shift + number key - don't allow !@#$%^&*()?
				if (window.event.shiftKey)
					window.event.returnValue = false;
				else {
					window.event.returnValue = true;

				}
			}
		
				//invalid key
			else
				window.event.returnValue = false;
			
		//Now cancel the bubble-up so that nothing else receives the key
		window.event.cancelBubble = true;
			
	}
	
	/***********************************************************
	/ dateCompare returns 0 if sDate1 < sDate2
	/					  1 if sDate1 = sDate2
	/					  2 if sDate1 > sDate2
	/
	/ NOTE:  parseInt requires a second parameter, "radix", 
	/	     in order to function properly
	/***********************************************************/
	function dateCompare(sDate1, sDate2) {

		var mmSD = 0; var ddSD = 0; var yySD = 0;
		var mmED = 0; var ddED = 0; var yyED = 0;

		mmSD = parseInt(sDate1.substring(0,sDate1.indexOf("/")), 10)
		sDate1 = sDate1.substring(sDate1.indexOf("/")+1)
		ddSD = parseInt(sDate1.substring(0,sDate1.indexOf("/")), 10)
		sDate1 = sDate1.substring(sDate1.indexOf("/")+1)
		yySD = parseInt(sDate1, 10)

		mmED = parseInt(sDate2.substring(0,sDate2.indexOf("/")), 10)
		sDate2 = sDate2.substring(sDate2.indexOf("/")+1)
		ddED = parseInt(sDate2.substring(0,sDate2.indexOf("/")), 10)
		sDate2 = sDate2.substring(sDate2.indexOf("/")+1)
		yyED = parseInt(sDate2, 10)

		var dStartDt = new Date(yySD, mmSD-1, ddSD)
		var dEndDt = new Date(yyED, mmED-1, ddED)
		
		if(dStartDt.getTime() == dEndDt.getTime()){
		   return 1
		}
		
		if (dStartDt.getTime() < dEndDt.getTime()){
		   return 0
		}

		if (dStartDt.getTime() > dEndDt.getTime()){
		   return 2
		}

	}

	/***********************************************************
	/ datetimeCompare returns 0 if sDate1 < sDate2
	/					  1 if sDate1 = sDate2
	/					  2 if sDate1 > sDate2
	/
	/ NOTE:  parseInt requires a second parameter, "radix", 
	/	     in order to function properly,
	/			Also, time1 and time2 need to be passed in as 
	/				military time.
	/***********************************************************/
	function datetimeCompare(sDate1, sTime1, sDate2, sTime2) {

		var mmSD = 0; var ddSD = 0; var yySD = 0; var hhSD = 0; var nnSD = 0; 
		var mmED = 0; var ddED = 0; var yyED = 0; var hhED = 0; var nnED = 0; 

		mmSD = parseInt(sDate1.substring(0,sDate1.indexOf("/")), 10)
		sDate1 = sDate1.substring(sDate1.indexOf("/")+1)
		ddSD = parseInt(sDate1.substring(0,sDate1.indexOf("/")), 10)
		sDate1 = sDate1.substring(sDate1.indexOf("/")+1)
		yySD = parseInt(sDate1, 10)

		hhSD = parseInt(sTime1.substring(0,sTime1.indexOf(":")), 10)
		sTime1 = sTime1.substring(sTime1.indexOf(":")+1)
		nnSD = parseInt(sTime1, 10)

		mmED = parseInt(sDate2.substring(0,sDate2.indexOf("/")), 10)
		sDate2 = sDate2.substring(sDate2.indexOf("/")+1)
		ddED = parseInt(sDate2.substring(0,sDate2.indexOf("/")), 10)
		sDate2 = sDate2.substring(sDate2.indexOf("/")+1)
		yyED = parseInt(sDate2, 10)

		hhED = parseInt(sTime2.substring(0,sTime2.indexOf(":")), 10)
		sTime2 = sTime2.substring(sTime2.indexOf(":")+1)
		nnED = parseInt(sTime2, 10)

		var dStartDt = new Date(yySD, mmSD-1, ddSD)
		var dEndDt = new Date(yyED, mmED-1, ddED)
		
		if(dStartDt.getTime() == dEndDt.getTime()){
			if(hhSD == hhED){
				if(nnSD == nnED)
					return 1
				else{
					if(nnSD < nnED)
						return 0
				
					else 
						return 2
				}
			}
			else{ 
				if(hhSD < hhED)
					return 0
				
				else 
					return 2
				
			}		
		}
		
		if (dStartDt.getTime() < dEndDt.getTime()){
		   return 0
		}

		if (dStartDt.getTime() > dEndDt.getTime()){
		   return 2
		}

	}

	/************************************************
	/ dateDifference
	/***********************************************/
	function dateDifference(sDate1, sDate2) {

		var mmVar1 = sDate1.substring(0,sDate1.indexOf("/"))
		sDate1 = sDate1.substring(sDate1.indexOf("/")+1)
		var ddVar1 = sDate1.substring(0,sDate1.indexOf("/"))
		sDate1 = sDate1.substring(sDate1.indexOf("/")+1)
		var yyVar1 = sDate1;

		var mmVar2 = sDate2.substring(0,sDate2.indexOf("/"))
		sDate2 = sDate2.substring(sDate2.indexOf("/")+1)
		var ddVar2 = sDate2.substring(0,sDate2.indexOf("/"))
		sDate2 = sDate2.substring(sDate2.indexOf("/")+1)
		var yyVar2 = sDate2;

		var dDate1 = new Date(yyVar1, mmVar1 - 1, ddVar1) //Month is 0-11 in JavaScript
		var dDate2 = new Date(yyVar2, mmVar2 - 1, ddVar2) //Month is 0-11 in JavaScript

		//1 day in milliseconds
		var lDayInMilliseconds = 1000 * 60 * 60 * 24

		//Calculate difference and convert to days
		return ( Math.ceil ( (dDate2.getTime()-dDate1.getTime()) / (lDayInMilliseconds) ) )
	
	}

	
	/************************************************
	/ validDateBox returns true if valid date
	/***********************************************/
	function validDateBox(oTextBox, iAllowFuture) {
		
		//iAllowFuture = 0 Don't allow dates in the future
		//iAllowFuture = 1 Allow dates in the future

		//if eight characters and no slashes then add the slashes
		if (oTextBox.value.length == 8 && oTextBox.value.indexOf("/") == -1)
			oTextBox.value = oTextBox.value.substring(0,2) + "/" + oTextBox.value.substring(2,4) + "/" + oTextBox.value.substring(4,8)
		
		var sDate = oTextBox.value;
		var mmVar = 0;
		var ddVar = 0;
		var yyVar = 0;
		var bIsDate = true;
				
		if (sDate.length < 8 || sDate.length > 10) 
			bIsDate = false
		
		mmVar = sDate.substring(0,sDate.indexOf("/"))
		sDate = sDate.substring(sDate.indexOf("/")+1)
		ddVar = sDate.substring(0,sDate.indexOf("/"))
		sDate = sDate.substring(sDate.indexOf("/")+1)
		yyVar = sDate;
		
		if (isNaN(mmVar)) bIsDate = false
		if (isNaN(ddVar)) bIsDate = false
		if (isNaN(yyVar)) bIsDate = false
		if (mmVar<1 || mmVar>12) bIsDate = false	
		if (ddVar<1 || ddVar>31) bIsDate = false
			//SQL Can only store years back to 1753 also ensures 4 digit year
		if (yyVar<1753 || yyVar>9999) bIsDate = false 
		if (mmVar==4 || mmVar==6 || mmVar==9 || mmVar==11)
		{
			if (ddVar==31) bIsDate = false
		}
		if (mmVar==2)
		{
			var leapVar=parseInt(yyVar/4, 10)
			if (isNaN(leapVar)) bIsDate = false
			if (ddVar>29) bIsDate = false
			if (ddVar==29 && ((yyVar/4) != parseInt(yyVar/4, 10))) bIsDate = false
		}
		
		if (iAllowFuture==0) //Don't Allow Future Dates
		{
			if (bIsDate==true) //Valid Date So Far
			{	
				//dCurrentDt Defined In TimeStamp.asp Include File
				if (dateCompare(oTextBox.value, dCurrentDt)==2) bIsDate = false; //Date Greater Than Today
			}
		}
		
		return bIsDate
	}
		
	/************************************************
	/ validIntegerBox returns true if valid integer
	/***********************************************/
	function validIntegerBox(oTextBox) {
		return (parseInt(oTextBox.value, 10) == oTextBox.value)
	}
	
	/****************************************************************************************
	/ validFloatBox returns true if valid float with less than specified decimal places
	/****************************************************************************************/
	function validFloatBox(oTextBox, iDecimalPlaces) {

		var sFloat = oTextBox.value

		if (isNaN(parseFloat(sFloat)))
			return false
		else
			if (parseFloat(sFloat) != sFloat)
				return false
			else
				if (sFloat.indexOf(".") >= 0)
					if (sFloat.substring(sFloat.indexOf(".")+1).length > iDecimalPlaces)
						return false
					else
						return true
				else
					return true 
	}
	
	/************************************************
	/ validCurrencyBox returns true if valid currency
	/***********************************************/
	function validCurrencyBox(oTextBox) {
		
		var sCurrency = oTextBox.value

		if ( sCurrency.substring(0,1) == "$" )
			sCurrency = sCurrency.substring(1)
			
		if ( ! isNaN(parseFloat(sCurrency)) ) 
			
			if (sCurrency.indexOf(".") >= 0){
				var sCurrencyRightOfDecimal = sCurrency.substring(sCurrency.indexOf(".")+1)
				if ( sCurrencyRightOfDecimal.indexOf(".") >= 0 ) //checks for more than one decimal point
					return false
				if (sCurrencyRightOfDecimal.length > 2)
					return false
				else
					return true
			}
			else
				return true
		else{
			return false
		}
	}	
	
	/*********************************************
	/Validation to ensure an option is selected
	/********************************************/
	function validOptSelected(oOption) {
	
		if (oOption) {
				//Both following checks are needed to see if options are selected.
				//If only one option available and is checked
				//JavaScript doesn't create array if only one opt is created on page
			if (oOption.checked)
					return true
					
				//If multiple options avaliable and one is checked
			for (var i=0;i<oOption.length;i++)
				if (oOption[i].checked=="1")
					return true
	
			return false
		}
		else {
			return false
		}
	
	}
	
	/*****************************************************
	/  Validation to ensure zip code is in correct format
	/****************************************************/
	function validZipCode(oTextBox){

		var regexp = /^\d{5}(-\d{4})?$/

		if(!regexp.test(oTextBox.value)){
			return false
		}
		else
			return true
	}
	
	/*********************************************
	/LTrim trims the leading spaces from a string
	/********************************************/
	function LTrim(varIn){
	
		var varOut = "" 
   
		if(varIn){
			// string has at least one character
			for(i=0; i < varIn.length; i++){
			   if(varIn.charAt(i) != " "){	  
			   //first non-space char found so return
			   //string from this character forward
			   varOut = varIn.substring(i)
			   break
			   }
		    }
		 }
		 return varOut
	}


	/******************************************
	/Trims the trailing spaces from a string
	/*****************************************/
	function RTrim(varIn){
		
		var varOut = "" 
	   
		if(varIn){
			// string has at least one character
			for(i=varIn.length-1; i >= 0; i--){
			   if(varIn.charAt(i) != " "){	  
			   //first non-space char found so return
			   //string starting at 0 and ending 
			   //with this character
			   varOut = varIn.substring(0,i+1)
			   break
			   }
		    }
		 }
		 return varOut
	}

	/*********************************************************
	/Trims both the leading and trailing spaces from a string
	/********************************************************/
	function Trim(varIn){
					   
		return LTrim(RTrim(varIn))
	
	}
