/**
 * @author Filip Michalowski / Fi Stockholm
 */
Namespace.create("ng.modules.featuredMediaModule");

ng.modules.featuredMediaModule.FeaturedMediaModule = function () {

	//private variables:
	var moduleContainer;
	var moduleData;

	//private methods:
	
	var draw = function() {
		
		// hide horizontal scrollbar
		moduleContainer.find("div.mediaListHolderWrapper").css({overflowX:"hidden", height: "139px"});
		
		// set the width of list holder
		var mediaListHolder = moduleContainer.find("div.mediaListHolder");
		numItems = mediaListHolder.find("ul li").children().length;
		itemWidth = 118;
		var listWidth = numItems * itemWidth;
		mediaListHolder.css("width", listWidth + "px");			
		
		var left = 0;
		var maxLeft = 0;
		var minLeft = - listWidth + 4 * itemWidth;
		
		moduleContainer.find("a.prev").fadeTo(50, 0.5).css("cursor", "default").attr("title","");
		
		if (numItems > 4) {
		
			// set listeners for prev and next buttons
			moduleContainer.find("a.next").click(function(){
				itemWidth = 118;
				left -= itemWidth;
				if (left <= minLeft) {
					left = minLeft;
					$(this).fadeTo(50, 0.5).css("cursor", "default").attr("title","");
				}
				moduleContainer.find("a.prev").fadeTo(50, 1).css("cursor", "pointer").attr("title","Previous");				
				//mediaListHolder.css("left", left + "px");
				mediaListHolder.animate({left: left + "px"}, 250, "swing");
				return false;
			});
			
			moduleContainer.find("a.prev").click(function(){
				itemWidth = 118;
				left += itemWidth;
				if (left >= maxLeft) {
					left = maxLeft;
					$(this).fadeTo(50, 0.5).css("cursor", "default").attr("title","");
				}
				moduleContainer.find("a.next").fadeTo(50, 1).css("cursor", "pointer").attr("title","Next");
				//mediaListHolder.css("left", left + "px");
				mediaListHolder.animate({left: left + "px"}, 250, "swing");
				return false;
			});
		} else {
			moduleContainer.find("a.next").fadeTo(50, 0.5).css("cursor", "default").attr("title","");			
		}
				
	};

	/**
	 * Truncates a string to around ln characters and add ellipses
	 */
	var truncateText = function(t, ln){
		if(t.length > ln){
			t = t.substring(0, ln);
			t = t.replace(/\w+$/, '');
			t += '...';
			return t;
		} else {
			return t;
		}
	}
	
	var charLim = 30;
	var truncateCaption = function(elt){
		var cont = $(elt).html();
		$(elt).html(truncateText(cont,charLim));
		$(elt).attr('title',cont);
	};

	var truncateAllCaptions = function(){
		$("#featuredMediaModule .mediaListHolder li span.caption").each(function(){ 
			truncateCaption($(this)); 
		});
	};
	
	//the returned object here will become ng.modules.featuredMediaModule.FeaturedMediaModule:
	return  {
		
		// public
		
		init: function (container, data) {
			moduleContainer = container;
			moduleData = data;
			
			draw();
			truncateAllCaptions();
		}

	};
}(); // the parens here cause the anonymous function to execute and return


/**
 * Markup templates for the FeaturedMediaModule
 */
ng.modules.featuredMediaModule.FeaturedMediaModuleTemplates = 
{
		
};