site.ps =
{
	initialised : false,
	search_box : false,
	search_url : false,
	results_table : false,
	current_request : false,
	loading_icon : false,
	loading_icon_display: false,
	previous_val : "",
	change_timer : false,

	init : function(search_box, results_table, loading_icon)
	{
		if (this.initialised === true)
			return true;

		this.search_box = search_box;
		this.search_url = $(search_box).parent().attr("action");
		this.results_table = results_table;
		this.loading_icon = loading_icon;
		this.loading_icon_display = $(loading_icon).css('display');
		$(loading_icon).css('display', 'none');

		this.bind_hover();

		this.change_timer = setInterval("site.ps.check_change();", 1000);

		this.initialised = true;

		return true;
	},

	bind_hover : function()
	{
		$(site.ps.results_table + " tbody tr td").live("mouseenter", function()
		{
			$(this).parent().find("td").addClass("active-cell");
		})
		.live("mouseleave", function()
		{
			$(site.ps.results_table + " td").removeClass("active-cell");
		});
	},

	check_change : function()
	{
		val = $(site.ps.search_box).val();
		if (site.ps.previous_val == val)
			return
		site.ps.previous_val = val;
		site.ps.get_results(val);
	},

	get_results : function(term)
	{
		if (site.ps.current_request !== false)
			site.ps.current_request.abort();

		site.ps.clear_table();

		if (term.length < 3)
			return;

		$(site.ps.loading_icon).css('display', site.ps.loading_icon_display);
		search_term = term;

		this.current_request = $.ajax(
		{
			type: "POST",
			url: site.ps.search_url,
			dataType: "json",
			data: { 'search_term': search_term },
			success: site.ps.update_table
		});
	},

	update_table : function(data)
	{
		table_body = $(site.ps.results_table).find("tbody");
		jQuery.each(data, function(index, element)
		{
			new_row = $("<tr><td>" + element.part + "</td><td>" + element.description + "</td><td>" + element.quantity + "</td></tr>");
			table_body.append(new_row);
		});
		$(site.ps.loading_icon).css('display', 'none');
	},

	clear_table : function()
	{
		$(site.ps.results_table).find("tbody tr").remove();
	}

}

//Dom ready
$(function()
{
	site.ps.init("#search_term", "#search_results", "#search_loading");
});
