
// Checks whether a field contains numeric data.
// *******************************************************
function isNum(theField) {
	return ! isNaN(theField.value);

//	var x = theField.value;
//	var z = 0;
//	var valid = "1234567890.-";
//	
//	for (var i=0; i< x.length; i++) {
//		temp = "" + x.substring(i, i+1);
//		if (valid.indexOf(temp) == "-1") z=1;
//	}
//	if (z==1){	
//		return false;
//	}
//	else{
//		return true;
//	}
}

// Checks whether a field contains date data.
// *******************************************************
function isDate(theField) {
	var x = theField.value;
	var z = 0;
	var err = true;
	var valid = "0123456789/";
	var validyear = "1234567890";
	var temp;
	if (x.length == 0) return true;
	for (var i=0; i< x.length; i++) {
		temp = "" + x.substring(i, i+1);
		if (valid.indexOf(temp) == "-1") err = false;
	}
	if (x.length > 10) err=false
	
	//Determine if only one slash has been entered
	var test1 = x.indexOf("/");
	var test2 = x.lastIndexOf("/");
	if (test1 == test2) err = false
	
	//Make sure there are not more than 2 slashes
	var test3 = x.indexOf("/",test1 + 1);
	if (test2 != test3) err = false;
	
	m = x.substring(0, x.indexOf("/")) // month
	d = x.substring(x.indexOf("/")+1, x.lastIndexOf("/")) // day
	y = x.substring(x.lastIndexOf("/")+1, x.length) // year
	if (m<1 || m>12) err = false
	if (d<1 || d>31) err = false
	if (y.length <2 || y.length==3 || y.length>4) err = false
	if (m==4 || m==6 || m==9 || m==11){
		if (d==31) err=false
	}
	if (m==2){
		var g=parseInt(y/4)
		if (isNaN(g)) {
			err=false
		}
		if (d>29) err=false
		if (d==29) {
			if ((y/4)!=parseInt(y/4)) {
				err = false;
			} else {
				if ((y/100)==parseInt(y/100)) {
					if ((y/1000)!=parseInt(y/1000)) {
						err = false;
					}
				}
			}
		}
		//if (d==29 && ((y/4)!=parseInt(y/4)) &&  ( (y/100)=parseInt(y/100) && (y/1000)!=parseInt(y/1000) ) ) err=false
	}
	
	if (x.length == 4) {
		
		err = false;
	//	err = true;
	//	for (var i=0; i< x.length; i++) {
	//	temp = "" + x.substring(i, i+1);
	//	if (validyear.indexOf(temp) == -1) err = false;
	//	}
	}
	
	if (err == false) {	
		return false;
	}
	else{
		return true;
	}
}

// Checks whether a field contains null data.
// *******************************************************
function isNull(theField) {
	var x = theField.value;
	var z = 0;
	if (x == ""){
		return true;
	}
	else{
		return false;
	}
}	


// Example function to confirm a delete.
// *******************************************************
function confirmdelete(form, element) {
 //confirm deletion of records
  if (confirm("Are you sure you want to delete this " + element +" from the database? You will not be able to undo your changes.  Click OK to delete or Cancel.")) 
	{
      // OK they want to delete records
	    form.submit();
     	}
   else 
	{
   //Do nothing
	return;
  	}
}

// Checks whether a set of fields contain values that fall between 
// two other values.
// *******************************************************
function checkRangeFields(theForm,theField,theFieldName,value1,value2,bInclusive) {
	var fieldCheck   = true;
	var fieldsNeeded = "\nThe following field(s) must be in the range "+value1+"-"+value2;
	if (bInclusive == true) {
		fieldsNeeded += " (Inclusive)";
	}
	fieldsNeeded += ".\n\n\t";

	for(var fieldNum=0; fieldNum < theField.length; fieldNum++) {
		if (theForm.elements[theField[fieldNum]].value != "") {
			if (bInclusive == true) {
				if (theForm.elements[theField[fieldNum]].value < value1) {
					fieldsNeeded += theFieldName[fieldNum] + "\n\t";
					fieldCheck = false;
				}
				if (theForm.elements[theField[fieldNum]].value > value2) {
					fieldsNeeded += theFieldName[fieldNum] + "\n\t";
					fieldCheck = false;
				}
			} else {
				if (theForm.elements[theField[fieldNum]].value <= value1) {
					fieldsNeeded += theFieldName[fieldNum] + "\n\t";
					fieldCheck = false;
				}
				if (theForm.elements[theField[fieldNum]].value >= value2) {
					fieldsNeeded += theFieldName[fieldNum] + "\n\t";
					fieldCheck = false;
				}
			}		
		}
	}

	if (fieldCheck == true) {
		// ALL FIELDS HAVE BEEN ENTERED CORRECTLY
		return true;
	}
	else {
		// SOME FIELDS HAVE BEEN ENTERED INCORRECTLY
		window.alert(fieldsNeeded);
		return false;
	}
}


// Checks whether a set of fields contain numeric data.
// *******************************************************
function checkNumericFields(theForm,theField,theFieldName) {
	var fieldCheck   = true;
	var fieldsNeeded = "\nOnly numeric values are allowed in the following field(s):\n\n\t";

	for(var fieldNum=0; fieldNum < theField.length; fieldNum++) {
		if (isNum(theForm.elements[theField[fieldNum]]) == false) {
			fieldsNeeded += theFieldName[fieldNum] + "\n\t";
			fieldCheck = false;
		}
	}

	if (fieldCheck == true) {
		// ALL NUMERIC FIELDS HAVE BEEN ENTERED CORRECTLY
		return true;
	}
	else {
		// SOME NUMERIC FIELDS HAVE BEEN ENTERED INCORRECTLY
		window.alert(fieldsNeeded);
		return false;
	}
}

// Checks whether a set of fields contain date data.
// *******************************************************
function checkDateFields(theForm,theField,theFieldName) {
	var fieldCheck   = true;
	var fieldsNeeded = "\nOnly date values are allowed in the following field(s):\n\n\t";

	for(var fieldNum=0; fieldNum < theField.length; fieldNum++) {
		if (isDate(theForm.elements[theField[fieldNum]]) == false) {
			fieldsNeeded += theFieldName[fieldNum] + "\n\t";
			fieldCheck = false;
		}
	}

	if (fieldCheck == true) {
		// ALL NUMERIC FIELDS HAVE BEEN ENTERED CORRECTLY
		return true;
	}
	else {
		// SOME NUMERIC FIELDS HAVE BEEN ENTERED INCORRECTLY
		window.alert(fieldsNeeded);
		return false;
	}
}


// checkZIPCode (TEXTFIELD theForm, TEXTFIELD theField , TEXTFIELD FieldName)
//
// Check that string theForm.elements[theField].value is a valid ZIP code.
// FieldName is the textual description that will appeart
// in the message for invalid data.

function checkZIPCode (theForm, theField, theFieldName)
{  
	// U.S. ZIP codes have 5 or 9 digits.
	// They are formatted as 12345 or 12345-6789.
	var digitsInZIPCode1 = 5
	var digitsInZIPCode2 = 9

	// non-digit characters which are allowed in ZIP Codes
	var ZIPCodeDelimiter = "-";

    var normalizedZIP = stripCharsInBag(theForm.elements[theField].value, ZIPCodeDelimiter)
    
    if (!((normalizedZIP.length == digitsInZIPCode1) ||
             (normalizedZIP.length == digitsInZIPCode2))){
			
		alert(theFieldName + " must be a 5 or 9 digit US ZIP Code (like 94043). Please reenter it now.")	        
		return false;
    }
    else 
    { 
		return true;
     
    }
    
}

// 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;
}


// Checks whether a set of fields contain valid ten digits phone numbers.
// *******************************************************
function checkUSPhone(theForm,theField,theFieldName) {
	var fieldCheck   = true;
	var fieldsNeeded = "\nOnly valid ten digit phone numbers are allowed in the following field(s):\n\n\t";
	var digitsInUSPhoneNumber = 10;
	
	for(var fieldNum=0; fieldNum < theField.length; fieldNum++) {
		
		if ((theForm.elements[theField[fieldNum]].length) != digitsInUSPhoneNumber) {
			fieldsNeeded += theFieldName[fieldNum] + "\n\t";
			fieldCheck = false;
		}
	}

	if (fieldCheck == true) {
		// ALL NUMERIC FIELDS HAVE BEEN ENTERED CORRECTLY
		return true;
	}
	else {
		// SOME NUMERIC FIELDS HAVE BEEN ENTERED INCORRECTLY
		window.alert(fieldsNeeded);
		return false;
	}
}
// Check Required Fields - Ensure that a value has been entered for
//  every field listed in the "requiredFields" array.
//
// To Use:  Make sure you populate the following variables:
//
// Enter the name (or partial name) of every field in your form:
//  that must have a value (Case-Sensitive)
// var requiredFields = new Array("userid",
//                                "password");
//
// Text to display that describes the missing field(s) to the user:
//    var fieldNames = new Array("User ID",
//                               "Password");
//
function checkRequiredFields(input, requiredFields, fieldNames)
{
    var fieldCheck   = true;
    var fieldsNeeded = "\nA value must be entered in the following field(s):\n\n\t";
    for(var fieldNum=0; fieldNum < requiredFields.length; fieldNum++) {
        if ((input.elements[requiredFields[fieldNum]].value == "") ||
            (input.elements[requiredFields[fieldNum]].value == " ")) {

            fieldsNeeded += fieldNames[fieldNum] + "\n\t";
            fieldCheck = false;
        }
    }

    // ALL REQUIRED FIELDS HAVE BEEN ENTERED
    if (fieldCheck == true)
    {
        return true;
    }
    // SOME REQUIRED FIELDS ARE MISSING VALUES
    else
    {
        window.alert(fieldsNeeded);
        return false;
    }
}

function checkUniqueFields(input, UniqueFields, ColName)
{
	var uniqueNeeded = "\nAll values must be unique in the following column(s):\n\n\t";
    var uniqueCheck = true; 
    var check1, check2;
    
    for(var fieldNum=0; fieldNum < UniqueFields.length; fieldNum++) {
		var fieldNum2 = fieldNum;
		fieldNum2++;
		for(fieldNum2=fieldNum2; fieldNum2 < UniqueFields.length; fieldNum2++) {
			check1 = input.elements[UniqueFields[fieldNum]].value;
			check2 = input.elements[UniqueFields[fieldNum2]].value;
			if ((trim(check1) != "") && (trim(check2) != "")) {
				if ((input.elements[UniqueFields[fieldNum]].value) == (input.elements[UniqueFields[fieldNum2]].value)) {
					uniqueCheck = false;
				}
			}
        }
    }

    // ALL UNIQUE FIELDS HAVE BEEN ENTERED
    if (uniqueCheck == true)
    {
        return true;
    }
    // SOME REQUIRED FIELDS ARE MISSING VALUES
    else
    {
		uniqueNeeded += ColName + "\n\t";
        window.alert(uniqueNeeded);
        return false;
    }
}

function checkDecimals(theForm,theField,theFieldName) 
{
	var fieldCheck   = true;
	var fieldsNeeded = "\nPlease enter a number without a Decimal in the following field(s):\n\n\t";
	var decallowed = 0;  // how many decimals are allowed?
	
	for(var fieldNum=0; fieldNum < theField.length; fieldNum++) 
	{
		if (theForm.elements[theField[fieldNum]].value.indexOf('.') > 0) {
		fieldsNeeded += theFieldName[fieldNum] + "\n\t";
			fieldCheck   = false;
		}
		
	}
	
	// ALL REQUIRED FIELDS HAVE BEEN ENTERED
	if (fieldCheck == true)
	{
	return true;
	}
	// SOME REQUIRED FIELDS ARE MISSING VALUES
	else
	{
		window.alert(fieldsNeeded);
		return false;
	}
}
