var sortableTable_with_navigation = Class.refactor(sortableTable,{
	
	sort: function(index){
		if(this.options.onStart){
			this.fireEvent('onStart');
		}
		this.options.sortOn = index;
		var header = this.tHead.getElements('th');
		var el = header[index];
		
		header.each(function(e,i){
			if(i != index){
				e.removeClass('sortedASC');
				e.removeClass('sortedDESC');
				e.addClass('sortedNot');
			}
		});
		
		if (el.hasClass('sortedNot')) {
			el.removeClass('sortedNot');
		}
		if(el.hasClass('sortedASC')){
			el.removeClass('sortedASC');
			el.addClass('sortedDESC');
			el.sortBy = 'DESC';
			var cook2 = Cookie.write(this.options.page + '_sortBy','DESC');
		}else if(el.hasClass('sortedDESC')){
			el.removeClass('sortedDESC');
			el.addClass('sortedASC');
			el.sortBy = 'ASC';
			var cook2 = Cookie.write(this.options.page + '_sortBy','ASC');
		}else{
			if(this.options.sortBy == 'ASC'){
				el.addClass('sortedASC');
				el.sortBy = 'ASC';
				var cook2 = Cookie.write(this.options.page + '_sortBy','ASC');
			}else if(this.options.sortBy == 'DESC'){
				el.addClass('sortedDESC');
				el.sortBy = 'DESC';
				var cook2 = Cookie.write(this.options.page + '_sortBy','DESC');
			}
		}
		this.elements.sort(el.compare);
		this.elements.injectInside(this.tBody);
		if(this.filtered){
			this.filteredAltRow();
		}else{
			this.altRow(this.options.lline);
		}
		var cook1 = Cookie.write(this.options.page + '_index',index);
		if(this.options.onComplete){
			this.fireEvent('onComplete');
		}
	},
	
	altRow: function(line){
		var toomuch = false;
		if (line>this.elements.length) { 
			line = 1;
		}
		var cook1 = Cookie.write(this.options.page + '_line',line);
		min = ((line*this.options.max)-this.options.max)+1;
		max = (line*this.options.max);

		this.elements.each(function(el,i){
			el.removeClass('hide');
			if ((i+1) > max || (i+1) < min) {
				el.removeClass('altRow');
				el.addClass('hide');
				toomuch = true;
			} else {
				if(i % 2){
					el.removeClass('altRow');
				}else{
					el.addClass('altRow');
				}
			}
		}.bind(this));
		
		if (toomuch == true) {
			this.navigatieBar(line);
		}
	},
	
	filteredAltRow: function(){
		if ($('tr_navigatie')) {
			d = $('tr_navigatie').parentNode;
			d.removeChild($('tr_navigatie'));
		}
		this.table.getElements('.'+this.options.filterSelectedCls).each(function(el,i){
			el.removeClass('hide');
			if(i % 2){
				el.removeClass('altRow');
			}else{
				el.addClass('altRow');
			}
		}.bind(this));
	},
	
	navigatieBar: function(line) {
		totaal = parseInt(this.elements.length/this.options.max);
		if (totaal < (this.elements.length/this.options.max)) {
			totaal += 1;
		}
		var str = '';
		for (i = 1;i <= totaal;i++) {
			if (str != '') { str += ' - '; }
			if (i == line) {
				str += '<b>' + i + '</b>';
			} else {
				str += '<a href="#" onclick="sortOverzicht.altRow('+i+');return false;">' + i + '</a>';
			}
		}
		if ($('tr_navigatie')) {
			d = $('tr_navigatie').parentNode;
			d.removeChild($('tr_navigatie'));
		}
		var tr = new Element ( 'TR',{'id':'tr_navigatie'});
		var td = new Element('td',{'colspan':'4'}).set('html',str);
		td.injectInside(tr);
		tr.injectInside(this.tBody);
	},
	
	filter: function(form){
		var form = $(form);
		var col = 0;
		var key = '';
		
		form.getChildren().each(function(el,i){
			if(el.id == 'column'){
				col = Number(el.value);
				Cookie.write(this.options.page + '_col',i);
			}
			if(el.id == 'keyword'){
				key = el.value.toLowerCase();
				Cookie.write(this.options.page + '_key',key);
			}
			if(el.type == 'reset'){
				el.addEvent('click',this.clearFilter.bind(this));
			}
		}, this);
		this.doFilter(key,col);
	},
	
	doFilter: function(key,col) {
		if(key){
			this.elements.each(function(el,i){
				if(this.options.filterHide){
					el.removeClass('altRow');
				}
				if(el.getChildren()[col].firstChild.data.toLowerCase().indexOf(key) > -1){
					el.addClass(this.options.filterSelectedCls);
					if(this.options.filterHide){
						el.removeClass(this.options.filterHideCls);
					}
				}else{
					el.removeClass(this.options.filterSelectedCls);
					if(this.options.filterHide){
						el.addClass(this.options.filterHideCls);
					}
				}
			}, this);
			if(this.options.filterHide){
				this.filteredAltRow();
				this.filtered = true;
			}
		}
	},
	clearFilter: function(){
		Cookie.write(this.options.page + '_col','');
		Cookie.write(this.options.page + '_key','');
		this.elements.each(function(el,i){
			el.removeClass(this.options.filterSelectedCls);
			if(this.options.filterHide){
				el.removeClass(this.options.filterHideCls);
			}
		}, this);
		if(this.options.filterHide){
			this.altRow(this.options.lline);
			this.filtered = false;
		}
	}
});
