;(function($) {
		
	$.fn.workfilter = function(options) {
		
		var settings = jQuery.extend(true, {}, $.fn.workfilter.defaults, options);
		
		return this.each(function() {
			var $this = $(this); // this = filters-wrapper
			var $content = $(".main");
			var $filters = $(".filters", $this);
			var $reset = $("span.reset", $filters);
			var $expand = $("body.work.home #work-filter span.token");
			
			//var baseURL = "test";
			
			var $dropdowns = $(".dropdown", $filters).dropdown({
				save:true,
				onChange: function(o, value) {
					$dropdowns.each(function() {
						if ($(this) != o) $(this).resetDropdown();
					});
					var $this = o;

					$content.pageTo($this.attr("href"));
                                       
					return false;
				}
			});
                        
			$this.hide().css({height:0});
			
			var $contentLoader;
			var $filtersLoader;
			
			$content.page({
				onBeforeLoad:function() {
					if ($("ul.pagination", $content).length > 0) {
						if (!$contentLoader) $contentLoader = $(settings.loader).hide().appendTo($content).fadeIn(250);
						else $contentLoader.hide().fadeIn(250);
					}
					if (!$filtersLoader) $filtersLoader = $(settings.loader).hide().prependTo($filters).fadeIn(250);
					else $filtersLoader.hide().fadeIn(250);
				},
				onAfterLoad: function() {
					$(">span", $content).fadeTo(650, 0);
					if ($contentLoader) $contentLoader.stop().fadeOut(250, function() {
						$contentLoader.remove();
						$contentLoader = null;
					});
					if ($filtersLoader) $filtersLoader.stop().fadeOut(250, function() {
						$filtersLoader.remove();
						$filtersLoader = null;
					});
				},
				onComplete: function(data) {
					var $span = $(">span", $content);
					var $loadedSpan = $("div.main>span", data);
					if ($loadedSpan.length > 0) {
						if ($span.length == 0) {
							$span = $loadedSpan.insertBefore($("div.main ul.pagination"));
						}
						else {
							$span.html($loadedSpan.html());
						}
						$span.fadeTo(650, 1);
					}
					else {
						$span.remove();
					}
				}
			});
			
			// hide the filter-wrapper div, need it displayed up to here as we need heights
			var height = settings.height;

				$this.show().css({height:height});
				$expand.addClass("active");
				$.cookie("workFilterOpened", true);
			
			
			$expand.singleclick(function(e) {
				$.log("expand");
				if ($(this).data("clickTimer")) return false;
				toggleFilter();
				return false;
			});
			
			function toggleFilter() {
				if ($this.is(":visible")) closeFilter();
				else openFilter();
			}
			
			function openFilter() {
				$this.show().animate({height: height}, 250, "swing", function() {
					$expand.addClass("active");
				});
				$.cookie('workFilterOpened', true);
			}
			
			function closeFilter() {
				$expand.removeClass("active");
				$this.animate({height: 0}, 250, "swing", function() {
					$expand.removeClass("active");
					$this.hide();
				});
				$.cookie('workFilterOpened', false);
			}
			
			$reset.click(function() {
				$.log("reset");
				$(".dropdown", $filters).resetDropdown();
				$content.pageTo("page=1");
				return false;
			});
			
		});
	};
	
	$.fn.workfilter.defaults = {
		height: 43,
		loader: "<div class='loader' style='float:right'></div>"
	};
	
})(jQuery);