(function($, undefined){
	$(function(){

	
	
		$form = $('form.productFilter');
		$products = $('.product-row');
      
		var mainStr = ',';
		mainStr += $products.find('.allids').html();
		var num = mainStr.split(",").length-1;
		
		$form.each(function(){
		
			
		
			var $allColours = $form.find('[name=all-colours]'),
				$colourOptions = $form.find('[name*=colours]').not($allColours),
				$allSizes = $form.find('[name=all-sizes]'),
				$sizeOptions = $form.find('[name*=sizes]').not($allSizes),
				$inputs = $form.find(':input'),
				$filterOptions = $form.find('.refine'),
				$filterInfo = $form.find('.filterInfo'),
				$numResults = $form.find('.numResults'),
				$onSale = $form.find('#on-sale'),
				$exclusive = $form.find('#exclusive'),
				$permalink = $form.find('.permalink'),
				$pageNum = $form.find('#pagenum'),
				$allids = $form.find('.allids');

				
				
            $form.find('#priceminmax').hide();
    		$form.find('#submitdiv').hide();
    		$form.find('#pagenum').hide();

    		
    		
			var ajaxForm = new $.ajaxForm({
				$ : $form,
				getBy :  ':input',
				success : function(x){
					$products.html(x);
					
				

					mainStr = ',';
					mainStr += $products.find('.allids').html();
					num = mainStr.split(",").length-1;
					$numResults.html(num);
					$allids.html(mainStr);
					updatePermalink();
					buildPaginationLinks();
				},
				url : '/get/browsePage/fetchProducts.php'
			});
			
			


			function updatePermalink(){
				// get data
				ajaxForm.data = {};
				ajaxForm.getData();
				var params = window.location.protocol+'//'+window.location.host+window.location.pathname+'?';
				
				for(var i in ajaxForm.data){
					if(i!="ajaxForm"){
						params += i+'='+ajaxForm.data[i]+'&';
					}
				}

				params = params.substr(0, (params.length-1));
				$permalink.attr('href', params);
			};
			
			

			updatePermalink();
			
			

			$form.bind('submit', function(e){
				e.preventDefault();

				$products.find('.loading').remove();
				$('<div class="loading">&nbsp;</div>').fadeTo(0,0.5).appendTo($products);

				clearTimeout($form.data('submitTimeout'));
				$form.data('submitTimeout', setTimeout(function(){
					ajaxForm.get();
				},300));
			});
		
			
			
			$form.find('.priceSlider').slider({
    			range : true,
    			min : parseFloat($form.find('.priceMin').text()),
    			max : parseFloat($form.find('.priceMax').text()),
    			values : [$('[name="price:gte"]').val(), $('[name="price:lte"]').val()],
    			slide : function(event, ui){
    				ui.values[0] = parseFloat(ui.values[0]);
    		
    				$form.find('[name="price:gte"]').val(ui.values[0]);
    				$form.find('[name="price:lte"]').val(ui.values[1]).trigger('change');
    		
    				$form.find('.priceMin').html(ui.values[0]);
    				$form.find('.priceMax').html(ui.values[1]);
    		
    				$('#priceMin').attr('value',ui.values[0]);
    				$('#priceMax').attr('value',ui.values[1]);
    				
    				$('.page-link-1').trigger('click');
    				
    				console.log(ui.values);
    		
    				}
			});
			
			$allColours.bind('click', function(){
				var value = ($(this).attr('checked'))?false:true;
				if(!value){
					$colourOptions.attr('checked', value);
				}
				$('.page-link-1').trigger('click');
			});

			$colourOptions.bind('click', function(){
				if($colourOptions.not('[checked=false]').length>0){
					$allColours.attr('checked', false);
				} else {
					$allColours.attr('checked', true);
				}
				$('.page-link-1').trigger('click');
			});

			$allSizes.bind('click', function(){
				var value = ($(this).attr('checked'))?false:true;
				if(!value){
					$sizeOptions.attr('checked', value);
				}
				$('.page-link-1').trigger('click');
			});
			
			$sizeOptions.bind('click', function(){
				if($sizeOptions.not('[checked=false]').length>0){
					$allSizes.attr('checked', false);
				} else {
					$allSizes.attr('checked', true);
				}
				$('.page-link-1').trigger('click');
			});
			
			$onSale.bind('click', function(){
				var value = ($(this).attr('checked'))?false:true;
				$('.page-link-1').trigger('click');
			});
			
			$exclusive.bind('click', function(){
				var value = ($(this).attr('checked'))?false:true;
				$('.page-link-1').trigger('click');
			});
			
		
			
			
			$filterOptions.each(function(){
				var $el = $(this),
					$title = $el.find('.title'),
					$details = $el.find('div.details');

				$title.append('<span class="modified"></span>');

				$title.bind('click', function(e){
					e.preventDefault();
					$details.slideToggle();
				});

				$form.find(':input.submit').hide();
				$form.find('div.submit').css({
					padding : 0,
					'font-size' : 0,
					'line-height' : 0,
					margin : 0
				})


				$el.find(':input').each(function(){
					var $e = $(this);
					$e.bind('change keyup', function(){
						$form.trigger('submit');

						var modified = "";

						$el.find(':input').each(function(){
							var $e = $(this);
							if($e.val()+'|'+$e.attr('checked')!==$e.data('originalHash')){
								modified = " *";
							}
						});

						$title.find('.modified').html(modified);


						if(modified==""){
							modified = false;
							$filterOptions.find(':input').each(function(){
								var $e = $(this);
								if($e.val()+'|'+$e.attr('checked')!==$e.data('originalHash')){
									modified = true;
								}
							});
						}


                        $('.page-link-1').trigger('click');
					});
					$e.data('originalHash', $e.val()+'|'+$e.attr('checked'));
				});

			});
			
		
			
			$form.find('#sort-by').bind('change', function(){
				$form.trigger('submit');
				$('.page-link-1').trigger('click');
			});
			
			$pageNum.bind('change', function(){
				$form.trigger('submit');
			});
			
			
			
			function buildPaginationLinks(){
				
				mainStr = ',';
				mainStr += $products.find('.allids').html();
				num = mainStr.split(",").length-1;
				var maxPages = Math.ceil(num/20);
                
				//var increment = 1;
				
                /*                
                // quick fix to make sure not too many pages are shown on one page - remove ASAP.                
                if (maxPages > 11) {
                    maxPages = 11;
                }
                */
                                
                var curPageNum = parseInt($('#pagenum').val());
                var nextPage = curPageNum+1;
                var prevPage = curPageNum-1;
                var nextPage2 = curPageNum+2;
                var prevPage2 = curPageNum-2;
                var cutOffPoint = maxPages-1;
                var val = 0;                
                var $dots = false;    
                            
				$form.find('.paginate').html('');
				$form.find('.paginate-btm').html('');
                if (prevPage > 0) {
                    var $li = $('<li style="width:auto;"></li>');
                    var aTemplate = '<a href="" class="backlink" style="padding:1px 5px;">&laquo; Prev</a>'; 
                    var	$a	= $(aTemplate).appendTo($li);
    					$li.appendTo($form.find('.paginate'));
    				$a.bind('click', function(e){
    					e.preventDefault();
    					$('#pagenum').val(prevPage).trigger('change');
    				});
                    
                    var $libtm = $('<li style="width:auto;"></li>');
                    var aTemplatebtm = '<a href="" class="backlink" style="padding:1px 5px;">&laquo; Prev</a>'; 
                    var	$abtm	= $(aTemplatebtm).appendTo($libtm);
    					$libtm.appendTo($form.find('.paginate-btm'));
    				$abtm.bind('click', function(e){
    					e.preventDefault();
    					$('#pagenum').val(prevPage).trigger('change');
    				});                                        
                }
                
                if (curPageNum > 3) {
                    var $li = $('<li></li>');
                    var aTemplate = '<a href="" class="page-link-1">1</a>'; 
                    var	$a	= $(aTemplate).appendTo($li);
    					$li.appendTo($form.find('.paginate'));
    				$a.bind('click', function(e){
    					e.preventDefault();
    					$('#pagenum').val(1).trigger('change');
    				});
                    
                    
                    var $libtm = $('<li></li>');
                    var aTemplatebtm = '<a href="" class="page-link-1">1</a>'; 
                    var	$abtm	= $(aTemplatebtm).appendTo($libtm);
    					$libtm.appendTo($form.find('.paginate-btm'));
    				$abtm.bind('click', function(e){
    					e.preventDefault();
    					$('#pagenum').val(1).trigger('change');
    				});                                        
                }
                
                if (curPageNum > 4) {
                    var $li = $('<li></li>');
                        aTemplate = '<span class="visitlink">...</span>';
                    var	$a	= $(aTemplate).appendTo($li);
   						$li.appendTo($form.find('.paginate'));
                        
                        
                    var $libtm = $('<li></li>');
                        aTemplatebtm = '<span class="visitlink">...</span>';
                    var	$abtm	= $(aTemplatebtm).appendTo($libtm);
   						$libtm.appendTo($form.find('.paginate-btm'));                                                
                }
                
				$('#pagenum option').each(function(){
				    
                    var $el = $(this),
						val = parseInt($el.attr('value')),
						$li = $('<li></li>');
						$libtm = $('<li></li>');
                    
                    if (val <= maxPages) {
                        if (val === curPageNum || val === nextPage || val === prevPage || val === nextPage2 || val === prevPage2) {
        						
        					var aTemplate = '<a href="" class="page-link-'+val+'">'+val+'</a>';
        					if(val==curPageNum){
        						aTemplate = '<span class="visitlink">'+val+'</span>';
        					}        
        					var	$a	= $(aTemplate).appendTo($li);
        						$li.appendTo($form.find('.paginate'));
        					$a.bind('click', function(e){
        						e.preventDefault();
        						$('#pagenum').val(val).trigger('change');
        					});
                            
                            var aTemplatebtm = '<a href="" class="page-link-'+val+'">'+val+'</a>';
        					if(val==curPageNum){
        						aTemplatebtm = '<span class="visitlink">'+val+'</span>';
        					}        
        					var	$abtm	= $(aTemplatebtm).appendTo($libtm);
        						$libtm.appendTo($form.find('.paginate-btm'));
        					$abtm.bind('click', function(e){
        						e.preventDefault();
        						$('#pagenum').val(val).trigger('change');
        					});                                                        
    					}
                    }
					//increment+=1;
				});
                
                if (nextPage2 < cutOffPoint) {
                    var $li = $('<li></li>');
                        aTemplate = '<span class="visitlink">...</span>';
                    var	$a	= $(aTemplate).appendTo($li);
   						$li.appendTo($form.find('.paginate'));
                        
                    var $libtm = $('<li></li>');
                        aTemplatebtm = '<span class="visitlink">...</span>';
                    var	$abtm	= $(aTemplatebtm).appendTo($libtm);
   						$libtm.appendTo($form.find('.paginate-btm'));                        
                }
                
                if (maxPages > 1) {
                    if (curPageNum != maxPages) {
                        if (nextPage != maxPages) {
                            if (nextPage2 != maxPages) {
                                var $li = $('<li></li>');
                                var aTemplate = '<a href="" class="page-link-'+maxPages+'">'+maxPages+'</a>'; 
                                var	$a	= $(aTemplate).appendTo($li);
                					$li.appendTo($form.find('.paginate'));
                				$a.bind('click', function(e){
                					e.preventDefault();
                					$('#pagenum').val(maxPages).trigger('change');
                				});
                                
                                var $libtm = $('<li></li>');
                                var aTemplatebtm = '<a href="" class="page-link-'+maxPages+'">'+maxPages+'</a>'; 
                                var	$abtm	= $(aTemplatebtm).appendTo($libtm);
                					$libtm.appendTo($form.find('.paginate-btm'));
                				$abtm.bind('click', function(e){
                					e.preventDefault();
                					$('#pagenum').val(maxPages).trigger('change');
                				});                                                                
                            }
                        }
                    }
                
                    if (curPageNum != maxPages) {
                        var $li = $('<li style="width:auto;"></li>');
                        var aTemplate = '<a href="" class="backlink" style="padding:1px 5px;">Next &raquo;</a>'; 
                        var	$a	= $(aTemplate).appendTo($li);
        					$li.appendTo($form.find('.paginate'));
        				$a.bind('click', function(e){
        					e.preventDefault();
        					$('#pagenum').val(nextPage).trigger('change');
        				});
                        
                        var $libtm = $('<li style="width:auto;"></li>');
                        var aTemplatebtm = '<a href="" class="backlink" style="padding:1px 5px;">Next &raquo;</a>'; 
                        var	$abtm	= $(aTemplatebtm).appendTo($libtm);
        					$libtm.appendTo($form.find('.paginate-btm'));
        				$abtm.bind('click', function(e){
        					e.preventDefault();
        					$('#pagenum').val(nextPage).trigger('change');
        				});                                                
                    }
                }
			}
			buildPaginationLinks();
			
			
		});
	});
})(jQuery);
