function AddToValidateArray(Element)			//NOTE:  ASP Class depends on this function interface!
{
    if (!document.ValidateArray) 
    {
        document.ValidateArray = new Array
    }
    document.ValidateArray[document.ValidateArray.length] = Element
}

function Validate(stopOnFailure) 				//NOTE:  ASP Class depends on this function interface!
{
	errorMsg = ValidateAllItems(stopOnFailure);
	if (errorMsg != "")
	    alert("The form could not be submitted:" + errorMsg);

	return (errorMsg == ""); // false prevents form submission
} 

function ValidateAllItems(stopOnFailure)
{
	var i
	var msg
	var tofocus = true;
	var ErrorMsg = "";
	
	// Go through the Validate Array that may or may not exist
	// and call the Validate function for all elements that have one.
	// Set focus to the first failed item.
	
	if (document.ValidateArray)
	{
		for (i = 0; i < document.ValidateArray.length; i ++)
		{
			msg = document.ValidateArray[i].ValidationFunction()
			if (msg != "")
			{
				ErrorMsg += "\n\n" + msg;
				if (tofocus) 
				{
					if (document.ValidateArray[i].focus)
					{
						document.ValidateArray[i].focus()
						tofocus = false;
					}
				}
				
				if (stopOnFailure == "1") return ErrorMsg;
			}
  		}
	}
	document.ValidateArray = new Array
	return ErrorMsg;
}

function ValidateRegExp()
{
	/*
		args[0] = textbox with string to test
		args[1] = required
		args[2] = error message
		args[3] = reg exp 1
		args[4] = reg exp 2
	*/
	if (!RegExp) return;
	
	var args = arguments;
	var val = args[0].value;
	var required = args[1];
	var msg = "";
	var msgInvalid = "Not valid";
	
	if (args[2] != "")
		msgInvalid = args[2];
		
	var theLen = StripChars(" ", val).length;
	if (theLen == 0)
	{
		if (!required) return ""
		else return "Required field. " + msgInvalid;
	}
		
	if (args[3])
	{
		var pattern1 = eval("/"+args[3]+"/");
		if (!pattern1.test(val))
		{
			if(args[4])
			{
				var pattern2 = eval("/"+args[4]+"/"); 
				if(!pattern2.test(val)) {return msgInvalid; }
			}
			else
			{
				return msgInvalid;
			}
		}
		else
		{
			return msg;
		}
	}
	else
	{
		return msgInvalid;
	}
	return msg; 
}

function ValidateEMail()						//NOTE:  ASP Class depends on this function name!
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a valid e-mail address\n(a valid e-mail address contains the @ character)";
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	//Required field validation
	var theLen = StripChars(" ",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid
	
	//email syntax validation
	if (val.indexOf("@",0) < 0) 
		msg = msgInvalid
		
	return msg;
}

function ValidateFloatingPoint()
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter an appropriate value."
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	var theLen = StripChars(" \n\t\r",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	//var min = this.fltMin;
	//var max = this.fltMax;
	  
	if (!isNaN(val))
	{
	//	if (min < max)
	//	{
	//		if ((val < min) || (val > max))
	//		{
	//		   msg = "Please enter a number between " + min + " and " + max + ".";
	//		}
	//	}
	}
	else
	{
		msg = msgInvalid;
	}
	return msg;
}

function ValidateInteger()
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a number.";
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	var theLen = StripChars(" \n\t\r",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	
	theString = StripChars(" ",val);

	// remove leading zeros (zeros are only leading if there is more than one char)
	while (theString.length > 1 && theString.substring(0,1) == "0")
	{
		theString = theString.substring(1, theString.length);
	}

	var val = parseInt(theString);
	if (isNaN(val)) return msgInvalid;
	
	// check for non-digits (and minus sign). Do this by converting number
	// back to a string and comparing it to original string.
	if (val.toString() != theString) return msgInvalid;
	
	//var min = this.intMin;
	//var max = this.intMax;
	//if (min < max)
	//{
	//	if ((val < min) || (val > max))
	//	{
	//		return "Please enter a number between " + min + " and " + max + ".";
	//	}
	//}
	   
	// reset the entered string after removal of spaces and leading zeros.
	this.value = theString;
	return "";
}

function ValidateNonBlank()						//NOTE:  ASP Class depends on this function name!
{
	var msg = "";
	var val = new String(); 
	if (this.type)
	{
		if (this.type == "select-one")
		{
			val = this.options[this.selectedIndex].value;
		}
		else
		{
			if(this.value)
			{
				val = this.value; 
			}
		}
	}
	else
	{
		if (this.length)
		{
			for(var i = 0 ; i < this.length; i++)
			{
				if (this[i].checked) {val = "1"; break;}
			}
		}
		else
		{
			if (this.value)
			{
				val = this.value; 
			}
		}
	}
	var msgInvalid = "Please enter a non-blank character.";
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg
	//Required field validation
	var theLen = StripChars(" ",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid
	
	if (val.length > 0)
		if (StripChars(" \n\t\r",val).length == 0)
			msg = msgInvalid;
	
	return msg;
}

function ValidateCreditCard()					//NOTE:  ASP Class depends on this function name!
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a valid credit card number."
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	//Required field validation
	var theLen = StripChars(" ",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	val = StripChars(" -.\n\r",val)		

	if (!AllInRange("0","9",val) || !isCreditCard(val))
	{
		msg = msgInvalid
	}	

	return msg		
}

function ValidateDate()							//NOTE:  ASP Class depends on this function name!
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a valid date (for example\n5/3/97 or May 3, 1997 or 3 May 1997).";
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	//Required field validation
	var theLen = StripChars(" ",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid
	
	var dateVar = new Date(val);

	if (isNaN(dateVar.valueOf()) || (dateVar.valueOf() == 0))
		return msgInvalid;

	// Check for correct range.
	//if (this.when == "Past")
	//{
	//	var Today = new Date();
	//	if (dateVar >= Today)
	//	return "Please enter a date in the past (Today is " + Today.toLocaleString() +")";
	//}
	//if (this.when == "Future")
	//{
	//	var Today = new Date();
	//	if (dateVar <= Today)
	//	return "Please enter a date in the future (Today is " + Today.toLocaleString() +")";
	//}

	return msg;
}

function ValidateTime()							//NOTE:  ASP Class depends on this function name!
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a valid time (for example\n13:30:00 or 13:30 or 1:30 pm)";
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	//Required field validation
	var theLen = StripChars(" ",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	var result = Date.parse("1/1/1970 " + val);
	if (isNaN(result))
		msg = msgInvalid
	  
	return msg;
}

function ValidateURL()							//NOTE:  ASP Class depends on this function name!
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a valid URL\n(a valid URL begins with a protocol identifier such as http://)";
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg
		
	var i
	var lcase    
	var protocols = "ftp://,http://,javascript:,file://,gopher://,https://,mailto:,rlogin://,shttp://,snews://,telnet://,tn3270://,wais://"
	var protos = protocols.split(",")

	//Required field validation
	var theLen = StripChars(" ",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	lcase = Trim(val.toLowerCase())

	msg = msgInvalid

	for (i = 0; i < protos.length; i++)
	{
		if (lcase.indexOf(protos[i]) == 0 )
		{		
			msg = ""
			break;
		}
	}
	return msg;
}

function ValidateUSPhone()						//NOTE:  ASP Class depends on this function name!
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a valid U.S. phone number.\nSuch as (760) 555-1212"
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	var theLen = StripChars(" \n\t\r",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	val = StripChars("*() -./_\n\r",val)		

	if (!AllInRange("0","9",val))
	{
		msg = msgInvalid
	}
	else if (val.length == 11)
	{
		 if (val.charAt(0) != "1")	
			msg = msgInvalid
	}
	else if (val.length != 10 && val.length != 7)
	{
		msg = msgInvalid
	}

	if (msg == "")
	{
		if (val.length == 10)
			this.value = (reformat(val,"(",3,")",3,"-",4))
		else if (val.length == 7)
			this.value = (reformat(val,"",3,"-",4))
		else //len == 11
			this.value = (reformat(val,"",1,"(",3,")",3,"-",4))
	}
	return msg		
}

function ValidateZipCode()						//NOTE:  ASP Class depends on this function name!
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a valid Zip Code.\nSuch as 92008 or 92008-1337"
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	var theLen = StripChars(" \n\t\r",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	theString = StripChars("- \n\r",val)		

	if (!AllInRange("0","9",theString))
	{
		msg = msgInvalid
	}
	else if (theString.length != 5 && theString.length != 9)
	{
		msg = msgInvalid
	}

	if (msg == "")
	{
		if (theString.length == 9)		
			this.value = (reformat(theString,"",5,"-",4))
		else
			this.value = (theString)	   
	}
	return msg	
}

function ValidateInternationalPhone()
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter an appropriate value.";
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	var theLen = StripChars(" \n\t\r",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	theString = StripChars("+*() -./_\n\r",val)		
	if (!AllInRange("0","9",theString) || theString.length < 6)
	{
		msg = msgInvalid
	}	

	return msg		
}

function ValidateSSN()
{
	var msg = "";
	var val = this.value;
	var msgInvalid = "Please enter a valid Social Security Number.\nSuch as 555-66-7777"
	if (this.ErrorMsg != "")
		msgInvalid = this.ErrorMsg

	var theLen = StripChars(" \n\t\r",val).length
	if (theLen == 0)	
		if (!this.Required) return ""	
		else return "Required field.  " + msgInvalid

	theString = StripChars(" -.\n\r",val)		

	if (!AllInRange("0","9",theString) || theString.length != 9)
	{
		msg = msgInvalid
	}	

	if (msg == "")
	{
		this.value = (reformat(theString,"",3,"-",2,"-",4))
	}

	return msg		
}

// Support functions ******************************************************************************//

function getDayName(d)
{   
   var theDay = d.getDay()

   if (theDay == 0) 
            return "Sunday"
   if (theDay == 1) 
            return "Monday"
   if (theDay == 2) 
            return "Tuesday"
   if (theDay == 3) 
            return "Wednesday"
   if (theDay == 4) 
            return "Thursday"
   if (theDay == 5) 
            return "Friday"
   if (theDay == 6) 
            return "Saturday"
}

function getFullYear(d)
{
   var y = d.getYear();

   if (y < 2000) 
   {
        y += 1900
   }

   return y
}

function getMonthName(d)
{
   var theMonth = d.getMonth()
   
   if (theMonth == 0) 
            return "January"
   if (theMonth == 1) 
            return "February"
   if (theMonth == 2) 
            return "March"
   if (theMonth == 3) 
            return "April"
   if (theMonth == 4) 
            return "May"
   if (theMonth == 5) 
            return "June"
   if (theMonth == 6) 
            return "July"
   if (theMonth == 7) 
            return "August"
   if (theMonth == 8) 
            return "September"
   if (theMonth == 9) 
            return "October"
   if (theMonth == 10) 
            return "November"
   if (theMonth == 11) 
            return "December"
}

function isCreditCard(st) {
  // Encoding only works on cards with less than 19 digits
  if (st.length > 19)
    return (false);

  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }

  if ((sum % 10) == 0)
    return (true);
  else
    return (false);
} 

function subAwithBinC(a,b,c)
{

	var i = c.indexOf(a);
	var l = b.length;

	while (i != -1)	{
		c = c.substring(0,i) + b + c.substring(i + a.length,c.length);
  i += l
		i = c.indexOf(a,i);
	}
	return c;

}

function StripChars(theFilter,theString)
{
	var strOut,i,curChar

	strOut = ""	
	for (i=0;i < theString.length; i++)
	{		
		curChar = theString.charAt(i)
		if (theFilter.indexOf(curChar) < 0)	// if it's not in the filter, send it thru
			strOut += curChar		
	}
	
	return strOut
}

function AllInRange(x,y,theString)
{
	var i, curChar
	
	for (i=0; i < theString.length; i++)
	{
		curChar = theString.charAt(i)
		if (curChar < x || curChar > y) //the char is not in range
			return false
	}
	return true
}


function reformat (s)
{
    var arg;
    var sPos = 0;
    var resultString = "";

    for (var i = 1; i < reformat.arguments.length; i++) {
       arg = reformat.arguments[i];
       if (i % 2 == 1) 
           resultString += arg;
       else 
       {
           resultString += s.substring(sPos, sPos + arg);
           sPos += arg;
       }
    }
    return resultString;
}

function Trim(theString)
{
 var i,firstNonWhite

 if (StripChars(" \n\r\t",theString).length == 0 ) return ""

	i = -1
	while (1)
	{
		i++
		if (theString.charAt(i) != " ")
			break	
	}
	firstNonWhite = i
	//Count the spaces at the end
	i = theString.length
	while (1)
	{
		i--
		if (theString.charAt(i) != " ")
			break	
	}	

	return theString.substring(firstNonWhite,i + 1)

}

