jQuery.noConflict();

jQuery(document).ready(function() {	
	/* address plugin for browser back and forward */
    jQuery.address.externalChange(function(event) {    	
    	epoq_processChange(event);   
    	if (event.parameterNames.length > 0) {
    		if (epoq_target.length == 0  || window.location.pathname.indexOf(epoq_target) != -1) {
    			epoq_getSearchResult();
    		}	
    	}    
    });   
    
    jQuery.address.internalChange(function(event) {    	
    	epoq_processChange(event);  
    	if (event.parameterNames.length > 0) {
    		if (epoq_target.length == 0  || window.location.pathname.indexOf(epoq_target) != -1) {
    			epoq_getSearchResult();
    		} else {    			
    			window.location = epoq_target + "#" + jQuery.address.value();
    		}    		
    	}    
    });   
    
    
	
    /* submit for enter event on searchbox*/
	jQuery("#epoq_searchform").submit(function() {
		jQuery("#epoq_typeaheadbox").autocomplete("close");	
		query = jQuery("#epoq_typeaheadbox").val();	
		epoq_resetParameters();	
		return false;		 
	});

	/* autocomplete for searchbox*/
	if (useAutocomplete == true) {
		jQuery("#epoq_typeaheadbox").autocomplete({
			source:  function(request, response) {
				jQuery.ajax({
					url: searchServer + getResultRequest,
					dataType: "jsonp",
					scriptCharset: "utf-8",
					data: {
						featureClass: "P",
						style: "full",								
						q: '',
						limit: '',
						maxRows: 50,
						format: 'json',
						pretty: 'true',
						tenantId: tenantId,
						sessionId: sessionId,		   
						locakey:  locakey,
						orderBy:  orderBy,
						order:  order,			
						query: function () { 
							query = jQuery("#epoq_typeaheadbox").val();
							return query;
						}
					},
					success: function(data) {
						response(jQuery.map(epoq_parseJsonAsRows(data),function(item) {							
								return {
									label: epoq_formatAutocompleteItem(item.data),
									value: epoq_getAutocompleteValue(item.data)							
								}/*epoq_formatAutocompleteItem(rows[i], i);*/
						}))						
					}
				})
			},			
			delay: 100,			
			minLength: 2,
			select: function(event, ui) {
				if (typeof(event.keycode) == 'undefined' && typeof(ui.item.value) != 'undefined') {
					jQuery("#epoq_typeaheadbox").val(ui.item.value);	
				}	
				query = jQuery("#epoq_typeaheadbox").val();
				epoq_resetParameters();				
				return false;
			}
		});
		
		/*
		.result(function(event, item) {				
			if(typeof(item.suggestion)!="undefined")
			{			
				if(typeof(item.suggestion['@suggestion-id'])!="undefined") {				
					var epoq_sug = item.suggestion['$'].toLowerCase();
					query = epoq_sug.replace(/&gt/g, ">").replace(/&gt;/g, ">");
					jQuery("#epoq_typeaheadbox").val(query);
				} 
			} else if(typeof(item.nodeRef) !="undefined") {
				if (item.nodeRef['link']['$'] != undefined) {					
					epoq_goToProduct(item.nodeRef['link']['$'], item.nodeRef['g:id']['$']);
					return false;
				}
			}		
			epoq_resetParameters();
			return false;
		});	
		*/
	}
	
	
	epoq_addCss(".epoq_prodimg {" +
				"max-height:" + maxResultImageHeight+ "px;" +
				"height: expression(this.height > " + (maxResultImageHeight -1)  + "? (this.width > this.height ? (this.width / this.height) * " + maxResultImageHeight + " : " + maxResultImageHeight + ") : true);" +
				"max-width:" + maxResultImageWidth+ "px;" +
				"width: expression(this.width > " + (maxResultImageWidth -1)  + "? (this.height > this.width ? (this.height / this.width) * " + maxResultImageWidth + " : " + maxResultImageWidth + ") : true);" +
				"-ms-interpolation-mode: bicubic;"			  				 
				+"}");
	
	epoq_addCss(".epoq_previmg {" +
			"max-height:" + maxPreviewImageHeight+ "px;" +
			"height: expression(this.height > " + (maxPreviewImageHeight -1)  + "? (this.width > this.height ? (this.width / this.height) * " + maxPreviewImageHeight + " : " + maxPreviewImageHeight + ") : true);" +
			"max-width:" + maxPreviewImageWidth+ "px;" +
			"width: expression(this.width > " + (maxPreviewImageWidth -1)  + "? (this.height > this.width ? (this.height / this.width) * " + maxPreviewImageWidth + " : " + maxPreviewImageWidth + ") : true);" +
			"-ms-interpolation-mode: bicubic;"			  				 
			+"}");
});
/* end document ready */

function epoq_resetParameters() {
	jQuery.address.autoUpdate(false);
	offset = 0;		 
	order = "desc";
	orderBy = "";
	epoq_removeFilters(false);
	matchAttr = "";
	matchValue = "";
	query = epoq_escapeAmp(query);
	jQuery.address.parameter('query', query, false);			
	jQuery.address.parameter('offset', offset, false);
	jQuery.address.parameter('order', order, false);
	jQuery.address.parameter('orderBy', orderBy, false);
	jQuery.address.parameter('matchAttr', matchAttr, false);
	jQuery.address.parameter('matchValue', matchValue, false);	
	jQuery.address.update();
	jQuery.address.autoUpdate(true);	
}

function epoq_processChange(event) {
	matchAttr = "";
	matchValue = "";
	for (var i=0; i< event.parameterNames.length;i++) {
		if (event.parameterNames[i] == 'limit') {
    		limit = parseInt(event.parameters['limit']);
    	}
		if (event.parameterNames[i] == 'offset') {
			offset = parseInt(event.parameters['offset']);
    	}
		if (event.parameterNames[i] == 'order') {
			order = event.parameters['order'];
    	}
		if (event.parameterNames[i] == 'orderBy') {
			orderBy = event.parameters['orderBy'];
    	}
		if (event.parameterNames[i] == 'matchAttr') {
			if (typeof(event.parameters['matchAttr']) == 'object') {
				for (var j=0; j<event.parameters['matchAttr'].length; j++) {
					matchAttr += event.parameters['matchAttr'][j] + "§";
				}
			} else {
				matchAttr += event.parameters['matchAttr'] + "§";
			}      			
    	}
		if (event.parameterNames[i] == 'matchValue') {
			if (typeof(event.parameters['matchValue']) == 'object') {
				for (var j=0; j<event.parameters['matchValue'].length; j++) {
					matchValue += epoq_unescapeAmp(event.parameters['matchValue'][j]) + "§";
				}
			} else {
				matchValue += epoq_unescapeAmp(event.parameters['matchValue']) + "§";
			}      	
    	}  
		if (event.parameterNames[i] == 'query') {
			query = event.parameters['query'];
			query = epoq_unescapeAmp(query);
			jQuery("#searchbox").val(query);
    	}  
	}    	
		       
}

function epoq_getAutocompleteValue(row){
	if(typeof(row.suggestion)!= "undefined")
	{
		var suggestion = row.suggestion['$'];
		if (typeof(suggestion) != "undefined") {
			return suggestion
		}		
	}
}

/* format item for autocomplete results */
function epoq_formatAutocompleteItem(row){
	var prodHtml;
	if(typeof(row.nodeRef) != "undefined")
	{
		/*prodHtml = "<div border='1' width='600px' cellpadding='0' cellspacing='0'>";*/
		prodHtml = "";			
//		prodHtml += "<div class='ac_epoqrow' onclick=\"epoq_goToProduct('" + row.nodeRef['link']['$'] + "','" + row.nodeRef['g:id']['$'] + "');\">";
		prodHtml += "<div class='ac_epoqrow'>";
		
		prodHtml += "<div class='ac_epoqpic'>";
		/*if(typeof(row.nodeRef['link']) != "undefined") prodHtml += "<a href='" + row.nodeRef['link']['$']+ "'>";*/			
		if(typeof(row.nodeRef[epoq_imageField]) != "undefined") prodHtml +=  "<img class='epoq_previmg' src='" + row.nodeRef[epoq_imageField]['$']+ "'/>";
		/*prodHtml += "</a>";*/
		prodHtml +="</div>"; 
		prodHtml +="<div class='ac_epoqdesc'>";
		for (var i=0;i<resultAttributes.items.length;i++) {
			var fieldName = resultAttributes.items[i][0];
			if(typeof(row.nodeRef[fieldName]) != "undefined") {
				var fieldValue = row.nodeRef[fieldName]['$'];
				if (fieldName == "g:price") {
					fieldValue = epoq_currencyFormatted(fieldValue);
				}
				prodHtml += "<p class=\"ac_" +resultAttributes.items[i][1] + "\">";
				prodHtml += fieldValue; 
				prodHtml += "</p>"; 
			}
		}
		prodHtml +="</div>";
		/*prodHtml += "<td width='300px'>"+"</td></tr>";*/
		
//		if(typeof(row.nodeRef['g:price']) != "undefined"){
//			var price = row.nodeRef['g:price']['$'];			
//			prodHtml +=  "<div class='ac_epoqprice'>" + CurrencyFormatted(price) + "</div>"; 
//		}
//		prodHtml += "<div class='dummyresult'>&nbsp</div>"
//		prodHtml += "</div>";
		return prodHtml;
	}

	if(typeof(row.suggestion)!= "undefined")
	{
		var suggestion = row.suggestion['$'];
		var match = row.suggestion['@match'];
		if (typeof(match) != "undefined") {
			var splitMatch =  match.split(" ");
			for (var j=0; j< splitMatch.length; j++) {
				suggestion = suggestion.replace(splitMatch[j], "zzzzz" + splitMatch[j] + "yyyyy");
			}
			suggestion = suggestion.replace(/zzzzz/g,"<span class=\"epoq_highlight\">");
			suggestion = suggestion.replace(/yyyyy/g,"</span>");
			
		}		
		/*suggestion = suggestion.replace(/([A-Z|Ä|Ö|Ü]+)/g, '<b>$1</b>');*/
		
		prodHtml = suggestion;
		/*prodHtml  = "<div class='ac_epoqsuggrow' ><div class='ac_epoqsugg'>" + suggestion + "</div>";
		if (typeof(row.suggestion['@hitcount'])!= "undefined") {
			prodHtml += "<div class='ac_epoqsuggcount'>Treffer: " + row.suggestion['@hitcount'] + "</div>";
		}
		*/
	}
	/* 
	 * prodHtml += "</div></div>";
	 * */
	return prodHtml;
}



function epoq_generateStatsAndNavigation(data)	{
	var stats = new Array();
	jQuery("#epoq_search").empty();
	jQuery("#epoq_activefilters").empty();
	jQuery("#epoq_resultStats").empty();
	jQuery("#epoq_filters").empty();
	jQuery(".epoq_changepage").empty();
	jQuery(".epoq_resultsize").empty();
	jQuery(".epoq_sort").empty();
	
	/*add sort Text and Buttons */
	var sortHtml = "<p class=\"epoq_header\">Sortieren nach:</p><ul class=\"epoq_sortlist\">";
	for (var i=0;i<sortFields.items.length;i++) {
		var activeSortUp = "";
		var activeSortDown = "";
		if (sortFields.items[i][1] == orderBy) {
			if (order == "asc") {
				activeSortUp = " epoq_active";				
			} else if (order == "desc") {
				activeSortDown = " epoq_active";
			}
			
		}
		if (i > 0) {
			sortHtml += "<li class=\"epoq_seperate\"/>";	
		}		
		/*sortHtml +=  "<span>" + sortFields.items[i][0]+ "</span>"*/
		if (sortFields.items[i][2] == "updown") {
			sortHtml += "<li class=\"epoq_sort_down" + activeSortDown + "\" onclick=\"epoq_changeSort('" + sortFields.items[i][1] + "','desc');\">" + sortFields.items[i][0] + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>";
			sortHtml += "<li class=\"epoq_sort_up" + activeSortUp + "\" onclick=\"epoq_changeSort('" + sortFields.items[i][1] + "','asc');\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>";
		} else if (sortFields.items[i][2] == "down"  || sortFields.items[i][2] == "updown"){
			sortHtml += "<li class=\"epoq_sort_down" + activeSortDown + "\" onclick=\"epoq_changeSort('" + sortFields.items[i][1] + "','desc');\">" + sortFields.items[i][0] +"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>";
		} else if (sortFields.items[i][2] == "up" || sortFields.items[i][2] == "updown"){
			sortHtml += "<li class=\"epoq_sort_up" + activeSortUp + "\" onclick=\"epoq_changeSort('" + sortFields.items[i][1] + "','asc');\">" + sortFields.items[i][0] +"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>";				
		}	
		
	}
	sortHtml += "</ul>";		
	jQuery(".epoq_sort").append(sortHtml);	
	var hitcount = 0;
	if(typeof(data.result.statistics) != "undefined") {
		var statistics = data.result.statistics;
		if (typeof(statistics["@hitcount"]) != "undefined") {
			hitcount = statistics["@hitcount"];
		}
	}		
	/* add search query */	
	jQuery("#epoq_search").append("Suche nach: <p class=\"epoq_search_term\">" + query + "</p>")
	/* add active filters */
	var activeFiltersHtml = "";			
	var matchValues = matchValue.split("§");	
	var matchAttrs = matchAttr.split("§");		
	var hasFilters = false;
	for (var i=0; i<matchValues.length;i++) {
		if (matchValues[i].length > 0) {
			if (hasFilters == false) {
				activeFiltersHtml += "<div class=\"epoq_activefilters\">Aktive Filter:</p><ul class=\"epoq_activeFilterList\" >";
				hasFilters = true;
			}
			var replaceVal = epoq_replaceApostrophs(matchAttrs[i]);		
			var foundStat = false;	
			var statName = "";
			var currentValue = matchValues[i];
			
			findStat: for (var t=0;t<statFields.items.length;t++) {
				if (statFields.items[t][1] == replaceVal) {
					statName = statFields.items[t][2];
					foundStat = true;
					break findStat;
				} 
			}	
			/*if (typeof(epoq_radios) != 'undefined') {
				findRadioExpertStat: for (var t=0;t<epoq_radios.items.length;t++) {
					if (epoq_radios.items[t][1] == replaceVal) {
						statName = epoq_radios.items[t][0];
						var values = epoq_radios.items[t][4].split(",");
						var names = epoq_radios.items[t][3].split(",");
						findValue: for (var j = 0;j<values.length;j++) {
							if (values[j] == currentValue) {
								currentValue = names[j];
								break findValue;
							}
						}
						
						foundStat = true;
						break findRadioExpertStat;
					} 
				}
			}*/
			if (typeof(epoq_fineSearch) != 'undefined') {
				findExpertStat: for (var t=0;t<epoq_fineSearch.items.length;t++) {
					if (epoq_fineSearch.items[t][1] == replaceVal) {
						statName = epoq_fineSearch.items[t][0];
						val1 = epoq_fineSearch.items[t][4];
						name1 = epoq_fineSearch.items[t][3];												
						if (typeof(val1) != 'undefined' && typeof(name1) != 'undefined') {	
							var values = val1.split(",");
							var names = name1.split(",");
							findValue2: for (var j = 0;j<values.length;j++) {
								if (values[j] == currentValue) {
									currentValue = names[j];
									break findValue2;
								}
							}
						}
						
						foundStat = true;
						break findExpertStat;
					}
				}
			} 
			
			/* replace real values with nice ones*/
			
				
			if (foundStat) {
				activeFiltersHtml += "<li class=\"epoq_activeFilter\" onclick='epoq_removeFilter(\"" + replaceVal + "\");'>" + statName + ": " + currentValue + "&nbsp;&nbsp;&nbsp;&nbsp;</li>";
			}
			
		}				
	}	
	if (hasFilters == true) {
		activeFiltersHtml += "</ul></div>"
	}
	/*activeFiltersHtml += "</b><button onclick=\"removeFilters()\"> remove</button>";*/			
	jQuery("#epoq_activefilters").append(activeFiltersHtml);
	/* add hit count */
	jQuery("#epoq_searchstats").append("Es wurden <p class=\"epoq_search_hits\">" + hitcount + "</p> Artikel gefunden");
	/* add result size change buttons */
	var pagingHtml = "<p class=\"epoq_header\">Artikel pro Seite:</p><ul class=\"resultsize\">";
	for (var i=0; i<limitOptions.length;i++) {
		if (limit == limitOptions[i]) {
			pagingHtml += "<li class=\"epoq_active\" onclick=\"epoq_changelimit(" + limitOptions[i] + ");\">"+limitOptions[i]+"</li>";
		} else {
			pagingHtml += "<li onclick=\"epoq_changelimit(" + limitOptions[i] + ");\">"+limitOptions[i]+"</li>";
		}
	}			
	jQuery(".epoq_resultsize").append(pagingHtml);			
	
	/* add navigation (paging) */
	var pageHtml = "<p class=\"epoq_header\">Seite:</p><ul class=\"epoq_resultpages\">";			
	var maxPages = 6;
	var currentCount = hitcount;
	var currentPage = ((offset / limit) + 1) | 0 ;
	var pages = ((currentCount - 1) / limit + 1) | 0
	
	if (currentPage > 1) {
		pageHtml+= ("<li class=\"epoq_page_left\" onclick=\"epoq_changepage('" + (currentPage - 1) + "');\">&nbsp;&nbsp;&nbsp;&nbsp;</li>");
	}
	if (currentPage > (maxPages/2)) {
		pageHtml+= ("<li onclick=\"epoq_changepage('" + 1 + "');\">" + 1 + "</li>");				
	}
	if (currentPage > (maxPages/2) + 1 ) {
		pageHtml+= ("<li>...</li>");
	}
	for (var i = 1; i < pages + 1; i++ ) {				
		if (currentPage == i) {
			pageHtml+= ("<li class=\"epoq_active\" onclick=\"epoq_changepage('" + i + "');\">" + i + "</li>");
		} else if (i - currentPage <= maxPages/2 && i - currentPage > -maxPages/2){
			pageHtml+= ("<li onclick=\"epoq_changepage('" + i + "');\">" + i + "</li>");
		}			
	}
	if (currentPage < pages - (maxPages / 2) - 1) {
		pageHtml+= ("<li>...</li>");				
	}
	if (currentPage < pages - (maxPages / 2)) {
		pageHtml+= ("<li onclick=\"epoq_changepage('" + pages + "');\">" + pages + "</li>");			
	}
	if (currentPage < pages) {
		pageHtml+= ("<li class=\"epoq_page_right\" onclick=\"epoq_changepage('" + (currentPage + 1) + "');\">&nbsp;&nbsp;&nbsp;&nbsp;</li>");
	}			
	pageHtml += ("</ul>");			
	jQuery(".epoq_changepage").append(pageHtml);
	//}			
	/* add result statistics */
	var maxStats = maxStatisticCount;
	var j = 0;		
	var filterId = 0;
	statloop: for (var property in statistics) {					
		if(typeof(statistics[property]) == "object") {
			var stat = "null";
			var name = "";
			var foundStat = false;
			findStat: for (var t=0;t<statFields.items.length;t++) {
				if (statFields.items[t][0] == property) {
					stat = statFields.items[t][1];
					name = statFields.items[t][2];
					foundStat = true;
					break findStat;
				} 
			}	
			/*if (foundStat) { //only display declared stats*/	
			var filterCol = "epoq_filterCol" + filterId % statisticCols;
			prodHtml = "<div class=\"epoq_singlefilter " + filterCol + "\"><ul class=\"epoq_filterstat\"><p class=\"epoq_header\">" + name + "</p>";					
			
			stats[j++] = statistics[property];
			if(typeof(statistics[property][0]) != "undefined")
			{
				//many items
				for(var k=0; k<statistics[property].length; k++){
					var val = "";
					 var count = statistics[property][k]["@hitcount"];
					if (tenantId == "exlibris") {
						val = statistics[property][k]["@category"];
					} else {
						val = statistics[property][k]["@value"]
					}
					if (k < maxStats) {
						prodHtml += epoq_generateStatistic(stat, val, count, "");
					} 
					if (k == maxStats && statistics[property].length > maxStats) {
						prodHtml += "<li class=\"epoq_filterresult epoq_extend "+ property  +"\" onclick=\"epoq_unhide('"+ property  +"');\">Weitere....</li>";
					} 
					if (k >= maxStats) {
						prodHtml += epoq_generateStatistic(stat, val, count, "epoq_hide epoq_more " + property);
					}
					if (k==statistics[property].length-1) {
						prodHtml += "<li class=\"epoq_filterresult epoq_more epoq_hide epoq_collapse "+ property  +"\" onclick=\"epoq_hide('"+ property  +"');\">Weniger....</li>";
					}					
				}
			} else
			{
				 //only one item
				 var val = "";
				 var count = statistics[property]["@hitcount"];
				 
				 if (tenantId == "exlibris") {
					 val = statistics[property]["@category"];
				 } else {
					 val = statistics[property]["@value"]
				 }
				 prodHtml += epoq_generateStatistic(stat, val, count, "");				
			}
			prodHtml += "</ul></div>";
			jQuery("#epoq_filters").append( prodHtml );
			filterId++;
			/*}*/
		}		
	}	
}

function epoq_replaceApostrophs(val) {
	var replacement= val.replace(/'/g, "§").replace(/\"/g, "#");	
	return replacement;
}

function epoq_restoreApostrophs(val) {
	var restoration = val.replace(/§/g, "'").replace(/#/g, "\"");	
	return restoration;
}

function epoq_generateStatistic(stat, val, count, extraclass) {
	var addclass = "";
	var active = false;
	if (typeof(extraclass) != "undefined") {
		addclass =  " " + extraclass;
	}		
	for (var i = 0; i< activeFilters.items.length; i++) {		
		if (typeof(activeFilters.items[i][0]) != 'undefined') {
			if (stat == activeFilters.items[i][0]) {
				if (activeFilters.items[i][1].indexOf(";") != -1) {
					var multipleFilters = activeFilters.items[i][1].split(";");
					for (var j=0; j < multipleFilters.length; j++) {
						if (multipleFilters[j] == val) {			
							addclass += " epoq_active_filterresult";	
							active = true;
							break;
						}
					}
					
				} else if (val == activeFilters.items[i][1]) {			
					addclass += " epoq_active_filterresult";	
					active = true;
					//alert("test");
					break;
				}
			}
		}
	}
	var replaceVal = epoq_replaceApostrophs(val);
	var executeMethod = "epoq_addFilter(\"" + stat + "\",\"" + replaceVal + "\");";
	if (active) {
		executeMethod = "epoq_removeFilter(\"" + stat + "\",\"true\");";
	}
	
	return "<li class=\"epoq_filterresult" + addclass + "\" onclick='" + executeMethod +  "'>" + val + " (" + count + ")</li>";
}

function epoq_parseJsonAsRows(data)
{
	var items = new Array();
	if(typeof(data.result.items) != "undefined")
	{
		var resultitems = data.result.items.item;

		if(typeof(resultitems[0]) != "undefined")
		{
			/*many items*/
			for(var i=0; i<resultitems.length; i++){
				items[resultitems[i]['g:id']['$']] = resultitems[i];
			}
		}
		else
		{
			/*only one item*/
			items[resultitems['g:id']['$']] = resultitems;
		}
	}

	var rows = new Array();
	if(typeof(data.result.findings)!= "undefined")
	{
		
		data = data.result.findings.finding;
		if(typeof(data[0]) != "undefined")
		{
			/*many finding*/
			for(var i=0; i<data.length; i++){
				if(typeof(data[i]["match-item"]) != "undefined")
				{
					data[i].nodeRef = items[data[i]["match-item"]["@node_ref"]];
				}
				rows[i] = { data:data[i], value:'val', result:'res' };
				if(typeof(data[i].suggestion)!= "undefined")
				{
					rows[i].result = data[i].suggestion['$'];
				}
			}
		}
		else
		{
		    /*only one finding*/
			if(typeof(data["match-item"]) != "undefined")
			{
				data.nodeRef = items[data["match-item"]["@node_ref"]];
			}
			rows[0] = { data:data, value:'val', result:'res' };
			if(typeof(data.suggestion)!= "undefined")
			{
				rows[0].result = data.suggestion['$'];
			}
		}
		 
	}
	return rows;
}

function epoq_unhide(statclass) {
	var test = "." + statclass;
	jQuery(test).removeClass('epoq_hide');	
	jQuery(".epoq_extend." + statclass).addClass('epoq_hide');
	
}

function epoq_hide(statclass) {
	jQuery(".epoq_more." + statclass).addClass('epoq_hide');	
	jQuery(".epoq_extend." + statclass).removeClass('epoq_hide');
}

function epoq_goToProduct(url, productId) {
	epoq_sendSearchClick(productId);
	window.location = url;
}

function epoq_currencyFormatted(amount)
{
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	s += " " + currencySymbol;
	return s;
}


function epoq_formatSearchResultItem(row, i){
	var prodHtml;
	if(typeof(row.nodeRef) != "undefined")
	{
		/*prodHtml = "<div border='1' width='600px' cellpadding='0' cellspacing='0'>";*/
		prodHtml = "";	
		var onclickMethod = "";
		if(typeof(row.nodeRef['link']) != "undefined") {
			onclickMethod = "epoq_goToProduct('" + row.nodeRef['link']['$'] + "','" + row.nodeRef['g:id']['$'] + "');"
		}		
		if (i % 2 == 0) {
			prodHtml += "<div class='epoq_resultrow epoq_evenrow' onclick=\"" + onclickMethod + "\">";
		} else {
			prodHtml += "<div class='epoq_resultrow' onclick=\"" + onclickMethod + "\">";
		}
		prodHtml += "<div class='epoq_resultpic'>";
		/*if(typeof(row.nodeRef['link']) != "undefined") prodHtml += "<a href='" + row.nodeRef['link']['$']+ "'>";*/			
		if(typeof(row.nodeRef[epoq_imageField]) != "undefined") prodHtml +=  "<img class='epoq_prodimg' src='" + row.nodeRef[epoq_imageField]['$']+ "'/>";
		/*prodHtml += "</a>";*/
		prodHtml +="</div>"; 
//		prodHtml +="<div class='resultdesc'>";
		for (var i=0;i<resultAttributes.items.length;i++) {
			var fieldName = resultAttributes.items[i][0];
			if(typeof(row.nodeRef[fieldName]) != "undefined") {
				var fieldValue = row.nodeRef[fieldName]['$'];
				if (fieldName == "g:price") {
					fieldValue = epoq_currencyFormatted(fieldValue);
				}
				prodHtml += "<div class=\"" +resultAttributes.items[i][1] + "\">";				
				prodHtml += fieldValue; 				
				prodHtml += "</div>"; 
			}
		}
		/*prodHtml +="</div>";*/
		

		/*if(typeof(row['match-item']['sub-match'][0]) != "undefined")
		{
			//more than one submatches
			prodHtml += "<div class='resultdesc'>"
			var submatch = row['match-item']['sub-match'];
			for(var i=0; i<submatch.length; i++){
				var highlighRegEx = new RegExp(submatch[i]['@key'], "gi");
				prodHtml += submatch[i]['@attr'] ;
				prodHtml += submatch[i]['@display'].replace(highlighRegEx, '<strong>' + submatch[i]['@key'] + '</strong>');
				prodHtml += "<br>";
			}
			prodHtml += "</div>";
		}
		else
		{
			//only one submatch
			var submatch = row['match-item']['sub-match'];
			var highlighRegEx = new RegExp(submatch['@key'], "gi");
			prodHtml += "<div class='resultdesc'>" + submatch['@attr'] + "</div>";
			prodHtml += "<div class='resultdesc'>" + submatch['@display'].replace(highlighRegEx, '<strong>' + submatch['@key'] + '</strong>') + "</div>";
		}*/
//		if(typeof(row.nodeRef['g:price']) != "undefined"){
//			var price = row.nodeRef['g:price']['$'];			
//			prodHtml +=  "<div class='resultprice'>" + CurrencyFormatted(price) + "</div>"; 
//		}
		
//		prodHtml += "<div class='dummyresult'>&nbsp</div>"
		prodHtml += "</div>";
		return prodHtml;
	}

	if(typeof(row.suggestion)!= "undefined")
	{
		prodHtml  = "<table border='0' width='600px' ><tr><td width='300px'>Suggestion: " + row.suggestion['$'];
		prodHtml += "</td><td width='300px'>Treffer: " + row.suggestion['@hitcount'] + "</td>"; 
	}
	prodHtml += "</tr></table>";
	return prodHtml;
}

function epoq_changepage(page) {	

	offset = (page-1) * limit;	 
	jQuery.address.parameter('offset', offset, false);
}

function epoq_changelimit(newLimit) {
	 limit = newLimit;
	 jQuery.address.parameter('limit', limit, false);
}


function epoq_changeSort(sortBy, sortDir) {
	offset=0;
	orderBy = sortBy;
	order = sortDir;	
	jQuery.address.autoUpdate(false);
	jQuery.address.parameter('offset', offset, false);
	jQuery.address.parameter('orderBy', orderBy, false);
	jQuery.address.parameter('order', order, false);
	jQuery.address.update();
	jQuery.address.autoUpdate(true);
}



function epoq_addFilter(stat, value, reload) {
	/*var el = document.getElementById(filterId);
	var classList = el.attr('class').split(' ');
	if (typeof(classList) != undefined) {
		for (var i =0; i < classList.length; i++) {
			if (classList[i] == '')
		}
	}*/
	
	
	value = epoq_restoreApostrophs(value);
	if (reload != false) {
		offset=0;
	}		
	//epoq_removeFilter(stat, false);
	for (var i = 0; i< activeFilters.items.length; i++) {		
		if (typeof(activeFilters.items[i][0]) == 'undefined') {
			activeFilters.items[i][0] = stat;
			activeFilters.items[i][1] = value;
			break;
		} else if (stat == activeFilters.items[i][0]) {		
			if (stat == "g:price") { /* multiple price or range filters not available atm */
				activeFilters.items[i][1] = value;
			} else {
				activeFilters.items[i][1] = activeFilters.items[i][1] + ";" + value;
			}
			
			break;				
		}
	}
	if (reload != false) {
		epoq_setFilters(reload);
	}	
}


function epoq_removeFilter(stat, reload) {
	stat = epoq_restoreApostrophs(stat);
	for (var i = 0; i< activeFilters.items.length; i++) {		
		if (typeof(activeFilters.items[i][0]) != 'undefined' && stat == activeFilters.items[i][0]) {			
			activeFilters.items[i][0] = undefined;
			activeFilters.items[i][1] = undefined;						
		}
	}	
	if (reload != false) {
		epoq_setFilters(reload);
	}
}

function epoq_removeFilters(reload) {
	for (var i = 0; i< activeFilters.items.length; i++) {		
		if (typeof(activeFilters.items[i][0]) != 'undefined') {			
			activeFilters.items[i][0] = undefined;
			activeFilters.items[i][1] = undefined;						
		}
	}	
	/*matchAttr = "";
	matchValue = "";*/
	if (reload != false) {
		epoq_setFilters(reload);
	}
}


function epoq_setFilters() {
	/*set expert arg*/
	matchAttr = "";
	matchValue = "";
	for (var i = 0; i< activeFilters.items.length; i++) {
		if (typeof(activeFilters.items[i][0]) != "undefined" && typeof(activeFilters.items[i][1]) != "undefined") {
			//expert += "&matchAttr=" + activeFilters.items[i][0] + "&matchValue=" + activeFilters.items[i][1];
			matchAttr += activeFilters.items[i][0] + "§";
			matchValue += activeFilters.items[i][1] + "§";
		}
	}	
	jQuery.address.autoUpdate(false);
	jQuery.address.parameter('offset', offset, false);
	jQuery.address.parameter('matchAttr', matchAttr, false);
	jQuery.address.parameter('matchValue', epoq_escapeAmp(matchValue), false);
	jQuery.address.update();
	jQuery.address.autoUpdate(true);	
}
function epoq_escapeAmp(text) {
	return text.replace(/&/g, "I_I");
}

function epoq_unescapeAmp(text) {
	return text.replace(/I_I/g, "&");
}


function epoq_getEmptyResult() {
	return "<div class='epoq_resultrow'\">" +  emptyResultHtml + "</div>";
}


function epoq_sendSearchClick(productId) 
{
	var searchurl = searchServer + clickRequest +
	"?tenantId="+ encodeURIComponent(tenantId) +	
	"&sessionId=" + encodeURIComponent(sessionId) +	
	"&qid=" + encodeURIComponent(queryId) +
	"&productId=" + encodeURIComponent(productId);
	
	jQuery.ajax({
		  url: searchurl, 
		  contentType: "application/json; charset=utf-8",
		  dataType: 'jsonp',		
		  success: function (data) { 
			
		  },
	  	  error: function(XHR, textStatus, errorThrown){ 
		  	
	  	  },
	  	  timeout: 3000
	});
	
}


function epoq_getSearchResult()
{
	var searchurl = searchServer + getResultRequest +
	"?tenantId="+ encodeURIComponent(tenantId) +
	"&format=json&pretty=true" +
	"&query=" + encodeURIComponent(query) + 
	"&sessionId=" + encodeURIComponent(sessionId) + 
	"&orderBy=" + encodeURIComponent(orderBy) + 
	"&order=" + encodeURIComponent(order) + 
	"&locakey=" + locakey + 	
	"&full";
	
	var matchAttrs = matchAttr.split("§");
	var matchValues = matchValue.split("§");	
	//if (matchAttrs.length == 0) {
		epoq_removeFilters(false);
	//} else {		
		for (var i=0; i<matchAttrs.length;i++) {
			var unprocessedFilterValue = matchValues[i];
			if (matchAttrs[i].length > 0) {
				if (matchAttrs[i] == "g:price") {
					/*if (matchValues[i].indexOf(";") != -1) {
						var splitPrices = matchValues[i].split(";");
						matchValues[i] = "";
						for (var j=0; j<splitPrices.length;j++) {
							var priceRange = splitPrices[j];
							if (priceRange.indexOf("-") != -1) {
								var minRange = 0;
								var maxRange = 0;
								var rangeFilter = priceRange.split("-");
								if (rangeFilter.length == 2) {								
									minRange = parseInt(rangeFilter[0]);
									maxRange = parseInt(rangeFilter[1]);
									if (matchValues[i].length > 0) {
										matchValues[i] += ";";
									}
									matchValues[i] += ">" + minRange + "," + "<" + maxRange; 
								}		
							}
						}
					} else {*/
						if (matchValues[i].indexOf("-") != -1) {
							var minRange = 0;
							var maxRange = 0;
							var rangeFilter = matchValues[i].split("-");
							if (rangeFilter.length == 2) {
								/*alert("range filter given !");*/
								minRange = parseInt(rangeFilter[0]);
								maxRange = parseInt(rangeFilter[1]);
								matchValues[i] = ">" + minRange + "," + "<" + maxRange; 
							}		
						}
					/*}*/							
				} 			
				searchurl += "&matchAttr=" + encodeURIComponent(matchAttrs[i]) + "&matchValue=" + encodeURIComponent(matchValues[i]) + "&matchType=filter";
				epoq_removeFilter(matchAttrs[i], false);
				epoq_addFilter(matchAttrs[i], unprocessedFilterValue, false);			
			}			
		}
	//}

	
	
	var epoq_recommendationPids = new Array();
	jQuery.ajax({
		  url: searchurl, 
		  contentType: "application/json; charset=utf-8",
		  dataType: 'jsonp',
		  scriptCharset: "utf-8",
		  data: "&limit="+limit+"&offset="+offset,
		  success: function (data) { 
				if(typeof epoq_beforeSearch == 'function') {
					epoq_beforeSearch();
				} 
				jQuery("#epoq_filterresult").empty();
				jQuery("#epoq_filterresult").append("<div id=\"epoq_filters\"></div>");
				jQuery("#epoq_searchresult").empty();
				jQuery("#epoq_searchresult").append(						
						"<div id=\"epoq_search\"></div>" +
						"<div id=\"epoq_activefilters\"></div>" +
						"<div id=\"epoq_searchstats\"></div>" +
						"<div class=\"epoq_navigate\">" +
						"<div class=\"epoq_resultsize\"></div>" +
						"<div class=\"epoq_changepage\"></div>" +
						"<div class=\"epoq_sort\"></div>" +
						"</div>" +
						"<div id=\"epoq_resultrows\"></div>" +
						"<div class=epoq_navigate>" +
						"<div class=\"epoq_resultsize\"></div>" +
						"<div class=\"epoq_changepage\"></div>" +
						"<div class=\"epoq_sort\"></div>" +
						"</div>");
		  		var stats = epoq_generateStatsAndNavigation(data);			  		
		  		var rows = epoq_parseJsonAsRows(data);
		  		var formatedResults = "";
		  		jQuery("#epoq_resultrows").empty();
		  		if (rows.length == 0) {
		  			formatedResults+= epoq_getEmptyResult();
		  		} 
		  		for(i = 0; i < rows.length; i++)
			  	{			  			
		  			formatedResults += epoq_formatSearchResultItem(rows[i].data, i);
			  	}				  		
		  		queryId = data.result.qid['$'];		  		
		  		jQuery("#epoq_resultrows").append( formatedResults );			
		  		/*addCss(".prodimg {" +
		  				"max-height:" + maxResultImageHeight+ "px;" +
		  				"height: expression(this.height > " + (maxResultImageHeight -1)  + "? (this.width > this.height ? (this.width / this.height) * " + maxResultImageHeight + " : " + maxResultImageHeight + ") : true);" +
		  				"max-width:" + maxResultImageWidth+ "px;" +
		  				"width: expression(this.width > " + (maxResultImageWidth -1)  + "? (this.height > this.width ? (this.height / this.width) * " + maxResultImageWidth + " : " + maxResultImageWidth + ") : true);" +
		  				"-ms-interpolation-mode: bicubic;"			  				 
		  				+"}");*/
		  },
	  	  error: function(XHR, textStatus, errorThrown){ 
		  	 // alert('error'); // place here the timeout code  
	  	  },
	  	  timeout: 3000
	});
}

function epoq_addCss(cssCode) {
	var styleElement = document.createElement("style");
	  styleElement.type = "text/css";
	  if (styleElement.styleSheet) {
	    styleElement.styleSheet.cssText = cssCode;
	  } else {
	    styleElement.appendChild(document.createTextNode(cssCode));
	  }
	  document.getElementsByTagName("head")[0].appendChild(styleElement);
}



