var media_manager = liwe.module ( "media_manager" );

function MediaManagerItem ( data, templ_preview, templ_full )
{
	this.data = data;
	this._t_preview = templ_preview;
	this._t_full    = templ_full;

	this.preview = function ( mode )
	{
		if ( ! mode ) mode = "icon";

		this.data [ '_mode' ] = mode;
		// var s = String.formatDict ( MediaManagerItem.templates [ this.data [ 'kind' ] + "-preview" ], data );
		return String.formatDict ( this._t_preview, this.data );
	}

	this.toString = function ()
	{
		// return String.formatDict ( MediaManagerItem.templates [ this.data [ 'kind' ] + "-render" ], data );
		return String.formatDict ( this._t_full, this.data );
	}
}

MediaManagerItem.templates = 
	{
		"image-preview"  : '<img src="/site/media_manager/image/%(_mode)s/%(id_media)s.jpg" alt="%(descr)s" title="%(descr)s" border="0" />',
		"image-render"  : '<img src="/site/media_manager/image/full/%(id_media)s.jpg" alt="%(descr)s" title="%(descr)s" border="0" />',

		"youtube-preview"  : '<img src="/site/media_manager/youtube/%(_mode)s/%(id_media)s.jpg" alt="%(descr)s" title="%(descr)s" border="0" />',
		"youtube-render" : '<object width="618" height="500"><param name="movie" value="http://www.youtube.com/v/%(data)s&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/%(data)s&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="618" height="500"></embed></object>',

		"start-view" : '<a href="javascript:media_manager.show(\'%(module)s\',\'%(id_obj)s\',%(_pos)d)">%(_img)s</a>',
		"flash-preview" : '<object width="200" height="200"><param name="movie" value="/site/media_manager/flash/orig/%(id_media)s.swf"></param><param name="wmode" value="transparent"></param><embed src="/site/media_manager/flash/orig/%(id_media)s.swf" type="application/x-shockwave-flash" wmode="transparent" width="200" height="200"></embed></object>',
		"flash-render" : '<object width="200" height="200"><param name="movie" value="/site/media_manager/flash/orig/%(id_media)s.swf"></param><param name="wmode" value="transparent"></param><embed src="/site/media_manager/flash/orig/%(id_media)s.swf" type="application/x-shockwave-flash" wmode="transparent" width="200" height="200"></embed></object>'
	};

media_manager.instances = {};

media_manager.get_items = function ( module, id_obj, cback, templates, force )
{
	if ( media_manager.instances [ module + ":" + id_obj ] && ! force )
	{
		if ( cback ) cback ( media_manager.instances [ module + ":" + id_obj ] );
		return;
	}

	media_manager.ajax ( { action: "media_manager.ajax.get_items", module: module, id_obj: id_obj }, 
		function ( v )
		{
			media_manager._set_items ( v, module, id_obj, templates, cback );
		} );
};

media_manager.get_items_list = function ( module, id_obj )
{
	if ( media_manager.instances [ module + ":" + id_obj ] )
		return media_manager.instances [ module + ":" + id_obj ];

	return [];
};

media_manager._set_items = function ( v, module, id_obj, templates, cback )
{
	// console.debug ( "SET ITEMS: module: %s - id_obj: %s - items: %o", module, id_obj, v [ 'media_items' ] );

	if ( ! templates ) templates = MediaManagerItem.templates;

	var items = v [ 'media_items' ];
	if ( ! items ) items = [];

	var t, l = items.length;
	var lst = [], data;

	for ( t = 0; t < l; t ++ )
	{
		data = v [ 'media_items' ] [ t ];
		lst.push ( media_manager._create ( data, templates ) );
	}

	media_manager.instances [ module + ":" + id_obj ] = lst;
	if ( cback ) return cback ( lst );

	return lst;
};

media_manager._create = function ( data, templates )
{
	var preview, full;
	var mmi;

	preview = templates [ data [ 'kind' ] + "-preview" ];
	full    = templates [ data [ 'kind' ] + "-render" ];

	mmi = new MediaManagerItem ( data, preview, full );

	return mmi;
};

media_manager.set_items = function ( items, templates )
{
	if ( ! items ) return;

	var it = items;

	if ( typeof it [ 'media_items' ] != "undefined" ) it = items [ 'media_items' ];
	console.debug ( "---- IT: %o", it );
	if ( ! it || it.length == 0 ) return;

	return media_manager._set_items ( { "media_items" : it }, it [ 0 ] [ 'module' ], it [ 0 ] [ 'id_obj' ], templates );
};

media_manager.panel = function ( items, mode, items_per_row )
{
	if ( ! mode ) mode = "icon";
	if ( ! items_per_row ) items_per_row = 8;

	return media_manager._render_icons ( items, mode, MediaManagerItem.templates [ 'start-view' ],  items_per_row);
};
	
media_manager.show = function ( module, id_obj, pos, width, force )
{
	// console.debug ( "SHOW: module: %s - id_obj: %s", module, id_obj );

	var items = media_manager.instances [ module + ":" + id_obj ];

	if ( ! items || ! items.length ) 
	{
		$( "mm-object", "" );
		$( "mm-panel", "" );
		return;
	}

	var mi = items [ pos ];
	var div;
	var lb_created = liwe.lightbox.created ();

	if ( ! width ) width = 800;

	if ( ! lb_created || force )
	{
		liwe.lightbox.events [ 'click' ] = function () { liwe.lightbox.close (); };

		if ( ! lb_created ) 
		{
			div = liwe.lightbox.create ( "mm-show-div", width, 700 );
			div.innerHTML = '<div id="mm-container" align="center"><div id="mm-tbar"><div id="mm-tbar-close" onclick="liwe.lightbox.close()"></div></div><div id="mm-object"></div><div id="mm-panel" class="panel"></div></div>';
		}

		$( "mm-panel", media_manager._render_icons ( items, "icon", MediaManagerItem.templates [ 'start-view' ], 8 ) );

		if ( ! lb_created ) liwe.lightbox.show ();
	}


	$( "mm-object", mi.toString () );
};

media_manager._render_icons = function ( items, mode, template, items_per_row )
{
	var t, l = items.length;
	var res = new String.buffer ();
	var mi, dct;
	var count = 0;

	res.add ( '<table border="0" class="media_manager_icons">' );
	
	for ( t = 0; t < l; t ++ )
	{
		if ( ! count ) res.add ( "<tr>" );
		count ++;

		mi = items [ t ];
		dct = { "id_obj" : mi.data [ 'id_obj' ], "module" : mi.data [ 'module' ], _pos: t, _img: mi.preview ( mode ) };

		res.add ( '<td>' );
		res.add ( String.formatDict ( template, dct ) );
		res.add ( '</td>' );

		if ( count == items_per_row ) 
		{
			res.add ( '</tr>' );
			count = 0;
		}
	}
	if ( count ) res.add ( '</td></tr>' );
	res.add ( '</table>' );

	return res.toString ();
};
