(function(jQuery) {																	// Compliant with jquery.noConflict()

jQuery.fn.mcVideoList = function(channel_id, o) {

// Uncomment line below if you do not use jquery.mediacenter.js
//	jQuery.require("js/v2/jquery.ram.js"); 
	jQuery.require("js/v2/template/jquery.template-min.js");

	// Default values
	o = jQuery.extend(jQuery.fn.mcVideoList.defaults, o || {});

	// Local data
	var result = {};
	var context = {};
	var channel_list = [];
	var mcCont;
	
//DP_Debug.logInfo("Video List: Init");

	// If no Channel ID, get MEA videos
/*
	if (channel_id==null) {
		var ramId		= 'mea';
		var template	= o.homeTpl;
		var url			= o.homeUrl;
	} else {
		var ramId		= 'contentList_' + channel_id;
		var template	= o.tpl;
		var url			=  "cache/json/content__" + channel_id + ".json.txt";
	}
	var t_channel = (o.tplSelector) ? 
			jQuery.template(jQuery(o.tplSelector).html) : 
			jQuery.template(template);
*/
var ramId;
var template;
var url;
var t_channel;

	return this.each(function() {												// Returns the element collection. Chainable.

		mcCont = this;

		jQuery(document).bind("load.videoList", function(e, data) {  
			context = jQuery.extend(data, context || {});

//DP_Debug.dump(data, 'Video List: load.videoList: data', true, 3);

	// If no Channel ID, get MEA videos
			if (!data.cid || data.cid==null) {
//DP_Debug.logWarning("Video List: No CID");
				ramId		= 'mea';
				template	= o.homeTpl;
				url			= o.homeUrl;
			} else {
//DP_Debug.logWarning("Video List: CID="+data.cid);
				ramId		= 'contentList_' + data.cid;
				template	= o.tpl;
				url			=  "cache/json/content__" + data.cid + ".json.txt";
			}

			t_channel = (o.tplSelector) ? 
				jQuery.template(jQuery(o.tplSelector).html) : 
				jQuery.template(template);


			loadData({
				success: function(items) {
					makeList();
					if (o.onComplete) {
						o.onComplete(context);
					}
					// Define default video if necessary
						jQuery(document).trigger("videoList.loaded", context);
				},
				error: function(textStatus, errorThrown) {
					if (ramId == "mea") {
						alert( 'Error loading videos: '+textStatus + '\n' + errorThrown + '\n' + unescape( url) );
					} else {
						// Try loading Mea List
						ramId		= 'mea';
						template	= o.homeTpl;
						url			= o.homeUrl;
						t_channel = (o.tplSelector) ? 
							jQuery.template(jQuery(o.tplSelector).html) : 
							jQuery.template(template);

						loadData({
							success: function(items) {
								makeList();
								if (o.onComplete) {
									o.onComplete(context);
								}
								// Define default video if necessary
									jQuery(document).trigger("videoList.loaded", context);
							},
							error: function(textStatus, errorThrown) {
								alert( 'Error loading videos: '+textStatus + '\n' + errorThrown + '\n' + unescape( url) );
							}
						});														// close loadData


					}
				}
			});																	// close loadData


		});																		// close Bind
    });																			// close Each

/* ------------------------------- loadData --------------------------------- */
	function loadData(params) {
		callbackOK		= params.success || null;
		callbackError	= params.error || null;

//		if (jQuery.ram && jQuery.ram.get(ramId)) {
		if (jQuery.ram.get(ramId)) {
			// Use Data in cache
			extractData();
			if (callbackOK) callbackOK(o.items);
		} else {
//DP_Debug.logWarning("Video List: RAM empty");
			// No data in cache: AJAX Request
			if (o.onLoading) o.onLoading();

			// Display Spinning Wheel
//			jQuery(mcCont).html('<div class="spbDistance"></div><div class="spbContainer"></div>');

			// Load JSON Data as String
			jQuery.ajax({
				type: "GET",
				url: url,
				dataType: "text",
				timeout: 30000,
				async: false,
				success: function (data) {
					// Save Data in session
//					if (jQuery.ram) jQuery.ram.set(ramId, data);
//DP_Debug.dump(data, 'Video List: LoadData: Save data in '+ramId, true, 3);
					jQuery.ram.set(ramId, data);

					extractData();
					if (callbackOK) callbackOK(o.items);
				},																// close Success

				error: function (XMLHttpRequest, textStatus, errorThrown) {
					if (callbackError) callbackError(textStatus, errorThrown);
				}																// close Error
			});																	// close $.ajax
		}
	}

/* ----------------------------- extractData -------------------------------- */
	function extractData() {
		o.page		= Math.max(o.page,1);
		var from	= (o.page - 1) * o.ipp;
		var to		= from + o.ipp - 0;

		var ramData = eval(jQuery.ram.get(ramId));
//DP_Debug.dump(jQuery.ram.get(ramId), 'Video List: extractData: data from '+ramId, true, 3);

		if (context.vid==null) {
			if (ramData.items.length) {
				context.video = ramData.items[0];
			} else {
				context.video = ramData.items;
			}
		}

 		context.itemCount 		= ramData.items.length;
 		context.page			= o.page;
 		context.pageCount		= Math.floor((ramData.items.length - 1) / o.ipp)+1;
		context.itemFrom		= from+1;
		context.itemTo			= Math.min(ramData.items.length, to);
		context.channelTitle	= ramData.title;

// DP_Debug.dump(context, 'Context', true, 3);

		if (from > ramData.items.length) {
			page				= context.pageCount;
			from				= (page-1) * o.ipp;
			to					= Math.min(ramData.items.length, (from + o.ipp - 0));
			context.page		= page;
			context.itemFrom	= from+1;
			context.itemTo		= to;
		}

		var items = ramData.items.slice(from, to);
		delete ramData;
		o.items = items;
	}

/* ------------------------------- makeList --------------------------------- */
	function makeList() {
		jQuery(mcCont).empty();
//DP_Debug.logWarning("Video List: makeList()");

		// Add every channel to the list
		jQuery.each(o.items, function(i, item) {
			item.index = i;
			var toto = jQuery(t_channel.apply(item));
			jQuery('a', toto).click(function(e) {
				context.vid = o.items[i].guid;
				context.video = o.items[i];
				jQuery(document).trigger('video.selected', context);
				if (o.onClick)
					return o.onclick();
				else
					return false;
			});

			jQuery(mcCont).append(toto);
		});																		// close each
		jQuery('.mcVideo', mcCont)
			.mouseover(function (){
				jQuery(this).addClass("selected");
			})
			.mouseout(function () {
				jQuery(this).removeClass("selected");
			});

	}																			// close makeList()

};

/* ============================= Default Values ============================= */
jQuery.fn.mcVideoList.defaults = {
	listUrl		: "mc_getContentJson2.php?id=",
	homeUrl		: "getMeaJson.php",

	tpl			: '<dl class="mcVideo" id="mc_video_${guid}"><dt><a href="#"><img src="${img}" class="mcVideoThumb" width="109" height="82"></a><div class="title">${index}-${title}</div></dt><dd><span class="rating rank${rank}"></span></dd><dd><a href="#" class="more">Voir &raquo;</a></dd></dl>',
	homeTpl		: '<div id="mc_video_${guid}" class="mcVideoMea"><div class="mcMeaPhoto"><a href="#"><img src="http://www.sportweek.fr/commun/n109x82/${img}" class="mcVideoThumb"></a></div><div class="mcMeaInfos"><h3><a href="#">${title}</a></h3><div>${description}</div><span class="rating rank${rank}"></span><div><a href="#" class="more">Voir &raquo;</a></div></div><div class="spacer"></div></div>',

	page		: 1,															// Page
	ipp			: 12,															// Items per page
	items		: {},

	tplSelector	: null,

	onLoading	: null,
	onComplete	: null,
	onClick		: null,

	thumbPath	: "http://www.sportweek.fr/commun/n109x82/"
};

})(jQuery);
