var video_popup_callback;

/*
 video_popup_functions.phase = $.extend(video_popup_functions.phase, {"func_id": function(){ ... }});
 in the function, the video dialog will be $(this), so it can trigger other events. The current phases are:
 dialog_beforeclose: right before a dialog closes (still opens),
 dialog_close: after a dialog is closed (the dialog object won't exist here),
 dialog_open: after a dialog is opened
 example: video_popup_functions.dialog_beforeclose = $.extend(video_popup_functions.dialog_beforeclose, {"func": function(){console.log($(this));}});
*/
var video_popup_functions = {};

$(document).ready(function()
{
	video_popup_callback = function()
	{
		video_dialog.dialog("close");
		swfobject.removeSWF("video_popup_player");
		
		if (video_dialog)
		{
			video_dialog
				.dialog("destroy")
				.remove();
		}
		
		video_dialog = false;
	}
	
	var current_video = false;
	var show_timer = false;
	var video_player_url = "/js/flash/videoplayer.swf";
	var video_dialog = false;
	var flashvars = {
		callback: "video_popup_callback",
		closeCallback: "video_popup_callback"
	};
	var params = {
		bgcolor:"#242424",
		allowScriptAccess: "always",
		wmode: "opaque"
	};
	var attributes = {
		id: "video_popup_player"
	};
	var onSWFReady = function()
	{			
		$("#video_popup_player").hide();
	}
	var video_popup_api = {
		PlaybackFailed: function(videoURL){},
		PlaybackFailed: function(videoURL){},
		PlaybackStart: function(videoURL){},
		PlaybackComplete: function(videoURL)
		{
			video_dialog.dialog("close");
		},
		Close: function(videoURL)
		{
			video_dialog.dialog("close");
		},
		Play: function(url, moreinfo, ageLimit)
		{
			document.getElementById('video_popup_player').playFlashVideo(url, moreinfo, ageLimit);
		},
		Stop: function()
		{
			document.getElementById('video_popup_player').stopFlashVideo();
		},
		Pause: function()
		{
			document.getElementById('video_popup_player').pauseFlashVideo();
		},
		Resume: function() {
			document.getElementById('video_popup_player').resumeFlashVideo();
		}
	};
	
	$(".video_popup").live("click", function()
	{
		var video = $(this).attr("file");
		var dimensions = $(this).attr("dimensions");
		var height = 360;
		var width = 640;
		
		if (video == null)
		{
			return;
		}
		if (dimensions != null)
		{
			var dimension_args = dimensions.split(",");
			width = parseInt(dimension_args[0]);
			height = dimension_args.length > 1 ? parseInt(dimension_args[1]) : width;
		}
		
		if (!video_dialog)
		{
			video_dialog = $("<div id='video_popup'><div id='video_popup_container'></div></div>")
				.prependTo("body")
				.dialog({
					autoOpen: false,
					closeOnEscape: true,
					modal: true,
					draggable: false,
					dialogClass: "video_popup_dialog_container",
					beforeclose: function()
					{
						_video_dialog_invoke("dialog_beforeclose");
						
						video_popup_api.Stop();
						swfobject.removeSWF("video_popup_player");
						video_dialog
							.dialog("destroy")
							.remove();
						video_dialog = false;
					},
					close: function()
					{
						_video_dialog_invoke("dialog_close");
					},
					open: function()
					{
						_video_dialog_invoke("dialog_open");
					}
				});
		}
		
		swfobject.embedSWF(
			video_player_url,
			"video_popup_container",
			String(width),
			String(height),
			"8",
			"media/swf/expressInstall.swf",
			flashvars,
			params,
			attributes,
			onSWFReady
		);
		video_dialog
			.dialog("option", "width", parseInt(width))
			.dialog("option", "height", parseInt(height))
			.dialog("open");
		
		current_video = video;
		$("#video_popup_player").show();
		show_timer = setInterval(play_video, 10);
	});
	
	function _video_dialog_invoke(phase)
	{
		if (typeof video_popup_functions[phase] == "undefined" || video_popup_functions[phase].length == 0)
		{
			return;
		}
		
		$.each(video_popup_functions[phase], function(i, func)
		{
			func.call(video_dialog);
		});
	}
	
	function play_video()
	{
		try
		{
			video_popup_api.Play(current_video);
			clearInterval(show_timer);
		}
		catch(e){}
	}
});
