/*
 * Validate 1.0 - JavaScript Form Validation
 *
 * Copyright (c) 2006 Bjoern Mrotzeck (freshbytes.de)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 */ 
function attrib(obj,key)
{
  if(obj.attributes&&obj.attributes[key]) return obj.attributes[key].value;
  if(obj[key]) return obj[key];
}

function validate(objForm)
{
  var e,k,r,i,valid=true,emsg="";

  // zahlen mit komma umwandeln (punkt)
  var komma=/^\d+,\d+$/;
  for(i=0;e=objForm.elements[i];i++)
    if(e.type=="text"&&komma.test(e.value))
      e.value=e.value.replace(",",".");

  // feldweise nach schema validieren, wenn vorhanden
  for(i=0;e=objForm.elements[i];i++)
  {
    if((e.type=="text"||e.type=="textarea")&&attrib(e,"pattern"))
    {
      r=new RegExp(attrib(e,"pattern"));
      if(!r.test(e.value))
      {
        if(attrib(e,"msg"))
          emsg+=attrib(e,"msg")+"\n";
        valid=false;
      }
    }
    else if(e.tagName.toLowerCase()=="select"&&attrib(e,"required"))
    {
      if(!e.options[e.selectedIndex].value)
      {
        if(attrib(e,"msg"))
          emsg+=attrib(e,"msg")+"\n";
        valid=false;
      }
    }
    else if(e.type=="text"&&attrib(e,"required"))
    {
      if(!e.value)
      {
        if(attrib(e,"msg"))
          emsg+=attrib(e,"msg")+"\n";
        valid=false;
      }
    }
    else if(e.type=="password"&&/^_([a-z0-9_]*)password$/i.test(e.name))
    {
      var prefix=RegExp.$1;
      if(attrib(e,"required")&&!e.value)
      {
        if(attrib(e,"msg"))
          emsg+=attrib(e,"msg")+"\n";
        else
          emsg+="Es muss ein Passwort angegeben werden.\n";
        valid=false;
      }
      else if((k=e.form.elements["_"+prefix+"passwordkontrolle"])&&e.value&&e.value!=k.value)
      {
        if(attrib(k,"msg"))
          emsg+=attrib(k,"msg")+"\n";
        else
          emsg+="Das Passwort stimmt nicht überein.\n";
        valid=false;
      }
    }
  }
  
  if(emsg) alert(emsg);
  return valid;
}
