(function($) {
	/**
	 * private functions
	 */
	var catMenuSetup;
	var pageBrowserSetup;

	function setCatMenuSetup(setup) {
		catMenuSetup = setup;
	}

	function initCatMenu() {
		var catUids = [];

		catAllCount = 0;
		catMenuSetup.$items.each(function(){
			cl = $(this).attr('class');
			cls = cl.split(' ');
			for (var i = 0; i < cls.length; i++) {
				if(cls[i].substr(0,catMenuSetup.catClass.length) == catMenuSetup.catClass) {
					catUids.push(cls[i].substr(catMenuSetup.catClass.length));
				}
			}
			catAllCount++;
		});

		catUids = uniqueObj(catUids);

		catMenuSetup.$catMenu.prepend('<div class="categories"><ul></ul></div>');

		jQuery('<li><a href="javascript:void(0)" class="active" id="catSelect-all" onclick="jQuery.op_news_filter.changeCat(\'all\')"><span class="category">' + catMenuSetup.llAll + '</span><span class="count">' + catAllCount + '</span></a></li>').appendTo('.categories ul');

		for(var j = 0; j < catUids.length; j++) {
			var catCount = catMenuSetup.$items.filter('.cat-' + catUids[j]).length;
			var catName = catMenuSetup.$items.filter('.' + catMenuSetup.catClass + catUids[j]).find(catMenuSetup.catNameSel).html();
			jQuery('<li><a href="javascript:void(0)" id="catSelect-' + catUids[j] + '" onclick="jQuery.op_news_filter.changeCat(\'' + catUids[j] + '\')"><span class="category">' + catName + '</span><span class="count">' + catCount + '</span></a>').appendTo('.categories ul');
		}

		initPageBrowser();
	}

	function uniqueObj(obj) {
		var a = [], l = obj.length;
		for(var i=0; i<l; i++) {
			for(var j=i+1; j<l; j++)
				if (obj[i] === obj[j]) j = ++i;
				a.push(obj[i]);
		}
		return a;
	};



	function changeCat(catName) {
		jQuery('.categories ul li a').removeClass('active');
		jQuery('a#catSelect-' + catName).addClass('active');

		var prefix = pageBrowserSetup.pageClass;
		var regx = new RegExp('\\b' + prefix + '.*\\b', 'g');
		catMenuSetup.$items.each(function(){
			jQuery(this).show();
			this.className = this.className.replace(regx, '');
		});

		if(catName != 'all') {
			catMenuSetup.$items.not('.' + catMenuSetup.catClass + catName).hide();
		}
		initPageBrowser();
	}

	function setPageBrowserSetup(setup) {
		pageBrowserSetup = setup;
	}

	function initPageBrowser() {
		var itemsCount = pageBrowserSetup.$items.filter(':visible').length;
		var current = 1;
		var pagesCount = Math.ceil(itemsCount/pageBrowserSetup.maxPageItems);
		var i = 0;
		var h = 1;

		pageBrowserSetup.$pageBrowser.html('');

		pageBrowserSetup.$items.filter(':visible').each(function() {
			if(i == pageBrowserSetup.maxPageItems * h) {
				h = h + 1;
			}
			jQuery(this).filter(':visible').addClass(pageBrowserSetup.pageClass + h);
			i = i + 1;
		});

		var browser = '<span id="pbPrev" onclick="jQuery.op_news_filter.pbPrev()">' + pageBrowserSetup.llPrev + '</span><span class="active">'+ pageBrowserSetup.llPage + ' <span id="pbCurrent">' + current + '</span> ' + pageBrowserSetup.llOf + ' <span id="pbCount">' + pagesCount + '</span></span><span id="pbNext" onclick="jQuery.op_news_filter.pbNext()">' + pageBrowserSetup.llNext + '</span>';
		pageBrowserSetup.$pageBrowser.append(browser);

		pbCheckCurrent(current);
	}

	function pbPrev() {
		current = parseInt(jQuery('#pbCurrent').html()) - 1;
		pbCheckCurrent(current);
	}

	function pbNext() {
		current = parseInt(jQuery('#pbCurrent').html()) + 1;
		pbCheckCurrent(current);
	}

	function pbCheckCurrent(current) {

		pagesCount = parseInt(jQuery('#pbCount').html());

		jQuery('#pbCurrent').html(current);

		pageBrowserSetup.$items.hide();
		pageBrowserSetup.$items.filter('.' + pageBrowserSetup.pageClass + current).show();

		if(current == 1 && pagesCount == 1) {
			jQuery('#pbPrev').hide();
			jQuery('#pbNext').hide();
		} else if(current == 1) {
			jQuery('#pbPrev').hide();
			jQuery('#pbNext').show();
		} else if(current == pagesCount) {
			jQuery('#pbPrev').show();
			jQuery('#pbNext').hide();
		} else {
			jQuery('#pbPrev').show();
			jQuery('#pbNext').show();
		}
	}


	/**
	 * public functions
	 */
	jQuery.op_news_filter = {
		setCatMenuSetup : function (setup) {
			setCatMenuSetup(setup);
		},
		setPageBrowserSetup : function (setup) {
			setPageBrowserSetup(setup);
		},
		initCatMenu : function () {
			initCatMenu();
		},
		initPageBrowser : function () {
			initPageBrowser();
		},
		changeCat : function (catClass) {
			changeCat(catClass);
		},
		pbPrev : function () {
			pbPrev();
		},
		pbNext : function () {
			pbNext();
		}
	}
})(jQuery);

jQuery(document).ready(function(){
	if(jQuery('#newsList').length > 0) {
		jQuery.op_news_filter.setCatMenuSetup({
			'$items': jQuery('#newsList li'),
			'$catMenu': jQuery('.marginal'),
			'catNameSel': '.categoryName',
			'catClass': 'cat-',
			'llAll': jsLabels.newsFilterAll
		});
		jQuery.op_news_filter.setPageBrowserSetup({
			'$items': jQuery('#newsList li'),
			'$pageBrowser': jQuery('#newsPageBrowser'),
			'maxPageItems': 10,
			'pageClass': 'page-',
			'llPrev': '<img src="fileadmin/be_user/www.omniplus.com/templates/img/icon/search-prev.gif" />',
			'llNext': '<img src="fileadmin/be_user/www.omniplus.com/templates/img/icon/search-next.gif" />',
			'llPage': jsLabels.pageBrowserPage,
			'llOf': jsLabels.pageBrowserOf
		});
		jQuery.op_news_filter.initCatMenu();
	}
});
