function searchReplace(QuellText, SuchText, ErsatzText) {
  // Fehlerpruefung
  if ((QuellText == null) || (SuchText == null))           { return null; }
  if ((QuellText.length == 0) || (SuchText.length == 0))   { return QuellText; }

  // Kein ErsatzText ?
  if ((ErsatzText == null) || (ErsatzText.length == 0))    { ErsatzText = ""; }

  var LaengeSuchText = SuchText.length;
  var LaengeErsatzText = ErsatzText.length;
  var Pos = QuellText.indexOf(SuchText, 0);

  while (Pos >= 0)
  {
  QuellText = QuellText.substring(0, Pos) + ErsatzText + QuellText.substring(Pos + LaengeSuchText);
  Pos = QuellText.indexOf(SuchText, Pos + LaengeErsatzText);
  }
  return QuellText;
}

function loadManufactures() {
  var http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari, ...
      http_request = new XMLHttpRequest();
      //http_request.overrideMimeType('text/xml');
  } else if (window.ActiveXObject) { // IE
      http_request = new ActiveXObject("Microsoft.XMLHTTP");
  }

  http_request.onreadystatechange = function(){
    if (http_request.readyState == 4) {
      //alles in Ordnung, Antwort wurde empfangen
      if (http_request.status == 200) {
        var manufactures = http_request.responseText.split(";").sort();
        var manuSelect = document.getElementById("manuSelect");
        //Ein leeres Optionsfeld hinzufuegen
        manuSelect.appendChild(document.createElement("option"));
        //geladene Hersteller hinzufuegen
        for(var i=0; i<=manufactures.length-1; i++) {
           var newOption = document.createElement("option");
           var optionTextNode = document.createTextNode(manufactures[i]);
           newOption.appendChild(optionTextNode);
           //newOption.text = manufactures[i];
           manuSelect.appendChild(newOption);
           if(preselectedManufacturer == manufactures[i])
             manuSelect.selectedIndex = i+1;
        }
        manuSelect.disabled = false;
        if(preselectedManufacturer)
          loadPrinters(preselectedManufacturer);
      } else {
        //alert('Bei dem Request ist ein Problem aufgetreten.');
      }

    } else {
      // noch nicht bereit
    }
  };

  http_request.open('GET', '/shop/searchMachineHelper.php?mode=manu', true);
  http_request.send(null);
}


function loadPrinters(manuID) {
  //Alte Drucker loeschen
  var printerSelect = document.getElementById("printerSelect")
  printerSelect.disabled = true;
  if (printerSelect.hasChildNodes()) {
    while(printerSelect.hasChildNodes()){
      printerSelect.removeChild(printerSelect.lastChild);
    }
  }

  if (manuID) {
    document.body.style.cursor = "wait";
    //Neue Drucker raussuchen
    var http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        http_request = new XMLHttpRequest();
        //http_request.overrideMimeType('text/xml');
    } else if (window.ActiveXObject) { // IE
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    http_request.onreadystatechange = function(){
      if (http_request.readyState == 4) {
        //alles in Ordnung, Antwort wurde empfangen
        if (http_request.status == 200) {
          //alert(http_request.responseText);
          var printers = http_request.responseText.split(";").sort();

          var printerSelect = document.getElementById("printerSelect");

          //Ein leeres Optionsfeld hinzufuegen
          printerSelect.appendChild(document.createElement("option"));
          printerSelect.disabled = false;
          for(var i=0; i<=printers.length-1; i++) {
             var newOption = document.createElement("option");
             var optionTextNode = document.createTextNode(printers[i]);
             newOption.appendChild(optionTextNode);
             //newOption.text = printers[i];
             printerSelect.appendChild(newOption);
             if(preselectedPrinter == printers[i])
              printerSelect.selectedIndex = i+1;
          }
          document.body.style.cursor = "default";

        } else {
          //alert('Bei dem Request ist ein Problem aufgetreten.');
        }

      } else {
        // noch nicht bereit
      }
    };


    http_request.open("GET", "/shop/searchMachineHelper.php?mode=printers&manuID="+searchReplace(manuID, '+', '%2B'), true);
    http_request.send(null);
  }
}

function printerClick(previewMode) {
  var manuID = document.getElementById('manuSelect').options[document.getElementById('manuSelect').selectedIndex].text;
  var printerID = document.getElementById('printerSelect').options[document.getElementById('printerSelect').selectedIndex].text;
  if(manuID && printerID) {

    if(previewMode==1)
      var stageAction = 'printSearchPreview';
    else
      var stageAction = 'printSearch';
    top.location.href = '/shop/index.php?stage=' + stageAction + '&sManufacturer='+searchReplace(manuID, '+', '%2B')+'&sPrinter='+searchReplace(printerID, '+', '%2B');
  }
}

function manuClick() {
  var manuID = document.getElementById('manuSelect').options[document.getElementById('manuSelect').selectedIndex].text;
  loadPrinters(manuID);
}

loadManufactures();

