jQuery.fn.extend({
	smecrefine: function(refinement, options) {
		options = jQuery.extend({
			refinement: refinement
		}, options);
	    return this.each(function() {
			new $.SmecSearchRefine(this, options);
		});
	}
});

$.SmecSearchRefine = function(targetDiv, options) {
	var TOPN = 99;
	if (!options.refinement.categories) return;
	var refinement = options.refinement;
	var categories = refinement.categories;
	var refinementCategories = refinement.refinementCategories;
	var url = refinement.url;

	var prevRefined = getRefinementParams();

	var newTable = $('<table width="100%">');
	for(var j = 1; j < categories.length + 1; j++) {
		var i = j;
		if (j == categories.length) i = 0;
		var categoryName = categories[i].name;
		if (categoryName == 'cluster') { 
			categoryName='Suchbereiche';
		}
				
		newTable.append('<tr class="refine ' + categoryName + '"><td><span class="category">' + categoryName + '</span></td></tr>');
		var k=0;
		var hidden=0;
		$.each(categories[i].values, function() {
			if(!refinementCategories["refine-" + categories[i].name]) {	
				for(var name in this) {
					var value = this[name];
					var encodedName = encodeURIComponent(name);
					var trimmedName = name.replace(/^\s+/, '');

					if (value > 0) {
						var additionalClass = '';
						if (k >= TOPN) {
							hidden++;
							additionalClass='more r' + j;
						}		
						newTable.append('<tr class="' + additionalClass + '"><td style="border-bottom: 1px solid lightgrey; padding-top: 5px; padding-bottom: 5px;"><nobr><img src="http://www.der-schweighofer.at/public/images/block.gif" alt="" height="2" width="10"><img src="http://www.der-schweighofer.at/public/images/page.gif" alt="-">&nbsp;<a href="' + url + '&refine-' + encodeURIComponent(categories[i].name) + '=' + encodedName + prevRefined + '">' + linebreak(trimmedName) + ' (' + value + ')</a><br></nobr></td></tr>');
						k++;
					}					
				};
			} else {
				var selected = refinementCategories['refine-' + categories[i].name];
				newTable.append('<tr class="selected" title="Auswahl aufheben..."><td style="border-bottom: 1px solid lightgrey; padding-top: 5px; padding-bottom: 5px;">'  + '<a href="' + url + getRefinementParams('refine-' + categories[i].name) + '">Suchauswahl <br /><strong>' + selected + '</strong><br />aufheben <span class="selected">[X]</span></a></td></tr>')
			}
		});
		if (hidden > 0) {
			var clickhandler = "$(this).hide(); $('div#smecLeft tr.r" + j + "').show(); return false;";
			newTable.append('<tr class="toggle"><td><a href="javascript:;" title="Mehr einblenden..." onclick="javascript:' + clickhandler + '" class="toggle">' + hidden + ' mehr anzeigen...</a></td></tr>');
		}
	}
	$(targetDiv).append(newTable);
	
	function getRefinementParams(exclude) {
		var result = "";
		$.each(refinementCategories, function (refinedCategory, value) {
			if(refinedCategory != exclude)
				result += "&" + encodeURIComponent(refinedCategory) + "=" + encodeURIComponent(value);
		});		
		return result;
	}
	
	function linebreak(st ) {
		var indent = jQuery.browser.mozilla ? '17px' : '19px';
		var BR = '<br /><span style="padding-left: ' + indent + '"></span>';
		var D = '>';
		var M = 28;
		if (st && st.length >= M) {
			var b = st;
			if (st.indexOf(D) >= 0) b = st.replace(D, BR);
			else {
				for (var i=M-1; i >= 0; i--) {
					if (st.charAt(i) == ' ')  {
						b = st.substring(0,i) + BR + st.substring(i);
						break;
					}
				}
			}
			return b;
		} else return st;
	}
}
/// 
jQuery.fn.extend({
	smecHighlight: function(terms, options) {
		options = jQuery.extend({
			terms: terms
		}, options);
	    return this.each(function() {
			new $.SmecHighlight(this, terms, options);
		});
	}
});

$.SmecHighlight = function(targetDiv, terms, options) {
	var highlight = function(value, terms) {
				var splitted = terms.split(/\s+/)
				var pattern = ''
				for (var i=0; i< splitted.length; i++) {
					if (i > 0) pattern += '|';
					pattern += splitted[i].replace(/[^-a-zA-Z0-9öäüÖÄÜß:]+/gi, '')
					
				}
				return value.replace(new RegExp('(' + pattern + ')', 'gi'), "<strong>$1</strong>");
	};
	$(targetDiv).html(highlight($(targetDiv).html(), terms));
		
}