selected = '';
initial = true;
rows = 12;
itemsPerPage = [12,24,36,48,60];
currentPage = 1;
start = 0;
sortOption = 'x-product-price_asc';
keyword = '';

$(function(){
    $("#searchform").submit(formProcess);

  $("#search").click(function (event) {
      event.preventDefault();
      if ($('#query').val() != '') {
      keyword = $('#query').val();
      document.getElementById("searchform").submit();
    }
  });

  $('input.facet').unbind('click', searchFacet);
  $('input.facet').bind('click', searchFacet);

  if ($('#query').length > 0 && $('#query').val() != '') {
    keyword = $('#query').val();
      preSearch();
    }

    if ($('#priceSearch').length > 0 && $('#priceSearch').val() != '') {
      sortOption = 'x-product-price_asc';
      preSearch();
    }

  $('#query').keyup(function(e) {
    if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
        if ($('#query').val() != '') {
        keyword = $('#query').val();
        document.getElementById("searchform").submit();
      }
    }
    });
/* live "change" function not support in I.E. by JQuery 1.3.2 (!)
    $('#selectNumbSearch').live("change",function () {
    currentPage = 1;
    rows = $(this).val();
    search();
  });

    $('#selectSortSearch').live("change",function () {
    sortOption = $(this).val();
    search();
  });
*/
  $('#productssearch-navigation a').live("click",function () {
    currentPage = $(this).attr('name');
    search();
  });
});

function doSelectNumbSearch() {
  currentPage = 1;
  rows = document.getElementById('selectNumbSearch').value;
  search();
}

function doSelectSortSearch() {  
  sortOption = document.getElementById('selectSortSearch').value;
  search();
}

function preSearch() {
  currentPage = 1;
  start = 0;
  search();
};

function getPage() {
  pageNr = '1';
  $('#productssearch-navigation a').each(function (i) {
    if ($(this).attr('class') == 'active') {
      pageNr = $(this).attr('name');
    }
  });
  return parseInt(pageNr);
}


function formProcess(event) {
  event.preventDefault();
  currentPage = 1;
  preSearch();
  return false;
}

function search() {
  base = $('#ajaxcall').attr("href");
  query = escape(keyword);
  base += '&query=' + query;
  base += '&rows=' + rows;

  if (sortOption != '') {
  base += '&sort=facet_' + escape(sortOption.replace('_',' '));
  }

  if (currentPage > 1) {
    // not on firstpage
    start = (currentPage-1) * rows;
  } else {
    start = 0;
  }

  base += '&start=' + start;

  $('input.facetdef').each(function() {
      base += '&facets=' + $(this).val();
  });

 $('input:checkbox:checked').each(function () {
      base += '&' + $(this).attr("name") + '=' + escape($(this).val());
  });

  $('#searchkeyword').html("'" + query + "'");
  if ($('#searchKeywordTextReplace').length > 0 && $('#searchKeywordTextReplace').html() != '') {
   $('#searchforkeywordtext').html($('#searchKeywordTextReplace').html());
  }
  url = base + '&retrieve=all'
  $.ajax({
      url: url,
      type: "GET",
      dataType: 'json',
      success: fillResult
  });

}

function defineForm() {
  $('input.facet').unbind('click', searchFacet);
  $('input.facet').bind('click', searchFacet);
}

function searchFacet() {
  checked = $(this).attr("checked");
  divId = '#' + $(this).attr("name") + '_' + $(this).val() + '#';
  if (checked) {
    selected += divId;
  } else {
    selected = selected.replace(divId,'');
  }
  preSearch();
}

function fillResult(data) {
  $('#searchresult').empty();
  if ($('#query').val() != '') {
    $('#searchbox').show();
  }

  sortItems = $('#sort_sort_items').val().split('|');
  sortItemsLang = $('#sort_sort_items_lang').val().split('|');

  newData = '';
  newData += '<div id="selector"><div class="amount-item"><strong>' + data.count + '  </strong>' + $('#sort_amount').val() + '</div>';
  newData += '<div class="sort-item">' + $('#sort_amount_perpage').val() + ':&nbsp;';
  newData += '<select onChange="doSelectNumbSearch();" id="selectNumbSearch" name="aantal" class="number">';
  for (var i = 0; i < itemsPerPage.length; i++) {
    newData += '<option value="' + itemsPerPage[i] + '"';
    if (rows == itemsPerPage[i]) {
      newData += ' selected="selected"';
    }
    newData += '>' + itemsPerPage[i] + '</option>';
  }
  newData += '</select></div>';
  newData += '<div class="sort-item">' + $('#sort_sortoption').val() + ':&nbsp;';
  newData += '<select onChange="doSelectSortSearch();" id="selectSortSearch" name="sorteerop">';
  if (sortItems.length == sortItemsLang.length) {
    for (var i=0; i < sortItems.length; i++) {
    newData += '<option value="' + sortItems[i] + '"';
    if (sortOption == sortItems[i]) {
      newData += ' selected="selected"';
    }
      newData += '>'+ sortItemsLang[i] + '</option>';
    }
  }
  newData += '</select></div>';
  newData += '</div>';

  $('#searchresult').append(newData);

  if (data.count > rows) {
    // more items then per page
  // added paging div
  dataPaging = '<div id="productssearch-navigation">';
    pages = parseInt(data.count / rows);
  if (data.count % rows != 0) {
    pages = pages + 1;
  }
  if (currentPage > pages) {
    // currentpage must be set to 1
    currentPage = 1;
  }
  dataPaging += '<!-- data.count: ' + data.count + '|| pp: ' + rows + '|| pages: ' + pages + ' || currentPage: ' + currentPage + '</p><br /> -->';

  if (currentPage > 1) {
    // show previous
    dataPaging += '<a class="previous" onclick="return false;" name="';
    dataPaging += parseInt(currentPage)-1;
    dataPaging += '" href="#">' + $('#sort_previous').val() + '</a>';
  }
    for (var i = 1; i <= pages; i++) {
    dataPaging += '<a href="#" onclick="return false;"';
    if (currentPage == i) {
      dataPaging  += ' class="active';
      if (i == 1) {
        dataPaging += ' gx_paging_first"';
      } else {
        dataPaging += '"';
      }
    }
    dataPaging += ' name="' + i + '">' + i + '</a>';
    }
  if (currentPage < pages) {
    // show next
    dataPaging += '<a class="next" onclick="return false;" name="';
    dataPaging += parseInt(currentPage) + 1;
    dataPaging += '" href="#">' + $('#sort_next').val() + '</a>';
  }
    dataPaging += '</div>';
  $('#searchresult').append(dataPaging);
  }

  $('#searchamount').html(data.count);

  separator = 4;
  contentData = '';
  $.each(data.results, function(i,r){
  contentData += '<div class="product" id="' + r.pid + '" onclick="location.href=\'' + r.location + '\';" style="cursor: pointer;">';
  contentData += '<div class="top"></div><div class="content">';
  contentData += '<div class="image"><a href="' + r.location + '"><img src="' + r.image +'" alt="' + r.title + '" width="131" height="131" border="0" /></a></div>';
  contentData += '<div class="description-wrap"><div class="linktitle"><a href="' + r.location + '">' + r.title + '</a></div>';
  contentData += '<div class="description">' + r.summary + '</div>';
  contentData += '</div>';
  contentData += '<div class="price">&euro; ' + r.price + '</div>';
  contentData += '<div class="links">';
  contentData += '<div class="button-action-small"><a href="' + r.location + '">' + $('#sort_moreinfo').val() + '</a></div>';
  contentData += '</div>';

  contentData += '</div><div class="bottom"></div></div>';

    if ((i+1) == separator || i == (data.results.length - 1)){
    contentData = '<div class="product-row-wrap-4">' + contentData + '</div>';
    $('#searchresult').append(contentData);
    contentData = '';
    separator = separator + 4;
    }
  });
  updateValues(data);
}

function getPriceCount(facet) {
  separationPrices = $('#priceranges').val().split(',');
  separationPricesCount = null;
  if (separationPrices != null && separationPrices.length > 0) {
    separationPricesCount = new Array(separationPrices.length);
    for (var i=0; i < separationPricesCount.length; i++) {
      separationPricesCount[i] = 0;
    }
      $.each(facet.values, function(j,facetvalue){
          if (typeof facetvalue !=  'undefined') {
          for (var i = 0; i < separationPrices.length; i++)
          {
            var lowerBound;
            var upperBound;
            if ((i+1) == separationPrices.length) {
              lowerBound = separationPrices[i];
              upperBound = -1;
            } else {
              lowerBound = separationPrices[i];
              upperBound = separationPrices[i + 1];
            }

          if (upperBound != -1) {
                if (parseFloat(facetvalue.name) >= parseFloat(lowerBound) && parseFloat(facetvalue.name) < parseFloat(upperBound)) {
                separationPricesCount[i] = separationPricesCount[i] + facetvalue.count;
                }
            }
            else {
                if (parseFloat(facetvalue.name) >= parseFloat(lowerBound)) {
                separationPricesCount[i] = separationPricesCount[i] + facetvalue.count;
                }
            }
          }
        }
      });
  }
  return separationPricesCount;
}

function updateValues(data) {
  total = '';

  $.each(data.facets, function(i,facet){
  if (facet.facet == 'facet_x-product-price') {
    countArray = getPriceCount(facet);
    if (countArray != null) {
      for (var i = 0; i < countArray.length; i++) {
        $('#c_facet_x-product-price_'+i).html('(' + countArray[i] + ')');
      }
    }
  } else {
      // now print the values
      $.each(facet.values, function(j,facetvalue){
        if (typeof facetvalue !=  'undefined') {

          $('#' + facetvalue.divId).html('(' + facetvalue.count + ')');
          total += '#' + facetvalue.divId + '#';
        }
      });
  }
  });
  defineForm();
}
