/*
* FullGamer JavaScript Menu
* Copyright (c) 2009 Fullgamer.it
* Tutti i diritti riservati
*
*/

// Controlla se la stringa 'a' inizia con la stringa 'b'
jQuery.startsWith = function(a,b)
{
	return (a.indexOf(b) == 0);
}

// Controlla se la stringa 'a' finisce con la stringa 'b'
jQuery.endsWith = function(a,b)
{
	if (a.length < b.length || b.length == 0 || a.length == 0)
		return false;
	
	return (a.lastIndexOf(b) == a.length - b.length);
}

// Concatena due pezzi di URL gestendo il separatore
jQuery.concatUrl = function(a, b, sep)
{
	if (sep === undefined)
		sep = '/';
	
	var buffer = new Array();
	
	var a_ws = (a.charAt(a.length-1) == sep);
	var b_ws = (b.charAt(0) == sep);
	
	buffer.push(a);
	
	if ((a_ws && !b_ws) || (!a_ws && b_ws)) {
		buffer.push(b);
	}
	else if (!a_ws && !b_ws)
	{
		buffer.push(sep);
		buffer.push(b);
	}
	else
	{
		buffer.push(b.substring(1));
	}
	
	return buffer.join("");
}

jQuery.fn.initFullGamerMenu = function(menu, options) 
{
	var c = this;
	
	function addShow(obj)
	{
		obj.show = function()
		{
			var UL = jQuery('<ul class="' + options.css_class + '" />');
			
			if (obj.parent !== undefined)
			{
				var buffer = new Array();
				buffer.push('<li><img src="');
				buffer.push(jQuery.concatUrl(options.image_base, options.image_back));
				buffer.push('" /><span style="display:none">');
				buffer.push(options.text_back);
				buffer.push('</span></li>');
				
				var LI = jQuery(buffer.join(''));
			
				LI.appendTo(UL).click(function(){
					c.animate({opacity: 0.3},"slow", "linear", function(){
						obj.parent.show(); 
						c.animate({opacity: 1.0}, "slow");
					});
				});
			}

			jQuery.each(obj, function(i) 
			{
				var buffer = new Array();
				buffer.push('<li><img src="');
				buffer.push(jQuery.concatUrl(options.image_base, obj[i].image));
				buffer.push('" /><span style="display:none">');
				buffer.push(obj[i].title);
				buffer.push('</span></li>');
				
				var LI = jQuery(buffer.join(''));
			
				if (obj[i].action === undefined)
				{
					if (obj[i].submenu !== undefined)
					{
						obj[i].action = function() {
							c.animate({opacity: 0.3},"slow", "linear", function(){
								obj[i].submenu.show();
								c.animate({opacity: 1.0}, "slow");
							});
						};
					}
					else if (obj[i].url !== undefined)
					{
						obj[i].action = function() {
							var url = obj[i].url;
							
							if (!jQuery.startsWith(url, 'http://') && options.base_url !== undefined)
								url = jQuery.concatUrl(options.base_url, url);
							
							window.location = url;
						};
					}
				}

				// Aggiunge la voce di menu e associa il click all'azione
				LI.appendTo(UL).click(obj[i].action);
			});
				
			///////////////////////////////////////////////////////
			// Aggancia gli eventi
			///////////////////////////////////////////////////////

			jQuery("img", UL)
				.each(function(){
					
					jQuery(this).css('width', options.image_width + "px");
					jQuery(this).css('height', options.image_height + "px");
					
					this.setImageOut = function() {
						var imgSrc = $(this).attr('src');
						var typePos = imgSrc.indexOf(options.image_ext, 0);
						var imgName = imgSrc.substr(0, typePos);
						jQuery(this).attr("src", imgName + options.over_suffix + options.image_ext);
					}
					
					this.setImageOver = function() {
						var imgSrc = $(this).attr('src');
						var typePos = imgSrc.indexOf(options.over_suffix, 0);
						var imgName = imgSrc.substr(0, typePos);
						jQuery(this).attr("src", imgName + options.image_ext);
					}
					
					this.setImageOut();
				})
				.mouseover(function(){
					this.setImageOver();
					jQuery(this).next("span").css("display", "block");
				})
				.mouseout(function(){
					this.setImageOut();
					jQuery(this).next("span").css("display", "none");
				});
			
			var menuSize = jQuery('li', UL).length;
			jQuery(UL).css('marginLeft', ((c.width()-(menuSize*options.image_width))/2) + "px" );
			jQuery(c).empty().append(UL);
		};
	};
	
	function parseMenu(m)
	{
		addShow(m);
		
		jQuery.each(m, function(i) {
			if(m[i].submenu !== undefined) {
				m[i].submenu.parent = m;
				parseMenu(m[i].submenu);
			}
		});
	};
	
	parseMenu(menu);
	menu.show();
};


