/*
 * jQuery Flow Playlist Script v1.0
 * http://www.emarketed.com/
 *
 * Copyright (c) 2010 emarketed.
 *
 * PARAMETERS:
 *
 * USAGE/EXAMPLE:
 *
 */
 
(function($) {

	$.fn.flowPlaylist = function(options) {

		//DEFAULT SETTINGS
		var settings = $.extend({
			playlist : '', //the playlist item selector (eg: a.playlist)
			flowplayer : '', //the location of the flowplayer swf file
			commercial : '', //the commercial video src to be played in-between playlist videos
			autoPlay : false, //set to autoplay or not
			autoBuffering : true, //set to auto buffer or not
			mediaTracker : false //false to disable the media tracker
		},options); //END var settings

		//PRIVATE PROPERTIES
		var properties = {
			flowplayer : null,
			currentClip : 0,
			commercialPlayed : false,
			marker : null,
			markerStatus : 0 // 0 = process complete/available, 1 = created, waiting for processing
		};

		//PRIVATE METHODS
		function markCount() {
			properties.marker.stopCount();
			properties.marker.processMarker();
			properties.markerStatus = 0;
		}
		
		function initFlowPlayer(videoDiv) {
			video = videoDiv;
			if(settings.mediaTracker) {
				if(!properties.markerStatus) {
					properties.marker = new videoMarker(video.attr('rel'));
					properties.markerStatus = 1;
				}
			}
			properties.flowplayer = $(videoDiv).flowplayer(
				settings.flowplayer,
				{
					clip : {
						url : video.attr('href'),
						autoPlay : settings.autoPlay,
						autoBuffering : settings.autoBuffering,
						onStart : function() {
							if(settings.mediaTracker) {
								properties.marker.startCount();
							}
						},
						onPause : function() {
							if(settings.mediaTracker) {
								properties.marker.stopCount();
							}
						},
						onResume : function() {
							if(settings.mediaTracker) {
								properties.marker.startCount();
							}
						},
						onStop : function() {
							if(settings.mediaTracker) {
								properties.marker.stopCount();
							}
						},
						onFinish : function() {
							if(settings.mediaTracker) { markCount(); }
						}
					}
				}
			); //end $(videoDiv).flowplayer();
		}
		
		function playVideo(videoDiv,videoNumber) {
			if(settings.mediaTracker) {
				if(properties.markerStatus) { markCount(); }
			}
			$(settings.playlist).each(function(i,el) {
				var video = $(el);
				if(i==videoNumber) {
					if(settings.mediaTracker) {
						if(!properties.markerStatus) {
							properties.marker = new videoMarker(video.attr('rel'));
							properties.markerStatus = 1;
						}
					}
					properties.flowplayer = $(videoDiv).flowplayer(
						settings.flowplayer,
						{
							clip : {
								url : video.attr('href'),
								autoPlay : settings.autoPlay,
								autoBuffering : settings.autoBuffering,
								onStart : function() {
									if(settings.mediaTracker) {
										properties.marker.startCount();
									}
								},
								onPause : function() {
									if(settings.mediaTracker) {
										properties.marker.stopCount();
									}
								},
								onResume : function() {
									if(settings.mediaTracker) {
										properties.marker.startCount();
									}
								},
								onStop : function() {
									if(settings.mediaTracker) {
										properties.marker.stopCount();
									}
								},
								onBeforeBegin : function() {
									if(!properties.commercialPlayed && settings.commercial.length) { playCommercial(videoDiv); }
									setPlaying(videoNumber);
								},
								onFinish : function() {
									if(settings.mediaTracker) {
										properties.marker.stopCount();
										properties.marker.processMarker();
										properties.markerStatus = 0;
									}
									nextVideo(videoDiv);
								}
							}
						}
					); //end $(videoDiv).flowplayer();
					setCurrentClip(videoNumber);
					return properties.flowplayer;
				} //END if(i==videoNumber)
			}); //END $(settings.playlist).each()
		} //END playVideo()
		
		function setPlaying(videoNumber) {
			$(settings.playlist).each(function(i,el) {
				var video = $(el);
				if(i==videoNumber) { video.addClass('flowPlaying'); }
				else {
					if(video.hasClass('flowPlaying')) { video.removeClass('flowPlaying'); }
				}
			}); //END $(settings.playlist).each()
		} //END setPlaying()

		function nextVideo(videoDiv) {
			nextClip = getCurrentClip() + 1;
			properties.commercialPlayed = false;
			playVideo(videoDiv,nextClip);
		} //END nextVideo()

		function setCurrentClip(i) {
			properties.currentClip = i;
		} //END setCurrentClip()

		function getCurrentClip() {
			return properties.currentClip;
		} //END getCurrentClip()

		function playCommercial(videoDiv) {
			properties.flowplayer = $(videoDiv).flowplayer(
				settings.flowplayer,
				{
					clip : {
						url : settings.commercial,
						autoPlay : settings.autoPlay,
						autoBuffering : settings.autoBuffering,
						onFinish : function() {
							properties.commercialPlayed = true;
							playVideo(videoDiv,getCurrentClip());
						}
					}
				}
			); //end $(videoDiv).flowplayer();
			return properties.flowplayer;
		} //END playCommercial

		return this.each(function() {
			obj = $(this);
			if(obj.attr('href')) {
				initFlowPlayer(obj);
			}
			else {
				$(settings.playlist).each(function(i,el) {
					var video = $(el);
					if(i==0) { //BEGIN load first video
						player = playVideo(obj,i);
					} //END load first video
					video.click(function() {
						properties.commercialPlayed = true;
						properties.flowplayer = playVideo(obj,i);
						return false;
					});
				});
			}
			return properties.flowplayer;
		}); //END return this.each()
	}; // END $.fn.flowPlaylist

}) (jQuery);