
//*****************************************************************************
//*
//* Functions: IsDate                 (argControlToValidate, argErrorMsg)
//*            IsTime                 (argControlToValidate, argErrorMsg) NC
//*            IsNotEmpty             (argControlToValidate, argErrorMsg)
//*            IsNotChecked           (argControlToValidate, argErrorMsg)
//*            IsNotEmptyNoSelect     (argControlToValidate, argErrorMsg)  
//*            IsLat                  (argControlToValidate, argErrorMsg)
//*            IsLong                 (argControlToValidate, argErrorMsg)    
//*            IsNotZero              (argControlToValidate, argErrorMsg)
//*            IsInteger              (argControlToValidate, argErrorMsg)
//*            IsFloat                (argControlToValidate, argErrorMsg)
//*            IsLikeMask             (argControlToValidate, argEditMask,  argErrorMsg)
//*            IsGreaterThan          (argControlToValidate, argCompareTo, argErrorMsg)
//*            IsGreaterThanOrEqualTo (argControlToValidate, argCompareTo, argErrorMsg)
//*            IsLessThan             (argControlToValidate, argCompareTo, argErrorMsg)
//*            IsLessThanOrEqualTo    (argControlToValidate, argCompareTo, argErrorMsg)
//*            IsShorterThan          (argControlToValidate, argCompareTo, argErrorMsg)
//*            IsLengthEqualTo        (argControlToValidate, argCompareTo, argErrorMsg)
//*            IsOnOrAfter	          (argControlToValidate, argCompareTo, argErrorMsg)
//*            IsOnOrBefore	          (argControlToValidate, argCompareTo, argErrorMsg)
//*            IsEmailValid           (argControlToValidate, argErrorMsg)
//*
//* Overview:  All edits return "true" if the edit passed and "false" if the
//*            edit fails
//*
//* Modification History
//* Date       Author    Function Name  Modification Description
//* ---------- --------- -------------  ---------------------------------------
//* 01/09/2001 Rumery	 All            Original version
//*
//*****************************************************************************


function IsDate (FormName,argControlToValidate, argErrorMsg) {
	var err=0
	var Temp     = document.forms[FormName].elements[argControlToValidate]
	var argValueToEdit = document.forms[FormName].elements[argControlToValidate].value
	if (argValueToEdit == "" ) { 
		return true;
	} 


    // Extract the month
	FirstSlash = argValueToEdit.indexOf("/")
	b = argValueToEdit.substring(0,FirstSlash)  			// month
	c = argValueToEdit.substring(FirstSlash, FirstSlash+1)		// '/'
	SecondSlash = argValueToEdit.indexOf("/", FirstSlash+1)
	d = argValueToEdit.substring(FirstSlash+1, SecondSlash)		// Day
	e = argValueToEdit.substring(SecondSlash, SecondSlash+1)	// '/'
	f = argValueToEdit.substring(SecondSlash+1, SecondSlash+3)	// Century
	g = argValueToEdit.substring(SecondSlash+3, SecondSlash+5)	// Year
	h = argValueToEdit.substring(SecondSlash+5, 999)	// Other Stuff
	j = argValueToEdit.substring(SecondSlash+1, SecondSlash+5)	// Year

	// Month, Day and Year must be numeric
	if(isNaN(parseInt(b)) || isNaN(parseInt(d)) || (f.length>0 && isNaN(parseInt(f))) || (g.length>0 && isNaN(parseInt(g))) || (j.length>0 && isNaN(parseInt(j)))) {
		DisplayMessage(argErrorMsg,argControlToValidate);
		Temp.focus();
		return false;
	}	

	// Month must be between 1 and 12
	if (b<1 || b>12) err = 2
		
	// Look for the slash
	if (c != '/') err = 3

	// The day, at the very least, has to be between 1 and 31
	if (d<1 || d>31) err = 4

	// Look for the slash
	if (e != '/') err = 5
		
	if (j.length==2) {
		//2 digit date, create 4 digit
		g=j
		if (g>75){
			f=19
		}else{
			f=20
		}	
	}

	// Century can only be either 19th or 20th century
	if (f<19 || f>20) err = 6

	// Year must be between 0 and 99
	if (g<0 || f>99) err = 7

	// Century must be a length of two 
	if (g.length < 2) err = 7
	
	// Year must be between 0 and 99
	if (f.length < 2) err = 7

	//2 digit date
	if (f<19 || f>20) err = 6

	// Year determine the last day of the month based on the actual month
	if (b==4 || b==6 || b==9 || b==11){
		if (d==31) err=8
	}
	if (b==2){
		var x=parseInt(j/4)
		if (isNaN(x)) {
			err=9
		}
		if (d>29) err=1
		//if (d==29 && ((x/4)!=parseInt(x/4))) err=10
		if (d==29) {
			// Store the modulus (remainder) to j
			j = j % 4
			// If j > 0 (there is a remainder).  It is not a leap year.
			if (j>0) {
				err=11
			}
		}
	}
	
	// Loop through the remainging characters looking for non spaces
	for (var i = 0; i < h.length; i++) {
		if (h.charAt(i) != " ") {
			err=10;
			i = 9999;
		}
	}

	if (err>0) {
		DisplayMessage(argErrorMsg,argControlToValidate)
		Temp.focus();
		return false;
	}
	else {
		argControlToValidate.value= b + "/" + d + "/" + f + g
		return true;
	}
}

function IsTime(FormName,ElemName,sMessage) {
	var NameOk  = true
	var Temp     = document.forms[FormName].elements[ElemName]
	var argValueToEdit = document.forms[FormName].elements[ElemName].value;

//FIRST SET OF CODE THAT DOES NOT WORK
//	FirstSlash = argValueToEdit.indexOf(":")
//	b = argValueToEdit.substring(0,FirstSlash)  			// Hour
//	c = argValueToEdit.substring(FirstSlash, FirstSlash+1)		// ':'
//	SecondSlash = argValueToEdit.indexOf(":", FirstSlash+1)
//	d = argValueToEdit.substring(FirstSlash+1, SecondSlash)		// Minute
//	e = argValueToEdit.substring(SecondSlash, SecondSlash+1)	// ':'
//	if ((b != null) && 
//		(b >= 0 && b < 24) && 
//		(d >= 0 && d < 60)) {
//		alert(b + ":" + d);
//		NameOk = false; 
//		alert(sMessage);
//		Temp.focus();
//	}




//FIRST SET OF CODE THAT DOES NOT WORK
//	var a = new Array; 
//	a = argValueToEdit.match(/^(\d\d):(\d\d)$/); 
//	if ((a != null) && 
//		(a[1] >= 0 && a[1] < 24) && 
//		(a[2] >= 0 && a[2] < 60)) {
//		alert(sMessage);
//      		Temp.focus();
//		NameOk = false; 
//	}

return NameOk;
}

function IsNotZero (argControlToValidate, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	if (argValueToEdit == 0) {
		DisplayMessage(argErrorMsg,argControlToValidate)
		return false
	}
	return true
}


function IsNotEmpty(FormName,ElemName,sMessage)
{
var NameOk  = true
var Temp     = document.forms[FormName].elements[ElemName]
var Length   = Temp.value.length   // Array is from 0 to length-1
if (Length == 0)             // Must be atleast one valid char
   {  
      NameOk  = false
      alert(sMessage)
      Temp.focus()
   }
return NameOk  
}



function IsNotEmptyNoSelect(FormName,ElemName,sMessage) {
	var argValueToEdit = document.forms[FormName].elements[ElemName].value
	if (argValueToEdit == null || RTrimValue(argValueToEdit) == "") {
		DisplayMessageNoSelect(sMessage,ElemName)
		return false
	}
	return true
}

function IsLat (argControlToValidate, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	inputStr = argValueToEdit.toString()

    if (inputStr.length != "") {
		if (inputStr.length != 7) {
			DisplayMessage(argErrorMsg,argControlToValidate)
			return false
			}
		else {
		    return IsSignedInteger (argControlToValidate, argErrorMsg)
		}
	}	
	return true
}

function IsLong (argControlToValidate, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	inputStr = argValueToEdit.toString()

    if (inputStr.length != "") {	
		if (inputStr.length != 8) {
			DisplayMessage(argErrorMsg,argControlToValidate)
			return false
			}
		else {
		    return IsSignedInteger (argControlToValidate, argErrorMsg)
		}
	}	
	return true
}

function IsSignedInteger (argControlToValidate, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	inputStr = argValueToEdit.toString()
	
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i)
		if (i == 0 && (oneChar != "-" && oneChar != "+" )) {
			DisplayMessage(argErrorMsg,argControlToValidate)
			return false
		}
		else {
			continue
		}
		if (oneChar < "0" || oneChar > "9") {
			alert(oneChar)
			DisplayMessage(argErrorMsg,argControlToValidate)
			return false
		}
	}
	return true
}

function IsInteger (argControlToValidate, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	inputStr = argValueToEdit.toString()
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i)
		if (i == 0 && oneChar == "-") {
			continue
		}
		if (i == 0 && oneChar == "+") {
			continue
		}						
		if (oneChar < "0" || oneChar > "9") {
			DisplayMessage(argErrorMsg,argControlToValidate)
			return false
		}
	}
	return true
}

function IsFloat (argControlToValidate, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	oneDecimal = false
	inputStr = argValueToEdit.toString()
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i)
		if (i == 0 && oneChar == "-") {
			continue
		}
		if (i == 0 && oneChar == "+") {
			continue
		}								
		if (oneChar == "." && !oneDecimal) {
			oneDecimal = true
			continue
		}
		if (oneChar < "0" || oneChar > "9") {
			DisplayMessage(argErrorMsg,argControlToValidate)
			return false
		}
	}
	return true
}

function IsLikeMask (argControlToValidate, argEditMask, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	template = new RegExp(argEditMask);
	if (! template.test(argValueToEdit))
	{
		DisplayMessage(argErrorMsg,argControlToValidate)
		return false
	}
	else
	{
		return true	
	}
}

function IsGreaterThan (argControlToValidate, argCompareTo, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	if (IsFloat(argControlToValidate, 'Value is not numeric')) {
		if (argValueToEdit > argCompareTo) 
		{
			return true
		}
		else
		{
			DisplayMessage(argErrorMsg,argControlToValidate)			
			return false
		}
	}
	else
	{
		return false
	}
}

function IsGreaterThanOrEqualTo (argControlToValidate, argCompareTo, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	if (IsFloat(argControlToValidate, 'Value is not numeric')) {
		if (argValueToEdit >= argCompareTo) 
		{
			return true
		}
		else
		{
			DisplayMessage(argErrorMsg,argControlToValidate)			
			return false
		}
	}
	else
	{
		return false
	}
}

function IsOnOrAfter (argControlToValidate, argCompareTo, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	
	if (argValueToEdit =="" || argCompareTo=="") {			
		return true
	}	
		
	var dVal =  new Date(argValueToEdit)
	var dComp =  new Date(argCompareTo)
	

	if (dVal=="NaN"	|| dComp=="NaN") {
		window.alert ("Value is not a date")
		return false
	}
	
	if (dVal>=dComp)
	{		
		return true
	}
	else
	{
		DisplayMessage(argErrorMsg,argControlToValidate)			
		return false
	}
}


function IsOnOrBefore (argControlToValidate, argCompareTo, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	
	if (argValueToEdit =="" || argCompareTo=="") {		
		return true
	}	
		
	var dVal =  new Date(argValueToEdit)
	var dComp =  new Date(argCompareTo)
	

	if (dVal=="NaN"	|| dComp=="NaN") {
		window.alert ("Value is not a date")
		return false
	}
	
	if (dVal<=dComp)
	{		
		return true
	}
	else
	{
		DisplayMessage(argErrorMsg,argControlToValidate)			
		return false
	}
}
function IsLessThan (argControlToValidate, argCompareTo, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	if (IsFloat(argControlToValidate, 'Value is not numeric')) {
		if (argValueToEdit < argCompareTo) 
		{
			return true
		}
		else
		{
			DisplayMessage(argErrorMsg,argControlToValidate)			
			return false
		}
	}
	else
	{
		return false
	}
}

function IsLessThanOrEqualTo (argControlToValidate, argCompareTo, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	if (IsFloat(argControlToValidate, 'Value is not numeric')) {

		if (argValueToEdit <= argCompareTo) 
		{
			return true
		}
		else
		{
			DisplayMessage(argErrorMsg,argControlToValidate)			
			return false
		}
	}
	else
	{
		return false
	}
}

function IsShorterThan (argControlToValidate, argCompareTo, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	inputStr = argValueToEdit.toString()
	if (inputStr.length > argCompareTo) {
		DisplayMessage(argErrorMsg,argControlToValidate)
		return false
	}
	return true
}

function IsLengthEqualTo (argControlToValidate, argCompareTo, argErrorMsg) {
	var argValueToEdit = argControlToValidate.value
	inputStr = argValueToEdit.toString()
	if (!(inputStr.length == argCompareTo)) {
		DisplayMessageNoSelect(argErrorMsg,argControlToValidate)
		return false
	}
	return true
}

function DisplayMessage(argErrorMsg,argControlToPostionCursor){
	alert(argErrorMsg);
	if(argControlToPostionCursor.disabled==false) {
	argControlToPostionCursor.select();
 	//	if (argControlToPostionCursor.select()) {
	//		argControlToPostionCursor.focus();
	//	}
	//	else {
			var sType = argControlToPostionCursor.getAttribute('type');
			if(sType!=null) {
				sType = sType.toUpperCase();
				if(sType=='TEXT'||sType=='RADIO'||sType=='CHECKBOX') {
					argControlToPostionCursor.focus();
				}
			}
	//	}
	}
}

function DisplayMessageNoSelect(argErrorMsg,argControlToPostionCursor){
	alert(argErrorMsg);

}

function CheckForDup(argMode, argValue, argKey, argMessage)
{

	var co
	co = "";
	co.cancel = "";
	co.return_value= "";

	co = RSExecute("/Framework_SysInc/sysDuplicateCheck.asp","DupCheckName",argMode,argValue,argKey );

	if (co.return_value=="True") 
	{
		window.alert(argMessage)
		return false
	}
	else 
	{
		return  true
	}	

}

function RTrimValue(sTextToTrim){
	var iStart; 
	var iEnd;
	var userInput;
	var cChar;
		
	iStart = 0;
		
	userInput = sTextToTrim;
	iEnd = userInput.length - 1;
	cChar = userInput.charAt(iStart);
	
	while ((iStart <= iEnd) && ((cChar == "\n") || (cChar == "\r") || (cChar == "\t") || (cChar == " ")))
	{
		iStart ++;		
		cChar = userInput.charAt(iStart);
	}
	cChar = userInput.charAt(iEnd);
	while ((iEnd >= 0) && ((cChar == "\n") || (cChar == "\r") || (cChar == "\t") || (cChar == " ")))
	{
		iEnd --;	
		cChar = userInput.charAt(iEnd);
	}
	
	if (iStart <= iEnd){
		return userInput.substring(iStart,iEnd +1);
	}
	else
	{
		return "";
	}
}

function IsRelationallyRequired (argSlaveControl,argMasterControl, argErrorMsg) {
	var argMasterValue = argMasterControl.value
	var argValue = argSlaveControl.value
	
	if (argMasterControl.type=="checkbox"){
		if (argMasterControl.checked) {
			inputStr1="true"
		}else{
			inputStr1=""		
		}
	}else{
		inputStr1 = argMasterValue.toString()
	}
	
	inputStr2 = argValue.toString()
	if (inputStr1.length >0 && inputStr2.length==0) {
		DisplayMessageNoSelect(argErrorMsg,argSlaveControl)
		return false
	}
	return true
}

// Money fields can contain a leading "$", commas and one decimal point
function IsMoney(argControlToValidate,argErrorMsg) {
	var argValueToEdit = trim(argControlToValidate.value);

	// Is there anuthing to edit?
	if(argValueToEdit.length==0) {
		return true;
	}

	// Remove $ sign and commas if they exist	
	argValueToEdit = argValueToEdit.replace('\$','');
	argValueToEdit = argValueToEdit.replace('\,','');
	
	// Find the decimal (if any) and make sure there is just one
	nPos = argValueToEdit.indexOf('.');
	if(nPos>=0) {
		if(argValueToEdit.indexOf('.',nPos+1)!=-1) {
			DisplayMessage(argErrorMsg,argControlToValidate);
			return false;
		}
	}

	// Allow leading plus or minus sign providing it is first character
	var sChar = argValueToEdit.charAt(0);
	if(sChar == '+' || sChar == '-') {
		argValueToEdit = argValueToEdit.substr(1);
	}
	else {
		sChar = '';
	}
	
	// Remaining characters must be numeric
	if(isNaN(parseInt(argValueToEdit))) {
		DisplayMessage(argErrorMsg,argControlToValidate);
		return false;
	}

	// Revise the form value so it is valid for update
	argControlToValidate.value = sChar + argValueToEdit;

	// Valid		
	return true;
}




function IsEmailValid(FormName,ElemName,sMessage)
{
var EmailOk  = true
var Temp     = document.forms[FormName].elements[ElemName]
var AtSym    = Temp.value.indexOf('@')
var Period   = Temp.value.lastIndexOf('.')
var Space    = Temp.value.indexOf(' ')
var Length   = Temp.value.length - 1   // Array is from 0 to length-1

if ((AtSym < 1) ||                     // '@' cannot be in first position
    (Period <= AtSym+1) ||             // Must be atleast one valid char btwn '@' and '.'
    (Period == Length ) ||             // Must be atleast one valid char after '.'
    (Space  != -1))                    // No empty spaces permitted
   {  
      EmailOk = false
      alert(sMessage)
      Temp.focus()
   }
return EmailOk
}



