
var Cityngo = function()
{

};

Cityngo.UsersList = function(settings)
{
	this.settings = {
		url: R + "ajax/users_list.php",
		title: "Membres",
		table: "places",
		_container: "#fancybox-inner #users_list"
	}
	$.extend(this.settings, settings);
};

Cityngo.UsersList.prototype = {
	load: function()
	{
		var self = this;
		$.fancybox({
			content: "<h2>" + this.settings.title + "</h2><div id=\"users_list\"><div class=\"loading\">Chargement de la liste ...</div></div>",
			onComplete: function()
			{
				self.loadUsers();
			},
			scrolling: false
		});
	},
	
	loadUsers: function()
	{
		var self = this;
		$.ajax({
			url: this.settings.url,
			data: {
				table: this.settings.table,
				ref: this.settings.ref,
				key: this.settings.key
			},
			success: function(resp)
			{
				$(self.settings._container).html(resp);
			}
		});
	}
};

Cityngo.Spotlight = function($input)
{
	this.xhr = null;
	this.interval = null;
	this.$input = $input;
	this.open = false;
	this.$spotlight = this.$input.next(".spotlight");
	this.init();
}

Cityngo.Spotlight.prototype = {
	init: function()
	{
		var self = this;
		this.$input.attr("autocomplete", "off").keydown(function(e)
		{
			return self.keyDown(e);
		}).keypress(function (e)
		{
			switch (e.keyCode)
			{
				case 13: // Enter
					$li = self.$spotlight.find("li.sp_focus");
					if ($li.length == 1) 
					{
						$li.trigger("click");
						return false;
					}
					break;
			}
		});
		$(".sp_more_results a").live("click", function()
		{
			$(this).parents("form").eq(0).submit();
		});
		$(".sp_content .ui-tabs-panel li").live("click", function()
		{
			var href = $(this).find("a").eq(0).attr("href");
			if (href) 
				redirect(href);
		});
	},
	
	initResults: function()
	{
		var self = this;
		this.$spotlight.find(".sp_tabs").tabs({
			select: function(event, ui)
			{
				self.$spotlight.find("li.sp_focus").removeClass("sp_focus");
				self.$input.focus();
			}
		});
	},
	
	keyDown: function(e)
	{
		if (this.open) 
		{
			switch (e.keyCode)
			{
				case 40: // Arrow down
					this.moveCursor(1);
					return false;
					break;
				case 38: // Arrow up
					this.moveCursor(-1);
					return false;
				case 27: // Esc
					this.$spotlight.hide();
					return false;
					break;
				case 13: // Enter
					return false;
					break;
			}
		}
		if (this.interval) 
			clearTimeout(this.interval);
		var self = this;
		this.interval = setTimeout(function()
		{
			self.search(self.$input.val());
		}, 200);
	},
	
	moveCursor: function(way)
	{
		var $panel = this.$spotlight.find(".ui-tabs-panel").not(".ui-tabs-hide");
		var $liz = $panel.find("li");
		var offset = $liz.index($panel.find("li.sp_focus"));
		nb_li = $liz.length;
		if (offset >= 0) 
			$liz.eq(offset).removeClass("sp_focus");
		offset = (offset + nb_li + way) % nb_li;
		$liz.eq(offset).addClass("sp_focus");
	},
	
	search: function(q)
	{
		var self = this;
		if (this.xhr) 
			this.xhr.abort();
		this.xhr = $.ajax({
			url: R + "ajax/search/spotlight.php",
			data: {
				q: q
			},
			success: function(r)
			{
				self.onSuccess(r);
			}
		});
	},
	
	onSuccess: function(r)
	{
		if (!r) 
		{
			this.$spotlight.hide();
			this.open = false;
			return;
		}
		this.$spotlight.show();
		this.$spotlight.find(".sp_content").html(r);
		this.initResults();
		this.open = true;
	}
};




