function getFField(htmlForm, No){
  var i = 0;
  var jmp = 0;
  var field;
  
  for (var i = 0; i < document.forms[htmlForm].elements.length ; i++){
    if((document.forms[htmlForm].elements[i].name.search(/inAttr/) != -1) && (document.forms[htmlForm].elements[i].type != "radio")){
      jmp++;
      if(jmp == No){
        field = document.forms[htmlForm].elements[i];
      }
    }
  }
  return field;
}

function checkMultiSurcharge(htmlForm){
  var field1;
  var field2;
  var field3;
  var sfield;
  var ret = true;
      
  field1 = getFField(htmlForm, 1);
  field2 = getFField(htmlForm, 2);
  field3 = getFField(htmlForm, 3);
  sfield = getFField(htmlForm, 4);

  var res = getMultiIndex(field1, field2, field3, sfield);
  if(!(isNaN(res))){
    sfield.selectedIndex = res;
  }
  else{
    ret = false;
  }
  return ret;
}

function checky(field, type){
  var err = 0;

  if(type == 'num'){
    if(isNaN(Number(field.value))){
      alert(String(field.value)+" ist keine gültige Zahl!");
      err = 1;
    }
  }
  if(type == 'str'){
    if((String(field.value)) == ''){
      alert(String(field.value)+" ist keine gültiger Wert!");
      err = 1;
    }
  }

  return err;
}

function validate(x, y, str, cooked){
  var ok = false;
  var x2 = 0;
  var y2 = 0;
  var str2 = '';
  var param = 0;
  var i2 = 0;

  for(var i = 0; i < cooked.length; i++){
    if(cooked.charAt(i) == '_'){
      switch (param){
        case 0:
          x2 = Number(cooked.substr(0, i));
          i2 = i;
          break;
        case 1:
          y2 = Number(cooked.substr(i2+1, i-i2-1));
          i2 = i;
          break;
      }
      param++;
    }
  }
  str2 = cooked.substr(i2+1);

  if(x > x2){
    ok = true;
  }else{
    if(y > y2){
      ok = true;
    }else{
      if(str != str2){ok = true;}
      if(str2 == '#'){ok = false;}
    }
  }


  // DEBUG
  //alert('got: '+String(x)+'_'+String(y)+'_'+str+' | '+ 'cooked: '+ String(x2)+'_'+String(y2)+'_'+str2 + ' | ' + ok);

  return ok;
}

function getMultiIndex(f1, f2, f3, values){
  var idx = 0;
  var x = 0;
  var y = 0;
  var str = '';
  var err = 0;
  var cs = '';

  err = checky(f1, 'num') || checky(f2, 'num') || checky(f3, 'str');

  if(err == 0){
    x = Number(f1.value);
    y = Number(f2.value);
    str=String(f3.value);
    for(var i = 0; i < values.length; i++){
      if(validate(x, y, str, String(values.options[i].value))){
        idx = i+1;
      }else{
        break;
      }
    }
    if(idx > values.length - 1){idx = values.length - 1}
    return idx;
  }
  else{
    return 'Error';
  }
}

function checkSurcharge(htmlForm){
  var field1;
  var field2;
  var ret = true;
  // Reihenfolge muss immer 1.Eingabe 2.Verstecktes Feld sein.
  for (var i = 0; i < document.forms[htmlForm].elements.length ; i++){
    field1 = document.forms[htmlForm].elements[i];
    if(field1.name.search(/inAttr/) != -1){
      field2 = document.forms[htmlForm].elements[i+1];

      // verstecktes Feld gefunden - Wert setzen
      if(field2.type.search(/select/) != -1){
        var res = getIndex(field1, field2);
        if(!(isNaN(res))){
          field2.selectedIndex = res;
        }
        else{
          ret = false;
        }
      }
    }
  }
  return ret;
}

function getIndex(src, dest){
  var idx = 0;
  var val = 0;
  var err = 0;

  if(isNaN(src.value)){
    alert(String(src.value)+" ist keine gültige Zahl!");
    err = 1;
  }
  else{
    val = Number(src.value);
  }

  if(err == 0){
    for(var i = 0; i<dest.length; i++){
      if(val > Number(dest.options[i].value)){
        idx = i+1;
      }
    }
    if(idx > dest.length - 1){idx = dest.length - 1}
    return idx;
  }
  else{
    return 'Error';
  }
}