/**
 * @projectDescription
 * Класс для формирования медиа-плеера.
 *
 * @author A!ziz Zaynutdinoff (smile@design.ru)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 * @version 0.1
 * @requires SWFObject 2
 * @requires jQuery
 *
 * @example
 * <div class="audio" path="/f/1/mp3/song.mp3"></div>
 * <script>
 * var mp = new MediaPlayer(
 * 	"audio",
 * 	"/ticket/swf/player.swf"
 * 	{
 * 		skin: "/f/1/global/swf/default_skin.swf",
 * 		css: "/f/1/global/css/default_style.css",
 * 		width: "300",
 * 		height: "30"	
 * 	}
 * );
 * mp.init();
 * </script>
 */

/**
 * Класс для формирования медиа-плеера
 * @param {String} identifyClass	уникальный класс div-блока, содержимое которых будет меняться
 * @param {String} playerPath		путь к swf-файлу плеера
 * @param {Object} options			Настройки:
 * <ul>
 * 	<li><code>skin</code> - скин для плеера;
 * 	<li><code>css</code> - таблица стилей для расстановки элементов скина;
 * 	<li><code>width</code> - ширина плеера (по умолчанию 400px);
 * 	<li><code>height</code> - высота плеера (по умолчанию 30px);
 * 	<li><code>isAuto</code> - стартовать ли сразу после загрузки страницы (по умолчанию false);
 * 	<li><code>bgcolor</code> - цвет фона для плеера (по умолчанию #ffffff);
 * </ul>
 */

function MediaPlayer(identifyClass, playerPath, options) {
	/*
	 * уникальный класс div-блока, содержимое которых будет меняться
	 * @type {String}
	 */
	this.identifyClass = identifyClass;
	
	/**
	 * путь к swf-файлу плеера
	 * @type {String}
	 */
	this.playerPath = playerPath;
	
	/**
	 * Настройки
	 * @memberOf MediaPlayer
	 * @type {Object}
	 */
	this.options = {
		//скин по умолчанию
		skin: options && options.skin ? options.skin : undefined,
		
		//css-файл по умолчанию
		css: options && options.css ? options.css : undefined,
		
		//ширина плеера
		width: options && options.width ? options.width : '400',
		
		//высота плеера
		height: options && options.height ? options.height : '25',
		
		//auto-play
		isAuto: options && options.isAuto ? options.isAuto : false,
		
		//цвет фона для плеера
		bgcolor: options && options.bgcolor ? options.bgcolor : '#fff'
	};
}


MediaPlayer.prototype = {
	
	/**
	 * Производит инициализацию плеера.
	 * Метод проходит по всем div-блокам с заддным identifyClass
	 * и изменяет их содержимое при помощи внешней библиотеки SWFObject (версии 2)
	 * 
	 * @return {MediaPlayer}
	 */
	init: function() {
		var me = this;
		/**
		 * при помощи jQuery находим все div-блоки с заданным классом
		 * и изменяем содержимое библиотекой jQuery, которая прописывает
		 * swf-файл, переданный в качестве параметра playerPath в конструкторе,
		 * подставляя необходимые параметры для плеера.
		 */
		$("div." + this.identifyClass).each(function () {
				var path = $(this).attr("path");
				
				//если указаны кастомные данные о скине или таблице стилей для скина —
				//используем их.
				var customSkin = $(this).attr("skin") ? $(this).attr("skin") : me.options.skin;
				var customCSS = $(this).attr("css") ? $(this).attr("css") : me.options.css;
				//генерируем уникальный ID для плеера
				var nameID = path.split("/").join("_") + new Date().getTime().toString();
				$(this).replaceWith("<div id='" + nameID + "' class='" + me.identifyClass + "'>" + nameID + "</div>");
				//меняем html-код
				swfobject.embedSWF(me.playerPath, nameID, me.options.width, me.options.height, '9.0.0', '', {
					'audio': path,
					'css': customCSS,
					'skin': customSkin,
					'isAuto': me.options.isAuto
				}, {allowScriptAccess: 'always', bgcolor: me.options.bgcolor});
		});
		
		return this;
	},
	
	/**
	 * Возвращает информацию об объекте MediaPlayer
	 * @return {String}		информация об объекте MediaPlayer (класс div-блока, путь к swf-файлу плеера)
	 */
	toString: function() {
		return "ru.actionsmile.media::MediaPlayer version 0.1 [identifyClass: " + this.identifyClass + ", playerPath: " + this.playerPath + "].\nCopyright © Art.Lebedev Studio, 2008";
	}
}