(function($) { 

	/* Public API (Template Method) */
	$.media = { 
	
		init : function () { 
	
			/* Prep Play IDs */
			$.media.dataset.prepareDatabaseIDs();
			
			$.media.construct();
			$.media.interaction.bind();
		
			/* 2nd Subclass */
			$.media.navigation.construct();

			/* Finally Method */
			$.media.finale();
			
		},
		interaction : function () { },
		action : function () { },
		list : function () { },
		dataset : function () { /* Template Method */ },
		/* Final Method Implemented (Root Class) */
		finale : function () { 

			/* Finally Cycle Through */		
			function finalAction() {
				if($.media.isDBReady==true) {
					$("#external_media").css("display","block");
					clearFinalAction();
					}
				} // Final Action
			
			function clearFinalAction() { clearInterval($.media.isReadyInterval); }
				
			$.media.isReadyInterval = setInterval(finalAction,1000);
			setTimeout(clearFinalAction,30000);
		}
	
	/* End Public API */
	};


	/******* Plugin *******/
	$.fn.ExternalMedia = function (options) {

	/* Classes Available for Extension at Instantiation */
	var SubclassedImpl = {
		playIDs : [],
		playID : null,
		playTITLEs : [],
		playTITLE : null,
		playLIB : [],
		isREVERSED : false, /* State Properties */
		isDBReady : false,
		isReadyInterval : null,

		construct : function () { },
		interaction : {
			bind : function () {
				$(".titleline").click(function(){ $.media.action.interactive(); return false;});
				$(".prevBtn").click(function(){ $.media.interaction.prev(); return false;});
				$(".nextBtn").click(function(){ $.media.interaction.next(); return false; });
			},
			prev : function () { 
				if($.media.isREVERSED==false) { 
					$.media.playIDs.reverse(); 
					$.media.isREVERSED = true; 
					$.media.list.unidirectionalNextItem();
					} 
				$.media.list.setCurrentTitle($.media.list.unidirectionalNextItem());
			},
			next : function () {
				if($.media.isREVERSED==true) { 
					$.media.playIDs.reverse(); 
					$.media.isREVERSED = false;
					$.media.list.unidirectionalNextItem();
					} 
				$.media.list.setCurrentTitle($.media.list.unidirectionalNextItem());
			}
		},
		/* Action Set */
		action: {
			/* Post DB */
			initialize : function () {
			
				var ID = $.media.playIDs[ 0 ];
				var URL = new String('/COM/tlavideo/vod/ExternalMedia.cfc?method=getExternalMediaObjectEmbed&ID='+ID);
				
				$.media.list.setInitialTitle();
				$("#screen","#external_media").html($.media.display.wait());
				$("#screen","#external_media").load(URL.toString());
				
			},
			/* Title Link */
			interactive : function () {
				var ID = $.media.list.getCurrentID();
				var URL = new String('/COM/tlavideo/vod/ExternalMedia.cfc?method=getExternalMediaObjectEmbed&ID='+ID);
				$("#screen","#external_media").html($.media.display.wait());
				$("#screen","#external_media").load(URL.toString());
			}
		},	
		list : {
			/* Interactive : Title Link */
			getCurrentID : function () {
				return ($.media.playID);
			},
			/* Interactive : Prev, Next */
			setCurrentTitle : function (ID) {
				$(".screentitle").html($.media.playLIB[ID]);
			},
			unidirectionalNextItem : function () {
				$.media.playID = $.media.playIDs.shift();
				//alert($.media.playID);
				$.media.playIDs.push($.media.playID);
				return ($.media.playID);
			},
			/* Post DB - Initialization */			
			setInitialTitle : function () {
				var KEY = $.media.playIDs[0];
				$(".screentitle").html($.media.playLIB[ KEY ]);

				/*** Prep for Prev/Next ***/
				$.media.playID = $.media.playIDs.shift();
				$.media.playIDs.push($.media.playID);
				}
		},
		dataset : {
			// Begin Inner
			prepareDatabaseIDs : function () { 
				$.get("/COM/tlavideo/vod/ExternalMedia.cfc?method=getExternalMediaList",
					{ },
					function(returned_data) {  
						/* Json Return Handling */
						var jsonT = eval( returned_data ); 
						var json = eval( '(' + jsonT + ')'); 
						/* 2 Arrays */						
						var list = new String(json.LIST);
						var titles = new String(json.TITLES);
						$.media.playIDs = list.split(",");
						$.media.playTITLEs = titles.split(",");

					/* Use to Debug DB Interaction (success) *
					$.media.playIDs = '';
					$.media.playTITLEs = '';
					*/
					
					/******* Setup Play Library Assoc-Array *******/
					for(var i = 0; i < $.media.playIDs.length; i++) {
						var id = $.media.playIDs[i];
						$.media.playLIB[ id ] = $.media.playTITLEs[i];
					} // For-Loop

					/* Set Signal for Client */
					if( ($.media.playIDs.length>0) 
					&& ($.media.playTITLEs.length>0) 
					&& ($.media.playLIB.length>0) ) 
						{ 
						$.media.dataset.setDatasetState(true); 
						
						/*** Initialize Once DB Interaction Complete ***/
						$.media.action.initialize();
						
						/* Points to Next Subclass */
						$.media.dataform.initialize();
						}
					
					});
			},
			// End Inner
			setDatasetState : function (booleanValue) {
				$.media.isDBReady = booleanValue;
			}
		}
	}

	var SubclassedImpl2 = {
	
		navigation : {
		
			construct : function () {
	
				$.media.navigation.binders();
				$.media.dataform.initialize();			

			},
			binders : function () {
				document.movieControls.playMovie.onclick = function () { 
					$.media.navigation.linker();
				} // Button Action
			},
			linker : function () {

				var _form = document.movieControls;
				var _index = document.movieControls.chosenMovie.selectedIndex;
				var ID = _form.chosenMovie.options[_index].value;
				var URL = new String('/COM/tlavideo/vod/ExternalMedia.cfc?method=getExternalMediaObjectEmbed&ID='+ID);
				$("#screen","#external_media").html($.media.display.wait());
				$("#screen","#external_media").load(URL.toString());
							
			}
		
		},
		dataform : {
		
			initialize : function () {

				$.media.dataform.createOptionSet();

			},
			createOptionSet : function () {

				var _list = new String();
				var _new_arr = $.media.playIDs.slice();
				_new_arr.reverse();
				
				/******* Construct Option Set *******/
				for(var i = 0; i < $.media.playIDs.length; i++) {

					var id = _new_arr[i];
					_list += '<option value="'+id+'">'+$.media.playLIB[id]+'</option>';

				} // For-Loop
				
				$("select.movieSelection").html(_list);
				
			}
		
		},
		display : {
			wait : function () {
					return "<div><img src='/skins/graphics/loader_lg.gif'></div>";
			}
		}
	
	}



	/* Private Functions (currently unused) */
	function __detectMedia() { return prompt("<Press Enter>"); }

	/* Return */
	return this.each( function () {  
	
		$.extend( $.media, SubclassedImpl );
		$.extend( $.media, SubclassedImpl2 );
		
		/* Assign Finalized Player Implementation */
		$.media.init();
	
	/* End Each */			
	});

	} // End
})(jQuery);

$(document).ready( function () {

	$("#external_media").ExternalMedia();
	
});
