function getFieldKeyValue(field,keyX,keyY) {
  var fieldKeysMap = getFieldKeysMap();
    
  return fieldKeysMap[field][keyX][keyY];
}

function getExternalFieldName(field) {
  var externalFieldNames = getExternalFieldNames();
    
  return externalFieldNames[field];
}

function getOptions(formName,selectedValues,selected) {
  var cntX = 0; var cntY = 0; var fieldName = ''; var internalFieldName = '';
  var previousSelectedValuesSave; 
  var internalFieldNames = getInternalFieldNames();
  var filteredFields = getFilteredFields();
  var dependentElementIDs;
  var matrix = getMatrix();
  
  fieldName = 'selector' + 0;
  internalFieldName = internalFieldNames[0];
  document.forms[formName].elements[fieldName].length = filteredFields[internalFieldName].length;
  
  for (cntX = 0; cntX < filteredFields[internalFieldName].length; cntX++) {
    document.forms[formName].elements[fieldName].options[cntX].value = cntX;
    document.forms[formName].elements[fieldName].options[cntX].text = filteredFields[internalFieldName][cntX];
    document.forms[formName].elements[fieldName].options[cntX].id = document.forms[formName].elements[fieldName].name + "-" + cntX;
  }
  
  for (cntY = 0; cntY < filteredFields[internalFieldName].length; cntY++) {
    if (matrix[selected][0] == document.forms[formName].elements[fieldName].options[cntY].value) {
       document.forms[formName].elements[fieldName].selectedIndex = cntY;
    }
  }

  
  for (cntX = 1; cntX < internalFieldNames.length; cntX++) {
    fieldName = 'selector' + cntX;
    internalFieldName = internalFieldNames[cntX];
    dependentElementIDs = getDependentElementIDs(cntX-1, selectedValues[cntX - 1]);
    
    if (dependentElementIDs.length == 0) {
        dependentElementIDs = getDependentElementIDs(cntX-1, matrix[selected][cntX - 1]);
    }
    
    document.forms[formName].elements[fieldName].length = dependentElementIDs.length;

    for (cntY = 0; cntY < dependentElementIDs.length; cntY++) {
      document.forms[formName].elements[fieldName].options[cntY].value = dependentElementIDs[cntY];
      document.forms[formName].elements[fieldName].options[cntY].text = filteredFields[internalFieldName][dependentElementIDs[cntY]];
      document.forms[formName].elements[fieldName].options[cntY].id = document.forms[formName].elements[fieldName].name + "-" + dependentElementIDs[cntY];
      
      if (dependentElementIDs.length == 1) {
        document.forms[formName].elements[fieldName].style.display = "none";
        document.forms[formName].elements["info_selector" + cntX].value = filteredFields[internalFieldName][dependentElementIDs[cntY]];
        document.forms[formName].elements["info_selector" + cntX].style.display = "block";
      } else {
        document.forms[formName].elements[fieldName].style.display = "block";
        document.forms[formName].elements["info_selector" + cntX].value = '';
        document.forms[formName].elements["info_selector" + cntX].style.display = "none";
      }
      
      if (matrix[selected][cntX] == document.forms[formName].elements[fieldName].options[cntY].value) {
         document.forms[formName].elements[fieldName].selectedIndex = cntY;
      }
    }
  }
  
  previousSelectedValuesSave = previousSelectedValues;
  updateActualSelectedValues(formName);
  
  for (cntX = 0; cntX < previousSelectedValuesSave.length; cntX++) {
    fieldName = 'selector' + cntX;
    if (previousSelectedValuesSave[cntX] != actualSelectedValues[cntX]) {
      document.forms[formName].elements[fieldName].style.background = "#CDCDCD";
      document.forms[formName].elements["info_selector" + cntX].style.background = "#CDCDCD";
      // document.forms[formName].elements["info_selector" + cntX].size = "1"; ANPASSBAR
    } else {
      document.forms[formName].elements[fieldName].style.background = "white";
      document.forms[formName].elements["info_selector" + cntX].style.background = "white"; 
    }
  }
  
  
  document.forms[formName].elements["SUPPLIER_AID"].value = getDataValue("SUPPLIER_AID", selected);
  document.forms[formName].elements["s_supplier_aid"].value = getDataValue("SUPPLIER_AID_URL_ESCAPED", selected);
  document.forms[formName].elements["basket_article_id"].value = getDataValue("SUPPLIER_AID_URL_ESCAPED", selected);
  document.forms[formName].elements["info_price"].value = getDataValue("PRICE", selected) + " " + getCurrencySymbol();
  document.forms[formName].elements["info_supplier_aid"].value = getDataValue("SUPPLIER_AID", selected);
  document.forms[formName].elements["info_reseller_aid"].value = getDataValue("RESELLER_AID", selected);
  //window.location.href = "http://schwenckner.es-shops.de/eshop.php?action=aid_search&s_filter[aid_search]=" + getDataValue("SUPPLIER_AID", selected);
}
var fieldIDsLastSelected = new Array();

function getDependentElementIDs(fieldID, fieldKey) {

  var cntX = 0; var cntY = 0; var cntZ = 0; var dependentElementIDs = new Array();
  var lock = false; var fieldIDs = new Array();
  var internalFieldNames = getInternalFieldNames();
  var fieldKeysMap = getFieldKeysMap();
  
  for (cntX = 0; cntX < fieldKeysMap[internalFieldNames[fieldID]][fieldKey].length; cntX++) {
    if (fieldIDsLastSelected.length == 0) {
      fieldIDs[cntX] = fieldKeysMap[internalFieldNames[fieldID]][fieldKey][cntX];
    } else {
      for (cntY = 0; cntY < fieldIDsLastSelected.length; cntY++) {
        if (fieldKeysMap[internalFieldNames[fieldID]][fieldKey][cntX] == fieldIDsLastSelected[cntY]) {
            fieldIDs[cntX] = fieldKeysMap[internalFieldNames[fieldID]][fieldKey][cntX];
        }
      }
    }
  }
  
  if (fieldIDs.length != 0) {
    fieldIDsLastSelected = fieldIDs;
  } 
  
  for (cntX = 0; cntX < fieldKeysMap[internalFieldNames[fieldID+1]].length; cntX++) {
    lock = false;
    for (cntY = 0; cntY < fieldKeysMap[internalFieldNames[fieldID+1]][cntX].length; cntY++) {
      for (cntZ = 0; cntZ < fieldIDs.length; cntZ++) {
        if (fieldIDs[cntZ] == fieldKeysMap[internalFieldNames[fieldID+1]][cntX][cntY] && lock == false) {
          dependentElementIDs.push(cntX);
          lock = true;
        }
      }
    }
  }

  return dependentElementIDs;
}

function getSelectedValues(formName, fieldID) {
  fieldName = 'selector' + fieldID;
  return document.forms[formName].elements[fieldName].value
}

function getSelectedValuesData(formName) {
  var cntX = 0; var cntY = 0; var selected = -1;
  var multiplier = 1; var multiplierTemp = -1; var scoreMaximum = 0;
  var stop = 0; var score = new Array();
  var selectedValues = new Array();
  var internalFieldNames = getInternalFieldNames();
  var matrix = getMatrix();
  
  updateActualSelectedValues(formName);
  
  for (cntX = 0; cntX < internalFieldNames.length; cntX++) {
    selectedValues.push(getSelectedValues(formName,cntX));
    multiplier = multiplier * 10;
  }
  
  for (cntX = 0; cntX < matrix.length; cntX++) {
    score[cntX] = 0; multiplierTemp = multiplier;
    for (cntY = 0; cntY < selectedValues.length; cntY++) {
      if (matrix[cntX][cntY] == selectedValues[cntY]) {
        score[cntX] = score[cntX] + multiplierTemp;
      }
      multiplierTemp = multiplierTemp / 10;
    }
  }
  
  for (cntX = 0; cntX < score.length; cntX++) {
    
    if (scoreMaximum < score[cntX]) {
      scoreMaximum = score[cntX];
      selected = cntX;
    }
  }
  
  fieldIDsLastSelected = new Array();
  getOptions(formName, selectedValues, selected);
  window.location.href = "http://schwenckner.es-shops.de/eshop.php?action=aid_search&s_filter[aid_search]=" + getDataValue("SUPPLIER_AID", selected);
}

var actualSelectedValues = new Array();
var previousSelectedValues = new Array();

function updateActualSelectedValues(formName) {
  var cntX = 0; var fieldName = ''; var index = -1;
  var internalFieldNames = getInternalFieldNames();
  
  previousSelectedValues = actualSelectedValues;
  
  actualSelectedValues = new Array();
  for (cntX = 0; cntX < internalFieldNames.length; cntX++) {
    fieldName = 'selector' + cntX;
   
    index = document.forms[formName].elements[fieldName].selectedIndex;
    actualSelectedValues.push(document.forms[formName].elements[fieldName].options[index].value);
  }
  
  return actualSelectedValues;
}