;(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 = "work.aspx";

			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"));
					//alert($this.attr("href"));
					window.location.href = $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;

			$expand.singleclick(function(e) {				
				// $.log("expand");
				if ($(this).data("clickTimer")) return false;
				toggleFilter();
				return false;
			});

			var defaultStatus = $.cookie('workFilterOpened');

			if (defaultStatus != null && defaultStatus == "true") {
				$this.show().css({height:height});
				$expand.addClass("active");
				$.cookie("workFilterOpened", true);
			}

			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("p=1");
				window.location.href = $(this).find("a").attr("href");
				return false;
			});
		});
	};

	$.fn.workfilter.defaults = {
		height: 43,
		loader: "<div class='loader'></div>"
	};

})(jQuery);
