(function($) {
	$.fn.packages = function(options) {
		options = $.extend({ page: 0, sort: 'nameASC', stateId: [], themeId: [], minPrice:'20', maxPrice:'800', minNights:'1', maxNights:'6'}, options || {});
		
		//get translations
		var arrTranslations = $("#translations").val().split('|');
		
		// Reload packages
		updatePage = function() {
			showLoader();
			
			var ajaxManager = $.manageAjax.create('cacheQueue', { 
				queue: true,  
				cacheResponse: false,
				abortOld: true
			}); 
		
			ajaxManager.add({
				type: "GET",
				url: "/includes/ajax/ajax.packages.php",
				data: options,//"{'page':'" + options.page + "'}",
				contentType: "application/json; charset=utf-8",
				dataType: "json",
				success: function(data) {
					showPaging();
					fillJobs(data);
					updateControls(data);
					//addPackagesHover();
					hideLoader();
				},
				error: function(xhr, ajaxOptions) {
					updateControls();
					//$("#packages").html('Geen arrangementen gevonden');
					$("#packages").html(arrTranslations[0]);
					
					//$("#packages_count").html('Er zijn <span class="orange">0</span> arrangementen gevonden');
					$("#packages_count").html('<span class="orange">0</span> '+arrTranslations[1]);
					hideLoader();
				}
			});
		};
		
		// Process data to jobs layer
		fillJobs = function(data) {
			if(data.hampshire.count == '1') $("#packages_count").html('<strong>'+data.hampshire.count+'</strong> '+arrTranslations[1]);
			else  $("#packages_count").html('<strong>'+data.hampshire.count+'</strong> '+arrTranslations[1]);
			$("#packages").setTemplateElement("template");
			$("#packages").processTemplate(data.hampshire);
			showPaging(data.hampshire.page, data.hampshire.pageTotal);
		}
		
		
		// Update controls
		updateControls = function(data) {
			$.each($("#packages_columns > .compare_column > .node > .node_content > ul"), function() {
				$(this).children("li").addClass("disabled").children("input").attr("disabled", "disabled");
				$(this).children("li").children("label").children("span").html('(0)');
			});
			if(data) {
				$.each(
					data.hampshire.enabledControls,
					function(i,cats) {
						$.each(cats.ids, function(i,id) {
							$("#packages_columns > .compare_column > .node > .node_content > ul").children("#container_" + cats.control + '_' +id[0]).removeClass("disabled");
							$("#packages_columns > .compare_column > .node > .node_content > ul").children("#container_" + cats.control + '_' +id[0]).children("input").removeAttr("disabled");
							$("#packages_columns > .compare_column > .node > .node_content > ul").children("#container_" + cats.control + '_' +id[0]).children("label").children("span").html('('+id[1]+')');
						});
					}
				);				
	
				$.each($("#packages_columns > .compare_column > .node > .node_content > ul > li"), function() {
					if($(this).children("input").attr("disabled") && $(this).children("input").attr("checked")) {
						$(this).children("input").removeAttr("checked");
						arr = eval('options.'+$(this).children("input").attr('name'));
						var removeItem = $(this).children("input").val();
						arr = jQuery.grep(arr, function(a) {
							return a != removeItem;
						});					
						eval('options.'+$(this).children("input").attr('name')+' = arr');
					}
				});
			}
		}

		showPaging = function(page, pageTotal) {
			
			//PAGING TOP
			if(page > 1) $("#paging").html('<a href="#" class="btn down">&laquo; vorige</a>');
			else $("#paging").html('<a href="#" class="btn disabled">&laquo; vorige</a>');

			for(x=1;x<=pageTotal;x++){
				if(x == page) $("#paging").append('<a href="#" class="btn nr active">'+x+'</a>');
				else $("#paging").append('<a href="#" class="btn nr">'+x+'</a>');
			}
			if(page < pageTotal) $("#paging").append('<a href="#" class="btn up">volgende &raquo;</a>');
			else $("#paging").append('<a href="#" class="btn disabled">volgende &raquo;</a>');
			
			$("#paging a.btn.nr").click(
				function(){ 
					updatePaging($(this).html()-1, 1);
					return false;
				}
			);
			$("#paging a.btn.disabled").click(
				function(){ 
					return false;
				}
			);
			$("#paging a.btn.up").click(
				function(){ 
					updatePaging(1);
					return false;
				}
			);
			$("#paging a.btn.down").click(
				function(){ 
					updatePaging(-1);
					return false;
				} 
			);
			
			//PAGING BOTTOM
			if(page > 1) $("#paging_bottom").html('<a href="#" class="btn down">&laquo; vorige</a>');
			else $("#paging_bottom").html('<a href="#" class="btn disabled">&laquo; vorige</a>');

			for(x=1;x<=pageTotal;x++){
				if(x == page) $("#paging_bottom").append('<a href="#" class="btn nr active">'+x+'</a>');
				else $("#paging_bottom").append('<a href="#" class="btn nr">'+x+'</a>');
			}
			if(page < pageTotal) $("#paging_bottom").append('<a href="#" class="btn up">volgende &raquo;</a>');
			else $("#paging_bottom").append('<a href="#" class="btn disabled">volgende &raquo;</a>');
			
			$("#paging_bottom a.btn.nr").click(
				function(){ 
					updatePaging($(this).html()-1, 1);
					return false;
				}
			);
			$("#paging_bottom a.btn.disabled").click(
				function(){ 
					return false;
				}
			);
			$("#paging_bottom a.btn.up").click(
				function(){ 
					updatePaging(1);
					return false;
				}
			);
			$("#paging_bottom a.btn.down").click(
				function(){ 
					updatePaging(-1);
					return false;
				} 
			);
		}
		updatePaging = function(n, paging_bottom) {
			if(paging_bottom) options.page = n;
			else options.page = options.page+n;
			updatePage();
		}
		
		//Show loading layer
		showLoader = function() {
			if ($(".loader").css("display") != "block") {
				if ($(".loader").parent().offset() != null) {
					bgxPos = $(".loader").width()/2 + $(".loader").parent().offset().left - 24;
				}else {
					bgxPos = $(".loader").width() / 2 - 24;
				}
				
				height = $(".loader").parent().height();
				$(".loader").show();
				if($(".loader").css("background-attachment")=="fixed") { //for browsers that don't support fixed background attachements (IE6)
					$(".loader").css("background-position", bgxPos+"px 50%");
				}
				$(".loader").css({
					"height": height+"px",
					"opacity": "0"
				}).animate({ opacity: 0.7 }, 500);
			}
			
		};

		//Hide loading layer
		hideLoader = function() {
			height = $(".loader").parent().height();
			$(".loader").css({
				"height": height+"px"
			}).animate({ opacity: 0 }, 500, function() {
				$(this).hide()
			});
		};

		//Add hover states on jobs
		addPackagesHover = function() {
			$("div.job").hover(
				function(){ 
					$(this).addClass("over");
				}, 
				function() { 
					$(this).removeClass("over");
				} 
			);
		}



		removeEmptyItems = function() {
			$.each(options, function(key, val) {
				if(jQuery.isArray(val)) {
					//console.log(jQuery.isArray(val));
					//console.log('waarde: ' + val[0]);
					//if(val[0] == '') console.log('leeg');
					
					if(val[0] == '') {
						arr = jQuery.grep(val, function(a) {
							return a != '';
						});
						eval('options.'+key+' = arr');					
					}
					//console.log('waarde: ' + key);
					//console.log('waarde: ' + val[0]);
				}
			});
			
		}

	
		//Do onload
		$("input.post_option").click(
			function(){ 
				if(this.checked) {
					eval('options.'+this.name+'.push('+this.value+')');
					$(this).closest('ul').next('.deselector').show();
				}
				else {
					arr = eval('options.'+this.name);
					var removeItem = this.value;
					arr = jQuery.grep(arr, function(a) {
						return a != removeItem;
					});
					eval('options.'+this.name+' = arr');
					if(arr.length == 0) $(this).closest('ul').next('.deselector').hide();
				}
				options.page = 0;
				arrCompareItems = [];
				updatePage();
			} 
		);

	
		$("div.deselector a").click(
			function(){ 
				jQuery.each($(this).parent().prev().children(), function() {
					jQuery.each($(this).children('.post_option'), function() {
						if(this.checked) {
							this.checked = false;
							arr = eval('options.'+this.name);
							var removeItem = this.value;
							arr = jQuery.grep(arr, function(a) {
								return a != removeItem;
							});
							eval('options.'+this.name+' = arr');
						}
					});
				});
				$(this).closest('div').hide();
				options.page = 0;
				arrCompareItems = [];
				updatePage();
				return false;
			}
		);
		$("div.selector_all a.select").click(
			function(){ 
				jQuery.each($(this).parent().prev().children(), function() {
					jQuery.each($(this).children('.post_option'), function() {
						if(!this.checked && !this.disabled) {
							eval('options.'+this.name+'.push('+this.value+')');
							this.checked = true;
							//$(this).trigger('click');
						}
					});
				});
				options.page = 0;
				arrCompareItems = [];
				updatePage();
				return false;
			}
		);
		$("div.selector_all a.deselect").click(
			function(){ 
				jQuery.each($(this).parent().prev().children(), function() {
					jQuery.each($(this).children('.post_option'), function() {
						if(this.checked) {
							this.checked = false;
							arr = eval('options.'+this.name);
							var removeItem = this.value;
							arr = jQuery.grep(arr, function(a) {
								return a != removeItem;
							});
							eval('options.'+this.name+' = arr');
						}
					});
				});
				options.page = 0;
				arrCompareItems = [];
				updatePage();
				return false;
			}
		);

		$("#slider-range1").slider({
			range: true,
			min: 20,
			max: 800,
			step: 20,
			values: [20, 800],
			slide: function(event, ui) {
				$("#price").val(ui.values[0] + ',- - ' + ui.values[1] + ',-');
				options.minPrice = ui.values[0];
				options.maxPrice = ui.values[1];
				updatePage();
			}
		});
		$("#price").val($("#slider-range1").slider("values", 0) + ',- - ' + $("#slider-range1").slider("values", 1) + ',-');
		
		$("#slider-range2").slider({
			range: true,
			min: 1,
			max: 6,
			step: 1,
			values: [1, 6],
			slide: function(event, ui) {
				$("#nights").val(ui.values[0] + ' '+arrTranslations[2]+' - ' + ui.values[1] + ' '+arrTranslations[2]);
				options.minNights = ui.values[0];
				options.maxNights = ui.values[1];
				updatePage();
			}
		});
		$("#nights").val($("#slider-range2").slider("values", 0) + ' '+arrTranslations[2]+' - ' + $("#slider-range2").slider("values", 1) + ' '+arrTranslations[2]);
		
		//$.each($.address.parameterNames(), function(n, val) {
		//	if(val != '') eval('options.'+val+' = $.address.parameter(val)');
		//});
		
		//removeQWord();
		removeEmptyItems();
		//addComparator();
		//addPackagesHover();
		hideLoader();
		
		updatePage();
	};

})(jQuery);
