function IsVisible(Field)
{
  var i = 0;
  var ted = document.getElementById(Field);
  if (ted == null) {
    //alert(i+':ted == null:');
    debugMessage("IsVisible:can't find ("+Field+"\n");
    return 0;
  } else {
    if (ted.style.visibility == 'hidden') {
      return 0;
    }
  }
  return 1;
}
                                                                                                
function IsNotDisabled(Field)
{
  var i = 0;
  var ted = document.getElementById(Field);
  if (ted == null) {
    //alert(i+':ted == null:');
    debugMessage("IsVisible:can't find ("+Field+"\n");
    return 0;
  } else {
    if (ted.disabled == 1) {
      return 0;
    }
  }
  return 1;
}
function ElementExists(Field)
{
  var i = 0;
  var ted = document.getElementById(Field);
  //debugMessage("ElementExists:"+Field+"\n");
  if (ted == null) {
    return 0;
  }
  return 1;
}

function shutEmOff(offFieldList)
{
  var i = 0;
  //debugMessage("shutEmOff:starting\n");
  for (i = 0; i < offFieldList.length; i++) {
    //debugMessage("shutEmOff:"+offFieldList[i]+"\n");
    var ted = document.getElementById(offFieldList[i]);
    if (ted == null) {
      //alert(i+':ted == null:');
    } else {
      //if (ted.style.visibility != 'hidden') {
        ted.style.visibility = 'hidden';
        ted.style.display = 'none';
      //}
    }
  }
}
 
function FieldHasData(formName,fieldName) {
  var fld = document.forms[formName].elements[fieldName];
  if (fld == null) {
    //alert("FieldHasData:"+fieldName);
   //debugMessage("FieldHasData:"+fieldName);
    return 0;
  }
  switch (fld.type) {
    case 'button':
    case 'reset':
    case 'submit':
    case 'select-multiple':
      return 0;
    break;
    case 'select-one':
      if (fld.selectedIndex == -1) {
        return 0;
      }
      if (fld.options[fld.selectedIndex].value == 'NULL') {
        return 0;
      }
      return 1;
    break;
    case 'checkbox':
      if (fld.checked) {
        return 1;
      }
    break;
    case 'radio':
      for (var i=0; i < fld.length; i++) {
        if (fld[i].checked) {
          return 1;
        }
      }
    break;
    case 'hidden':
    case 'text':
    default:
      return (fld.value != '');
    break;
  }
  return 0;
}
function GetFieldData(formName,fieldName) {
    //debugMessage("GetFieldData start: "+formName+":"+fieldName+":\n");
  if (!FieldHasData(formName,fieldName)) {
    return null;
  }
  var fld = document.forms[formName].elements[fieldName];
    //debugMessage("GetFieldData HasData: "+formName+":"+fieldName+":"+fld.type+":"+fld[0].type+":\n");
  var theType = '';
  if (fld.type == null) {
    //debugMessage("GetFieldData GotArray: "+formName+":"+fieldName+":"+fld.type+":"+fld[0].type+":\n");
    theType = fld[0].type;
  } else {
    theType = fld.type;
  }
    //debugMessage("GetFieldData HaveType: "+formName+":"+fieldName+":"+theType+":\n");
  switch (theType) {
    //case 'select-one':
    //  return (fld.options[fld.selectedIndex].value);
    //break;
    case 'select-one':
      if (fld.selectedIndex == -1) {
        return 0;
      }
      if (fld.options[fld.selectedIndex].value == 'NULL') {
        return 0;
      }
      return fld.options[fld.selectedIndex].value;
    break;
    case 'checkbox':
    //debugMessage("GetFieldData CB: "+formName+":"+fieldName+":\n");
      if (fld.checked) {
        return (fld.value);
      }
    break;
    case 'radio':
    //debugMessage("GetFieldData RADIO: "+formName+":"+fieldName+":\n");
      for (var i=0; i < fld.length; i++) {
        if (fld[i].checked) {
          //debugMessage("GetFieldData RADIO: "+formName+":"+fieldName+":"+fld[i].value+":\n");
          return (fld[i].value);
        }
      }
    break;
    default:
    //debugMessage("GetFieldData other: "+formName+":"+fieldName+":\n");
      return (fld.value);
    break;
  }
  return null;
}

function inList(list,val) 
{
  var arr1 = list.split('.');
  var arr2 = arr1[1].split(',');
  var i;
  for (i = 0 ;i < arr2.length ;i++) {
    if (arr2[i] == val) {
      return(1);
    }
  }
  return(0);
}

function fixup_colapse(offFieldList,funcList,formName,contextName,fieldName)
{
  if (GetFieldData(formName,fieldName) == 0) {
    SYNSetFieldValue(formName,fieldName,1);
  } else {
    SYNSetFieldValue(formName,fieldName,0);
  }
  tailorForm(offFieldList,funcList,formName,contextName,fieldName,0);
}

function tailorForm(offFieldList,funcList,formName,contextName,fieldName,level)
{
  var i=0;
  //alert('tailorForm: '+formName+' :'+contextName+' :'+fieldName+' :'+level);
  if (level == 0) {
    //debugMessage("tailorForm: shutting em off\n");
    shutEmOff(offFieldList);
  } else {
    var refedEl = document.getElementById(contextName+'_'+fieldName+'_edit_row');
    //debugMessage("tailorForm:"+"refed:"+formName+":"+fieldName+":"+level+":"+refedEl.style.visibility+"\n");
    if (refedEl != null && refedEl.style.visibility == 'hidden') {
      return;
    }
  }
  
         //(String(funcList[i].value).substr(1,3) == 'in.' && inList(String(funcList[i].value),String(fieldVal))) ||
  //debugMessage("tailorForm:"+formName+":"+fieldName+":"+level+"\n");
  for (i = 0; i < funcList.length; i++) {
    if (funcList[i].target == fieldName) {
      //debugMessage("tailorForm:"+formName+":"+fieldName+":"+level);
      //var fieldVal = document.forms[formName].elements[fieldName].options[document.forms[formName].elements[fieldName].selectedIndex].value ;
      var fieldVal = GetFieldData(formName,fieldName);
      if (String(funcList[i].value) == String(fieldVal) || 
         (String(funcList[i].value) == 'null' && (String(fieldVal) == '' || String(fieldVal) == 'NULL' || String(fieldVal) == 'null')) ||
         (String(funcList[i].value) == 'notnull' && !(String(fieldVal) == '' || String(fieldVal) == 'NULL' || String(fieldVal) == 'null')) ||
         (String(funcList[i].value).substr(0,6) == 'notin.' && !inList(String(funcList[i].value),String(fieldVal))) ||
         (String(funcList[i].value) == 'true' && String(fieldVal) == '1') ||
         (String(funcList[i].value) == 'false' && String(fieldVal) == '0')) {
        var arr = funcList[i].friends;
        var j=0;
        for (j = 0; j < arr.length; j++) {
          var ted = document.getElementById(funcList[i].context+'_'+arr[j]+'_edit_row');
          if (ted == null) {
            //alert(j+':ted == null:');
          } else {
            //debugMessage("tailorForm:"+formName+":"+fieldName+":"+level+":"+ted.id+"\n");
            //if (ted.style.visibility != 'hidden') {
            ted.style.visibility = 'visible';
            ted.style.display = '';
            tailorForm(offFieldList,funcList,formName,contextName,arr[j],1);
            //}
          }
        }
      } else {
        //var arr = funcList[i].friends;
        //var j=0;
        //for (j = 0; j < arr.length; j++) {
        //  ClearFieldValue(formName,arr[j]);
        //}
      }
    } else {
      if (level == 0) {
        tailorForm(offFieldList,funcList,formName,contextName,funcList[i].target,1);
      }
    }
  }
  if (level == 0) {
    for (i = 0; i < funcList.length; i++) {
      if (funcList[i].target == fieldName) {
        var arr = funcList[i].friends;
        var j=0;
        for (j = 0; j < arr.length; j++) {
          var pat = /^comp_/;
          if (!pat.exec(arr[j])) {
            if (!IsVisible(funcList[i].context+'_'+arr[j]+'_edit_row')) {
              //alert('ClearFieldValue :'+formName+' :'+arr[j]);
              //ClearFieldValue(formName,arr[j]);
            }
          }
        }
      }
    }
  }
}
function clearDebug(evt)
{
  var ted = document.getElementById('DebuggerText');
  var tedContainer = document.getElementById('DebuggerTextContainer');
  evt = (evt) ? evt : ((event) ? event : null);
  //debugMessage("clearDebug:"+evt.button+":\n");

  if (ted == null ) {
    alert('debuggerText: ted == null:');
  } else {
    if (tedContainer.firstChild) {
      tedContainer.firstChild.nodeValue = '';
    } else {
      tedContainer.innerText = '';
    }
    ted.style.visibility = 'hidden';
  }
}
var GlobalDebugWindow = null;
var noDebug = 0;
var debugInWindow = 0;
function debugMessage(some_text)
{
  if (noDebug) {
    return;
  }
  if (debugInWindow) {
    if (GlobalDebugWindow == null || GlobalDebugWindow.closed ) {
      GlobalDebugWindow = window.open('','SynaptivDebugWindow','height=400,width=400,resizable,scrollbars=1');
    }
    GlobalDebugWindow.document.write(some_text+"<br>");
    GlobalDebugWindow.scrollBy(0,20);
  } else {
    var ted = document.getElementById('DebuggerText');
    var tedContainer = document.getElementById('DebuggerTextContainer');
    if (ted == null ) {
      alert('mouseHelp: ted == null:');
    } else {
      if (tedContainer.firstChild) {
        tedContainer.firstChild.nodeValue += some_text;
      } else {
        tedContainer.innerText += some_text;
      }
      ted.style.visibility = 'visible';
      ted.style.display = '';
    }
  }
}

var helpLock = 0;
function lockHelp()
{
  helpLock = 1;
}

function unlockHelpAndClose()
{
  helpLock = 0;
  var ted = document.getElementById('SomeText');
  ted.style.visibility = 'hidden';
}

function mouseHelpOff(evt,context)
{
  if (helpLock == 0) {
    evt = (evt) ? evt : ((event) ? event : null);
    //var ted = document.getElementById(context+'_help_zone')

    var ted = document.getElementById('SomeText')
    if (ted == null) {
      alert('mouseHelpOff: ted == null:');
    } else {
      //alert('before:'+ted.style.visibility+':'+ted.style.display);
        ted.style.visibility = 'hidden';
        ted.style.display = 'none';
      //alert('after:'+ted.style.visibility+':'+ted.style.display);
    }
  }
}

function mouseHelp(evt,context,some_text)
{
  helpLock = 0;
  var ted = document.getElementById('SomeText');
  var tedContainer = document.getElementById('SomeTextContainer');
  if (some_text == '') {
    return;
  }
  if (ted == null ) {
    alert('mouseHelp: ted == null:');
  } else {
    if (tedContainer.firstChild) {
      tedContainer.firstChild.nodeValue = some_text;
      ted.style.top = evt.clientY;
      ted.style.right = 20;
    } else {
      tedContainer.innerText = some_text;
      ted.style.top = evt.y;
      ted.style.right = 20;
    }
    ted.style.visibility = 'visible';
    ted.style.display = '';
  }
}
  
function showAddsSaves(context) 
{
  //save_zone,save_new_zone,save_close_zone
  var ted = document.getElementById(context+'_save_zone');
  if (ted != null) {
    ted.style.visibility = 'visible';
  }
  ted = document.getElementById(context+'_save_new_zone');
  if (ted != null) {
    ted.style.visibility = 'visible';
  }
  ted = document.getElementById(context+'_save_close_zone');
  if (ted != null) {
    ted.style.visibility = 'visible';
  }
  ted = document.getElementById(context+'_required_instruction_row');
  if (ted != null) {
    ted.style.visibility = 'hidden';
    ted.style.display = '';
  }
}

function hideAddsSaves(context) 
{
  var ted = document.getElementById(context+'_save_zone');
  if (ted != null) {
    ted.style.visibility = 'hidden';
  }
  ted = document.getElementById(context+'_save_new_zone');
  if (ted != null) {
    ted.style.visibility = 'hidden';
  }
  ted = document.getElementById(context+'_save_close_zone');
  if (ted != null) {
    ted.style.visibility = 'hidden';
  }
  ted = document.getElementById(context+'_required_instruction_row');
  if (ted != null) {
    ted.style.visibility = 'visible';
    ted.style.display = '';
  }
}

function showAddsSavesNew(context) 
{
  //save_zone,save_new_zone,save_close_zone
  var ted = document.getElementById(context+'_save_zone');
  ted = document.getElementById(context+'_save_button');
  if (ted != null) {
    ted.disabled = 0;
  }
  ted = document.getElementById(context+'_save_new_zone');
  if (ted != null) {
    //ted.style.visibility = 'visible';
    ted.disabled = 0;
  }
  //ted = document.getElementById(context+'_save_close_zone');
  //if (ted != null) {
  //  //ted.style.visibility = 'visible';
  //  ted.disabled = 0;
  //}
  ted = document.getElementById(context+'_required_instruction_row');
  if (ted != null) {
    ted.style.visibility = 'hidden';
    ted.style.display = '';
  }
}

function hideAddsSavesNew(context) 
{
  var ted = document.getElementById(context+'_save_zone');
  ted = document.getElementById(context+'_save_button');
  if (ted != null) {
    ted.disabled = 1;
  }
  ted = document.getElementById(context+'_save_new_zone');
  if (ted != null) {
    //ted.visibility = 'hidden';
    ted.disabled = 1;
  }
  //ted = document.getElementById(context+'_save_close_zone');
  //if (ted != null) {
  //  ted.style.visibility = 'hidden';
  //  ted.disabled = 1;
  //}
  ted = document.getElementById(context+'_required_instruction_row');
  if (ted != null) {
    ted.style.visibility = 'visible';
    ted.style.display = '';
  }
}

function trimField(formName,field) 
{
  var arf = document.forms[formName].elements[field].value;
  arf = arf.replace(/^\s*/,'');
  arf = arf.replace(/\s*$/,'');
  document.forms[formName].elements[field].value = arf;
}

function UpIt(formName,field) 
{
  var arf = document.forms[formName].elements[field].value;
  if (arf.match(/'$/)) {
    arf = arf.replace(/'$/g,'');
  }
  document.forms[formName].elements[field].value = arf.toUpperCase();
    //document.forms[formName].elements[field].value.toUpperCase(arf);
}

function LowerIt(formName,field) 
{
  var arf = document.forms[formName].elements[field].value;
  document.forms[formName].elements[field].value = arf.toLowerCase();
    //document.forms[formName].elements[field].value.toUpperCase(arf);
}


function VerifyYear(formName,fieldName,fieldPrompt) 
{
  var pat = /^-*[,\d]{4,}$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    var year = new Number(document.forms[formName].elements[fieldName].value);
    if (year >= 1900 && year <= 3000) {
      return 1;
    }
  }
  alert (fieldPrompt+" must be a valid year between 1900 and 3000.");
  document.forms[formName].elements[fieldName].focus();
  return 0;
}

function VerifyYearOld(formName,yearField,monField,fieldPrompt) 
{
  var thisDate = new Date();
  var yearNow = new Number(thisDate.getYear());
  var monNow = new Number(thisDate.getMonth());
  var yearForm = new Number(document.forms[formName].elements[yearField].options[document.forms[formName].elements[yearField].selectedIndex].value);
  var monForm = new Number(document.forms[formName].elements[monField].options[document.forms[formName].elements[monField].selectedIndex].value);
  //alert(yearNow+":"+monNow+"::"+yearForm+":"+monForm);
  monNow++; //Month is zero based

  if (yearForm > 90) {
    yearForm += 1900;
  } else {
    yearForm += 2000;
  }
	if (yearNow < 2000) {
    yearNow += 1900;
  }
  if (yearForm == yearNow && monForm < monNow) {
    alert(fieldPrompt+" Credit Card expiration is in the past. Please try another Credit Card.");
    document.forms[formName].elements[yearField].focus();
    return 0;
  }
  if (yearForm < yearNow) {
    alert(fieldPrompt+" Credit Card expiration is in the past. Please try another Credit Card.");
    document.forms[formName].elements[monField].focus();
    return 0;
  } 
  return 1;
}

function VerifyOtherNotNull(formName,fieldName,fieldPrompt) 
{
  if (document.forms[formName].elements[fieldName].options[document.forms[formName].elements[fieldName].selectedIndex].value == 'NEW') {
    var other_data = "other_"+fieldName;
    if (document.forms[formName].elements[other_data].value.length == 0) {
      alert ("You must enter a value for "+fieldPrompt+" when selecting Other.");
      return 0;
    }
  }
  return 1;
}


function VerifySelectedNotNullQuiet(formName,fieldName,fieldPrompt) 
{
  //if (document.forms[formName].elements[fieldName].selectedIndex < 0) {
  //  return 0;
  //}
  //if (document.forms[formName].elements[fieldName].options[document.forms[formName].elements[fieldName].selectedIndex].value == 'NULL' || document.forms[formName].elements[fieldName].options[document.forms[formName].elements[fieldName].selectedIndex].value == 'NULL') {
  //  //alert ("You must select a "+fieldPrompt);
  //  return 0;
  //}
  //return 1;
  return FieldHasData(formName,fieldName) ;
}

function VerifySelectedQuiet(formName,fieldName,fieldPrompt) 
{
  if (document.forms[formName].elements[fieldName].selectedIndex == -1) {
    //alert ("You must select a "+fieldPrompt);
    return 0;
  }
  return 1;
}


function VerifySelectedNotNull(formName,fieldName,fieldPrompt) 
{
  if (document.forms[formName].elements[fieldName].options[document.forms[formName].elements[fieldName].selectedIndex].value == '' || document.forms[formName].elements[fieldName].options[document.forms[formName].elements[fieldName].selectedIndex].value == 'NULL') {
    alert ("You must select a "+fieldPrompt);
    return 0;
  }
  return 1;
}

function VerifySelected(formName,fieldName,fieldPrompt) 
{
  if (document.forms[formName].elements[fieldName].selectedIndex == -1) {
    alert ("You must select a "+fieldPrompt);
    return 0;
  }
  return 1;
}

function VerifyJustDigits(formName,fieldName,fieldPrompt,len) 
{
  var pat = /^[\d]+$/;
  // required check will not allow empty so trivial accept here.
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    var val = document.forms[formName].elements[fieldName].value;
    if (val.length > len) {
      alert(fieldPrompt+' can only contain '+len+' digits');
      document.forms[formName].elements[fieldName].focus();
      return 0;
    }
    return 1;
  }
  alert (fieldPrompt+" must contain only digits (0..9).");
  document.forms[formName].elements[fieldName].focus();
  return 0;
}

function VerifyInteger(formName,fieldName,fieldPrompt,len) 
{
  var pat = /^-*[,\d]+$/;
  // required check will not allow empty so trivial accept here.
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    var val = document.forms[formName].elements[fieldName].value;
    if (val.match(/,/)) {
      val = val.replace(/,/g,'');
    }
    if (val.length > len) {
      alert(fieldPrompt+' can only contain '+len+' digits');
      document.forms[formName].elements[fieldName].focus();
      return 0;
    }
    return 1;
  }
  alert (fieldPrompt+" must contain only digits (0..9) or commas (,).");
  document.forms[formName].elements[fieldName].focus();
  return 0;
}

function VerifyCurrency(formName,fieldName,fieldPrompt,len,dec) 
{
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (isNaN(parseFloat(document.forms[formName].elements[fieldName].value))) {
    alert (fieldPrompt+" must contain only digits (0..9) or minus (-) or commas (,) or a decimal point (.).");
    document.forms[formName].elements[fieldName].focus();
    return 0;
  } 
  var haveDec = 0;
  var decDigits = 0;
  var numDigits = 0;

	for (var i=0; i < document.forms[formName].elements[fieldName].value.length; i++) {
		if (document.forms[formName].elements[fieldName].value.charAt (i)  == '-' || 
        (document.forms[formName].elements[fieldName].value.charAt (i) >= "0" && 
				document.forms[formName].elements[fieldName].value.charAt (i) <= "9"))  {
      if (haveDec) {
        decDigits++;
      } else {
        numDigits++;
      }
    } else if (document.forms[formName].elements[fieldName].value.charAt(i) == ".") {
      if (haveDec) {
        alert (fieldPrompt+" must contain only digits (0..9) or minus (-) or commas (,) or a decimal point (.).");
        document.forms[formName].elements[fieldName].focus();
        return 0;
      } else {
        haveDec = 1;
      }
    } else if (document.forms[formName].elements[fieldName].value.charAt(i) == ",") {
    } else {
      alert (fieldPrompt+" must contain only digits (0..9) or minus (-) or commas (,) or a decimal point (.).");
      document.forms[formName].elements[fieldName].focus();
      return 0;
		} 
  }
  if ((dec > 0 && decDigits > dec) || (len > 0 && numDigits > len)) {
    alert (fieldPrompt+" is too long must be "+len+" digits plus "+dec+" after decimal.");
    document.forms[formName].elements[fieldName].focus();
    return 0;
  }
  return 1;
}

function VerifyURL(formName,fieldName,fieldPrompt) 
{
  var pat = /\w+:\/\/[\w\-]+\.\w{2,}/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (!pat.exec(document.forms[formName].elements[fieldName].value)) {
    document.forms[formName].elements[fieldName].focus();
    alert ("Invalid "+fieldPrompt+". Please enter URL in the format protocol://domain.xxx.");
    return 0;
  }
  return 1;
}

function VerifyFullName(formName,fieldName,fieldPrompt) 
{
  var pat = /^\s*[a-zA-Z0-9\.,\s\-&\']+$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (!pat.exec(document.forms[formName].elements[fieldName].value)) {
    document.forms[formName].elements[fieldName].focus();
    alert (fieldPrompt+" only letters, numbers, ampersand, comma, period, apostrophe, hyphen are permitted.");
    return 0;
  }
  var pat = /^\s*[a-zA-Z0-9\.,\-&\']+\s+[a-zA-Z0-9\.,\-&\s\']+$/;
  if (!pat.exec(document.forms[formName].elements[fieldName].value)) {
    document.forms[formName].elements[fieldName].focus();
    alert (fieldPrompt+" must contain two names.");
    return 0;
  }
  return 1;
}

function VerifyName(formName,fieldName,fieldPrompt) 
{
  var pat = /^\s*[a-zA-Z0-9\.,\s\-&\']+$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (!pat.exec(document.forms[formName].elements[fieldName].value)) {
    document.forms[formName].elements[fieldName].focus();
    alert (fieldPrompt+" only letters, numbers, ampersand, comma, period, apostrophe, hyphen are permitted.");
    return 0;
  }
  return 1;
}


function VerifyEmail(formName,fieldName,fieldPrompt) 
{
  var pat = /[\w-_]+@[\w-_]+\.\w{2,}/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (!pat.exec(document.forms[formName].elements[fieldName].value)) {
    document.forms[formName].elements[fieldName].focus();
    alert ("Please enter a valid "+fieldPrompt);
    return 0;
  }
  return 1;
}

function VerifyTAXID(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{2})-(\d{7})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    return 1;
  }
  document.forms[formName].elements[fieldName].focus();
  alert (fieldPrompt+" must contain only digits (0..9) and dashes (-) in the form 99-9999999.");
  return 0;
}

function VerifyIPMASK(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    //return 1;
  }
  if (parseInt(RegExp.$1,10) >= 0 && parseInt(RegExp.$1,10) <= 255) {
    if (parseInt(RegExp.$2,10) >= 0 && parseInt(RegExp.$2,10) <= 255) {
      if (parseInt(RegExp.$3,10) >= 0 && parseInt(RegExp.$3,10) <= 255) {
        if (parseInt(RegExp.$4,10) >= 0 && parseInt(RegExp.$4,10) <= 255) {
          return 1
        }
      }
    }
  }
  document.forms[formName].elements[fieldName].focus();
  alert (fieldPrompt+" must contain only digits (0..9) and dots (.) in the form 999.999.999.999. Each number must be between 001 - 255");
  return 0;
}

function VerifyIPADDR(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    //return 1;
  }
  if (parseInt(RegExp.$1,10) >= 0 && parseInt(RegExp.$1,10) <= 254) {
    if (parseInt(RegExp.$2,10) >= 0 && parseInt(RegExp.$2,10) <= 254) {
      if (parseInt(RegExp.$3,10) >= 0 && parseInt(RegExp.$3,10) <= 254) {
        if (parseInt(RegExp.$4,10) >= 0 && parseInt(RegExp.$4,10) <= 254) {
          return 1
        }
      }
    }
  }
  document.forms[formName].elements[fieldName].focus();
  alert (fieldPrompt+" must contain only digits (0..9) and dots (.) in the form 999.999.999.999. Each number must be between 001 - 254");
  return 0;
}

function VerifySSN(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{3})-(\d{2})-(\d{4})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    return 1;
  }
  document.forms[formName].elements[fieldName].focus();
  alert (fieldPrompt+" must contain only digits (0..9) and dashes (-) in the form 999-99-9999.");
  return 0;
}

function VerifyPhone(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{3})-(\d{3})-(\d{4})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    return 1;
  }
  document.forms[formName].elements[fieldName].focus();
  alert ("Please enter a valid phone number (999-999-9999) for "+fieldPrompt);
  return 0;
}

function VerifyPhoneExt(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{3})-(\d{3})-(\d{4}).*$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    return 1;
  }
  document.forms[formName].elements[fieldName].focus();
  alert ("Please enter a valid phone number (999-999-9999 [ext]) for "+fieldPrompt);
  return 0;
}

function DaysInMonth(mon,year) 
{
  var mondays = [31,28,31,30,31,30,31,31,30,31,30,31];

  if (mon != 2) {
    return mondays[mon-1];
  } else {
    if (year % 400 == 0) {
      return 29;
    } else {
      if (year % 4 == 0) {
        return 29;
      } else {
        return 28;
      }
    } 
  }
}

function VerifyDateTimeSec(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    //alert('1:'+RegExp.$1); 
    //alert('2:'+RegExp.$2); 
    //alert('3:'+RegExp.$3); 
    if (parseInt(RegExp.$1,10) > 0 && parseInt(RegExp.$1,10) < 13) {
      if (parseInt(RegExp.$2,10) > 0 && parseInt(RegExp.$2,10) <= DaysInMonth(RegExp.$1,RegExp.$3)) {
        if (parseInt(RegExp.$3,10) > 0 && parseInt(RegExp.$3,10) < 9999) {
          if (parseInt(RegExp.$4,10) >= 0 && parseInt(RegExp.$4,10) < 24) {
            if (parseInt(RegExp.$5,10) >= 0 && parseInt(RegExp.$5,10) <= 60) {
              if (parseInt(RegExp.$6,10) >= 0 && parseInt(RegExp.$6,10) <= 60) {
                return 1;
              } else {
                document.forms[formName].elements[fieldName].focus();
                alert ("Please enter valid seconds for "+fieldPrompt);
                return 0;
              }
            } else {
              document.forms[formName].elements[fieldName].focus();
              alert ("Please enter valid minutes for "+fieldPrompt);
              return 0;
            }
          } else {
            document.forms[formName].elements[fieldName].focus();
            alert ("Please enter valid hours for "+fieldPrompt);
            return 0;
          }
        } else {
          document.forms[formName].elements[fieldName].focus();
          alert ("Please enter a valid year for "+fieldPrompt);
          return 0;
        }
      } else {
        document.forms[formName].elements[fieldName].focus();
        alert ("Please enter a valid day for "+fieldPrompt);
        return 0;
      }
    } else {
      document.forms[formName].elements[fieldName].focus();
      alert ("Please enter a valid month for "+fieldPrompt);
      return 0;
    }
  }
  document.forms[formName].elements[fieldName].focus();
  alert ("Please enter a valid datetime (MM/DD/YYYY HH:MM) for "+fieldPrompt);
  return 0;
}

function VerifyDateTime(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    //alert('1:'+RegExp.$1); 
    //alert('2:'+RegExp.$2); 
    //alert('3:'+RegExp.$3); 
    if (parseInt(RegExp.$1,10) > 0 && parseInt(RegExp.$1,10) < 13) {
      if (parseInt(RegExp.$2,10) > 0 && parseInt(RegExp.$2,10) <= DaysInMonth(RegExp.$1,RegExp.$3)) {
        if (parseInt(RegExp.$3,10) > 0 && parseInt(RegExp.$3,10) < 9999) {
          if (parseInt(RegExp.$4,10) >= 0 && parseInt(RegExp.$4,10) < 24) {
            if (parseInt(RegExp.$5,10) >= 0 && parseInt(RegExp.$5,10) <= 60) {
              return 1;
              //if (parseInt(RegExp.$6,10) >= 0 && parseInt(RegExp.$6,10) <= 60) {
              //  return 1;
              //} else {
              //  document.forms[formName].elements[fieldName].focus();
              //  alert ("Please enter valid seconds for "+fieldPrompt);
              //  return 0;
              //}
            } else {
              document.forms[formName].elements[fieldName].focus();
              alert ("Please enter valid minutes for "+fieldPrompt);
              return 0;
            }
          } else {
            document.forms[formName].elements[fieldName].focus();
            alert ("Please enter valid hours for "+fieldPrompt);
            return 0;
          }
        } else {
          document.forms[formName].elements[fieldName].focus();
          alert ("Please enter a valid year for "+fieldPrompt);
          return 0;
        }
      } else {
        document.forms[formName].elements[fieldName].focus();
        alert ("Please enter a valid day for "+fieldPrompt);
        return 0;
      }
    } else {
      document.forms[formName].elements[fieldName].focus();
      alert ("Please enter a valid month for "+fieldPrompt);
      return 0;
    }
  }
  document.forms[formName].elements[fieldName].focus();
  alert ("Please enter a valid datetime (MM/DD/YYYY HH:MM) for "+fieldPrompt);
  return 0;
}

function VerifyTime(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{2}):(\d{2})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    //alert('1:'+RegExp.$1); 
    //alert('2:'+RegExp.$2); 
    //alert('3:'+RegExp.$3); 
    if (parseInt(RegExp.$1,10) >= 0 && parseInt(RegExp.$1,10) < 24) {
      if (parseInt(RegExp.$2,10) >= 0 && parseInt(RegExp.$2,10) <= 60) {
        //if (parseInt(RegExp.$3,10) >= 0 && parseInt(RegExp.$3,10) <= 60) {
          return 1;
        //} else {
        //  document.forms[formName].elements[fieldName].focus();
        //  alert ("Please enter valid seconds for "+fieldPrompt);
        //  return 0;
        //}
      } else {
        document.forms[formName].elements[fieldName].focus();
        alert ("Please enter valid minutes for "+fieldPrompt);
        return 0;
      }
    } else {
      document.forms[formName].elements[fieldName].focus();
      alert ("Please enter valid hours for "+fieldPrompt);
      return 0;
    }
  }
  document.forms[formName].elements[fieldName].focus();
  alert ("Please enter a valid time (HH:MM) for "+fieldPrompt);
  return 0;
}


function VerifyDate(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{1,})\/(\d{1,})\/(\d{4})$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    //alert('1:'+RegExp.$1); 
    //alert('2:'+RegExp.$2); 
    //alert('3:'+RegExp.$3); 
    if (parseInt(RegExp.$1,10) > 0 && parseInt(RegExp.$1,10) < 13) {
      if (parseInt(RegExp.$2,10) > 0 && parseInt(RegExp.$2,10) <= DaysInMonth(RegExp.$1,RegExp.$3)) {
        if (parseInt(RegExp.$3,10) > 0 && parseInt(RegExp.$3,10) < 9999) {
          return 1;
        } else {
          document.forms[formName].elements[fieldName].focus();
          alert ("Please enter a valid year for "+fieldPrompt);
          return 0;
        }
      } else {
        document.forms[formName].elements[fieldName].focus();
        alert ("Please enter a valid day for "+fieldPrompt);
        return 0;
      }
    } else {
      document.forms[formName].elements[fieldName].focus();
      alert ("Please enter a valid month for "+fieldPrompt);
      return 0;
    }
  }
  document.forms[formName].elements[fieldName].focus();
  alert ("Please enter a valid date (MM/DD/YYYY) for "+fieldPrompt);
  return 0;
}

function VerifyZip(formName,fieldName,fieldPrompt) 
{
  // required check will not allow empty so trivial accept here.
  var pat = /^\d{5}$/;
  var pat2 = /^\d{5}-\d{4}$/;
  var pat3 = /^[a-zA-Z]\d{1}[a-zA-Z] \d{1}[a-zA-Z]\d{1}$/;

  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    return 1;
  } else {
    if (pat2.exec(document.forms[formName].elements[fieldName].value)) {
      return 1;
    }  else {
      if (pat3.exec(document.forms[formName].elements[fieldName].value)) {
        return 1;
      } 
    }
  }
  alert ("Enter either your 5 digit Zip code or your 10 digit Zip+4 code including the dash or your Canadian postal code.");
  document.forms[formName].elements[fieldName].focus();
  return 0;
}
    
function valid_RoutingTransit(number) {
  //var numString = new Array(number.split(/./));
  //debugMessage('number:'+number+"\n");
  var numString = new String(number);
  //debugMessage('numString:'+numString+"\n");
  var sum = new Number(0);
  for (var i=0;i<8;i++) {
    //debugMessage('numString.charAt(i):'+numString.charAt(i)+"\n");
    var  digit= new Number(numString.charAt(i));
      //debugMessage('numString[i]:'+digit+" sum:"+sum+"\n");
    if (i%3 == 0) {
      sum += (digit * 3);
      //debugMessage('digit:'+digit+" sum:"+sum+"\n");
    } 
    if (i%3 == 1) {
      sum += (digit * 7);
      //debugMessage('(*2) digit:'+digit+" sum:"+sum+"\n");
    }
    if (i%3 == 2) {
      sum += digit;
      //debugMessage('(*2) digit:'+digit+" sum:"+sum+"\n");
    }
  }
  var  digit= new Number(numString.charAt(8));
  sum += digit;
  //debugMessage('(*2) digit:'+digit+" sum:"+sum+"\n");
  if (sum % 10) {
    return 0;
  }
  return 1;
}

function VerifyACHAccount(formName,fieldName,fieldPrompt) 
{
  var pat = /^\d+$/;
  // required check will not allow empty so trivial accept here.
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    return 1;
  }
  alert (fieldPrompt+" must contain only digits (0..9).");
  document.forms[formName].elements[fieldName].focus();
  return 0;
}

function VerifyACHRT(formName,fieldName,fieldPrompt)
{
  var pat = /^\d{9}$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
  } else {
    alert("ACH Routing number must be a full nine digits, digits only (0..9). Do not enter blanks or dashes between the digits in your number.");
    document.forms[formName].elements[fieldName].focus();
    return 0;
  }
  if (valid_RoutingTransit(document.forms[formName].elements[fieldName].value)) {
    return 1;
  } else {
    alert("Invalid ACH Routing Number.");
    document.forms[formName].elements[fieldName].focus();
    return 0;
  }
}

function valid_MC_VISA_first(number) {
  //var numString = number.split(/./);
  var numString = number;
  var sum = new String('');
  for (var i=0;i<numString.length-1;i++) {
    var  digit= new Number(numString[i]);
      //debugMessage('numString[i]:'+digit+" sum:"+sum+"\n");
    if (i%2) {
      sum += digit.toString(10);
      //debugMessage('digit:'+digit+" sum:"+sum+"\n");
    } else {
      sum += (digit * 2).toString(10);
      //debugMessage('(*2) digit:'+digit+" sum:"+sum+"\n");
    }
  }
  var numSum = new Number(0);
  for (var i=0;i<sum.length-1;i++) {
    var  digit= new Number(sum[i]);
    numSum += digit;
  }


  var check = new Number(numString[numString.length-1]);
  //debugMessage('check:'+check+" sum:"+numSum+"\n");
  if (check == (10 - (numSum % 10))) {
  //debugMessage('check:'+check+" sum:"+numSum+"\n");
    return 1;
  }
  return 0;
}

function valid_CC_Luhn(numString) {
  //var numString = number.split(/./);
  var sum = new Number(0);
  var doubleIt = 0;
  for (var i=numString.length-1;i>=0;i--) {
    var  digit= new Number(numString.charAt(i));
      //debugMessage('numString[i]:'+digit+" sum:"+sum+"\n");
    if (doubleIt) {
      var addin = (digit * 2);
      addin = (addin > 9?addin-9:addin);
      sum += addin;
      //debugMessage('(*2) digit:'+digit+" sum:"+sum+"\n");
    } else {
      sum += digit;
      //debugMessage('digit:'+digit+" sum:"+sum+"\n");
    }
    doubleIt = !doubleIt;
  }
  if (sum % 10) {
    return 0;
  }
  return 1;
}

function VerifyCC(formName,fieldName,fieldPrompt) 
{
  var pat = /^\d{9,}$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
  } else {
    alert("Credit card number may contain only digits (0..9) Do not enter blanks or dashes between the digits in your credit card number.");
    document.forms[formName].elements[fieldName].focus();
    return 0;
  }
  if (valid_CC_Luhn(document.forms[formName].elements[fieldName].value)) {
    return 1;
  } else {
    alert("Invalid credit card number.");
    document.forms[formName].elements[fieldName].focus();
    return 0;
  }
}

function VerifyCCExpire(formName,fieldName,fieldPrompt) 
{
  var pat = /^(\d{2})\/(\d{2})$/;
  var thisDate = new Date();
  var yearNow = new Number(thisDate.getYear());
  var monNow = new Number(thisDate.getMonth());
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    var monForm = parseInt(RegExp.$1,10);
    var yearForm = parseInt(RegExp.$2,10);
    //alert(yearNow+":"+monNow+"::"+yearForm+":"+monForm);
    monNow++; //Month is zero based
    if (monForm < 1 || monForm > 12) {
      alert(fieldPrompt+" has an invalid month.");
      document.forms[formName].elements[fieldName].focus();
      return 0;
    } else {
      yearForm += 2000;
      if (yearNow < 2000) {
        yearNow += 1900;
      }
      if (yearForm == yearNow && monForm < monNow)  {
        alert(fieldPrompt+" is in the past.");
        document.forms[formName].elements[fieldName].focus();
        return 0;
      }
      if (yearForm < yearNow) {
        alert(fieldPrompt+" is in the past.");
        document.forms[formName].elements[fieldName].focus();
        return 0;
      } 
      if ((yearForm - yearNow) > 7) {
        alert(fieldPrompt+" too far in the future.");
        document.forms[formName].elements[fieldName].focus();
        return 0;
      } 
    }
  } else {
    alert(fieldPrompt+" is not valid should be of the form (MM/YY).");
    document.forms[formName].elements[fieldName].focus();
    return 0;
  }
  return 1;
}


function VerifyAccountNumber(formName,fieldName,fieldPrompt) 
{
  var pat = /^\d{1,}$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    return 1;
  } 
  alert("Account number must contain only digits (0..9) Do not enter blanks or dashes between the digits in your account number.");
  document.forms[formName].elements[fieldName].focus();
  return 0;
}


function VerifyColor(formName,fieldName,fieldPrompt) 
{
  return 1;
}

function VerifyIdentifier(formName,fieldName,fieldPrompt) 
{
  var pat = /^[A-Za-z0-9_]+$/;
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  if (pat.exec(document.forms[formName].elements[fieldName].value)) {
    return 1;
  } 
  alert("Identifiers may only contain a..z, A..Z, 0..9 and the '_' underscore charachter.");
  document.forms[formName].elements[fieldName].focus();
  return 0;
}
function VerifyOrderedNumbers(formName,startName,endName,prompt)
{

  var start = GetFieldData(formName,startName);
  var end = GetFieldData(formName,endName);
  if (end == '' || end == null || start == '' || start == null) {
    //alert('bailing');
    return 1;
  }
  //alert(start+":"+end);
  start = Number(start);
  end = Number(end);
  //alert(start+":"+end);
  if (start <= end) {
    return 1;
  } 
  alert ("Start "+prompt+" must be <= end "+prompt);
  return 0;
}

function VerifyOrderedTimes(formName,startName,endName,prompt)
{
  var date_pat = /(\d{2}):(\d{2})/;

  var start_date = GetFieldData(formName,startName);
  var end_date = GetFieldData(formName,endName);
  if (end_date == '' || end_date == null || start_date == '' || start_date == null) {
    //alert('bailing');
    return 1;
  }
 
  date_pat.exec(start_date);
  var start_string =  RegExp.$1 + RegExp.$2 + RegExp.$3;
  
  date_pat.exec(end_date);
  var end_string =   RegExp.$1 + RegExp.$2 + RegExp.$3;
  
  if (start_string > end_string) {
    alert ("Start "+prompt+" must be <= end "+prompt);
  } else {
    return 1;
  }
  return 0;
}

function VerifyOrderedDates(formName,startName,endName,prompt)
{
  var date_pat = /(\d{2})\/(\d{2})\/(\d{4})/;

  var start_date = GetFieldData(formName,startName);
  var end_date = GetFieldData(formName,endName);
  if (end_date == '' || end_date == null || start_date == '' || start_date == null) {
    //alert('bailing');
    return 1;
  }
 
  date_pat.exec(start_date);
  var start_string = RegExp.$3 + RegExp.$1 + RegExp.$2;
  
  date_pat.exec(end_date);
  var end_string = RegExp.$3 + RegExp.$1 + RegExp.$2;
  
  if (start_string > end_string) {
    alert ("Start "+prompt+" must be <= end "+prompt);
  } else {
    return 1;
  }
  return 0;
}

function VerifyOrderedDateTimes(formName,startName,endName,prompt)
{
  var date_pat = /(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2})/;

  var start_date = GetFieldData(formName,startName);
  var end_date = GetFieldData(formName,endName);
  if (end_date == '' || end_date == null || start_date == '' || start_date == null) {
    //alert('bailing');
    return 1;
  }
 
  date_pat.exec(start_date);
  var start_string = RegExp.$3 + RegExp.$1 + RegExp.$2 + RegExp.$4 + RegExp.$5;
  
  date_pat.exec(end_date);
  var end_string = RegExp.$3 + RegExp.$1 + RegExp.$2 + RegExp.$4 + RegExp.$5;
  
  if (start_string > end_string) {
    alert ("Start "+prompt+" must be <= end "+prompt);
  } else {
    return 1;
  }
  return 0;
}

var global_login_pwrules   = Number('');
var global_login_pw_length = Number('');
var global_login_pw_reuse   = Number('');
var global_login_pw_change = Number('');
var global_login_pw_caps = Number('');
var global_login_pw_lower = Number('');
var global_login_pw_digits = Number('');
var global_login_pw_spec = Number('');


function validatePWRulesOLD(focus,pw)
{
  if (global_login_pw_length > 0) {
    if (pw.length < global_login_pw_length) {
      alert('Password must be at least '+global_login_pw_length+' characters long.');
      //document.passwdform[focus].focus();
      return 0;
    }
  }
  if (global_login_pwrules == 1) {
    return 1;
  }
  if (global_login_pwrules == 2) {
    var pat = /[a-zA-Z]{1}/;
    var pat2 = /[0-9]{1}/;
    if (pat.exec(pw)) {
      if (pat2.exec(pw)) {
        return 1;
      }
    }
    alert('Password must contain both alpha and numeric characters');
    return 0;
  }
  if (global_login_pwrules == 3) {
    var pat = /[a-zA-Z]{1}/;
    var pat2 = /[0-9]{1}/;
    var pat3 = /[^a-zA-Z0-9]{1}/;
    if (pat.exec(pw)) {
      if (pat2.exec(pw)) {
        if (pat3.exec(pw)) {
          return 1;
        }
      }
    }
    alert('Password must contain alpha, numeric and special characters.');
    return 0;
  }
  return 1;
}

function validatePWRules(focus,pw)
{
  if (global_login_pw_length > 0) {
    if (pw.length < global_login_pw_length) {
      alert('Password must be at least '+global_login_pw_length+' characters long.');
      //document.passwdform[focus].focus();
      return 0;
    }
  }
  if (global_login_pw_caps == 0 && global_login_pw_lower == 0 && global_login_pw_digits == 0 && global_login_pw_spec == 0) {
    return 1;
  }
  var pat_lower = /[a-z]{1}/g;
  var pat_caps = /[A-Z]{1}/g;
  var pat_digits = /[0-9]{1}/g;
  var pat_spec = /[^a-zA-Z0-9]{1}/g;
  var count_of_matches = 0;
  var result;

  while ((result = pat_lower.exec(pw)) != null) {
    count_of_matches++;
  }
  if (count_of_matches < global_login_pw_lower) {
    alert('Password must contain '+global_login_pw_lower+' lower case characters');
    return 0;
  }
  count_of_matches = 0;
  while ((result = pat_caps.exec(pw)) != null) {
    count_of_matches++;
  }
  if (count_of_matches < global_login_pw_caps) {
    alert('Password must contain '+global_login_pw_caps+' upper case characters');
    return 0;
  }
  count_of_matches = 0;
  while ((result = pat_digits.exec(pw)) != null) {
    count_of_matches++;
  }
  if (count_of_matches < global_login_pw_digits) {
    alert('Password must contain '+global_login_pw_digits+' digits');
    return 0;
  }
  count_of_matches = 0;
  while ((result = pat_spec.exec(pw)) != null) {
    count_of_matches++;
  }
  if (count_of_matches < global_login_pw_spec) {
    alert('Password must contain '+global_login_pw_spec+' special characters');
    return 0;
  }
  return 1;
}

function VerifyPassword(formName,fieldName,fieldPrompt)
{
  // required check will not allow empty so trivial accept here.
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  var pw = GetFieldData(formName,fieldName);
  var is_good_pw = 1;
  if (global_login_pwrules > 0) {
    if (validatePWRulesOLD('logon_pw',String(pw))) {
      return 1;
    }
  } else {
    if (validatePWRules('logon_pw',String(pw))) {
      return 1;
    }
  }
  return 0;
}

function ValidateNameLength(formName,fieldName,fieldPrompt)
{
  // get the value from the field
  var x=document.getElementsByName(fieldName);
  var str = x[0].value;
  
  // get the basename from the value
  var pattern = /[\\\/]+/;
  var result = str.split(pattern);
  var basename = result[result.length -1];  
  
  var err = '';
  // check the length of the basename
  // if too long then alert & clear
  // if the right length then continue as normal
  if (basename.length > 32) {
    err += "The "+fieldPrompt+" specified is longer than 32 characters. Please shorten the name.  ";
  }
  
  pattern = /^[A-Za-z0-9_\-\.]*$/;
  if (basename.match(pattern) == null) {
    err += fieldPrompt+" contains illegal characters. "+fieldPrompt+" limited to: [A-Za-z0-9_-.]. Space is not a legal character.";
  }
  
  if (err.length > 0) {
    alert(err);
    // clear the field
    // return focus
    var target = x[0];
    target.value = '';
    target.focus();
    return(0);
  }
  return(1);  
}

function VerifyFilename(formName,fieldName,fieldPrompt)
{
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  // get the value from the field
  var x=document.getElementsByName(fieldName);
  var str = x[0].value;
  
  // get the basename from the value
  var pattern = /[\\\/]+/;
  var result = str.split(pattern);
  var basename = result[result.length -1];  
  var pat = /^[A-Za-z0-9_\-.]+$/;
  // required check will not allow empty so trivial accept here.
  if (basename.match(pat) != null) {
    return 1;
  } 
  alert("File names may only contain letters, numbers, period, underscore and dash.");

  document.forms[formName].elements[fieldName].value = '';
  document.forms[formName].elements[fieldName].focus();
  return 0;
}

function VerifyFilenameImage(formName,fieldName,fieldPrompt)
{
  if (document.forms[formName].elements[fieldName].value == '' || document.forms[formName].elements[fieldName].value == null) {
    return 1;
  }
  // get the value from the field
  var x=document.getElementsByName(fieldName);
  var str = x[0].value;
  
  // get the basename from the value
  var pattern = /[\\\/]+/;
  var result = str.split(pattern);
  var basename = result[result.length -1];  
  var pat = /^[A-Za-z0-9_\-.]+$/;
  // required check will not allow empty so trivial accept here.
  if (basename.match(pat) != null) {
    result = basename.split(/\./);
    var ext = result[result.length -1];  
    ext = ext.toLowerCase();
    if (ext == 'jpg' || ext == 'bmp' || ext == 'jpeg' || ext == 'gif' || ext == 'png') {
      return 1;
    } else {
      alert("Only bmp, jpg, jpeg, gif or png files may be submitted as images.");
    }
  }  else {
    alert("File names may only contain letters, numbers, period, underscore and dash.");
  }
  document.forms[formName].elements[fieldName].value = '';
  document.forms[formName].elements[fieldName].focus();
  return 0;
}


