/**
 * Based on flowplayer.playlist 3.0.7. Flowplayer JavaScript plugin.
 * 
 * Author: Tero Piirainen, <info@flowplayer.org>
 * Copyright (c) 2008 Flowplayer Ltd
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * SEE: http://www.opensource.org/licenses
 * 
 * Date: 2009-09-03 09:44:40 +0000 (Thu, 03 Sep 2009)
 * Revision: 2090 
 *
 * Modified by: Herick Moniz
 * Date: 2009-10-16
 *
 */ 
(function($) {
	$f.addPlugin("playlist", function(wrap, options) {
		// self points to current Player instance
		var self = this;	
		
		var opts = {
			playingClass: 'pause',
			pausedClass: '',
			progressClass:'progress',
			loop: false,
			playOnClick: true
		};		
		
		$.extend(opts, options);
		wrap = $(wrap);
		var els = null;
		var playlist = Array();
		
//{{{ "private" functions
		// assign onClick event for each clip
		function bindClicks() {			
			els = wrap.unbind("click.playlist").bind("click.playlist", function() {
				return play($(this), els.index(this));						
			});		
		}
				
		function buildPlaylist() {
			els.each(function() {
				playlist.push($(this).attr("href"));
			});
			self.play(playlist);
		}
		
		function play(el, clip)  {
			if (el.hasClass(opts.playingClass) || el.hasClass(opts.pausedClass)) {
				self.toggle();
			} else {
				el.addClass(opts.progressClass);
				self.play(playlist.indexOf(clip)); 							
			}			
			return false;
		}
		
		function clearCSS() {
			els = wrap;
			els.removeClass(opts.playingClass);
			els.removeClass(opts.pausedClass);
			els.removeClass(opts.progressClass);			
		}
		
		function getEl(clip) {
			return els.filter("[href=" + clip.originalUrl + "]");	
		}
//}}}  
		 
		/* setup playlists with onClick handlers */ 
		els = wrap;
		buildPlaylist();
		
		els.click(function() {
			var el = $(this);
			return play(el, el.attr("href"));
		});					
						 		
		// setup player to play first clip
		var clip = self.getClip(0);
		if (!clip.url && opts.playOnClick) {
			clip.update({url: els.eq(0).attr("href")});		
		}   
			
		// onBegin
		self.onBegin(function(clip) {
			clearCSS();		
			getEl(clip).addClass(opts.playingClass);
		});	
		
		// onPause	
		self.onPause(function(clip) {
			getEl(clip).removeClass(opts.playingClass).addClass(opts.pausedClass);		
		});	
		
		// onResume
		self.onResume(function(clip) {
			getEl(clip).removeClass(opts.pausedClass).addClass(opts.playingClass);		
		});		
				
		// onUnload
		self.onUnload(function() {
			clearCSS();		
		});
		
		// onFinish
		self.onFinish(function() {
			clearCSS();
		});
		return self;
		
	});
		
})(jQuery);

