﻿$.fn.customAutocomplete = function(options) {
	// Default settings
    var defaults = {
		input   : null,
		list    : null,
		inputEvent  : null
    }
	
	// Set settings
	var settings = $.extend(defaults, options);
	
	// Put you public methods here
	var method = {
        keyPressed : function(e)
        {
            // Key up
            if(e.keyCode == 40)
            {
                if(settings.list.find("li.mouseselected").length == 0)
                    settings.list.find("li:first").addClass("mouseselected");
                else
                    settings.list.find("li.mouseselected").removeClass("mouseselected").next().addClass("mouseselected");
            }
            // Key down
            else if(e.keyCode == 38)
            {
                if(settings.list.find("li.mouseselected").length == 0)
                    settings.list.find("li:last").addClass("mouseselected");
                else
                    settings.list.find("li.mouseselected").removeClass("mouseselected").prev().addClass("mouseselected");             
            }
            // Handle user input
            else
            {
                settings.input.data("userTyped", settings.input.val());
                settings.inputEvent.call(this);
            }
            
            // Text from LI into input
            if(settings.list.find("li.mouseselected").length > 0 && (e.keyCode == 38 || e.keyCode == 40))
                settings.input.val(settings.list.find("li.mouseselected").text());
            
            // If is up or down but no selected
            // Put back the original text
            if((e.keyCode == 38 || e.keyCode == 40) && (settings.list.find("li.mouseselected").length == 0 && settings.input.data("userTyped") != ""))
            {
                settings.input.val(settings.input.data("userTyped"));
            }          
            
            // Set mouse over
            settings.list.find("li").live("mouseover", function(){
                settings.list.find("li").removeClass("mouseselected");
                $(this).addClass("mouseselected");
            });     
        }
	}
	
	return this.each(function() {
		// Call a method within the default methods
		if(typeof options == "string") {
			return method[options].call(this);
		}
		else 
		{
		    settings.input.bind("keyup", method.keyPressed);
		   
			return this;
		}
	});
}

$(function(){
    $().customAutocomplete({
        input   : $("#zoekStr"),
        list    : $("#smartsearchresults"),
        inputEvent  : ShowSuggestions
    });
});
