/*!
 * Stu Gallery v1.0
 *
 * Copyright 2011, Marco Lestuzzi
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * Date: Sun Mar 20 14:40:48 2011 +0100
 */
 
var SG_players = new Array();

function SG_Player(player_name, player_width, player_height) {
    this.list = [];
    this.name = player_name;
	this.width = player_width;
	this.height = player_height;
    this.getName = function() {
        return this.name;
    };
    this.getWidth = function() {
        return this.width;
    };
    this.getHeight = function() {
        return this.height;
    };
    this.setList = function(player_list) {
        this.list = player_list;
    };
    this.getList = function() {
        return this.list;
    };
}

function SG_analizer(ul_element) {
	var result = {
		"thumb" : [],
		"thumb_title" : [],
		"thumb_class" : [],
		"content" : [],
		"description" : []
	}
	ul_element.find('li').each(
		function(index) {
			var thumb = jQuery(this).find(".sg_preview").attr("src");
			var thumb_title = jQuery(this).find(".sg_preview").attr("title");
			var thumb_class = jQuery(this).find(".sg_preview").attr("class").replace(/[ ]*sg_preview[ ]*/, '');
			var content = jQuery(this).find(".sg_content").html();
			var description = jQuery(this).find(".sg_description").html();
			if ((thumb)&&(content)) {
				result["thumb"].push(thumb);
				result["thumb_title"].push(thumb_title);
				result["thumb_class"].push(thumb_class);
				result["content"].push(content);
				if (description) {
					result["description"].push(description);
				} else {
					result["description"].push("");
				}
			}
		}
	);
	return result;
}

function SG_show(ul_id, index) {
	for (var i = 0; i < SG_players.length; i++) {
		sgp = SG_players[i];
		if (sgp.getName() != ul_id) continue;
		var elements = sgp.getList();
		if (elements["thumb"][index]) {
			var thumb = elements["thumb"][index];
			var content = elements["content"][index];
			var description = elements["description"][index];
			if (description != "") {
				var width = sgp.getWidth();
				var height = sgp.getHeight();
				description = '<div class="SG_description" style="width: '+width+'px; margin-top: '+(height - 100)+'px; height: 100px;">' + description + '</div>';
				jQuery("#SG_"+ul_id+" .SG_player").html(content).prepend(jQuery(description));
			} else {
				jQuery("#SG_"+ul_id+" .SG_player").html(content);
			}
			jQuery("#SG_"+ul_id+" .SG_navigator IMG").removeClass("active");
			jQuery("#img_"+index+'_'+ul_id).addClass("active");
		}
		break;
	}
	return false;
}

function SG_engine(sgp_instance, ul_element, width, height) {
	var elements = SG_analizer(ul_element);
	sgp_instance.setList(elements);
	var html = '';
	// SG_player
	var ul_id = ul_element.attr("id");
	html += '<div id="SG_'+(ul_element.attr("id"))+'"  style="width: '+width+'px;">';
	html += '<div class="SG_player" style="width: '+width+'px; height: '+height+'px;">';
	if (elements["content"].length > 0) {
		if (elements["description"][0] != "") {
			html += '<div class="SG_description" style="width: '+width+'px; margin-top: '+(height - 100)+'px; height: 100px;">';
			html += elements["description"][0];
			html += '</div>';
		}
		html += elements["content"][0];
	}
	html += '</div>';
	// SG_navigator
	html += '<div class="SG_navigator" id="nav_'+ul_id+'" style="width: '+width+'px;">';
	html += '<a id="left_'+ul_id+'" class="SG_navigator_left" onclick="return SG_goRight(\''+ul_id+'\');">&laquo;</a>';
	html += '<a id="right_'+ul_id+'" class="SG_navigator_right" onclick="return SG_goLeft(\''+ul_id+'\');" style="margin-left: '+(width - 15)+'px">&raquo;</a>';
	html += '<div id="panel_'+ul_id+'" class="SG_navigator_panel" style="margin-left: 0px;" style="min-width: '+width+'px;">';
	html += '<div id="easypanel_'+ul_id+'" class="SG_navigator_panel_sup">';
	for (var i = 0; i < elements["thumb"].length; i++) {
		var active = '';
		if (i == 0) active = 'active';
		html += '<a href="#" onclick="return SG_show(\''+ul_id+'\',\''+i+'\');">';
		html += '<img id="img_'+i+'_'+ul_id+'" title="'+elements["thumb_title"][i]+'" class="'+active+' '+elements["thumb_class"][i]+' sg_thumb" alt="Immagine '+i+'" src="'+elements["thumb"][i]+'" />';
		html += '</a>';
	}
	html += '</div>';
	html += '</div>';
	html += '</div>';
	html += '</div><div style="clear: both"></div>';
	return jQuery(html);
}

function SG_goLeft(id_ul) {
	var mLeft = jQuery('#panel_'+id_ul).css("margin-left").replace(/px/, '') * 1;
	var nav_width = jQuery('#nav_'+id_ul).width() * 1;
	if (jQuery('#panel_'+id_ul).width() + mLeft > nav_width) {
		mLeft = mLeft - 404;
	}
	jQuery('#panel_'+id_ul).css("margin-left", mLeft+"px")
	return false;
}

function SG_goRight(id_ul) {
	var mLeft = jQuery('#panel_'+id_ul).css("margin-left").replace(/px/, '') * 1;
	if (mLeft < 0) {
		mLeft = mLeft + 404;
	}
	jQuery('#panel_'+id_ul).css("margin-left", mLeft+"px")
	return false;
}

function SG_Init(id_ul, width, height) {
	var ul_element = jQuery("ul#"+id_ul);
	if (ul_element) {
		sgp = new SG_Player(id_ul, width, height);
		SG_players.push(sgp);
		ul_element.hide().replaceWith(SG_engine(sgp, ul_element, width, height));
		
		jQuery("#SG_"+id_ul+" .SG_player").hover(
			function () {
				//show description
				jQuery("#SG_"+id_ul+" .SG_description").slideUp(0);

			}, 
			function () {
				//hide description
				jQuery("#SG_"+id_ul+" .SG_description").slideDown(0);			
			}
		);
		if (jQuery("#SG_"+id_ul+" .SG_navigator_panel").width() > jQuery("#SG_"+id_ul+" .SG_navigator").width()) {
			jQuery("#left_"+id_ul).show();
			jQuery("#right_"+id_ul).show();
		} else {
			jQuery("#left_"+id_ul).hide();
			jQuery("#right_"+id_ul).hide();
		}
	}
}
