<!--
////////////////////////////////////////////////////////////////////////////////
// File name: .utitlities.js                                                  //
//   JavaScript functions for image preloading and data input validation      //
//============================================================================//
// Author: Harry Zhu  ©2000, GreatLodge.com                                   //
// Modifications                                                              //
// 03/19/2001, Harry Zhu, Re-created from navimages.js. Added validation      //
//      utility functions                                                     //
////////////////////////////////////////////////////////////////////////////////
// preload Image
function preloadImage( ImgNames ) {
  if (document.images) {
    preImg = new Array(ImgNames.length)
    for (i=0; i<ImgNames.length; i++) {
      preImgOn[i] = new Image()
      preImgOn[i].src = ImgNames[i]
    }
  }
}
// function to 'activate' images.
function imgOn(imgName, imgSrc) {
  if (document.images) {
    document.images[imgName].src = imgSrc
  }
}
// function to 'deactivate' images.
function imgOff(imgName, imgSrc) {
  if (document.images) {
    document.images[imgName].src = imgSrc
  }
}
// Data validation functions
// this can be used as putting onChange="rmSpaces(this)" in text field
function rmSpaces (e) {
  var etype = e.type
  if (etype == 'text' || etype == 'textarea' ||  etype == 'hidden') {
    e.value = e.value.replace(/\s{2,}/g, ' ').replace(/\s+$/, '').replace(/^\s+/, '').replace(/`/g,"'")
  }
}
function rmSpacesUp (e) {
  rmSpaces(e)
  e.value = e.value.replace(/^[a-z]/, e.value.charAt(0).toUpperCase())
}
function rmSpacesInitUp (e) {
  rmSpaces(e)
  var earray = e.value.split(" ")
  var newvalue = ''
  for (i=0; i<earray.length; i++) {
    if ( earray[i].substr(0,2).toLowerCase()!='mc' 
      && earray[i].substr(0,2).toLowerCase()!='le' ) { earray[i] = earray[i].toLowerCase() }
    earray[i] = earray[i].replace(/^[a-z]/, earray[i].charAt(0).toUpperCase())
    newvalue += (newvalue ? ' ' : '') + earray[i]
  }
  e.value = newvalue
}
function rmChars( e ) {
  rmSpaces(e)
  e.value = e.value.replace(/\D*/g, '')
}
function rmSpChars( e ) {
  rmSpaces(e)
  e.value = e.value.replace(/[^\w_@\-\.]/g, '')
}
function rmSpCharsUp( e ) {
  rmSpChars(e)
  e.value = e.value.toUpperCase()
}
function rmSpecialChars( e ) {
  rmSpaces(e)
  e.value = e.value.replace(/[^\w]/g, '')
}
function rmSpecialCharsUp( e ) {
  rmSpecialChars(e)
  e.value = e.value.toUpperCase()
}
function eStatus (e) {
  var etype = e.type
  var estatus = Array(5)
//alert(etype)
  if (etype == 'text' || etype == 'password' || etype == 'hidden') {
    var evalue = e.value
    estatus[0] = evalue.length                     // isNotNull?
    if ( evalue.length > 0 ) {
      estatus[1] = isNaN(evalue) ? 0 : 1           // isNumber?
      if (!isNaN(evalue)) {
        estatus[2] = Math.abs(evalue%1)>0 ? 0 : 1  // isInterger?
        estatus[3] = evalue<0 ? 0 : 1              // isNonNegative?
        estatus[4] = evalue>0 ? 1 : 0              // isPositive?
      }
    }
  }
  return estatus   
}
function isEmpty (e) { return eStatus(e)[0] ? false : true }
function isNotEmpty (e) { return !isEmpty(e) }
function getLength (e) { return eStatus(e)[0] }
function isNumber (e) { return eStatus(e)[1] ? true : false }
function isNotNumber (e) { return !isNumber(e) }
function isInteger (e) { return eStatus(e)[2] ? true : false }
function isNonNegative (e) { return eStatus(e)[3] ? true : false }
function isNegative (e) { return isNumber(e) && !isNonNegative(e) }
function isNonNegativeInteger (e) { return isNonNegative(e) && isInteger(e)}
function isPositive (e) { return eStatus(e)[4] ? true : false }
function isNonPositive (e) { return isNumber(e) && !isPositive(e) }
function isPositiveInteger (e) { return isInteger(e) && isPositive(e) }
function isNonPositiveInteger (e) { return isNonPositive(e) && isInteger(e) }
function isValidDate(yyyy, mm, dd) {
  var d = new Date(yyyy, mm-1, dd)
  var syyyy = d.getYear() + (d.getYear() < 1900 ? 1900 : 0)
  var smm = d.getMonth() + 1
  var sdd = d.getDate()
// alert("year: "+yyyy+", "+syyyy+"; month: "+mm+", "+smm+"; day: "+dd+", "+sdd)
  if (yyyy != syyyy || mm != smm || sdd != dd) { return false }
  return true
}
function isAllCharSame (e) {
  rmSpecialChars(e)
  var evalue = e.value
  var em = evalue.split("")
  var notsame = 0
  for (i=0; i<em.length-1; i++) {
    if (em[i+1] != em[i]) { notsame++ }
  }
  if (notsame > 0) { return false }
  return true
}
function calculateAge(yyyy, mm, dd) {
  var now = new Date()
  var syyyy = now.getYear() + (now.getYear()<1900 ? 1900 : 0)
  var smm = now.getMonth() + 1
  var sdd = now.getDate()
  var age = syyyy - yyyy
  if (smm<mm || (smm==mm && sdd<dd ) ) { age-- }
  return age
}
function fmAddress( e ) {
  rmSpacesInitUp(e)
  var evalue = e.value
  e.value = e.value.replace(/[^\w\-\.\'\s]/g, '')
}
function fmUSZip( e ) {
  rmChars(e)
  var evalue = e.value
  if (getLength(e)>=9) {
    e.value = evalue.substr(0,5) + "-" + evalue.substr(5,4)
  } else if (getLength(e)>=5) {
    e.value = evalue.substr(0,5)
  }
}
function isUSZip ( e ) {
  fmUSZip(e)
  if (getLength(e)!=5 && getLength(e)!=10) { return false }
  return true
}
function fmMoney ( e ) {
  var t = parseFloat(e.value.replace(/[^\d\.]/g,''))
  if (!isNaN(t)) {
    var ti = Math.floor(t)
    var tf = new String(Math.round((t - ti)*100 + 100));
    e.value = ti + '.' + tf.substr(1,2)
  } else { e.value = '' }
}
function fmEmail( e ) {
  rmSpChars(e)
  var evalue = e.value.replace(/\.{2,}/g, "\.").replace(/\.$/,'')
  if (evalue.length) {
    var em = evalue.split("@")
    var emstr = em[0]
    var dnstr = ''
    if (em.length>1) {
      var em1 = em.slice(0,em.length-1)
      emstr = em1.join("")
      if ( em[em.length-1].length ) {
        dnstr = em[em.length-1]
        dn = em[em.length-1].split("\.")
        if (dn.length>1 && dn[dn.length-1].length>3) {
          dn[dn.length-1] = dn[dn.length-1].substr(0,3)
          dnstr = dn.join("\.")
        }
      }
    }
    evalue = emstr + "@" + dnstr
    e.value = evalue.toLowerCase()
  }
}
function isEmail( e ) {
  fmEmail(e)
  var evalue = e.value
  var em = evalue.split("@")
  if (em.length != 2 || !em[em.length-1].length) { return false }
  var dn = em[1].split("\.")
  if ( dn.length < 2 || dn.length > 5 ||dn[dn.length-1].length > 3 
    || dn[dn.length-1].length < 2) { return false }
  return true
}
function keyUp (e, n, next_e, fm) {
  if (!fm) { fm = 'forms[0]' }
  var frm = eval('document.'+fm)
  if (e.value.length==n && next_e != '') { eval('frm.'+next_e+'.focus()') }
}
function popMsg(eId, evt, d_top, d_left) {
  stdBrowser = (document.getElementById) ? true : false
  msgStyle = (stdBrowser) ? document.getElementById(eId).style : eval("document." + eId)
  if (evt) {
    if (document.all) {
      msgStyle.pixelTop = Math.min(300,Math.max(10,parseInt(evt.y)+d_top))
      msgStyle.pixelLeft= Math.min(300,Math.max(2,parseInt(evt.x)+d_left))
    } else {
      if (stdBrowser) {
        msgStyle.top = Math.min(300,Math.max(10,parseInt(evt.pageY)+d_top))+"px"
        msgStyle.left= Math.min(300,Math.max(2,parseInt(evt.pageX)+d_left))+"px"
      } else {
        msgStyle.top = Math.min(300,Math.max(10,parseInt(evt.pageY)+d_top))
        msgStyle.left= Math.min(300,Math.max(2,parseInt(evt.pageX)+d_left))
      }
    }
    msgStyle.visibility = "visible"
  } else {
    msgStyle.visibility = "hidden"
  }
}
// -->
