var Comparer = {
	comparerProductCookieName : 'product_comparer',
	comparerProductCookieCidName : 'comparer_product_cid',
	comparerContentCookieName : 'content_comparer',
	compareProductLimit : 5,
	comparerProductContent : [],
	comparerContentContent : [],
	maxProductsInCompare : 6,
	/**
	 * Products
	 */
	getCompareProductList : function(cid, getOnlyIndex)
	{
		var retval;
		
		if($.cookie(this.comparerProductCookieName) !== null)
		{
			this.comparerProductContent = JSON.parse($.cookie(this.comparerProductCookieName));
			if(this.comparerProductContent.length > 0)
			{
				$.each(this.comparerProductContent, function(i,v){
					if(cid == v.cid)
					{
						if(undefined === getOnlyIndex)
						{
							if(1)
							{
								
							}
							retval = v;							
						}
						else
						{
							retval = i;
						}
					}
				});	
			}				
		}
		else
		{
			retval = false;
		}
		
		return retval;
	},
	addComparerProductContent : function(objList, htmlElem)
	{
		if(this.comparerProductContent.length >= this.compareProductLimit)
		{
			alert('Liczba zapisanych porównań wynosi ' + this.compareProductLimit + '. Nie możesz dodać kolejnego porównania. Aby dodać kolejne usuń jedno z porównań zapamiętanych w schowku.');
			htmlElem.prop('checked', false);
			return false;
		}
		
		var index = this.getCompareProductList(objList.cid, true);
		
		if(undefined === index || index === false)
		{
			this.comparerProductContent.push(objList);			
		}
		else
		{
			this.comparerProductContent[index] = objList;			
		}
		
		this.save(this.comparerProductCookieName, this.comparerProductContent);
	},
	removeComparerProductContent : function(cid)
	{
		var idx = this.getCompareProductList(cid, true);
		
		if(idx != -1)
		{
			$('.item_record_checkbox[cid='+cid+']').prop('checked', false);			
			this.comparerProductContent.splice(idx, 1);
		}
		
		this.save(this.comparerProductCookieName, this.comparerProductContent);
	},
	elementToProductComparer : function(htmlElem, elemCid)
	{
		var _tmpStoreProducts = [];		
		var objList = {};
		var list = this.getCompareProductList(elemCid);
		
		if(!list)
		{
			if(this.comparerProductContent.length != 0 && !this._categoryChanged())
			{
				htmlElem.prop('checked', false);
				return false;
			}	
			
			$('.item_record_checkbox').prop('checked', false);		
			htmlElem.prop('checked', true);
			
			objList = {
				products : _tmpStoreProducts, 
				cid : elemCid
			};
		}
		else
		{
			objList = list;
			_tmpStoreProducts = objList.products;
		}

		var prodList = this._addOrDeleteProduct(_tmpStoreProducts, htmlElem);
		
		if(prodList !== false)
		{
			objList.products = prodList;			
			this.addComparerProductContent(objList, htmlElem);		
		}
		else
		{
			this.removeComparerProductContent(objList.cid);
			$.cookie(this.comparerProductCookieCidName, null, {
				path:'/'
			});
		}
	},
	_maxProductsExceeded : function(listLength)
	{
		if(listLength >= this.maxProductsInCompare)
		{
			return true;
		}
		else
		{
			return false;
		}
	},
	_categoryChanged : function()
	{
		var ask = confirm("Produkt należy do innej kategorii. Czy chcesz utworzyć nowe porównanie? (poprzednie porównanie zostanie zapisane w schowku)"); 
		
		if(ask)
		{
			return true;
		}
		else
		{
			return false;
		}
	},
	_addOrDeleteProduct : function(_tmpStoreProducts, htmlElem)
	{
		var checked = htmlElem.prop('checked');
		var val = parseInt(htmlElem.val());
		
		if(checked)
		{
			if(this._maxProductsExceeded(_tmpStoreProducts.length))
			{
				htmlElem.prop('checked', false);		
				alert('Nie można dodać więcej niż ' + this.maxProductsInCompare + ' produktów do porównania.');
				return _tmpStoreProducts;
			}
		
			if($.inArray(val, _tmpStoreProducts) == -1)
			{
				
				_tmpStoreProducts.push(val);
			}
		}
		else
		{
			
			var idx = _tmpStoreProducts.indexOf(val);

			if(idx != -1)
			{
				_tmpStoreProducts.splice(idx, 1);
				$('.item_record_checkbox[value='+val+']').prop('checked', false);
			}
			
			if(_tmpStoreProducts.length == 0)
			{
				_tmpStoreProducts = false;
			}
		}
		
		return _tmpStoreProducts;
	},	
	getFirstProductCompareList : function()
	{
		var cookie = JSON.parse($.cookie(this.comparerProductCookieName));
		
		if(cookie != null && cookie.length > 0)
		{
			return cookie[0];
		}
		else
		{
			return {
				products:[],
				cid:null
			};
		}
	},	
	save : function(name, content)
	{		
		$.cookie(name, JSON.stringify(content), {
			path: '/',
			expires : this.getExpiresForCookie()
		});
	},
	makeProductComparerLink : function(idText, typeId, n)
	{
		var prefix = '';
	
		if(typeId == 'class')
		{
			prefix = '.';
		}
		else if(typeId == 'id')
		{
			prefix = '#';
		}
	
		var link = $(prefix+idText).attr('href');		

		if(link != null)	
		{	
			link = link.replace(/\/products.*/, '');		

			var list = this.getCompareProductList(n);
		
			if(!list)
			{
				list = this.getFirstProductCompareList();
			}
		
			if(list.products.length > 0)
			{			
				link += '/products/' + list.products.join(',');			 							
				$(prefix+idText).attr('href', link);
				return link;
			}
			else
			{
				return link;
			}
	
		}
	},
	/**
	 * Content
	 */
	getComparerContentList : function()
	{
		var retval;
		
		if($.cookie(this.comparerContentCookieName) !== null)
		{
			this.comparerContentContent = JSON.parse($.cookie(this.comparerContentCookieName));
			if(this.comparerContentContent.length > 0)
			{
				retval = this.comparerContentContent;	
			}				
		}
		else
		{
			retval = false;
		}
		
		return retval;
	},
	addElementToContentCompare : function(rid)
	{
		
		if($.inArray(rid, this.comparerContentContent) == -1)
		{
				
			this.comparerContentContent.push(rid);
		}
		
		this.save(this.comparerContentCookieName, this.comparerContentContent);
	},
	deleteElementFromContentCompare : function(rid)
	{
		var idx = this.comparerContentContent.indexOf(rid);

		if(idx != -1)
		{
			this.comparerContentContent.splice(idx, 1);
		}
	
		this.save(this.comparerContentCookieName, this.comparerContentContent);
	},
	getExpiresForCookie: function()
	{
		var expires = parseInt($('.sidebar_clipboard_content_menu').attr('expires'));
		
		if(NaN === expires || expires <=0)
		{
			return null;
		}
		
		return expires;		
	}
};

/**
 * Product comparer checkbox to cookie maker and link maker
 */

$(function()
{
	/**
	 * Checkbox and cookie / product list chooser
	 */
	
	var firstList = Comparer.getFirstProductCompareList();
	if(firstList)
	{
		Comparer.makeProductComparerLink('product_compare_link', 'class', firstList.cid);
		
		$.each(firstList.products, function(k,v)
		{
			$('input[value=' + v + ']').prop('checked', true);			
		});
	}
	else
	{
		$('.klim').prop('checked', false);
	}

	$('.item_record_checkbox').change(function()
	{	
		var cid = $(this).attr('cid');
		if(Comparer.elementToProductComparer($(this), cid) !== false)
		{			
			Comparer.makeProductComparerLink('product_compare_link', 'class', cid);
			$.cookie(Comparer.comparerProductCookieCidName, cid, {
				path:'/'
			});
		
			if(sidebarClipboardEnable)
			{
				getSidebarClipBoardContent();					
			}
		}
	});
	
	/**
	 * Link remove from product_comparer	
	 */			
	$('.product_compare_link_remove').click(function(e)
	{
		var pid = $(this).attr('pid');
		var obj = $('<input type="hidden" value="'+ pid +'" cid="'+$(this).attr('cid')+'" />');		
		Comparer.elementToProductComparer(obj, $(this).attr('cid'));
		var link = Comparer.makeProductComparerLink('product_compare_link_remove_'+pid, 'id', $(this).attr('cid'));
		window.location.href = link;
		e.preventDefault();		
	});
	
	/**
	 *Print
	 */
	$("#btnPrint").click(function(){
		if(!window.print){
			alert("Twoja przeglądarka nie posiada opcji drukowania!");
		}else{
			var browserName=navigator.appName;
			if (browserName=="Microsoft Internet Explorer" || window.opera){
				newWin= window.open("");
				newWin.document.write($('#productComparerPrint').html());
				newWin.onload = newWin.print();
			}else{
				$("#productComparerPrint").print();
			}
		}
	});
	
	/**
	 * Schowek - przyczlap mode on
	 */

	if(sidebarClipboardEnable)
	{			
		function initView()
		{
			$('.sidebar_clipboard_content').html('');
			$('#sidebar_clipboard_ajax_loader').show();
			$.get('/guest/product-comparer/clipboard-init', {}, function(r)
			{								
				$('.sidebar_clipboard_content').html(r);				
				
				Comparer.makeProductComparerLink('sidebar_clipboard_comparer_link', 'id', $.cookie(Comparer.comparerProductCookieCidName));				
				
				$('#sidebar_clipboard_ajax_loader').hide();
			});			
		}
		
		function getSidebarClipBoardContent()
		{		
			initView();
			
			/**
			 * Product | Content pseudo tabs
			 */
			$('.sidebar_clipboard_content_menu a').die();
			$('.sidebar_clipboard_content_menu a').live('click',function(e)
			{
				var link = $(this).attr('href');
				
				$('.sidebar_clipboard_content').html('');
				$('#sidebar_clipboard_ajax_loader').show();					
				
				$.get(link, {}, function(r){
					$('.sidebar_clipboard_content').html(r);						
					$('#sidebar_clipboard_ajax_loader').hide();
					$.cookie('clipboard', $('.sidebar_clipboard_content_menu').attr('partial'), {
						path: '/'
					});
					Comparer.makeProductComparerLink('sidebar_clipboard_comparer_link', 'id', $.cookie(Comparer.comparerProductCookieCidName));
				});
					
				e.preventDefault();
			});
			
			/**
			 * Wybieraczka porownania
			 */
			$('.sidebar_clipboard_content_partlink').die();
			$('.sidebar_clipboard_content_partlink').live('click', function(e)
			{
				var productPartLink = $(this).attr('href');
				
				var cid = $(this).attr('cid');
				
				$.cookie(Comparer.comparerProductCookieCidName, cid, {
					path: '/'
				});
				
				$('.sidebar_clipboard_content').html('');
				$('#sidebar_clipboard_ajax_loader').show();					
				
				$.get(productPartLink, {}, function(r){
					$('.sidebar_clipboard_content').html(r);						
					$('#sidebar_clipboard_ajax_loader').hide();
					Comparer.makeProductComparerLink('sidebar_clipboard_comparer_link', 'id', cid);
				});

				e.preventDefault();
			});

		}
		
		var html_clipboard = '<div class="sidebar_clipboard" id="sidebar_clipboard">'+
		'<div class="sidebar_clipboard_clickable" id="sidebar_clipboard_clickable"></div>'+
		'<div id="sidebar_clipboard_ajax_loader" style="display: none;">Wczytywanie . . .</div>'+
		'<div class="sidebar_clipboard_content"></div>'+
		'<div class="clear"></div>'+
		'</div>';
		
	
		$('body').append(html_clipboard);
	
		$(".sidebar_clipboard_clickable").toggle(function() {		
			getSidebarClipBoardContent();
			$('.sidebar_clipboard').animate({
				width: "680px"
			}, 1000);
		},function() {
			$('.sidebar_clipboard').animate({
				width: "200px"
			}, 500);
		});
	
		/*
	 *Zamknij
	 */
		$('#btn_sidebar_clipboard_close').live('click', function()
		{
			$('.sidebar_clipboard').animate({
				width: "200px"
			}, 500);
		});

		$('div[id^=btn_remove_]').die();
		$('div[id^=btn_remove_]').live('click', function()
		{
			var cid = $.cookie(Comparer.comparerProductCookieCidName);
			var productId = $(this).attr('id').split('_');
			productId = productId[2];		
			var checkBoxObj = $('<input type="checkbox" value="' + productId +'" cid="' + cid + '"/>');		
			Comparer.elementToProductComparer(checkBoxObj, cid)
			getSidebarClipBoardContent();
		});
	
		$('#btn_sidebar_clipboard_delall').die();
		$('#btn_sidebar_clipboard_delall').live('click', function()
		{
			var cid = $.cookie(Comparer.comparerProductCookieCidName);			
			Comparer.removeComparerProductContent(cid);
			$.cookie(Comparer.comparerProductCookieCidName, Comparer.getFirstProductCompareList().cid, {
				path: '/'
			});
			getSidebarClipBoardContent();
		});
	}

	/**
	 * 
	 */
	$('#clipboard_content_link').click(function()
	{	
		$(this).TransferTo({
			to : $('#sidebar_clipboard_clickable').get(0),
			duration : 800,
			className:'transferProduct'
		});
		
		$(this).find('img').fadeOut().fadeIn();
		var rid = $(this).attr('rid');
		$.cookie('clipboard', 'content', {
			path:'/'
		});
		Comparer.getComparerContentList();
		Comparer.addElementToContentCompare(rid);
		getSidebarClipBoardContent();
	});
	
	$('div[id^=btn_contentRemove_]').die();
	$('div[id^=btn_contentRemove_]').live('click', function()
	{
		var rid = $(this).attr('id').split('_');
		rid = rid[2];	
		Comparer.getComparerContentList();
		Comparer.deleteElementFromContentCompare(rid);		
		getSidebarClipBoardContent();

	});
	
	$('#btn_sidebar_clipboard_content_delall').die();
	$('#btn_sidebar_clipboard_content_delall').live('click', function()
	{
		$.cookie(Comparer.comparerContentCookieName, null, {
			path:'/'
		});
		getSidebarClipBoardContent();
	});
	
});

