/*
 * flowplayer.playlist 3.0.8. Flowplayer JavaScript plugin.
 * 
 * This file is part of Flowplayer, http://flowplayer.org
 *
 * Author: Tero Piirainen, <info@flowplayer.org>
 * Copyright (c) 2008-2010 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: 2392 
 */
(function(a){
	$f.addPlugin("playlist", function(d, p){
		var n = this;
		var b = {
			playingClass: "playing",
			pausedClass: "paused",
			progressClass: "progress",
			template: '<a href="${url}">${title}</a>',
			loop: false,
			playOnClick: true,
			manual: false
		};
		a.extend(b, p);
		d = a(d);
		var j = n.getPlaylist().length <= 1 || b.manual;
		var k = null;
		function e(r){
			var q = m;
			a.each(r, function(s, t){
				if (!a.isFunction(t)) {
					q = q.replace("${" + s + "}", t).replace("$%7B" + s + "%7D", t)
				}
			});
			return q
		}
		function i(){
			k = o().unbind("click.playlist").bind("click.playlist", function(){
				return h(a(this), k.index(this))
			})
		}
		function c(){
			d.empty();
			a.each(n.getPlaylist(), function(){
				d.append(e(this))
			});
			i()
		}
		function h(q, r){
			if (q.hasClass(b.playingClass) || q.hasClass(b.pausedClass)) {
				n.toggle()
			} else {
				q.addClass(b.progressClass);
				n.play(r)
			}
			return false
		}
		function l(){
			if (j) {
				k = o()
			}
			k.removeClass(b.playingClass);
			k.removeClass(b.pausedClass);
			k.removeClass(b.progressClass)
		}
		function f(q){
			//JvT updated this for Robinauld playlist 100517
			//return (j) ? k.filter("[href=" + q.originalUrl + "]") : k.eq(q.index)
			return (j) ? k.filter("[href=" + q.originalUrl + "]") : k.eq(q.index-1)
		}
		function o(){
			var q = d.find("a");
			return q.length ? q : d.children()
		}
		if (!j) {
			var m = d.is(":empty") ? b.template : d.html();
			c()
		} else {
			k = o();
			if (a.isFunction(k.live)) {
				a(d.selector + "> *").live("click", function(){
					var q = a(this);
					return h(q, q.attr("href"))
				})
			} else {
				k.click(function(){
					var q = a(this);
					return h(q, q.attr("href"))
				})
			}
			var g = n.getClip(0);
			if (!g.url && b.playOnClick) {
				g.update({
					url: k.eq(0).attr("href")
				})
			}
		}
		n.onBegin(function(q){
			l();
			f(q).addClass(b.playingClass)
		});
		n.onPause(function(q){
			f(q).removeClass(b.playingClass).addClass(b.pausedClass)
		});
		n.onResume(function(q){
			f(q).removeClass(b.pausedClass).addClass(b.playingClass)
		});
		if (!b.loop && !j) {
			n.onBeforeFinish(function(q){
				if (!q.isInStream && q.index < k.length - 1) {
					return false
				}
			})
		}
		if (j && b.loop) {
			n.onBeforeFinish(function(r){
				var q = f(r);
				if (q.next().length) {
					q.next().click()
				} else {
					k.eq(0).click()
				}
				return false
			})
		}
		n.onUnload(function(){
			l()
		});
		if (!j) {
			n.onPlaylistReplace(function(){
				c()
			})
		}
		n.onClipAdd(function(r, q){
			k.eq(q).before(e(r));
			i()
		});
		return n
	})
})(jQuery);
