$(function() {	
	var pageSize = rowsPerPage*3;
	
	if (trademarkExist) {
		trademarkDone();
	}
	
	$('.catalogFilter').data( 'bbq', {});
	
	$('.catalogFilter .item a').click(function() 
	{
		var div = $(this).closest('div');
		div.toggleClass('checked');
		
		if (div.hasClass('checked'))
		{
			if (div.hasClass('shifted'))
			{
				$('.catalogFilter .bolded a').closest('div').removeClass('checked');
			}
			else if (div.hasClass('bolded'))
			{
				$('.catalogFilter .shifted a').closest('div').removeClass('checked');
			}
		}
		
		search(true);
		return false;
	});
	
	$('#trademarkPopup .item a').click(function() 
	{
		var div = $(this).closest('div');
		div.toggleClass('checked');
		
		if (div.hasClass('parent'))
		{
			var children = div.next('table').find('.child');
			if (div.hasClass('checked'))
				children.addClass('checked');
			else
				children.removeClass('checked');
		}
		else if (div.hasClass('child'))
		{
			if (!div.hasClass('checked'))
				div.closest('table').prev('.parent').removeClass('checked');
		}
		return false;
	});
	
	$('#more').click(function() {
		search(false);
		return false;
	});
	
	/*$('#change').click(function () {
		$(this).closest('div').hide();
		$('#ctTable').show();
		return false;
	}); */
	
	$(window).bind('hashchange', function(e) {
		var data = $('.catalogFilter').data('bbq');
		var materials = e.getState('materials');
		var functionals = e.getState('functionals');
		var countries = e.getState('countries');
		var trademarks = e.getState('trademarks');
		var num = e.getState('num');
		
		if (data.materials != materials || data.functionals != functionals || data.countries != countries || data.trademarks != trademarks || data.num != num)
		{
			data.num = num;
			
			if (data.materials != materials || data.functionals != functionals || data.countries != countries || data.trademarks != trademarks)
			{
				if (data.materials)
					$('#results').html('');
				
				data.materials = materials;
				data.functionals = functionals;
				data.countries = countries;
				data.trademarks = trademarks;
				
				setItems('material', materials);
				setItems('functional', functionals);
				setCountries(countries);
				setTrademarks(trademarks);				
			}
			
			var start = $('#results a.collection').length;
			
			if (num > start) 
			{
				$.get('/ajax/search', {
					materials: materials, 
					functionals: functionals,
					countries: getCountries(),
					trademarks: getTrademarks(),
					start: start,
					num: num-start
					}, function(data) 
				{
					var size = $(data).appendTo('#results').find('a.collection').size();
					//$('#results').append(data);
					$('#more').css('display', size >= pageSize ? 'block' : 'none');					
				});
			}
			else if (num < start)
			{
				$('#results a.collection:gt('+(num-1)+')').closest('tr').parent().closest('tr').parent().closest('tr').remove();
			}
		}
	});
	
	/*$('#results a.collection').live('click', function() {
		var data = $('.catalogFilter').data('bbq');
		location.href = this.href + '?materials='+data.materials+'&functionals='+data.functionals+'&countries='+data.countries+'&trademarks='+data.trademarks+'&num='+data.num;
		return false;
	});*/
	
	var data = $('.catalogFilter').data('bbq');
	if ($.bbq.getState('materials') || $.bbq.getState('functionals') || $.bbq.getState('countries') || $.bbq.getState('trademarks'))
	{
		$(window).trigger('hashchange');
	}
	else 
		loadFirstTime();
	
	var trademarkPopupBoxy = new Boxy('#trademarkPopup', {
		modal:true, 
		afterShow: function(){
			$(document).keydown(function(event){ 
				if (event.keyCode == 27) 
					trademarkPopupBoxy.hide(); 
			});
		},
		afterHide:  function(){
			$(document).unbind("keydown");
		},
		show: false,
		fixed: false
	});
		
	$('#trademarkChoose').add('#trademarkChange').click(function(){
		trademarkPopupBoxy.show();
		return false;
	});
	
	$('#trademarkCancel').add('#trademarkBtnCancel').click(function(){
		Boxy.get(this).hide();
		return false
	});
	
	/*$('#trademarkChange').click(function(){
		Boxy.get($('#trademarkPopup').get(0)).show();
		return false;
	});*/
	
	$('#trademarkReset').click(function(){
		$('#trademarksDiv').hide();
		$('#countriesDiv').show();
		search(true);
		return false;
	});
	
	$('#trademarkDone').click(function(){
		trademarkDone();
		Boxy.get(this).hide();
		search(true);
		return false
	});
	
	$('.head').click(function(){
		var items = $(this).parent().find('.item');
		var checkedItems = items.filter('.checked');
		if (items.size() == checkedItems.size()) 
			items.removeClass('checked');
		else
			items.addClass('checked');
		search(true);
		return false;
	});
	
	function trademarkDone() {
		var selectedTrademarks = $('#selectedTrademarks').html('');
		var selected = $('#trademarkPopup .item').filter('.checked').find('a[id^="p_trademark_"]');
		if (selected.size() == 0) {
			$('#trademarksDiv').hide();
			$('#countriesDiv').show();
			return;
		}
		selected.each(function(){
			var link = $(this);
			$('<span id="s_'+link.attr('id')+'">'+link.text()+'</span>').appendTo(selectedTrademarks);
		});
		selectedTrademarks.find('span:gt(0)').before('<span>, </span>');
		$('#trademarksDiv').show();
		$('#countriesDiv').hide();
	}
		
	function loadFirstTime() {
		$.get('/ajax/search', {
			materials: getMaterials(), 
			functionals: getFunctionals(), 
			countries: getCountries(),
			trademarks: getTrademarks(), 
			start: 0, 
			num: pageSize
			}, function(data) 
			{
				var size = $(data).appendTo('#results').find('a.collection').size();
				//$('#results').append(data);
				$('#more').css('display', size >= pageSize ? 'block' : 'none');		
			});
	}
	
	function getLinkName(str)
	{
		return getLinkItem(str, 0);
	}

	function getLinkId(str)
	{
		return getLinkItem(str, 1);
	}

	function getLinkItem(str, index)
	{
		str = "" + str;
		var arr = str.split("_");
		if (arr.length > index)
			return arr[index];
		return '';
	}
	
	function getMaterials()
	{
		return getItems('material')
	}

	function getFunctionals()
	{
		return getItems('functional')
	}
	
	function getCountries()
	{
		if ($('#countriesDiv:visible').size() > 0)
			return getItems('country')
		return '';
	}
	
	function setCountries(items)
	{
		if (getCountries() != items)
		{
			setItems('country', items);
			$('#trademarksDiv').hide();
			$('#countriesDiv').show();
		}
	}

	function getTrademarks()
	{
		if ($('#trademarksDiv:visible').size() > 0)
		{
			var items = $('#selectedTrademarks span[id^="s_p_trademark_"]');
			var itemsStr = '';
			for (var i = 0; i < items.length; i++)
			{
				var id = getLinkItem(items[i].id, 3);
				if (id != 0)
					itemsStr += id+',';
			}
			if (itemsStr.length > 0)
			itemsStr = itemsStr.substring(0, itemsStr.length-1);
			return itemsStr;
		}
		return '';
	}
	
	function setTrademarks(items)
	{
		if (getTrademarks() != items)
		{
			$("#trademarkPopup .checked a[id^='p_trademark_']").closest('div').removeClass('checked');
			var itemsArr = items.split(',');
			for (var i = 0; i < itemsArr.length; i++)
			{
				$("#p_trademark_"+itemsArr[i]+"").closest('div').addClass('checked');
			}
			//// force initiate boxy and close it 
			//$('#trademarkChoose').click();
			//Boxy.get($('#trademarkPopup').get(0)).hide();
			
			trademarkDone();
		}
	}
	
	function setItems(name, items)
	{
		if (getItems(name) != items)
		{
			$(".checked a[id^='"+name+"']").closest('div').removeClass('checked');
			var itemsArr = items.split(',');
			for (var i = 0; i < itemsArr.length; i++)
			{
				$("#"+name+"_"+itemsArr[i]+"").closest('div').addClass('checked');
			}
		}
	}
	
	function getItems2(name, className)
	{
		var items = $("."+className+" a[id^='"+name+"']");
		var itemsStr = '';
		for (var i = 0; i < items.length; i++)
		{
			var id = getLinkId(items[i].id);
			if (id != 0)
				itemsStr += id+',';
		}
		if (itemsStr.length > 0)
			itemsStr = itemsStr.substring(0, itemsStr.length-1);
		return itemsStr;
	}

	function getItems(name)
	{
		return getItems2(name, 'checked');
	}
	
	function search(clearPrevious)
	{
		var num = pageSize;
		if (!clearPrevious)
			num += $('#results a.collection').length;
		var state = {materials: getMaterials(), functionals: getFunctionals(), countries: getCountries(), trademarks: getTrademarks(), num: num};
		$.bbq.pushState( state );
	}
});
