function Paging(table) {
		
	this.table = table;
	this.offset = 0;
	this.items_per_page = 0;
	this.rows_per_page = 0;
	this.filters = new Object();
	this.relevanz = 9;
	
	this.rows = $("tbody tr", this.table);
	
	var _this = this;
	
	$(".navi-prev-page", table).each(function(i, e) {

		$(e).click(function() {
			
			if ($(e).hasClass("button-arrow-left-active"))
				_this.prevPage();
			return false;
		});
		$(e).mousedown(function(event) { event.stopPropagation(); return false; });
	    $(e).onselectstart = function() { return false; };
	});

	$(".navi-next-page", table).each(function(i, e) {
		$(e).click(function() {
			
			if ($(e).hasClass("button-arrow-right-active"))
				_this.nextPage();
	
			return false;
		});
		$(e).mousedown(function(event) { event.stopPropagation(); return false; });
		$(e).onselectstart = function() { return false; };
	});
    
	var combo_commit = $(".dropdownbox-wrapper .commit", table);
	$(combo_commit).click(function() {
		_this.relevanz = $(this).attr('ddvalue');
		if(_this.relevanz < 10) {
			// For Online Berater
			_this.setItemsPerPage(10);
		}
		else {
			// For Lexikon
			_this.setItemsPerPage(_this.relevanz);
		}
	});	
	
	if ($(table).hasClass("default-5")) {
		this.setItemsPerPage(5);
	}
	else if($(table).hasClass("40-per-page")){
		this.setItemsPerPage(40);
	} 
	else {
		var browserName=navigator.appName; 
		if (browserName=="Microsoft Internet Explorer")
		{ 
			this.setItemsPerPage(10);
		}
		else {
			this.setItemsPerPage(10);
		}
		
	}

	this.result_count = $(".result-count", table);
	
	this.setOffset(0);
}

Paging.prototype.setFilter = function(target, value) {
	
	this.filters[target] = value;
	this.setOffset(0);
	this.paginate();
}

Paging.prototype.prevPage = function() {
	
	this.setOffset(this.offset - this.rows_per_page)
	this.paginate();
};

Paging.prototype.nextPage = function() {
	
	this.setOffset(this.offset + this.rows_per_page);
	this.paginate();
};

Paging.prototype.setOffset = function(offset) {
	
	if (offset <= 0)
	{
		$(".navi-prev-page", this.table).each(function(i, e) 
		{
			$(e).addClass("button-arrow-left");
			$(e).removeClass("button-arrow-left-active");
		});
		
		offset = 0;
	} else {
		
		$(".navi-prev-page", this.table).each(function(i, e) 
		{
			$(e).addClass("button-arrow-left-active");
			$(e).removeClass("button-arrow-left");
		});
	}
	
	var end = this.rows.length - this.rows_per_page;
	if (offset >= end)
	{
		$(".navi-next-page", this.table).each(function(i, e) 
		{
			$(e).addClass("button-arrow-right");
			$(e).removeClass("button-arrow-right-active");
		});

	} else {
	
		$(".navi-next-page", this.table).each(function(i, e) 
		{
			$(e).addClass("button-arrow-right-active");
			$(e).removeClass("button-arrow-right");
		});
	}
	
	this.offset = offset;

	if (this.rows.length > 0)
	{
		var page = this.offset > 0 ? Math.ceil(this.offset / this.rows_per_page + 1) : 1;
		$(".navi", this.table).html("Seite <strong>" + page + "</strong> von <strong>" + Math.ceil((this.rows.length - this.rows_per_page) / this.rows_per_page + 1) + "</strong>");
		$(".navi-prev-page", this.table).show();
		$(".navi", this.table).show();
		$(".navi-next-page", this.table).show();
	} else
	{
		$(".navi-prev-page", this.table).hide();
		$(".navi", this.table).hide();
		$(".navi-next-page", this.table).hide();
	}
};



Paging.prototype.setItemsPerPage = function(count) {
		
	this.items_per_page = parseInt(count);
	
	var two_col = $(this.table).hasClass("two-columns"); 
	this.rows_per_page = two_col ? this.items_per_page/2 : this.items_per_page;

	// enable / disable navi buttons
	this.setOffset(this.offset);
	this.paginate();
};

Paging.prototype.paginate = function() {
	$("#dropdown-width-to-set").css('width', '169px');
	var has_filter = false;
	for (filter in this.filters)
	{
		has_filter = true;
		break;
	}

	var end = this.offset + this.rows_per_page;
	var rows = $("tbody tr", this.table).hide();
	var filtered = Array();
		
	var _this = this;
	$(rows).each(function(i, row) {

		var candidate = true;		
		
		
		if(_this.relevanz > 4) {
		}
		else {
			var itemRelevance = $('.relevance-rating',rows[i]).text();
			var itemRelevanceValue = 9;
			if(itemRelevance == 'Unverzichtbar') {
				itemRelevanceValue = 4;
			}
			if(itemRelevance == 'Sehr wichtig') {
				itemRelevanceValue = 3;
			}
			if(itemRelevance == 'Empfehlenswert') {
				itemRelevanceValue = 2;
			}
			if(itemRelevance == 'Weniger wichtig') {
				itemRelevanceValue = 1;
			}
			if(itemRelevance == 'Relevanz') {
				itemRelevanceValue = 9;
			}
			if(itemRelevance == 'alle anzeigen') {
				itemRelevanceValue = 9;
			}
			if(_this.relevanz == 9) {
				candidate = true;		
			}
			else if(itemRelevanceValue == _this.relevanz) {
				candidate = true;		
			}
			else {
				candidate = false;		
			}
			// alert(_this.relevanz);
			// alert(itemRelevance);
		}
		
		if (has_filter && $(".filter", row).length > 0) {
			
			var matches = new Object();
			$(".filter", row).each(function(i, filter) {
				
				var cat = $(".category", filter).text();
				var vals = $(".value", filter);
				
				matches[cat] = new Object();
				matches[cat].required = Array();
				
				$(".require-match", filter).each(function (i, e) {
					matches[cat].required.push($(e).text());
				});
				
				matches[cat].matches = false;
				$(vals).each(function (i, val) {
					
					if (_this.filters[cat] == "*" || _this.filters[cat] == $(val).text())
					{
						matches[cat].matches = true;
						return;
					}
				});
			});
			
			for (var match in matches) {

				if (matches[match].matches) {
					
					var reqs = matches[match].required;
					for (var j=0; j<reqs.length; j++) {

						if (!matches[reqs[j]].matches) {
						
							candidate = false;
						}
					}
					
				} else {

					candidate = false;
					break;
				}
				
				if (!candidate)
					break;
			}
									
		} else
			candidate = true;

		if (candidate)
			filtered.push(row);
	});
	
	if (this.result_count)
		this.result_count.text(filtered.length);

	$(filtered).slice(this.offset, end).show();
	
	// enable / disable navi buttons
	this.rows = filtered;
	this.setOffset(this.offset);
	
	$("#dropdown-width-to-set").css('width', '170px');
};

$(document).ready(function(){
	
	$("table.paged").each(function(i, e) {

		var paging = new Paging(e);
		$(e).data("paging", paging);
		paging.paginate();
	});
});

