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();
}
