function str_replace(search, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // +      input by: Brett Zamir
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'

    var s = subject;
    var ra = r instanceof Array, sa = s instanceof Array;
    var f = [].concat(search);
    var r = [].concat(replace);
    var i = (s = [].concat(s)).length;
    var j = 0;

    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    }

    return sa ? s : s[0];
}

function in_array(needle, haystack, strict)
{
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true

    var found = false, key, strict = !!strict;

    for (key in haystack) {
        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
            found = true;
            break;
        }
    }

    return found;
}

function DoCallback(data)
{
  // branch for native XMLHttpRequest object
  if (window.XMLHttpRequest)
  {
    req = new XMLHttpRequest();
    req.onreadystatechange = processReqChange;
    req.open('POST', url, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    req.send(data);
  // branch for IE/Windows ActiveX version
  }
  else if (window.ActiveXObject)
  {
    req = new ActiveXObject('Microsoft.XMLHTTP')
    if (req)
    {
      req.onreadystatechange = processReqChange;
      req.open('POST', url, true);
      req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      req.send(data);
    }
  }
}

function processReqChange()
{
  // only if req shows 'loaded'
  if (req.readyState == 4)
  {
    // only if 'OK'
    if (req.status == 200)
    {
      eval(what);
    }
    else
    {
//       alert('There was a problem retrieving the XML data: ' +
//       req.responseText);
    }
  }
}

var url = "components/zoeken/zoekresultaten.php";
var what = "SetResults(req.responseText)";

function zoekresultaten(start, filteroptions)
{
  document.getElementById('contentdiv').innerHTML = 'Bezig met laden...';
  opties = new Array();
  for(var i=0;i<document.getElementById('navform').length;i++)
  {
    if(document.getElementById('navform').elements[i].type == 'select-multiple')
    {
      elem = document.getElementById('navform').elements[i];
      opties[elem.name] = new Array();
      for(var j=0;j<elem.length;j++)
      {
        if(elem.options[j].selected)
        {
          opties[elem.name].push(elem.options[j].value);
        }
      }
    }
  }

  var searchstring = '?1';

  for(var i in opties)
  {
    searchstring += '&' + i + '=' + opties[i];
  }

  searchstring += '&artikelnummer=' + document.getElementById('artikelnummer').value;

  searchstring += '&start=' + start;

  if(filteroptions)
  {
    searchstring += '&filteroptions=1';
  }

  DoCallback(searchstring);

}

function SetResults(respons)
{
  document.getElementById('contentdiv').innerHTML = 'Bezig met laden...';
  if(respons)
  {
    if(respons == "selectoptions")
    {
      document.getElementById('contentdiv').innerHTML = 'Selecteer de onderdelen die u wilt zoeken of voer een artikelnummer in.';
    }
    else
    {
      subrespons = respons.split('[[SPACER]]');

      var start = parseInt(subrespons[2]);
      var aantal = parseInt(subrespons[1]);
      var counter = 1;


      if(aantal == 1)
      {
        producten = subrespons[0].split('[==EINDE==]');

        productparts = producten[0].split("\|");
        var regex = new RegExp('"([^ ]*)"', 'i');
        var output = regex.exec(productparts[0]);
        if(output != null)
        {
          document.location.href= output[1] + '&nofilter=1';
        }
        else
        {
          var output = regex.exec(productparts[9]);
          if(output != null)
          {
            document.location.href= output[1] + '&nofilter=1';
          }
        }
      }

      header_tbl = document.createElement("table");
      header_tbl.cellPadding=0;
      header_tbl.cellSpacing=0;

      header_tbl.border=0;
      tbl_tr = header_tbl.insertRow(0);
      var tbl_td = tbl_tr.insertCell(0);
      tbl_td.innerHTML = subrespons[1] + (subrespons[1] == 1 ? ' product gevonden' : ' producten gevonden');
      if(start > 0)
      {
        var vorigestart = start-20;
        if(vorigestart < 0)
        {
          vorigestart = 0;
        }
        vorigestart = vorigestart + '';
        var tbl_td = tbl_tr.insertCell(counter);
        tbl_td.innerHTML = '&nbsp;|&nbsp;<a href="#" onClick="zoekresultaten(' + vorigestart + ')">Vorige</a>';
        counter++;
      }

      if(start+20 < aantal)
      {
        volgendestart = start + 20;
        volgendestart = volgendestart + '';
        var tbl_td = tbl_tr.insertCell(counter);
        tbl_td.innerHTML = '&nbsp;|&nbsp;<a href="#" onClick="zoekresultaten(' + volgendestart + ')">Volgende</a>';
        counter++;
      }

      header2_tbl = document.createElement("table");
      header2_tbl.cellPadding=0;
      header2_tbl.cellSpacing=0;
      header2_tbl.style.marginBottom='10px';
      header2_tbl.border=0;
      tbl_tr = header2_tbl.insertRow(0);
      var tbl_td = tbl_tr.insertCell(0);
      tbl_td.innerHTML = '<a href="#" onclick="resetoptions()">Nieuwe zoekopdracht</a>';


      tbl = document.createElement("table");
      tbl.width='100%';
      tbl.cellPadding=0;
      tbl.cellSpacing=0;
      tbl.border=0;

      tbl_tr = tbl.insertRow(0);

      var tbl_td = tbl_tr.insertCell(0);
      tbl_td.innerHTML = '<img src="images/pixel.gif">';
      tbl_td.width=40;
      tbl_td.height=25;

      var tbl_td = tbl_tr.insertCell(1);
      tbl_td.innerHTML = '<b>Artikelnr.</b>';
      tbl_td.width=75;
      tbl_td.align='center';
      tbl_td.className = 'zoekenheaderartikelnummer';

      var tbl_td = tbl_tr.insertCell(2);
      tbl_td.innerHTML = '<b>Omschrijving</b>';
      tbl_td.className = 'zoekenheader';
      tbl_td.style.paddingLeft = '3px';

      var tbl_td = tbl_tr.insertCell(3);
      tbl_td.innerHTML = '<b>Soort</b>';
      tbl_td.className = 'zoekenheader';

      var tbl_td = tbl_tr.insertCell(4);
      tbl_td.innerHTML = '<b>Ø</b>';
      tbl_td.className = 'zoekenheader';

      var tbl_td = tbl_tr.insertCell(5);
      tbl_td.innerHTML = '<b>Lagering</b>';
      tbl_td.className = 'zoekenheader';

      var tbl_td = tbl_tr.insertCell(6);
      tbl_td.innerHTML = '<b>kg</b>';
      tbl_td.className = 'zoekenheader';

      var tbl_td = tbl_tr.insertCell(7);
      tbl_td.innerHTML = '<b>Bevestiging</b>';
      tbl_td.className = 'zoekenheader';

      var tbl_td = tbl_tr.insertCell(8);
      tbl_td.innerHTML = '<b>Uitvoering</b>';
      tbl_td.className = 'zoekenheader';

      var tbl_td = tbl_tr.insertCell(9);
      tbl_td.innerHTML = '&nbsp;';
      tbl_td.className = 'zoekenheader';
      tbl_td.width = 30;

      tbl_tr = tbl.insertRow(1);
      var tbl_td = tbl_tr.insertCell(0);
      tbl_td.colSpan=10;
      tbl_td.innerHTML = '<img src="images/pixel.gif">';
      tbl_td.height=2;

      var producten = subrespons[0].split('[==EINDE==]');

      var rowteller = 1;

      for(var i=0;i<producten.length;i++)
      {
        row_id1 = rowteller+1;
        row_id2 = rowteller+2;
        if(producten[i].length > 0)
        {
          productparts = producten[i].split("\|");

          tbl_tr = tbl.insertRow(row_id1);

          for(j=0;j<productparts.length;j++)
          {
            var tbl_td = tbl_tr.insertCell(j);
            tbl_td.innerHTML = productparts[j];
            tbl_td.height = 30;
            if(j == 1)
            {
              tbl_td.className = 'zoekencelartikelnummer';
              tbl_td.align = 'center';
            }
            else if(j == 2)
            {
              tbl_td.className = 'zoekencel';
              tbl_td.style.paddingLeft = '3px';
            }
            else if(j > 1)
            {
              tbl_td.className = 'zoekencel';
            }
          }

          tbl_tr = tbl.insertRow(row_id2);
          var tbl_td = tbl_tr.insertCell(0);
          tbl_td.colSpan=10;
          tbl_td.innerHTML = '<img src="images/pixel.gif">';
          tbl_td.height=2;
        }

        rowteller++;
        rowteller++;
      }

      document.getElementById('contentdiv').innerHTML = '';
      document.getElementById('contentdiv').appendChild(header_tbl);
      document.getElementById('contentdiv').appendChild(header2_tbl);
      document.getElementById('contentdiv').appendChild(tbl);

      if(subrespons[subrespons.length-3] == 'artnr')
      {
        for(var i=0;i<document.getElementById('navform').length;i++)
        {
          if(document.getElementById('navform').elements[i].type == 'select-multiple')
          {
            elem = document.getElementById('navform').elements[i];
            opties[elem.name] = new Array();
            for(var j=0;j<elem.length;j++)
            {
              elem.options[j].selected = false
            }
          }
        }
      }


      var zoekvariabelen = '';
      var zoekcategorieen = '';
      var parts = '';
      var subparts = '';
      var wieldiameters = '';
      var bevestigingen = '';
      var uitvoeringen = '';
      var loopvlakken = '';
      var draagvermogens = '';
      var selectedvariabelen = '';

      zoekvariabelen = subrespons[subrespons.length-2];
      zoekcategorieen = zoekvariabelen.split('&');


      for(var i=0;i<zoekcategorieen.length;i++)
      {
        if(zoekcategorieen[i].length > 1)
        {
          parts = zoekcategorieen[i].split('=');
          switch(parts[0])
          {
            case "wieldiameters":
              wieldiameters = parts[1].split("|");
              document.getElementById('wieldiameter').options.length=0;
              for (var j=0; j<wieldiameters.length; j++)
              {
                document.getElementById('wieldiameter').options[document.getElementById('wieldiameter').options.length]=new Option(wieldiameters[j], wieldiameters[j]);
              }
              break;
            case "bevestigingen":
              bevestigingen = parts[1].split("|");
              document.getElementById('bevestiging_id').options.length=0;
              for (var j=0; j<bevestigingen.length; j++)
              {
                if(bevestigingen[j].length > 0)
                {
                  subparts = bevestigingen[j].split(":");
                  document.getElementById('bevestiging_id').options[document.getElementById('bevestiging_id').options.length]=new Option(subparts[1], subparts[0]);
                }
              }
              break;
            case "uitvoeringen":
              uitvoeringen = parts[1].split("|");
              document.getElementById('uitvoering_id').options.length=0;
              for (var j=0; j<uitvoeringen.length; j++)
              {
                if(uitvoeringen[j].length > 0)
                {
                  subparts = uitvoeringen[j].split(":");
                  document.getElementById('uitvoering_id').options[document.getElementById('uitvoering_id').options.length]=new Option(subparts[1], subparts[0]);
                }
              }
              break;
            case "loopvlakken":
              loopvlakken = parts[1].split("|");
              document.getElementById('loopvlak_id').options.length=0;
              for (var j=0; j<loopvlakken.length; j++)
              {
                if(loopvlakken[j].length > 0)
                {
                  subparts = loopvlakken[j].split(":");
                  document.getElementById('loopvlak_id').options[document.getElementById('loopvlak_id').options.length]=new Option(subparts[1], subparts[0]);
                }
              }
              break;
            case "draagvermogens":
              draagvermogens = parts[1].split("|");
              document.getElementById('draagvermogen').options.length=0;
              for (var j=0; j<draagvermogens.length; j++)
              {
                if(draagvermogens[j].length > 0)
                {
                  subparts = draagvermogens[j].split(":");
                  document.getElementById('draagvermogen').options[document.getElementById('draagvermogen').options.length]=new Option(str_replace('@nbsp@', ' ', subparts[1]), str_replace('@', '|', subparts[0]));
                }
              }
              break;
          }
        }
      }
     selectedvariabelen = subrespons[subrespons.length-1].split('&');

     if(parts[1] != null)
     {
        for(var i=0;i<selectedvariabelen.length;i++)
        {
          if(selectedvariabelen[i].length > 0)
          {
            var parts = '';
            parts = selectedvariabelen[i].split('=');

            var selectedelements = '';
            selectedelements = parts[1].split(';');
            for(var j=0;j<document.getElementById(parts[0]).options.length;j++)
            {
              if(in_array(document.getElementById(parts[0]).options[j].value, selectedelements))
              {
                document.getElementById(parts[0]).options[j].selected = true;
              }
            }
          }
        }
      }
    }
  }
  else
  {
    document.getElementById('contentdiv').innerHTML = 'Geen producten gevonden.';
  }

//   alert(respons);
}
