// This file contains the data validation JavaScript functions
// It is included in the HTML pages with forms that need these
// data validation routines.

function toggleT(_w,_h) { //Show or hide dhtml sections
// _w : which ID
// _h : (h)ide or (s)how
	if (document.all) { // is IE
		var allforms = document.forms;
		for (x=0; x<allforms.length; x++) {
			var allelements = document.forms[x].elements;
			for (y=0; y<allelements.length; y++) {
				if (_h=='s') allelements[y].style.visibility='visible';
				if (_h=='h') allelements[y].style.visibility='hidden';
			}
		}
	} else {
		if (document.layers) { // is NS?  {
			var objects = document.layers;
			for (i=0;i<objects.length;i++) {
				if (objects[i].id==_w) {
					//if (_h=='s') eval("document.layers['"+_w+"'].visibility='show';");
					//if (_h=='h') eval("document.layers['"+_w+"'].visibility='hide';");
				}
			}
		}
	}
}

function WM_on(id,idimg){
	if (document.getElementById(id)){
		document.getElementById(id).style.display = 'block';
		document.getElementById(idimg).src = 'images/collapse.gif';
		return false;
	}
}

function WM_off(id,idimg){
	if (document.getElementById(id)){
		document.getElementById(id).style.display = 'none';
		document.getElementById(idimg).src = 'images/expand.gif';
		return false;
	}
}

function WM_toggle(id,idimg){
	if (document.getElementById(id)){
		if(document.getElementById(id).style.display == 'none'){
			document.getElementById(id).style.display = 'block';
			document.getElementById(idimg).src = 'images/collapse.gif';
		} else {
			document.getElementById(id).style.display = 'none';
			document.getElementById(idimg).src = 'images/expand.gif';
		}
		return false;
	}
}

// DEFINE VARIABLES

// whitespace characters
var whitespace = " \t\n\r";
var win=null;


// This function allows the cursor to jump
// automatically from field to field

function jumpTo(source,length,target) {
	if (document.all) {
		var ascii = event.keyCode;
		if ((ascii < 20 && ascii != 8) || (ascii > 126 && ascii != 127)) {
			event.keyCode = 0;
			return false;
		}
	}
	if (document.layers) {
		var ascii = source.which;
		if ((ascii < 20 && ascii != 8) || (ascii > 126 && ascii != 127)) {
			source.which = 0;
			return false;
		}
	}

	if (source.value.length == length) {
		target.focus();
		target.select();
		return true;
	} else {
		return false;
	}
}


function myExitRoutine () {
		alert ( "GoodBye Cruel World! You are leaving my Web Page." )
}


function compare(field1,field2,message) {
	if (field1.value != field2.value){
		alert(message);
		field1.value = "";
		field2.value = "";
		field1.focus();
		return false;
	} else {
		return true;
	}		
}

function goBack() {
	window.location = document.referrer;
}

function Datecompare(S1, S2) {
	X = replaceAll (S1.value, "-", "");
	Y = replaceAll (S2.value, "-", "");
	if (X>Y && X!="" && Y!=""){
		alert("Your date values do not make chronological sense.\nPlease fix and try again.");		
 		return false;
 	} else {
 		return true;
	}
 }


function limitOptions(item,max) {
	var selectCount = 0;
	if(item.type=="select") {
		var totalOptions = item.length;
		for (var i = 0; i < totalOptions; i++) {
			if (item.options[i].selected) {
				selectCount = selectCount +1;
				if (selectCount > max) {
					alert("Your package only allows for " + max + " selection(s).");
				item.options[i].selected = false;
				}
			}
		}
	}
	if(item.type=="checkbox") {
		var formobj = item.form;
		for (var i=0; i < formobj.length; i++) {
			var elementobj = formobj.elements[i];
			if(elementobj.name==item.name && elementobj.checked) {
				selectCount = selectCount + 1;
				if(selectCount > max) {
					alert("Your package only allows for " + max + " selection(s).");
					elementobj.checked = false;
				}
			}
		}
	}
}


function popUp(mypage,myname,w,h,pos,menu,scrollbars){
	if(pos=="random"){
		LeftPosition=(screen.width)?Math.floor(Math.random()*(screen.width-w)):100;
		TopPosition=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;
	}
	if(pos=="center"){
		LeftPosition=(screen.width)?(screen.width-w)/2:100;
		TopPosition=(screen.height)?(screen.height-h)/2:100;
	}
	else if((pos!="center" && pos!="random") || pos==null){
	LeftPosition=0;
	TopPosition=20;
	}
	
	if(menu==""){
		menu="no";
	}
	if(scrollbars==""){
		scrollbars="no";
	}

	settings='width='+w+',height='+h+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scrollbars+',location=no,directories=no,status=no,menubar='+menu+',toolbar=no,resizable=no';
	win=window.open(mypage,myname,settings);
	win.focus();
	//return win;
	
}

function popUpClose(currentObject, myWindow) {
	alert( currentObject.toString() );
}

function validCCN(inCCN) {         
      if (inCCN == "") {            
          return true         
      }         
      if (inCCN.length <=14) {      
         return false         
      }            
      if (inCCN.length >=17) {            
         return false         
      }            
      if (isNum(inCCN)) {            
      return true         
      }                  
      return false   
   }

function validEmail(email,blankallowed) {
         invalidChars = " /:,;"
   
         if (email=="" && blankallowed=="no") {
            alert("Your email address appears to be blank.\nPlease re-enter your email address.");
            return false
         }
         for (i=0; i<invalidChars.length; i++) {
             badChar = invalidChars.charAt(i)
             if (email.value.indexOf(badChar,0) > -1) {
                alert("Your email address appears to contain invalid characters.\nPlease re-enter your email address.");
                return false
             }
         }
         atPos = email.value.indexOf("@",1)
          if (atPos == -1 && blankallowed=="no") {
            alert("Your email address does not appear to be valid.\nPlease re-enter your email address.");
            return false
         }
         if (email.value.indexOf("@",atPos+1) > -1) {
            alert("Your email address does not appear to be valid.\nPlease re-enter your email address.");
            return false
         }
         periodPos = email.value.indexOf(".",atPos)
         if (periodPos == -1 && blankallowed=="no") {
            alert("Your email address does not appear to be valid.\nPlease re-enter your email address.");
            return false
         }
         if (email.value.charAt(periodPos+1) == ".") {
            alert("Your email address does not appear to be valid.\nPlease re-enter your email address.");
            return false
         }
         if (periodPos+3 > email.length)   {
            alert("Your email address does not appear to be valid.\nPlease re-enter your email address.");
            return false
         }
         return true
      }

// Check to see if the string passed in is a valid time.
// A valid time is defined as a string which is postfixed with either
// "PM" or "AM".  Next it checks to see if there is a colon in the
// string.  If there is, it makes sure that at least one digit preceeds
// it and two proceed it.

	function IsTime(strTime) {
		var strTestTime = new String(strTime);
		strTestTime.toUpperCase();

		var bolTime = false;

		if (strTestTime.indexOf("PM",1) != -1 || strTestTime.indexOf("AM",1))
			bolTime = true;

		if (bolTime && strTestTime.indexOf(":",0) == 0)
			bolTime = false;

		var nColonPlace = strTestTime.indexOf(":",1);
		if (bolTime && ((parseInt(nColonPlace) + 5) < (strTestTime.length - 1) || (parseInt(nColonPlace) + 4) > (strTestTime.length - 1)))
			bolTime = false;


		return bolTime;
	}

// This function can replace all instances of a string(fromStr)
// with another string (toStr) wihin a given string(s)

function replaceAll (s, fromStr, toStr) {
	var new_s = s;
	for (i = 0; i < 100 && new_s.indexOf (fromStr) != -1; i++)
	{
		new_s = new_s.replace (fromStr, toStr);
	}
	return new_s;
}


// Since we are using the single tick mark as the
// string delimiter to construct our SQL queries, a string with
// a tick mark in it will cause a SQL error.  Therefore we replace
// all "'" with "''", which eliminates the possibility of a SQL error.

function sqlSafe (s) {
	var new_s = s;
	new_s = replaceAll (new_s, "'", "|");
	new_s = replaceAll (new_s, "|", "''");
	new_s = replaceAll (new_s, "\"", "|");
	new_s = replaceAll (new_s, "|", "''");
	return new_s;
	}

function makeSafe (i) {
	i.value = sqlSafe (i.value);
}


// Check whether string s is empty.
// Returns true if string s is empty or 
// whitespace characters only.

function isEmpty(s) {
	return ((s == null) || (s.length == 0))
	}

function isWhitespace (s) {
    var i;

    // Is s empty?
    if (isEmpty(s)) return true;

    // Search through string's characters one by one
    // until we find a non-whitespace character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
	// Check that current character isn't whitespace.
	var c = s.charAt(i);

	if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}

// Checks to see if a required field is blank.
// This utilizes the isWhitespace and isEmpty functions
// If it is, a warning message is displayed...

function ForceEntry(objField, FieldName) {
	var strField = new String(objField.value);
	if (isWhitespace(strField)) {
		alert("You need to enter information for " + FieldName);
		objField.focus();
		objField.select();
		return false;
	}

	return true;
}
		
// Returns true if the string passed in is a valid number
//  (no alpha characters), else it displays an error message

function ForceNumber(objField, FieldName)
{
	var strField = new String(objField.value);
	
	if (isWhitespace(strField)) return true;

	var i = 0;

	for (i = 0; i < strField.length; i++)
		if (strField.charAt(i) < '0' || strField.charAt(i) > '9') {
			alert(FieldName + " must be a valid numeric entry.  Please do not use commas or dollar signs or any non-numeric symbols.");
			objField.focus();
			return false;
		}

	return true;
}

// Returns true if the string passed in is a valid money
// (no alpha characters except a decimal place), 
// else it displays an error message

function ForceMoney(objField, FieldName)
{
	var strField = new String(objField.value);
	
	if (isWhitespace(strField)) return true;

	var i = 0;

	for (i = 0; i < strField.length; i++)
		if ((strField.charAt(i) < '0' || strField.charAt(i) > '9') && (strField.charAt(i) != '.')) {
			alert(FieldName + " must be a valid numeric entry.  Please do not use commas or dollar signs or any non-numeric symbols.");
			objField.focus();
			return false;
		}

	return true;
}


// Right trims a string...  Useful for SQL datatypes of CHAR

function RTrim(strTrim)
{
	var str = new String(strTrim);
	var i = 0;
	var c = "";
	var endpos = 0

	for (i = str.length; i >= 0 && endpos == 0; i = i - 1) {
		c = str.charAt(i);
		if (whitespace.indexOf(c) == -1)
			endpos = i;
	}

	return str.substring(0,endpos+1);
}

// Returns true if the string is a valid date number.
// A method is passed in (1 = month, 2 = day).  If the string is
// nonnumeric, false is passed back.  If the day in the date string
// is greater than 31, false is returned.  If the month is greater
// than 12, an error is returned.

function isDateNumber(strNum,method)
{
	var str = new String(strNum);
	var i = 0;

	if (isNaN(parseInt(str)) || parseInt(str) < 0) return false;

	if (method == 2)
		if (parseInt(str) > 31)
			return false;
	if (method == 1)
		if (parseInt(str) > 12)
			return false;

	for (i = 0; i < str.length; i++)
		if (str.charAt(i) < '0' || str.charAt(i) > '9')
			return false;


	return true;
}

// Displays an alert box with the passed in string...

function PromptErrorMsg(Field,strError)
{
	alert("You have entered an invalid date for " + strError + ".  Please make sure your date format is in M/D/Y format.");
	Field.focus();
}


// PURPOSE: Checks to see if the string is a valid date.  A valid
// date is defined as any of the following:
// MM/DD/YY, MM/DD/YYYY, M/D/YY, M/D/YYYY,
// MM-DD-YY, MM-DD-YYYY, M-D-YY, M-D-YYYY

function ForceDate(strDate,strField)
{
	var str = new String(strDate.value);

	if (isWhitespace(str)) {
		return true;
		// if the field is empty, just return true...
	}

	var i = 0, count = str.length, j = 0;
	while ((str.charAt(i) != "/" && str.charAt(i) != "-") && i < count)
		i++;

	if (i == count || i > 2) {
		PromptErrorMsg(strDate,strField);
		return false;
	}

	var addOne = false;
	if (i == 2) addOne = true;

	if (!isDateNumber(str.substring(0,i),1)) {
		PromptErrorMsg(strDate,strField);
		return false;
	}

	j = i+1;
	i = 0;

	while ((str.charAt(i+j) != "/" && str.charAt(j+i) != "-") && i+j < count)
		i++;

	if (i+j == count || i > 2) {
		PromptErrorMsg(strDate,strField);
		return false;
	}

	if (!isDateNumber(str.substring(j,i+j),2)) {
		PromptErrorMsg(strDate,strField);
		return false;
	}

	j = i+3;
	i = 0;

	if (addOne) j++;

	while (i+j < count)
		i++;


	if (i != 2 && i != 4) {
		PromptErrorMsg(strDate,strField);
		return false;
	}

	if (!isDateNumber(str.substring(j,i+j),3)) {
		PromptErrorMsg(strDate,strField);
		return false;
	}

	return true;
}

// This function determines if the string passed in is a valid
// US zip code.  It accepts either ##### or #####-####.  If the
// string is valid, it returns true, else false.

function isZipcode(strZip)
{
	var s = new String(strZip);

	if (s.length != 5 && s.length != 10)
		// inappropriate length
		return false;


	for (var i=0; i < s.length; i++)
		if ((s.charAt(i) < '0' || s.charAt(s) > '9') && s.charAt(i) != '-')
			return false;

	return true;
}

// This function ensures that a field is less than or equal to the
// Length passed in.  You must call this function with the element
// name in your form (for example: "ForceLength(document.forms[0].txtElement)"
// as opposed to "ForceLength(document.forms[0].txtElement.value)"
// If the field's value is too large, an error message is displayed
// and false is returned, else true is returned.

function ForceLength(objField, nLength, strWarning) {
	var strField = new String(objField.value);

	if (strField.length > nLength) {
		alert(strWarning);
		return false;
	} else
		return true;
}