/**
 * LiveSearch (requires the dimensions plug-in)
 *
 * Applies "live search" to input-fields
 *
 * Usage: jQuery('#q').liveSearch({ajaxURL: '/ajax/search/?q='});
 *
 * @class liveSearch
 * @param {Object} conf, custom config-object
 *
 * Copyright (c) 2008 Andreas Lagerkvist (andreaslagerkvist.com)
 * Released under a GNU General Public License v3 (http://creativecommons.org/licenses/by/3.0/)
 */
// Hide all search-results if you click outside them

var selectedItem = null;

var setSelectedItem = function(item) {
	selectedItem = item;

	var $results = $('div.live-search-results');

	if (selectedItem === null) {
		$results.slideUp(300);
		return;
	}

	if (selectedItem < -1) {
		selectedItem = -1;
	}

	var $lis = $results.find('li');

	if (selectedItem >= $lis.length) {
		selectedItem = $lis.length - 1;
	}

	$lis.removeClass('selected').eq(selectedItem).addClass('selected');
};

$(document.body).click(function(event) {
	if(!$(event.target).parents('div.live-search-results').length) {
		jQuery('div.live-search-results').slideUp(300);
	}
});
jQuery.fn.liveSearch = function(conf) {
	var config = jQuery.extend({
		ajaxURL: '/mod/search-results.php?q='
	}, conf);

	return this.each(function() {
		var input		= jQuery(this);
		var tmpOffset	= input.offset();
		var inputDim	= {
			left:	tmpOffset.left, 
			top:	tmpOffset.top, 
			width:	input.outerWidth(), 
			height:	input.outerHeight()
		};
		var results			= jQuery('<div class="live-search-results"></div>').appendTo(document.body).hide().slideUp(0);
		var resultsShit		= parseInt(results.css('paddingLeft'), 5) + parseInt(results.css('paddingRight'), 5) + parseInt(results.css('borderLeftWidth'), 5) + parseInt(results.css('borderRightWidth'), 5);
		inputDim.topNHeight	= inputDim.top + inputDim.height;
		inputDim.widthNShit	= inputDim.width - resultsShit;
		results.css({
			position:	'absolute', 
			left:		inputDim.left +'px', 
			top:		inputDim.topNHeight +'px',
			width:	inputDim.widthNShit +'px'
		});

		input.keypress(function(event) {
			if ((selectedItem !== null) && (selectedItem > -1)) {
				if (event.keyCode == 13) {
					window.location = results.find('li').eq(selectedItem).find('a').attr('href');
					event.preventDefault();
				}
			}
		});

		input.keyup(function(event) {
			if (selectedItem !== null) {
				if (event.keyCode == 38) {
					setSelectedItem(selectedItem - 1);
					event.preventDefault();
				}

				if (event.keyCode == 40) {
					setSelectedItem(selectedItem + 1);
					event.preventDefault();
				}
			}

			if(this.value != this.lastValue) {
				input.addClass('ajax-loading');

				var q = this.value;

				if(this.timer) {
					clearTimeout(this.timer);
				}

				this.timer = setTimeout(function() {
					jQuery.get(config.ajaxURL +q, function(data) {
						input.removeClass('ajax-loading');

						if(data.length) {
							results.html(data).slideDown(300);
							results.find('li').each(function(index) {
								$(this).bind('mouseover',function() {
									setSelectedItem(index);
								});
							});
							setSelectedItem(-1);
						}
						else {
							setSelectedItem(null);
							results.slideUp(300);
						}
					});
				}, 500);

				this.lastValue = this.value;
			}
		});
	});
};