var digits = "0123456789";

function checkTime(timeStr) {
// Checks if time is in HH:MM:SS AM/PM format.
// The seconds and AM/PM are optional.
// Do not sweat the blanks
if (timeStr.value==""){
	return true;
}

var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;

var matchArray = timeStr.value.match(timePat);

if (matchArray == null) {
	alert("Time is not in a valid format.");
	timeStr.focus();
	timeStr.select();
	return false;
}

hour = matchArray[1];
minute = matchArray[2];
second = matchArray[4];
ampm = matchArray[6];

if (second=="") { second = null; }
if (ampm=="") { ampm = null }
if (hour < 0  || hour > 23) {
	alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
	timeStr.select();
	timeStr.focus();
	return false;
}

if (hour <= 12 && ampm == null) {
	if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
		if (confirm("Please indicate AM or PM.  OK = AM, Cancel = PM")){
			timeStr.value = timeStr.value + " AM";
		}
		else {
			timeStr.value = timeStr.value + " PM";	
		}	
	}
}

if  (hour > 12 && ampm != null) {
	alert("You cannot specify AM or PM for military time.");
	timeStr.select();
	timeStr.focus();
	return false;
}

if (minute<0 || minute > 59) {
	alert ("Minute must be between 0 and 59.");
	timeStr.select();
	timeStr.focus();
	return false;
}

if (second != null && (second < 0 || second > 59)) {
	alert ("Second must be between 0 and 59.");
	timeStr.select();
	timeStr.focus();
	return false;
}

//return false;
}
function checkDate(dateField, errMsg, fmt) {
      // Default error message
      if (errMsg == "" || errMsg == null){errMsg = "Invalid Date. \nPlease try again";}
      // Default format
      if (fmt == "" || fmt == null){fmt = 8;}
      var ds = dateField.value;
      // bail if the date parameter is empty
      if (ds == "")
         return true;

      // declare local variables
      var n = 10;   // the Y2K offset in years
      var today = new Date();
      var err = 0;  // error flag
      var month = "";
      var d;
      var m;
      var y;
      var p1 = 0;
      var p2 = 0;
      var dd = 0;
      var mm = 0;
      var yy = (today.getYear() < 1900) ? today.getYear() + 1900 : today.getYear();

      var e = errMsg;
      if (errMsg == "") {
         // default error message if second parameter is empty
         e = "Invalid date! Please re-enter using a standard format...";
      }

      // strip leading and trailing spaces
      while (ds.charAt(0) == " ") {
            ds = ds.substring(1,ds.length);
            dateField.value = ds;
      }
      while (ds.charAt(ds.length-1) == " ") {
            ds = ds.substring(0,ds.length-1);
            dateField.value = ds;
      }

      // handle common data-entry shortcuts
      if (ds == "t" || ds == "today" || ds == "0") {
            dd = today.getDate();
            mm = today.getMonth() + 1;
            ds = mm + "/" + dd + "/" + yy;
      }
      else if (ds.length < 3 && isNum(ds)) {
         // try as a date in the current month and year
         if (parseInt(ds) < 32) {
            dd = ds;
            mm = today.getMonth() + 1;
            ds = mm + "/" + dd + "/" + yy;
         }
      }
      else if (ds.length == 3 && monthToNum(ds) > 0) {
         // assume it's a month string, set date as 1st
         dd = 1;
         mm = monthToNum(ds);
         ds = mm + "/" + dd + "/" + yy;
      }
      else if (ds.length == 4 && isNum(ds)) {
         if (parseInt(ds) > 1231) {
            // assume it's a year [yyyy], set date to 1st January
            dd = 1;
            mm = 1;
            yy = ds;
            ds = mm + "/" + dd + "/" + yy;
         } else {
            // assume it's a month and day [mmdd], set year as current
            dd = ds.substring(2);
            mm = ds.substring(0,2);
            ds = mm + "/" + dd + "/" + yy;
         }
      }
      else if (ds.length>4 && ds.length<7 && monthToNum(ds.substring(0,3))>0 && ds.indexOf(" ",0)>0) {
         // assume it's a month and day (mmm d[d]), set year as current
         p1 = ds.indexOf(" ");   // position of space
         dd = ds.substring(p1+1,ds.length);
         mm = monthToNum(ds.substring(0,3));
         ds = mm + "/" + dd + "/" + yy;
      }
      else if (ds.length>2 && ds.length<6 && ds.indexOf("/",0)>0 && ds.indexOf("/",0)==ds.lastIndexOf("/")) {
         // assume it's a month and day (mm/dd), set year as current
         p1 = ds.indexOf("/");   // position of slash
         mm = ds.substring(0,p1);
         dd = ds.substring(p1+1,p1+3);
         if (dd.charAt(0) == "0") dd = dd.substring(1,2);
         if (mm.charAt(0) == "0") mm = mm.substring(1,2);
         ds = mm + "/" + dd + "/" + yy;
      }
      else if (ds.length>2 && ds.length<6 && ds.indexOf(" ",0)>0 && ds.indexOf(" ",0)==ds.lastIndexOf(" ")) {
         // assume it's a month and day (mm dd), set year as current
         p1 = ds.indexOf(" ");   // position of space
         mm = ds.substring(0,p1);
         dd = ds.substring(p1+1,p1+3);
         if (dd.charAt(0) == "0") dd = dd.substring(1,2);
         if (mm.charAt(0) == "0") mm = mm.substring(1,2);
         ds = mm + "/" + dd + "/" + yy;
      }
      else if (ds.length>2 && ds.length<6 && ds.indexOf("-",0)>0 && ds.indexOf("-",0)==ds.lastIndexOf("-")) {
         // assume it's a day and month (dd-mm), set year as current
         p1 = ds.indexOf("-");   // position of dash
         dd = ds.substring(0,p1);
         mm = ds.substring(p1+1,ds.length);
         if (dd.charAt(0) == "0") dd = dd.substring(1,2);
         if (mm.charAt(0) == "0") mm = mm.substring(1,2);
         ds = mm + "/" + dd + "/" + yy;
      }

      if (ds.indexOf("-",0)>0 && ds.indexOf("-",0)<3) {
         // test for DD-MMM-YYYY standard format
         if (ds.length == 11 && ds.indexOf("-",0) == 2 && ds.lastIndexOf("-") == 6) {
            dd = ds.substring(0,2);
            mm = monthToNum(ds.substring(3,6));
            yy = ds.substring(7,11);
            if (dd.charAt(0) == "0") dd = dd.substring(1,2);
            if (isNum(mm+dd+yy)) {
               ds = mm + "/" + dd + "/" + yy;
            }
            else {
               mm = 0;
               dd = 0;
               yy = 0;
            }
         }
         // test for DD-MMM-YY abbreviated format
         else if (ds.length == 9 && ds.indexOf("-",0) == 2 && ds.lastIndexOf("-") == 6) {
            dd = ds.substring(0,2);
            mm = monthToNum(ds.substring(3,6));
            yy = (parseInt(ds.substring(7,9))<n) ? ("20" + ds.substring(7,9)) : ("19" + ds.substring(7,9));
            if (dd.charAt(0) == "0") dd = dd.substring(1,2);
            if (isNum(mm+dd+yy)) {
               ds = mm + "/" + dd + "/" + yy;
            }
            else {
               mm = 0;
               dd = 0;
               yy = 0;
            }
         }
         // test for DD-MM-YY[YY] format
         else {
            p1 = ds.indexOf("-");   // position of first dash
            dd = ds.substring(0,p1);
            p2 = ds.lastIndexOf("-");   // position of last dash
            mm = ds.substring(p1+1,p2);
            yy = ds.substring(p2+1,ds.length);
            if (dd.charAt(0) == "0") dd = dd.substring(1,2);
            if (mm.charAt(0) == "0") mm = mm.substring(1,2);
            if (yy.length > 4) yy = yy.substring(0,4);
            if (dd==0 || mm==0) {
                  mm = 0;
                  dd = 0;
                  yy = 0;
            }
            else {
               if (yy == "0" || yy == "00" || yy == "000") yy = "2000";
               while (yy.substring(0,1)=="0") {
                  yy = yy.substring(1,yy.length);  // remove leading zeroes
               }
               if (yy == "") yy = (today.getYear() < 1900) ? today.getYear() + 1900 : today.getYear();
               if (isNum(mm+dd+yy)) {
                  if (yy > 0 && yy < 100) {
                     yy = (yy < n) ? (2000 + parseInt(yy)) : (1900 + parseInt(yy));
                  }
                  ds = mm + "/" + dd + "/" + yy;
               }
               else {
                     mm = 0;
                     dd = 0;
                     yy = 0;
               }
            }
         }
      }

      // test for MMDDYY patterned formats
      else if (ds.length == 6 && isNum(ds)) {
         dd = ds.substring(2,4);
         mm = ds.substring(0,2);
         yy = ds.substring(4,6);
         if (dd.charAt(0) == "0") dd = dd.substring(1,2);
         if (mm.charAt(0) == "0") mm = mm.substring(1,2);
         if (yy.charAt(0) == "0") yy = yy.substring(1,2);
         if (yy == "0" || yy == "00") yy = "2000";
         if (yy > 0 && yy < 100) {
            yy = (yy < n) ? (2000 + parseInt(yy)) : (1900 + parseInt(yy));
         }
         ds = mm + "/" + dd + "/" + yy;
      }

      // test for MMDDYYYY patterned formats
      else if (ds.length == 8  && isNum(ds)) {
         dd = ds.substring(2,4);
         mm = ds.substring(0,2);
         yy = ds.substring(4,8);
         if (yy == "0" || yy == "00" || yy == "000") yy = "2000";
         if (dd.charAt(0) == "0") dd = dd.substring(1,2);
         if (mm.charAt(0) == "0") mm = mm.substring(1,2);
         ds = mm + "/" + dd + "/" + yy;
      }

      // convert year 2K+ for MM/DD/YY[YY] pattern formats
      else if (ds.indexOf("/",0) > 0 && (ds.length-ds.lastIndexOf("/")) < 6) {
         p1 = ds.indexOf("/");   // position of first slash
         mm = ds.substring(0,p1);
         p2 = ds.lastIndexOf("/");   // position of last slash
         dd = ds.substring(p1+1,p2);
         yy = ds.substring(p2+1,ds.length);
         if (dd.charAt(0) == "0") dd = dd.substring(1,2);
         if (mm.charAt(0) == "0") mm = mm.substring(1,2);
         if (yy.length > 4) yy = yy.substring(0,4);
         if (yy == "0" || yy == "00" || yy == "000") yy = "2000";
         while (yy.substring(0,1)=="0") {
            yy = yy.substring(1,yy.length);  // remove leading zeroes
         }
         if (yy == "") yy = (today.getYear() < 1900) ? today.getYear() + 1900 : today.getYear();
         if (isNum(mm+dd+yy)) {
            if (yy > 0 && yy < 100) {
               yy = (yy < n) ? (2000 + parseInt(yy)) : (1900 + parseInt(yy));
            }
            ds = mm + "/" + dd + "/" + yy;
         }
         else {
               mm = 0;
               dd = 0;
               yy = 0;
         }
      }

      // convert year 2K+ for MM.DD.YY[YY] pattern formats
      else if (ds.indexOf(".",0) > 0 && (ds.length-ds.lastIndexOf(".")) < 6) {
         p1 = ds.indexOf(".");   // position of first dot
         mm = ds.substring(0,p1);
         p2 = ds.lastIndexOf(".");   // position of last dot
         dd = ds.substring(p1+1,p2);
         yy = ds.substring(p2+1,ds.length);
         if (dd.charAt(0) == "0") dd = dd.substring(1,2);
         if (mm.charAt(0) == "0") mm = mm.substring(1,2);
         if (yy.length > 4) yy = yy.substring(0,4);
         if (yy == "0" || yy == "00" || yy == "000") yy = "2000";
         while (yy.substring(0,1)=="0") {
            yy = yy.substring(1,yy.length);  // remove leading zeroes
         }
         if (yy == "") yy = (today.getYear() < 1900) ? today.getYear() + 1900 : today.getYear();
         if (isNum(mm+dd+yy)) {
            if (yy > 0 && yy < 100) {
               yy = (yy < n) ? (2000 + parseInt(yy)) : (1900 + parseInt(yy));
            }
            ds = mm + "/" + dd + "/" + yy;
         }
         else {
               mm = 0;
               dd = 0;
               yy = 0;
         }
      }

      // validate the standard space-delimited formats
      else if (ds.indexOf(" ",0)>0 && (ds.length-ds.lastIndexOf(" "))<6) {
         if (ds.indexOf(",",0) > 0) {
            // validate 'mmm[...] dd, yy[yy]' type formats
            p1 = ds.indexOf(" ");   // position of first space
            mm = monthToNum(ds.substring(0,3));
            dd = ds.substring(p1+1,ds.indexOf(",",0));
            p2 = ds.lastIndexOf(" ");   // position of last space
            yy = ds.substring(p2+1,ds.length);
            if (dd.charAt(0) == "0") dd = dd.substring(1,2);
            if (yy.length > 4) yy = yy.substring(0,4);
            if (yy == "0" || yy == "00" || yy == "000") yy = "2000";
            while (yy.substring(0,1)=="0") {
               yy = yy.substring(1,yy.length);  // remove leading zeroes
            }
            if (yy == "") yy = (today.getYear() < 1900) ? today.getYear() + 1900 : today.getYear();
            if (isNum(mm+dd+yy)) {
               if (yy > 0 && yy < 100) {
                  yy = (yy < n) ? (2000 + parseInt(yy)) : (1900 + parseInt(yy));
               }
               ds = mm + "/" + dd + "/" + yy;
            }
            else {
               mm = 0;
               dd = 0;
               yy = 0;
            }
         }

         else if (monthToNum(ds.substring(ds.indexOf(" ")+1,ds.indexOf(" ")+4))>0) {
            // validate 'dd mmm[...] yy[yy]' type formats
            p1 = ds.indexOf(" ");   // position of first space
            dd = ds.substring(0,p1);
            if (dd.charAt(0) == "0") dd = dd.substring(1,2);
            p2 = ds.lastIndexOf(" ");   // position of last space
            mm = monthToNum(ds.substring(p1+1,p1+4));   // extract 3 bytes for month
            yy = ds.substring(p2+1,ds.length);
            if (yy.length > 4) yy = yy.substring(0,4);
            if (yy == "0" || yy == "00" || yy == "000") yy = "2000";
            while (yy.substring(0,1) == "0") {
               yy = yy.substring(1,yy.length);  // remove leading zeroes
            }
            if (yy == "") yy = (today.getYear() < 1900) ? today.getYear() + 1900 : today.getYear();
            if (isNum(mm+dd+yy)) {
               if (yy > 0 && yy < 100) {
                  yy = (yy < n) ? (2000 + parseInt(yy)) : (1900 + parseInt(yy));
               }
               ds = mm + "/" + dd + "/" + yy;
            }
            else {
               mm = 0;
               dd = 0;
               yy = 0;
            }
         }

         // validate 'MM DD YY[YY]' formats
         else {
            p1 = ds.indexOf(" ");   // position of first space
            mm = ds.substring(0,p1);
            p2 = ds.lastIndexOf(" ");   // position of last space
            dd = ds.substring(p1+1,p2);
            yy = ds.substring(p2+1,ds.length);
            if (dd.charAt(0) == "0") dd = dd.substring(1,2);
            if (mm.charAt(0) == "0") mm = mm.substring(1,2);
            if (yy.length > 4) yy = yy.substring(0,4);
            if (yy == "0" || yy == "00" || yy == "000") yy = "2000";
            while (yy.substring(0,1)=="0") {
               yy = yy.substring(1,yy.length);  // remove leading zeroes
            }
            if (yy == "") yy = (today.getYear() < 1900) ? today.getYear() + 1900 : today.getYear();
            if (isNum(mm+dd+yy)) {
               if (yy > 0 && yy < 100) {
                  yy = (yy < n) ? (2000 + parseInt(yy)) : (1900 + parseInt(yy));
               }
               ds = mm + "/" + dd + "/" + yy;
            }
            else {
               mm = 0;
               dd = 0;
               yy = 0;
            }
         }
      }

      // attempt to parse any other dates with valid IETF formats
      if (dd==0 && mm==0 && yy==0) {
         d = new Date(Date.parse(ds));
         dd = d.getDate();
         mm = (d.getMonth() + 1);
         // Netscape returns last 2 digits of years 1900-1999,
         // and the full year (4 char) string for dates > 2000 or < 1900;
         // IE returns 1900 minus the current year in all cases,
         // <duh> except IE3, when the year is earlier than 1970 </duh>
         if (d.getYear() > 2000) {
            yy = d.getYear();  // Netscape
         }
         else if (d.getYear() < 1900 && d.getYear() > 200) {
            yy = d.getYear();  // Netscape, date prior to 1900
         }
         else {
            yy = d.getYear() + 1900;
         }
         if (dd == 31 && mm == 12 && yy == 1969) {
            // IE's start-epoch date
            mm = 0;
            dd = 0;
            yy = 0;
         }
         ds = mm + "/" + dd + "/" + yy;
      }

      // verify the date components
      if (parseInt(dd)>0 && parseInt(mm)>0 && parseInt(yy)+1>0) {
         if (mm < 1 || mm > 12) err = 1;
         if (dd < 1 || dd > 31) err = 1;
         if (yy < 1000 || yy > 9999) err = 1;

         // check the months with 30 days
         if (mm == 4 || mm == 6 || mm == 9 || mm == 11) {
            if (dd == 31) {
               dd = 1;  // flick it forward a day
               mm = mm + 1;
            }
         }
         // check February and leap years
         if (mm == 2) {
            if (dd > 29) err = 1;
            if (dd == 29 && ((yy/4) != parseInt(yy/4))) {
               dd = 1;  // flick it forward a day
               mm = 3;
            }
         }
      }

      // finally, test whether the input string can be Date.parsed
      d = new Date(Date.parse(ds));
      if (!d.getDate()) err = 1;

      if (err==1 || dd==0 || mm==0) {
         alert(e);
         dateField.select();
         dateField.focus();
         return false;
      }

      // we have a valid IETF date, so convert it to
      // the specified standard format for database entry
      if (parseInt(dd)<10 && (fmt < 4 || fmt > 6))
         dd = "0" + dd;   // add leading zero to days 1-9

      // convert month numeric to string
      if (mm == 1)
         month = "Jan";
      else if (mm == 2)
         month = "Feb";
      else if (mm == 3)
         month = "Mar";
      else if (mm == 4)
         month = "Apr";
      else if (mm == 5)
         month = "May";
      else if (mm == 6)
         month = "Jun";
      else if (mm == 7)
         month = "Jul";
      else if (mm == 8)
         month = "Aug";
      else if (mm == 9)
         month = "Sep";
      else if (mm == 10)
         month = "Oct";
      else if (mm == 11)
         month = "Nov";
      else if (mm == 12)
         month = "Dec";
      else month == "";
      // add leading zero to months 1-9 for mm formats
      if (fmt > 6 && mm < 10) mm = "0" + mm;

      // trim for yy formats
      if ((yy>99) && (fmt==0 || fmt==2 || fmt==5 || fmt==7 || fmt==9)) {
         yy = yy - (parseInt(yy/100)*100);
         if (yy < 10) yy = "0" + yy;
      }

      // re-test the date components
      if (dd==0 || dd=="" || month=="" || mm==0 || mm=="" || yy=="") {
         alert(e);
         dateField.select();
         dateField.focus();
         return false;
      }

      // redraw the date input field per format parameter:
      /*  0 = "dd mmm yy"     e.g. 27 Jan 99
          1 = "dd mmm yyyy"   e.g. 27 Jan 1999
          2 = "dd-mmm-yy"     e.g. 05-Aug-98
          3 = "dd-mmm-yyyy"   e.g. 05-Aug-1998
          4 = "mmm d, yyyy"   e.g. Aug 5, 1999
          5 = "m/d/yy"        e.g. 8/5/98
          6 = "m/d/yyyy"      e.g. 8/5/1998
          7 = "mm/dd/yy"      e.g. 09/21/56
          8 = "mm/dd/yyyy"    e.g. 08/05/1998
          9 = "mm dd yy"      e.g. 08 15 98
          10 = "mm dd yyyy"   e.g. 21 09 1956  */

      if (fmt == 1)
         dateField.value = dd + " " + month + " " + yy;
      else if (fmt == 2)
         dateField.value = dd + "-" + month + "-" + yy;
      else if (fmt == 3)
         dateField.value = dd + "-" + month + "-" + yy;
      else if (fmt == 4)
         dateField.value = month + " " + dd + ", " + yy;
      else if (fmt == 5)
         dateField.value = mm + "/" + dd + "/" + yy;
      else if (fmt == 6)
         dateField.value = mm + "/" + dd + "/" + yy;
      else if (fmt == 7)
         dateField.value = mm + "/" + dd + "/" + yy;
      else if (fmt == 8)
         dateField.value = mm + "/" + dd + "/" + yy;
      else if (fmt == 9)
         dateField.value = mm + " " + dd + " " + yy;
      else if (fmt == 10)
         dateField.value = mm + " " + dd + " " + yy;
      else
         dateField.value = dd + " " + month + " " + yy;

      return true;
}

function checkNumeric(arg) {
   if (arg.value == "")
      return false;
   for (i=0; i<arg.value.length; i++) {
      if (arg.value.charAt(i) < "0" || arg.value.charAt(i) > "9") {
         arg.focus();
         return false;
      }
   }
   return true;
}

   // Internal function to test whether argument is a number
   function isNum(arg) {
      if (arg == "")
         return false;
      for (i=0; i<arg.length; i++) {
         if (arg.charAt(i) < "0" || arg.charAt(i) > "9") {
            return false;
         }
      }
      return true;
   }

   // Internal function to convert a month string to numeric 1-12
   function monthToNum(monthStr) {
      if (monthStr=="")
         return false;
      var m = monthStr;
      if (monthStr.length>3)
         var m = monthStr.substring(0,2);
      if (m=="jan" || m=="Jan" || m=="JAN")
         return 1;
      else if (m=="feb" || m=="Feb" || m=="FEB")
         return 2;
      else if (m=="mar" || m=="Mar" || m=="MAR")
         return 3;
      else if (m=="apr" || m=="Apr" || m=="APR")
         return 4;
      else if (m=="may" || m=="May" || m=="MAY")
         return 5;
      else if (m=="jun" || m=="Jun" || m=="JUN")
         return 6;
      else if (m=="jul" || m=="Jul" || m=="JUL")
         return 7;
      else if (m=="aug" || m=="Aug" || m=="AUG")
         return 8;
      else if (m=="sep" || m=="Sep" || m=="SEP")
         return 9;
      else if (m=="oct" || m=="Oct" || m=="OCT")
         return 10;
      else if (m=="nov" || m=="Nov" || m=="NOV")
         return 11;
      else if (m=="dec" || m=="Dec" || m=="DEC")
         return 12;
      else
         return 0;
   }

	function required(formObj) {
		if (formObj.value == '' || formObj.value == null) {
			alert('This field is required to continue!');
			formObj.focus();
			formObj.select();
			return false;
		}
		return true;
	}

function lengthCheck(tafield,varLen) {
	var varCurLen = tafield.value.length;
	if ( varCurLen > varLen) {
		alert('The length of this field cannot be longer than ' + varLen + '\n It is currently ' + varCurLen + ' characters.');
		tafield.focus();
	}
}
	

//Phone number validation
var digitsInUSPhoneNumber = 10;
var defaultEmptyOK = true;
var phoneNumberDelimiters = "()- ";
var iUSPhone = "This field must be a 10 digit U.S. phone number (like 415 555 1212). Please reenter it now."

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;
}
// takes USPhone, a string of 10 digits
// and reformats as (123) 456-789

function reformatUSPhone (USPhone)
{   return (reformat (USPhone, "(", 3, ") ", 3, "-", 4))
}



// checkUSPhone (TEXTFIELD theField [, BOOLEAN emptyOK==false])
//
// Check that string theField.value is a valid US Phone.
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.

function checkUSPhone (theField, emptyOK)
{   if (checkUSPhone.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    {  var normalizedPhone = stripCharsInBag(theField.value, phoneNumberDelimiters)
       if (!isUSPhoneNumber(normalizedPhone, false)) 
          return warnInvalid (theField, iUSPhone);
       else 
       {  // if you don't want to reformat as (123) 456-789, comment next line out
          theField.value = reformatUSPhone(normalizedPhone)
          return true;
       }
    }
}

// isUSPhoneNumber (STRING s [, BOOLEAN emptyOK])
// 
// isUSPhoneNumber returns true if string s is a valid U.S. Phone
// Number.  Must be 10 digits.
//
// NOTE: Strip out any delimiters (spaces, hyphens, parentheses, etc.)
// from string s before calling this function.
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.

function isUSPhoneNumber (s)
{   if (isEmpty(s)) 
       if (isUSPhoneNumber.arguments.length == 1) return defaultEmptyOK;
       else return (isUSPhoneNumber.arguments[1] == true);
    return (isInteger(s) && s.length == digitsInUSPhoneNumber)
}

// Check whether string s is empty.

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

// isInteger (STRING s [, BOOLEAN emptyOK])
// 
// Returns true if all characters in string s are numbers.
//
// Accepts non-signed integers only. Does not accept floating 
// point, exponential notation, etc.
//
// We don't use parseInt because that would accept a string
// with trailing non-numeric characters.
//
// By default, returns defaultEmptyOK if s is empty.
// There is an optional second argument called emptyOK.
// emptyOK is used to override for a single function call
//      the default behavior which is specified globally by
//      defaultEmptyOK.
// If emptyOK is false (or any value other than true), 
//      the function will return false if s is empty.
// If emptyOK is true, the function will return true if s is empty.
//
// EXAMPLE FUNCTION CALL:     RESULT:
// isInteger ("5")            true 
// isInteger ("")             defaultEmptyOK
// isInteger ("-5")           false
// isInteger ("", true)       true
// isInteger ("", false)      false
// isInteger ("5", false)     true

function isInteger (s)

{   var i;

    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}
// Returns true if character c is a digit 
// (0 .. 9).

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

// Notify user that contents of field theField are invalid.
// String s describes expected contents of theField.value.
// Put select theField, pu focus in it, and return false.

function warnInvalid (theField, s)
{   theField.focus()
    theField.select()
    alert(s)
    return false
}


// 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;
}


// Removes all characters which do NOT appear in string bag 
// from string s.

function stripCharsNotInBag (s, bag)

{   var i;
    var returnString = "";

    // Search through string's characters one by one.
    // If character is 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;
}


// isZIPCode (STRING s [, BOOLEAN emptyOK])
// 
// isZIPCode returns true if string s is a valid 
// U.S. ZIP code.  Must be 5 or 9 digits only.
//
// NOTE: Strip out any delimiters (spaces, hyphens, etc.)
// from string s before calling this function.  
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.


// non-digit characters which are allowed in ZIP Codes
var ZIPCodeDelimiters = "-";

// our preferred delimiter for reformatting ZIP Codes
var ZIPCodeDelimeter = "-"

// characters which are allowed in Social Security Numbers
var validZIPCodeChars = digits + ZIPCodeDelimiters


// U.S. ZIP codes have 5 or 9 digits.
// They are formatted as 12345 or 12345-6789.
var digitsInZIPCode1 = 5;
var digitsInZIPCode2 = 9;
var sZIPCode = "ZIP Code";
var iZIPCode = "This field must be a 5 or 9 digit U.S. ZIP Code (like 94043). Please reenter it now.";
var pZIPCode = "5 or 9 digit U.S. ZIP Code (like 94043).";

// takes ZIPString, a string of 5 or 9 digits;
// if 9 digits, inserts separator hyphen

function reformatZIPCode (ZIPString)
{   if (ZIPString.length == 5) return ZIPString;
    else return (reformat (ZIPString, "", 5, "-", 4));
}


// checkZIPCode (TEXTFIELD theField [, BOOLEAN emptyOK==false])
//
// Check that string theField.value is a valid ZIP code.
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.

function checkZIPCode (theField, emptyOK)
{   if (checkZIPCode.arguments.length == 1) emptyOK = defaultEmptyOK;
    if ((emptyOK == true) && (isEmpty(theField.value))) return true;
    else
    { var normalizedZIP = stripCharsInBag(theField.value, ZIPCodeDelimiters)
      if (!isZIPCode(normalizedZIP, false)) 
         return warnInvalid (theField, iZIPCode);
      else 
      {  // if you don't want to insert a hyphen, comment next line out
         theField.value = reformatZIPCode(normalizedZIP)
         return true;
      }
    }
}

function isZIPCode (s)
{  if (isEmpty(s)) 
       if (isZIPCode.arguments.length == 1) return defaultEmptyOK;
       else return (isZIPCode.arguments[1] == true);
   return (isInteger(s) && 
            ((s.length == digitsInZIPCode1) ||
             (s.length == digitsInZIPCode2)))
}

	
function checkEmail(emailad) {
		
		var exclude=/[^@\-\.\w]|^[_@\.\-]|[\._\-]{2}|[@\.]{2}|(@)[^@]*\1/;
		var check=/@[\w\-]+\./;
		var checkend=/\.[a-zA-Z]{2,3}$/;

		if(((emailad.value.search(exclude) != -1)||(emailad.value.search(check)) == -1)||(emailad.value.search(checkend) == -1)){
			alert("Incorrect email address!");
			emailad.focus();
			emailad.select();
			return false;
		}
		
		return true;
}	