/*
General Web Form Utilities
Copyright 1999,2000 Webatory Inc., All Rights Reserved.Last Updated 4/13/2000version 2.01
*/// Define error messages.var ERR_DATE_INVALID		= "Invalid date. Please enter a valid date.";
var ERR_PASSWORD_CONFIRM	= "Your password was confirmed incorrectly.  Please re-enter and confirm your password.";

// Check browser version
var isNav3			= false;
var isNav4			= false; 
var isNav5			= false;
var isIE5			= false;
var isIE4			= false;
var isIE3			= false;if ( ! versions_loaded ) {

  // Determine Browser Platform
  var MAC		= (navigator.userAgent.indexOf("Mac")      != -1) ? true : false;
  var Opera		= (navigator.userAgent.indexOf("Opera")    != -1) ? true : false;
  var isIE		= (navigator.userAgent.indexOf("MSIE")	   != -1) ? true : false;  var isNav		= (navigator.appName == "Netscape")				  ? true : false;
  
  // Determine Browser Version
  var bV		= parseInt( navigator.appVersion );  var isNav5	= (bV >= 5 && isNav)			? true : false;
  var isNav4	= (document.layers && isNav)	? true : false;
  var isNav3	= (document.images && isNav)	? true : false;  var isIE5		= (isIE && bV >= 4)				? true : false;
  var isIE4		= ((document.all)&&(bV>=4))		? true : false;
  var ver4		= (isNav4 || isIE4)				? true : false;
  
  var NS4		= isNav4;
  var NS3		= isNav3;
  var IE4		= isIE4;
  var IE5		= isIE5;    var versions_loaded = true;
}
  
var aryForms			= new Array(0);
var cpassword			= false;

function checkPassword(password, cpassword) {
  if (password.value != cpassword.value) {
    alert(ERR_PASSWORD_CONFIRM);
    password.value = "";
    cpassword.value = "";
    password.focus();
    return (false);
  }
  return (true);
}

function verifyNumber(inStr) {
  iNumber = parseFloat(inStr);
  if (isNaN(iNumber)) return (false);
  else return (iNumber);
}

function stripNumber(inStr) {
  var i;
  var sIn = new String(inStr);
  var sOut = "";
  if (sIn != "undefined") {
    for (i=0; i<sIn.length; i++) {
      if ("1234567890.".indexOf(sIn.substring(i,i+1)) != -1) sOut += sIn.substring(i,i+1);
    }
    if (sIn.substring(0,1) == "-") sOut = "-" + sOut;
  }
  sOut = parseFloat(sOut);
  if (!isNaN(sOut)) return (sOut);
  else return("");
}

function trimString(inStr) {
  var sIn	= new String(inStr);
  var z=0;
  if (sIn == "undefined") return ("");
  while (sIn.substring(0,1) == " ") {
    sIn = sIn.substring(1);
    z++;
    if (z==100) break;
  }
  z=0;
  while (sIn.substring(sIn.length) == " ") {
    sIn = sIn.substring(0,sIn.length-1);
    z++;
    if (z==100) break;
  }
  return (sIn);
}

// Verifies that phone number is a valid 10 digit US phone number.
function verifyPhone(field) {
  var sPhone		= new String(field.value);
  var sPhoneString	= "";
  var sOut			= "";
 
  sPhoneString = String(stripNumber(sPhone));
  
  if (sPhoneString.length == 0) {
    field.value = "";
    return (true);
  }

  if (sPhoneString.length != 10) {
    alert("Please enter a valid ten digit phone number.");
    field.value = "";
    field.focus();
    return (false);
  }

  sOut = "(" + sPhoneString.substring(0,3) + ") " + sPhoneString.substring(3,6) + "-" + sPhoneString.substring(6);
  field.value = sOut;
  return (true);
}

function verifyEmail(field) {
  var sEmail	= field.value;
  var bValid	= true;
  
  if (sEmail) {
    if (sEmail.indexOf("@") == -1) bValid = false;
	if (sEmail.indexOf(".") == -1) bValid = false;
	if (trimString(sEmail).indexOf(" ") > 0) bValid = false;
   
	if (!bValid) {
      alert("Please enter a valid email address in the format user@emailprovider.com");
      field.value = "";
      field.focus();
      return (false);
	}
  }
  return (bValid);
}

function verifyURL(field) {
  var sURL = new String(field.value);
  if ((sURL.indexOf("http://") == -1 || sURL.indexOf(".") == -1) && sURL.length > 0) {
    alert("Please enter a valid web address in the format http://www.domain.com.");
    field.value = "";
    field.focus();
    return false;
  }
  return (true);
}

function formatCurrency(field) {
  var sMoney	= new String(field.value);
  var sDollars	= new String();
  var sCents	= new String();
   
  sMoney = new String(stripNumber(sMoney));
  if (sMoney.indexOf(".") > 0) {
    sDollars = sMoney.slice(0,sMoney.indexOf("."));
    sCents = sMoney.slice(sMoney.indexOf("."));
    if (sCents.length == 1) {sCents = sCents + "00";}
    if (sCents.length == 2) {sCents = sCents + "0";}
  }
  else {
    sDollars = sMoney;
    sCents = "";
  }
  
  sMoney = "";
  numchr = sDollars.length;
  start = numchr % 3;
  if (start != 0) {
    sMoney = sDollars.slice(0,start);
    if (numchr > 3) {
      sMoney += ",";
    }
  }
  for (i=start; i<(numchr-2); i=i+3) {
    sMoney += sDollars.slice(i,i+3);
    if (i+3 < numchr) {
      sMoney += ",";
    }
  }

  if (sMoney.length > 0) field.value = "$"+sMoney+sCents;
  else field.value = "";
  return (true);
}

// Formats and verifies that zipcode is 5 or 9 digits (US Zipcode format).
function verifyZipcode(field) {
  var sZipcode	= field.value;
  var sOut		= "";
  
  if (sZipcode.length > 0) {
	for (i=0; i<sZipcode.length; i++) {
      if ("1234567890".indexOf(sZipcode.substring(i,i+1)) != -1) sOut += sZipcode.substring(i,i+1);
	}
	sZipcode = sOut;
	if (sZipcode.length != 5) {
      alert("Please enter a valid 5 digit US zipcode.");
      field.value = "";
      field.focus();
      return (false);
	}
	if (sZipcode.length == 9) {
      sOut = sZipcode.substring(0,5) + "-" + sZipcode.substring(5);
      field.value = sOut;
	}
	field.value = sZipcode;
  }
  return (true);
}

function verifyNumeric(field, sRef) {
  sRef = new String(sRef);
  if (sRef == "undefined") sRef = "value";
  if (field.value == "" || field.value == 0) return (true);
  if (!verifyNumber(field.value)) {
    alert("Please enter " + sRef + " in numeric format.");
    field.value = "";
    field.focus();
    return (false);
  }
  else field.value = verifyNumber(field.value);
  return (true);
}

function verifyYear(field) {
  sYear = field.value;
  if (sYear == "") return (true);
  if (!verifyNumber(field.value) || sYear.length != 4) {
    alert("Please enter a valid 4 digit year.");
    field.value = "";
    field.focus();
    return (false);
  }
  return (true);
}

function checkLength(field, iMax, sField_Name) {
  var sValue		= String(field.value);
  
  if (iMax > 0) {
    if (sValue.length >= iMax) {
      if (sField_Name) alert("You have reached the maximum length allowed for " + sField_Name + " (" + iMax + " characters).");
      else alert("You have reached the maximum length allowed for this field (" + iMax + " characters).");
      field.value = sValue.substring(0, iMax-1);
      return (false);
    }
  }
  return (true);
}

function formatTime(field, txtRef) {
  var out	= new String();
  var mm, hh, inStr;
  
  if (field.value == "") return (true);
    
  inStr = new String(stripNumber(field.value));
  sOrig = field.value;
  
  if (inStr.length == 4) {
    hh = inStr.substring(0,2);
    mm = inStr.substring(2,4);
  }
  if (inStr.length == 3) {
    hh = inStr.substring(0,1);
    mm = inStr.substring(1,3);
  }
  if (inStr.length == 2) {
    hh = inStr;
    mm = "00";
  }
  if (inStr.length == 1) {
    hh = inStr;
    mm = "00";
  }
  
  hh = String(hh);
  if (hh == "undefined") {
    alert("Please enter your " + txtRef + " in the format 'hh:mm am'.");
    field.value = "";
    field.focus();
    return (false);
  }
    
  if (hh > 12 || mm > 60) {    
    alert(txtRef + " is invalid.  Please enter a valid " + txtRef + " in the format 'hh:mm am'.");
    field.value = "";
    field.focus();
    return (false);
  }
  
  if (sOrig.toLowerCase().indexOf("pm") > 0) {
    out = hh + ":" + mm + " PM";
  }
  else {
    if (sOrig.toLowerCase().indexOf("am") > 0 || (hh > 6 && hh < 12)) out = hh + ":" + mm + " AM";
    else out = hh + ":" + mm + " PM";
  }

  field.value = out;
  return (true);
}


function formatDate(field, sRef) {
  var out			= "";
  var sDate			= new Date(field.value);
  
  if (field.value) {
	if (!isNaN(sDate)) {
	  out = (sDate.getMonth() + 1) + "/";
	  out += sDate.getDate() + "/";
	  if (ver4) out += sDate.getFullYear();
	  else out += sDate.getYear();
	  field.value = out;
	  return (true);
	}
	else {
	  alert(sRef + " is invalid.  Please enter a valid date in the format mm/dd/yyyy.");
	  field.value = "";
	  field.focus();
	  return (false);
	}
  }
}


function Form(sName) {
  this.name		= sName;
  this.fields	= new Array(0);
    
  aryForms[aryForms.length++]	= this; 
  aryForms[sName]				= this;  
  return (this);
}

function Field( sField, sError, bForce, sValue ) {
  this.name		= sField;
  this.error	= sError;
  this.required = bForce;
  (sValue == "null") ? this.value = "" : this.value = sValue;
  return( this );
}

function Form_addField( sField, sErr, bForce, sValue ) {
  newField = new Field(sField, sErr, bForce, sValue );
  this.fields[this.fields.length++] = newField;
  this.fields[sField] = this;
  return( newField );
}

Form.prototype.addField = Form_addField;

function checkForm(sFormName) {
  var rForm = aryForms[sFormName];
  var form = document.forms[rForm.name];
  if (form) {
    for (z=0; z < rForm.fields.length; z++) {
      if (rForm.fields[z].required == true) {
        fieldok = false;
        sField = rForm.fields[z].name;
        sError = rForm.fields[z].error;
        field = form.elements[sField];  
        
        if (field) {
          //alert(field.type);
          if (field.type == "text" || field.type == "password" || field.type == "hidden" || field.type == "textarea" || field.type == "file") {
            if (field.value != "") fieldok = true;
          }
          else {
            if (field.type == "select-one") {
              if (field.selectedIndex > 0) fieldok = true;
            }
            else {
              if (field.type == "checkbox" || field.type == "radio") {
                if (field.checked == true) fieldok = true;
              }
              else {
                //alert(field.type);
                if (field[0]) {   
                  if (field[0].type == "checkbox" || field[0].type == "radio") {
                    for (x=0;x<field.length;x++) {
                      if (field[x].checked == true) fieldok = true;
                    }
                  }
                  else {
                    if (field[0].value != "" && field[0].value != null) fieldok = true;
                  }
                }
              }
            }
          }
          
          //alert(fieldok);
          if (fieldok == false) {
            alert(unescape(sError) + "\n");
            if (field.type == "text" || field.type == "password" || field.type == "select-one" || field.type == "checkbox" || field.type == "radio" || field.type == "textarea" || field.type == "file") field.focus();
            else {
              if (field[0]) {
                if (field[0].type == "checkbox" || field[0].type == "radio") { 
                  field[0].focus();
                }
              }
            }
            return (false);
          }        
        }
      }
    }
    if (cpassword == true) {
      return checkPassword(form.Password, form.CPassword);
    } 
  }
  return (true);
}

function popForm() {
  var i, j, k, l;
  for (i=0; i < aryForms.length; i++) {
    form	= document.forms[aryForms[i].name];
    fields	= aryForms[i].fields;
    
    if (form) {
	  for (j=0; j < fields.length; j++) {
        field = form.elements[fields[j].name];
		//alert(fields[j].name);
		//alert(unescape(fields[j].value));
		//alert(field.type);
		if (field) {
		  if (field.type == "text" || field.type == "password" || field.type == "hidden" || field.type == "textarea") field.value = unescape(fields[j].value);
		  else {
			if (field.type == "select-one") selectBox(form, field, unescape(fields[j].value));
			else {
			  if (field.type == "checkbox" || field.type == "radio") checkBox(form, field, unescape(fields[j].value));
			  else {
				if (field[0]) {
				  if (field[0].type == "checkbox" || field[0].type == "radio") checkBox(form, field, unescape(fields[j].value));
				  if (field[0].type.indexOf("select") != -1) selectBox(form, field, unescape(fields[j].value));
				  if (field[0].type == "text") {
					sVal = unescape(fields[j].value);
					if (sVal.indexOf("///") != -1) sVals = sVal.split("///");
					else sVals = sVal.split(",");
					for (l=0; (l < field.length && l < sVals.length); l++) {
					  if (sVals[l]) field[l].value = trimString(sVals[l]);
					}
				  }
				}
              }
            }
          }
        }
      }
    }
  }
}


function checkHidden(field, sField) {
  if (field) {
    if (field.checked) field.form[sField].value = "true";
    else field.form[sField].value = "false";
  }
}

function checkBox(form, fields, sFrmVal ) {
  var k, l;
  var sVal = new String(sFrmVal);
  
  if (sVal.indexOf("///") != -1) sVals = sVal.split("///");
  else sVals = sVal.split(",");
  for (k=0; k < sVals.length; k++) {
		if (fields[0]) {
			if (fields[0].name == "Flags") {
				setFlags(form, fields, sFrmVal);
				return;
			}
			else if (fields[0]) {
				for (l=0; l < fields.length; l++) {
					if (fields[l].value == trimString(sVals[k])) {
						fields[l].checked = true;
					}
				}
			}
    }
    else {
      if (fields.value == sVals[k]) fields.checked = true;
    }
  }
}

function setFlags(form, fields, sFrmVal) {
  iVal = parseInt(sFrmVal);
  for (k=0; k< fields.length; k++) {
    iCheckVal = parseInt(fields[k].value);
    if ((iVal & iCheckVal) == iCheckVal) fields[k].checked = true;
  }
}

function selectBox(form, fields, sFrmVal) {
  var k, j;
  var sVal	= new String(sFrmVal);
  var sVals = new Array(0); 
  j = 0;
  z = 0;
  if (sVal.indexOf("///") != -1) sVals = sVal.split("///");
  else sVals = sVal.split(",");
  while(fields[j]) {
    if (sVals[j] != "undefined" && sVals[j] != null) {
      if (fields[j].length) {
        for (k=0; k < fields[j].length; k++) {
          if (fields[j][k].value == trimString(sVals[j])) fields[j].options[k].selected = true;
        }
      }
      else {
        for (k=0; k < fields.length; k++) {
          if (fields[k].value == trimString(sVals[j])) fields.options[k].selected = true;
        }
      }
    }
    j++;
    if (j > 10) break;
  }
}


/*
var sSeperator		= "/";
var vDateType		= 3;
var vYearType		= 4; 
var vYearLength		= 4; 
var err				= 0; // Set the error code to a default of zero

function formatDate(oField, dateCheck)  {  
  var sMonth;
  var sDay;
  var sYear;
     
  //Enter a tilde sign for the first number and you can check the variable information.
  if (oField.value == "~") {
    alert("AppVersion = "+navigator.appVersion+" \nNav. 4 Version = "+isNav4+" \nNav. 5 Version = "+isNav5+" \nIE Version = "+isIE4+" \nYear Type = "+vYearType+" \nDate Type = "+vDateType+" \nSeparator = "+strSeperator);
    oField.value = "";
	oField.focus();
    return true;
  }
  
  if (dateCheck && dateValid(oField)) return (true);
  else if (dateCheck) {
    alert(err);
    alert(ERR_DATE_INVALID);
    oField.value = "";
    oField.focus();
    oField.select();
    return (false);
  }
  
  return (false);
}


function dateValid(oField) {
  var iDay;
  var iMonth;
  var iYear;
  var aryDate;
  var sDate			= oField.value;
  var bSeperators	= false;
  var arySeperators	= new Array("-"," ","/",".");
 
  // var err = 0;
  var aryMonths		= new Array(12);
  aryMonths[0]		= "Jan";
  aryMonths[1]		= "Feb";
  aryMonths[2]		= "Mar";
  aryMonths[3]		= "Apr";
  aryMonths[4]		= "May";
  aryMonths[5]		= "Jun";
  aryMonths[6]		= "Jul";
  aryMonths[7]		= "Aug";
  aryMonths[8]		= "Sep";
  aryMonths[9]		= "Oct";
  aryMonths[10]		= "Nov";
  aryMonths[11]		= "Dec";
      
  if (sDate) {
	// Seperate date parts with seperator.
	for (i=0; i < arySeperators.length; i++) {
	  if (sDate.indexOf(arySeperators[i]) != -1) {
	    aryDate = sDate.split(arySeperators[i]);
		  if (aryDate.length != 3) {
	      err = 1;
	      return (false);
		  }
	    else {
	      sMonth	= aryDate[0];
	      sDay		= aryDate[1];
	      sYear		= aryDate[2];
		  }
	    bSeperators	= true;
	  }
	}
  
	// Seperate date parts with no seperator. 
	if (!bSeperators) {
	  sDay	= sDate.substr(0, 2);
	  sMonth	= sDate.substr(2, 2);
	  sYear	= sDate.substr(4);
	}
  
	//Adjustment for short years entered
	if (sYear.length == 2) {
	  if (sYear < 30) sYear = '20' + sYear;
	  else sYear = "19" + sYear;
	}
	 
	iDay		= parseInt(sDay, 10);
	iMonth		= parseInt(sMonth, 10);
	iYear		= parseInt(sYear, 10);
	 
	if (isNaN(iDay)) {
	  err = 2;
	  return (false);
	}
	if (isNaN(iMonth)) {
	  err = 3;
	  return (false);
	}
	if (isNaN(iYear)) {
	  err = 4;
	  return (false);
	}
	if (iMonth > 12 || iMonth < 1) {
	  err = 5;
	  return (false);
	}
	if ((iMonth == 1 || iMonth == 3 || iMonth == 5 || iMonth == 7 || iMonth == 8 || iMonth == 10 || iMonth == 12) && (iDay > 31 || iDay < 1)) {
	  err = 6;
	  return (false);
	}
	if ((iMonth == 4 || iMonth == 6 || iMonth == 9 || iMonth == 11) && (iDay > 30 || iDay < 1)) {
	  err = 7;
	  return (false);
	}
	if (iMonth == 2) {
		if (iDay < 1) {
		  err = 8;
	    return false;
		}
	  if (leapYear(iYear) == true) {
	    if (intday > 29) {
	      err = 9;
	      return false;
		  }    
	    else if (iDay > 28) {
			err = 10;
			return false;
	    }
	  }
	}
	oField.value = iMonth + sSeperator + iDay + sSeperator + iYear;
  }
  return (true);
}


function leapYear(iYear) {
  if (iYear % 100 == 0) {
    if (iYear % 400 == 0) return (true);
  }
  else if (iYear % 4 == 0) return (true);   
  return (false);
}
*/