jQuery.fn.liveSearch = function( options ) {

	searchArea = jQuery( this );
	
	var defaults = {
		ajaxURL: '',
		ajaxDataType: 'json',
		ajaxType: 'POST',
		loadingImage: 'loading.gif'
	};
	
	var opts = jQuery.extend(defaults, options);
	
	var search_term = "";
	var focused_term = null;
	var hasFocus = false;
	var itemClicked = false;
	
	
	searchArea.append('<form action="search.php?content=results" method="POST" id="search-form"><input type="text" name="search_term_text" id="main-search-box" size="16" value="SEARCH THE SITE" class="searchbox" autocomplete="off"><input type="image" src="images/blank.gif" alt="GO" border="0" class="go_button" /></form>')
			  .append('<div id="returned_results"></div>');
	
	jQuery("#main-search-box").keydown(function(e) {

		if(e.which == '40') // down
		{

			if(focused_term == null)
			{
				focused_term = jQuery("#returned_results ul li:first-child");
				focused_term.addClass("focused");
			}
			else
			{
				if(focused_term.next().length)
				{
					focused_term.removeClass("focused");
					focused_term = focused_term.next();

					focused_term.addClass("focused");
				}
			}
		}

		if(e.which == '38') // up
		{
			if(focused_term != null)
			{
				if(focused_term.prev().length)
				{
					focused_term.removeClass("focused");

					focused_term = focused_term.prev();
					focused_term.addClass("focused");
				}
			}
		}

		if(e.which == '13') // enter
		{
			if(focused_term != null)
				location.href = jQuery(this).attr(href);
		}

	}).keyup(function(e) {

		if(e.which != '40' && e.which != '38')
		{

			search_term = jQuery(this).val();
			
			if(search_term)
			{

				jQuery("#main-search-box").addClass("loading");
				jQuery("#returned_results").hide();
	
				jQuery.ajax({   type: opts.ajaxType,
								url:  opts.ajaxURL,
								dataType: opts.ajaxDataType,
								data: "action=liveSearch&term="+jQuery(this).val(),
								success: function(data) {
	
									if(data.term == search_term)
									{
										var result_items = "<ul>";
	
										jQuery.each(data.results, function(index, value) {
											result_items += "<li href='"+value.url+"'><a href='"+value.url+"'>"+value.content+"</a></li>";
										});
	
										result_items += "</ul>";
	
										jQuery("#returned_results").html(result_items);
										jQuery("#returned_results ul");
	
										jQuery("#returned_results ul li").hover( function() {
											jQuery("#main-search-box").focus();
	
											if(focused_term != null)
												focused_term.removeClass("focused");
	
											focused_term = jQuery(this);
											focused_term.addClass("focused");
										},
										function() {
											if(focused_term != null)
												focused_term.removeClass("focused");
												
											focused_term = null;
										
										});
	
										focused_term = null;
	
										jQuery("#main-search-box").removeClass("loading"); // Remove loading graphic
										jQuery("#returned_results").show();
									}
	
								}
							});
			}

		}
	});

	jQuery("#main-search-box").focusout(function() {
		if(focused_term == null)
			jQuery("#returned_results").slideUp();
	});

	jQuery("#main-search-box").focusin(function() {

		if(jQuery(this).val() == 'SEARCH THE SITE')
			jQuery(this).val('');
			
		jQuery("#returned_results").slideDown();
	});

	jQuery("#returned_results ul li").live("click", function() {
		location.href = jQuery(this).attr('href');
	});

};
