function fieldname(fld)
{ // get the field label text or name
  if(fld.id && document.getElementsByTagName)
  {
    for(var i= 0, lbl= document.getElementsByTagName('LABEL'); i < lbl.length; i++)
      if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
    for(var i= 0, lbl= document.getElementsByTagName('label'); i < lbl.length; i++)
      if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
  }
  return fld.name;
}

function requireValue(fld)
{ // disallow a blank field
  if(fld.disabled) return true;
  if(!fld.value.length)
  { status= 'El Campo Carnet/ID no se debe dejar en blanco.'; return false; }
  return true;
}


function ValidarCarnet(fld,sep)
{ 
  if(!fld.value.length||fld.disabled) return true; 
  if(typeof(sep)=='undefined') sep= '-';
  var ext= '', val= fld.value.toLowerCase();
  if(val.indexOf('x') > 0)
  {
    ext= ' x'+val.substr(val.indexOf('x')).replace(/\D/g,'');
    val= val.substr(0,val.indexOf('x'));
  }
  val= val.replace(/\D/g,'');
  if(val.length == 8)
  {
    fld.value= val.substring(0,2) + sep + val.substring(2,4) + sep + val.substring(4,20) + ext;
    return true;
  }
  if(val.length < 8)
  {
    status= 'Carnet/ID Errado.';
    return false;
  }
  status= 'Carnet/ID Errado.';
  return false;
}

function autocheckByName(frm) 
{ // uses names of form elements to determine type 
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
    if(!el.type) continue;
        if(( el.name.substring(0,1) == el.name.substring(0,1).toUpperCase() || 
        nameContains(el.name,'Required')) && el.value.length == 0)
      { alert('El Campo Carnet/ID no se debe dejar en blanco.'); el.focus(); return false; }
        if( ( nameContains(el.name,'Phone')) &&
        !ValidarCarnet(el))
      { alert(status); el.focus(); return false; }
  
      }
  for(var index= 0; index < frm.elements.length; index++)
    if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
  return true;
}

function isMemberOf(elem,classname)
{ // checks to see if elem is a member of the (style) class 
  // trivial cases first: no membership or simple equality
  if(!elem.className)
    return false
  else if(elem.className == classname)
    return true;
  else if(elem.className.indexOf(' ') > -1)
  { // multiple class names; use split, if avail 
    if(parseInt(navigator.appVersion) >= 4)
    {
      var names= elem.className.split(' ');
      for(var index= 0; index < names.length; index++)
        if(names[index] == classname)
          return true;
    }
    // older browsers can fake it 
    // WARNING: "fine" can be found in "oldRefined"
    else if(elem.className.indexOf(classname) > -1)
      return true;
  }
  return false;
}

function checkClass(el)
{ // validate the field, based on class membership
  if(el.type == 'text' || el.type == 'password')
  { // text fields 
    if(isMemberOf(el,'phone') && !ValidarCarnet(el)) return false;
  } 
  return true;
}


function autocheckByClass(frm) 
{ // uses the CSS class of form elements to determine type 
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
    if(!el.type) continue;
    if(!checkClass(frm.elements[index])) 
    { alert(status); frm.elements[index].focus(); return false; }
  }
  for(var index= 0; index < frm.elements.length; index++)
    if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
  return true;
}

function autocheckByBlur(frm)
{ // uses the onBlur handler of form elements to check value 
  status= '';
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
    if(!el.type) continue;
    if(el.type != 'hidden' && el.name && el.onblur)
    {
      el.onblur();
      if(status) { alert(status); el.focus(); return false; }
    }
  }
  for(var index= 0; index < frm.elements.length; index++)
    if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
  return true;
}

function canCheckByBlur(frm)
{ // determines whether programmatic invocation of form element onblur is available
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
    if(!el.type) continue;
    if(el.type != 'hidden' && el.name && typeof(el.onblur)=='function') return true;
  }
  return false;
}

function autocheck(frm)
{ // uses the best available method to check form values 
  var bchar= navigator.appName.substring(0,1);
  if(isMemberOf(frm,'autocheck'))
  { return autocheckByClass(frm); }
  else if(canCheckByBlur(frm))
  { return autocheckByBlur(frm); }
  else
  { return autocheckByName(frm); }
}
