(function( $ ){
	
	var activateFieldHook = null;
	
	var settings = {
		//
    };
	
	var methods = {
		init : function (options) {
			if ( options ) { 
				$.extend( settings, options );
			}
			
			return this.each(function(i, el){
		    	var _this = this;
		    	var $this = $(this);
		    	
		    	var $form = $('#AdvancedSearchAddForm');
		    	var $AdvancedSearchDesigner = $('#AdvancedSearchDesigner');
				var $AdvancedSearchYear = $('#AdvancedSearchYear');
				var $AdvancedSearchSeason = $('#AdvancedSearchSeason');
				var $AdvancedSearchLocation = $('#AdvancedSearchLocation');
				var $AdvancedSearchCategory = $('#AdvancedSearchCategory');
				var $clear = $('input[type="reset"]', this);
				var $submit = $('input[type="submit"]', this);
				var designerHint = $AdvancedSearchDesigner.val();
				var activeField = null;
				
			//	disable labels
				$('label', _this).click(function(evt){return false;});
				
			//	designer focus empty focus lost default
				$AdvancedSearchDesigner.focus(function(evt){
					if ($(this).val() == designerHint) $(this).val('');
				}).blur(function(evt){
					if (!$(this).val()) $(this).val(designerHint);
				});
			//	catch submit
				$form.submit(function(evt){
					if ($AdvancedSearchDesigner.val() == designerHint) $AdvancedSearchDesigner.val('');
				});
				
				function activateField (el) {
					if (activeField) {
						activeField.removeClass('active');
						var $ul = $('body > ul.advancedSearchList');
						$ul.offset($ul.data('offset'));
						$ul.appendTo(activeField);
					}
					
					if (!el) return;
					var $ul = $(el).siblings('ul');
					$ul.appendTo('body');
					activeField = el.parent('div');
					activeField.addClass('active');
					var ofst = activeField.children('.advancedSearchFilter').offset();
					$ul.offset({top: ofst.top + 4, left: ofst.left});
				}
				activateFieldHook = activateField;
				
				function setFieldSelection (field, v) {
					var opt = $('option[value=' + v + ']', field)
					opt.attr('selected', true);
					field.siblings('input').attr('value', opt.text());
				}
				
				function onFocusLost (evt) {
					activateField(null);
				}
				
				function onSelectYear (evt) {
					setFieldSelection($AdvancedSearchYear, $(this).attr('href'));
					onFocusLost();
					return false;
				}

				function onSelectSeason (evt) {
					setFieldSelection($AdvancedSearchSeason, $(this).attr('href'));
					onFocusLost();
					return false;
				}

				function onSelectLocation (evt) {
					setFieldSelection($AdvancedSearchLocation, $(this).attr('href'));
					onFocusLost();
					return false;
				}

				function onSelectCategory (evt) {
					setFieldSelection($AdvancedSearchCategory, $(this).attr('href'));
					onFocusLost();
					return false;
				}
				
				function doClear (evt) {
					$AdvancedSearchDesigner.val(designerHint);
					setFieldSelection($AdvancedSearchYear, 'all');
					setFieldSelection($AdvancedSearchSeason, 'all');
					setFieldSelection($AdvancedSearchLocation, 'all');
					setFieldSelection($AdvancedSearchCategory, 'all');
				}
				
				$clear.bind('click', doClear);
				$('body').click(function(evt) {
					onFocusLost(evt);
				});
				
				function makeList (el, callback) {
					if (Modernizr.touch && USER_AGENT == 'IPHONE'){
			    		el.siblings('input.advancedSearchFilter[type="button"]').click(function(evt){
			    			el.focus();
			    			return false;
			    		});
			    		el.change(function (evt) {
				    		$('option:selected', evt.target).each(function (i, el) {
				    			setFieldSelection($(this).parent('select'), $(this).val());
				    		});
				    	});
			    	} else {
			    		var _$ul = $('ul.advancedSearchList', el.parent('div'));
						var f = true;
						$('option', el).each(function(i, el){
							if (f) {
								f = false;
								var li = $('<li class="first"><a href="' + $(el).attr('value') + '">' + $(el).text() + '</a></li>');
							} else {
								var li = $('<li><a href="' + $(el).attr('value') + '">' + $(el).text() + '</a></li>');
							}
							$('a', li).bind('click', callback);
							_$ul.append(li);
						});
						var siblButton = _$ul.siblings('input.advancedSearchFilter[type="button"]');
						_$ul.data('offset', _$ul.offset());
						siblButton.click(function(evt) {
							activateField($($(this).siblings('select')[0]));
							return false;
						});
			    	}
				};				
				
				makeList($AdvancedSearchYear, onSelectYear);
				makeList($AdvancedSearchSeason, onSelectSeason);
				makeList($AdvancedSearchLocation, onSelectLocation);
				makeList($AdvancedSearchCategory, onSelectCategory);
				doClear();
		    });
		},
		
		onCloseTab : function () {
			activateFieldHook(null);
		}
	}
	
	$.fn.advancedSearch = function( method ) {
	    if ( methods[method] ) {
	    	return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
	    } else if ( typeof method === 'object' || ! method ) {
	    	return methods.init.apply( this, arguments );
	    } else {
	        $.error( 'Method ' +  method + ' does not exist on jQuery.advancedSearch' );
	    }
	}	
})( jQuery );
