
(function($){
	$.fn.jyaddm = function(options) { 
		
		var defaults = {  
			enableEnter : true
		};  

		var options = $.extend(defaults, options);  
		
		return this.each(function() { 
			var obj = $(this);
			var parent = obj.find("div");  						
			var selector = obj.find("input");  						
			var child = obj.find("ul");
			var listArr = obj.find("li");
			var limit = listArr.length;									
			var selected = 0;
			var selectionArr = new Array;
			var buffer="";
			
			child.hide();
			selector.hide();
		
			obj.goDown = function(){
				if(selected<selArr.length-1)
				{					
					selected++;
					obj.select();
				}
			};

			obj.goUp = function(){
				if(selected>0)
				{
					selected--;
					obj.select();
				}
			};
			
			obj.select = function(){
				obj.clearSelected();
				listArr.eq(selArr[selected]).addClass("selected");
			};
			
			obj.clearSelected = function(){
				for(var i=1; i<limit; i++)
				{
					listArr.eq(i).removeClass("selected");
				}
			};
			
			obj.enter= function(){
				selector.blur();
				listArr.eq(selArr[selected]).click();
				child.hide();
			};

			selector.keyup(function(e) {										
				buffer=selector.val().toLowerCase();
				selArr = new Array;
				
				for(var i=1; i<limit; i++)
				{					
					if(listArr.eq(i).text().toLowerCase().search(buffer)!=-1)					
					{						
						listArr.eq(i).show();
						selArr.push(i);
					}
					else
					{
						listArr.eq(i).hide();						
					}
				}			
				
				switch(e.which)
				{					
					
					case 37: // key up
						obj.goUp();
					break;
					case 38: //  key left 
						obj.goUp();
					break;
					case 39: // key down
						obj.goDown();
					break;					
					case 40: // key right
						obj.goDown();
					break;	
 					case 13: // enter
						if(options.enableEnter)
						{
							obj.enter();
						}
					break;						
					default: 
						obj.select();
				}
			});

			obj.mouseover(function() {				
				child.show();
				selector.show();
				selector.focus();
			});
			
			obj.mouseout(function(){
				child.hide();							
				selector.hide();
			});
			
			child.children().each(function(){
				$(this).mouseover(function(){
					obj.clearSelected();					
				});				
			});
			
			
		});  
	};
})(jQuery);	
