var istOpera = navigator.userAgent.indexOf('Opera') != -1; 

// interpretiert einen String als Zahl
// ohne Tausendertrennzeichen
// gibt 0 zurück, wenn leer
// gibt int ODER float zurück
function numWert(einString)
{
  if(einString==null) return 0;
  einString=trim(einString);
  if(einString=="") return 0;
  if(einString.indexOf(",")>-1){
    einString=einString.replace(/,/,".");
    if(isNaN(einString)) return 0;
    return parseFloat(einString);
  }
  if(isNaN(einString)) return 0;
  return parseInt(einString);
}

// formatiert nach dem Muster 1.000,20
// oder macht aus solchen Ausdrücken Zahlen
// Korrektheit des Ausdrucks wird vorausgesetzt
function tausenderNotation(formatieren, einWert)
{
  var erg;
  var nachKomma;
  var vorKomma;
  var zahlString;
  var posPunkt;
  var posKomma;

  if(formatieren){
    // Wenn eine Zahl formatiert werden soll
    zahlString=""+einWert;
    if(trim(zahlString)=="") return "0,00";
    if(isNaN(einWert)){
      return "0,00";
    }
    posPunkt=zahlString.indexOf(".");
    if(posPunkt==-1){
      vorKomma=zahlString;
      nachKomma="00";
    }else{
      vorKomma=zahlString.substring(0,posPunkt);
      nachKomma=zahlString.substring(posPunkt+1);
      if(nachKomma.length==1) nachKomma+="0";
    }
    if(vorKomma.length>3){
      erg=vorKomma.substring(0,vorKomma.length-3) + "." +
          vorKomma.substring(vorKomma.length-3) + "," +
          nachKomma;
    }else{
      if(vorKomma=="") vorKomma="0";
      erg=vorKomma+","+nachKomma;
    }
  }else{
    // Wenn aus einem formatierten Ausdruck eine Zahl
    // werden soll
    erg=trim(einWert);
    posPunkt=erg.indexOf(".");
    posKomma=erg.indexOf(",");
    if(erg=="") return 0;
    if(posPunkt==-1 && posKomma==-1){
       if(isNaN(erg)){
         return 0; // wenn keine Zahl
       }else{
         return parseInt(erg); // wenn einfache Ganzzahl
       }
    }
    if(posPunkt>erg.length-3 ||
       (posKomma>0 && posKomma<erg.length-3)){
       return 0; // wenn offensichtlich nicht wohlgeformt
    }
    erg=erg.replace(/\./,"");
    erg=erg.replace(/,/,".");
    erg=parseFloat(erg);
  }
  return erg;
}


// macht aus einer Eingabe in einem Zahlenfeld
// eine gültige Eingabe nach 1.000,00-Format
// und aktualisiert das Feld damit
function formatiereZahlenFeld(feldname)
{
  var feldInhalt=eval("document.forms[0]."+feldname+".value");
  var neuerFeldWert=formatiereZahlenString(feldInhalt);
  eval("document.forms[0]."+feldname+".value=neuerFeldWert;");
}

// erzeugt aus einem String eine gültige Zahl nach
// 1.000,00-Format. Wenn der String ungültig ist,
// wird 0,00 zurückgegeben und eine Fehlermeldung
// gezeigt
function formatiereZahlenString(feldInhalt)
{
  var neuerInhalt="";
  var posPunkt;
  var posKomma;
  var zulaessigeZeichen="0123456789.,";
  var komma=false;
  var punkt=false;
  var c;
  var meldung="Zahlen müssen nach dem Muster\n1.234,56 eingegeben werden!";

  feldInhalt=trim(feldInhalt);

  if(feldInhalt==""){
    return "0,00";
  }else{
    for(var i=0;i<feldInhalt.length;i++){
      c=feldInhalt.substr(i,1);
      if(zulaessigeZeichen.indexOf(c)>-1){
        if(c=="."){
          if(punkt){
            alert(meldung);
            return "0,00";
          }
          posPunkt=i;
          punkt=true;
        }else if(c==","){
          if(komma){
            alert(meldung);
            return "0,00";
          }
          posKomma=i;
          komma=true;
        }
      }else{
        alert(meldung);
        return "0,00";
      }
    }
    if(punkt && komma && posKomma<posPunkt){
      alert(meldung);
      return "0,00";
    }else if (!punkt && !komma){
      return tausenderNotation(true,parseInt(feldInhalt));
    }else{
      //alert(feldInhalt+" "+feldInhalt.replace("/./",""));
      feldInhalt=feldInhalt.replace(/\./,"");
      if(komma){
        return tausenderNotation(true,zweiStellen(feldInhalt));
      }else{
        return tausenderNotation(true,parseInt(feldInhalt));
      }
    }
  }

}

// erwartet einen Zahlenstring, der ein Komma enthält
// der Nachkommaanteil wird auf zwei Stellen gerundet
// gibt einen Zahlenstring mit Punkt zurück
function zweiStellen(zahlString)
{
  var posKomma=zahlString.indexOf(",");
  var vorKomma=zahlString.substring(0,posKomma);
  var nachKomma=zahlString.substring(posKomma+1);
  if(vorKomma=="") vorKomma="0";
  if(nachKomma==""){
    nachKomma="00";
  }else if(nachKomma.length==1){
    nachKomma+="0";
  }else if(nachKomma.length>2){
    var temp=""+Math.round(parseFloat("0."+nachKomma)*100)/100;
    nachKomma=temp.substring(2);
  }
  return vorKomma+"."+nachKomma;
}

function trim(text){
  var noSpace=false;
  var i;
  if (text==null || text=="") return "";
  text=""+text;
  for(i=0;i<text.length;i++){
    if(text.substring(i,i+1)!=" "){
      noSpace=true;
      text=text.substring(i);
      break;
    }
  }
  for(i=text.length-1;i>=0;i--){
    if(text.substring(i,i+1)!=" "){
      noSpace=true;
      text=text.substring(0,i+1);
      break;
    }
  }
  if(!noSpace) return "";
  return text;
}
