
$f.addPlugin("playlist", function(wrap, options) {
	var self = this;	
	
	var opts = {
		playingClass: 'playing',
		pausedClass: 'paused',
		progressClass:'progress',
		loop: true,
		playOnClick: false,
		function_callback : null,
		selector_playlist_elements : 'a',
		element_attribute_url : 'href'
	};
	
	$extend(opts, options);
	
	wrap = $(wrap);
	var manual = true;//var manual = self.getPlaylist().length <= 1 || opts.manual;
	var els = null;
	
	els = wrap.getElements(opts.selector_playlist_elements);
	$each(els, function(item, index) {
		item.addEvent('click', function() {
			try {
				if(opts.function_callback) {
					func = opts.function_callback;
					func(item, index);
				}
			} catch (e) {  }
			return play(item, item.getProperty(opts.element_attribute_url));
		});
		
	});
	
	var clip = self.getClip(0);
	
	
	if (manual && opts.loop) {
		
		self.onBeforeFinish(function(clip) {
			if (clip.isInStream) {
				return;
			}
			
			var el = getEl(clip);
			if (el.next().length) {
				el.next().click();	 		
			} else {
				els.eq(0).click();
			} 
			return false;				
		}); 
	}
	
	var semaforo = false;
	
	function play(el, clip)  {
		if (el.hasClass(opts.playingClass) || el.hasClass(opts.pausedClass)) {
			self.toggle();
		} else {
			el.addClass(opts.progressClass);
			semaforo = true;
			self.play(clip);
		}
		return false;
	}	
	
	
	function clearCSS() {
		if (manual) { 
			els = wrap.getElements(opts.selector_playlist_elements);
		}
		els.removeClass(opts.playingClass);
		els.removeClass(opts.pausedClass);
		els.removeClass(opts.progressClass);			
	}
	
	function getEl(clip) {
		var url = clip.isInStream ? clip.parentUrl : clip.originalUrl;
		if(manual) {
			return els.filter("["+opts.element_attribute_url+"="+url+"]");
		}
	}
	
	if(!opts.playOnClick) {
		self.getCommonClip().onStart(function() {
			if(semaforo) {
			    self.stop();
			    self.pause();
			    semaforo = false;
			}
		}); 
	}
	
	/* cambio css sugli eventi del clip corrente */
	self.onBegin(function(clip) { clearCSS(); getEl(clip).addClass(opts.playingClass); });	
	self.onPause(function(clip) { getEl(clip).removeClass(opts.playingClass).addClass(opts.pausedClass); });	
	self.onResume(function(clip) { getEl(clip).removeClass(opts.pausedClass).addClass(opts.playingClass); });		
	self.onUnload(function() { clearCSS(); });

	return self;
	
});


