(function( $ ){
	
	var settings = {
		visibleItems: 18
    };
	
	var methods = {
		init : function (options) {
			if ( options ) { 
				$.extend( settings, options );
			}
			
			return this.each(function(i, el){
				this.element = el;
				
		    	var _this = this;
		    	var $this = $(this);
		    	var $designerSearchOptions = $('#designerSearchOptions');
		    	var $designerSearchItems = $('#designerSearchItems');
		    	var $designerSearchItemsContainer = $('#designerSearchItemsContainer');
		    	var $designerSearchUpArrow = $('#designerSearchUpArrow');
		    	var $designerSearchDownArrow = $('#designerSearchDownArrow');
		    	var itemHeight = 0;
		    	var minY = 0;
		    	var _direction = 0;
		    	var _interval = null;
		    	
		    	$('a', this).each(function(i, el){
		    		var _el = $(el);
		    		$(el).bind('touchstart', function(evt){_el.addClass('hover')});
					$(el).bind('touchend', function(evt){_el.removeClass('hover')});
		    	});
		    	
		    	$designerSearchUpArrow.mousedown(function(evt){evt.preventDefault(); moveList(1); return false;});
		    	$designerSearchUpArrow.mouseup(function(evt){evt.preventDefault(); moveList(0); return false;}).mouseleave(function(evt){evt.preventDefault(); moveList(0); return false;});
		    	$designerSearchDownArrow.mousedown(function(evt){evt.preventDefault(); moveList(-1); return false;});
		    	$designerSearchDownArrow.mouseup(function(evt){evt.preventDefault(); moveList(0); return false;}).mouseleave(function(evt){evt.preventDefault(); moveList(0); return false;});
		    	
		    	function onOptionClick (id) {
			    	window.location.href = id;
		    	}
		    	
		    	function moveList (dir) {
		    		_direction = dir;
		    		if (_direction == 0 && _interval != null) {
		    			clearInterval(_interval);
		    			_interval = null;
		    			return false;
		    		}
		    		if (_interval) clearInterval(_interval);
		    		_interval = setInterval(updateListDirection, 100);
		    		return false;
		    	}
		    	
		    	function updateListDirection () {
		    		var nextY = $designerSearchItems.position().top + itemHeight * _direction;
		    		nextY = (nextY > 0) ? 0 : nextY;
		    		nextY = (nextY < minY) ? minY : nextY;
		    		$designerSearchItems.css('top', nextY);
		    	}
		    	
		    	function redrawList () {
		    		var l = 0;
    				$('li', $designerSearchItems).each(function(i, el) {
    					l++;
    					var aEl = $(el).children('a').first();
    					var option = $('<option></option>').val(aEl.attr('href')).html(aEl.text());
    					$designerSearchOptions.append(option);
    					if (Modernizr.touch && USER_AGENT == 'IPHONE'){
    			    		$designerSearchItems.bind('click', function(evt){
    			    			$designerSearchOptions.focus();
    			    			return false;
    			    		});
    			    	}
    				});
    				itemHeight = $designerSearchItems.children('li').children('a').outerHeight();
    				var containerH = itemHeight * settings.visibleItems;
    				minY = -1 * (l * itemHeight - containerH);
    				$designerSearchItemsContainer.height(containerH);
    				$designerSearchItems.css('top', 0);
    				$designerSearchUpArrow.css('visibility', (l > settings.visibleItems) ? 'visible' : 'hidden');
    		    	$designerSearchDownArrow.css('visibility', (l > settings.visibleItems) ? 'visible' : 'hidden');
    		    	$designerSearchOptions.attr('selectedIndex', '0').children("option:selected").removeAttr("selected");
		    	}
		    	
		    	$designerSearchOptions.change(function (evt) {
		    		$('option:selected', evt.target).each(function (i, el) {
		    			onOptionClick($(el).val());
		    		});
		    	});
		    	
		    	redrawList();
		    });
		},
		
		onCloseTab : function () {
			//
		}
	}
	
	$.fn.designerSearch = 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.designerSearch' );
	    }
	}	
})( jQuery );
