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;
      }
    }
  }
  
  if(emsg) alert(emsg);
  return valid;
}