var nbsp = 160;    // non-breaking space char
var node_text = 3; // DOM text node-type
var emptyString = /^\s*$/
var glb_vfld;      // retain vfld for timer thread

function setFocusDelayed(vfld)
{
  glb_vfld.focus()
}

function setfocus(vfld)
{
  glb_vfld = vfld;
  setTimeout( 'setFocusDelayed()', 100 );
}

function display(elmid,msgtype,msg){
 
  var message;
  if (emptyString.test(msg)) 
    message = String.fromCharCode(nbsp);    
  else  
    message = msg;

  var elem = document.getElementById(elmid);
  elem.firstChild.nodeValue = message;  
  
};


var proceed = 2;  

function checkField (field, elmid,reqd)   {
  if (!document.getElementById) 
    return true;  // not available on this browser - leave validation to the server
  var elem = document.getElementById(elmid);
  if (!elem.firstChild)
    return true;  // not available on this browser 
  if (elem.firstChild.nodeType != node_text)
    return true;  // ifld is wrong type of node  

  if (emptyString.test(field.value)) {
    if (reqd) {
      display (elmid, "error", " * Required");  
      setfocus(field);
      return false;
    }
    else {
      display (elmid, "warn", "");   // OK
      return true;  
    }
  }
  return proceed;
}

function validatePresent(field,elmid)  {
  var stat = checkField (field, elmid, true);
  if (stat != proceed) return stat;

  display (elmid, "warn", "");  
  return true;
};

