var plugin;
var mouseDownPosition = 0;
var mouseDownValue = -1;
var stage_width;
var scrollerConstraints;
var current_active_video_mediaelement;
var max_volume = 10;
var main;

function glow_bar(sender,args)
{
    var element_to_glow = sender.findName('glow_media' + sender.name);
    if (element_to_glow != null)
    {
    element_to_glow.Begin();
    }
    else
    {

    }
}

function unglow_bar(sender,args)
{
    var element_to_glow = sender.findName('unglow_media' + sender.name);
    if (element_to_glow != null)
    {
    element_to_glow.Begin();
    }
    else
    {

    }
}

/* Install and createsilverlight */

function media_BufferingProgressChanged(sender,args)
{
    if (current_active_video_mediaelement != null)
    {
        if (sender.name == current_active_video_mediaelement)
        {
            if(sender.bufferingProgress >= 0 && sender.bufferingProgress < 1)
            {
                var percentage = Math.floor(sender.bufferingProgress  * 100);
                var TimePosition = sender.findName("TimePosition");
                if (TimePosition != null)
                {
                TimePosition.text = percentage + "%";
                sender.findName("time_line_pos").width = (percentage * (sender.findName("time_line").width / 100));
                }
            }
        }
    }
}

function media_DownloadProgressChanged(sender,args)
{

}

function MediaEnded(sender,args)
{
    sender.Stop();
}

function MediaFailedMainScreen(sender,args)
{
	//alert('Error downloading media...');
	//alert(sender.Name)
	var textblock = sender.findName('meta_data_' + sender.Name);
	textblock.FontSize = 10; 
	textblock.Foreground ="Red";
	textblock.Text = "Sorry error loading video";
}

function MediaFailed(sender,args)
{
	//alert('Error downloading media...');
}
function mainCanvasMouseLeave(s)
{
	this.mouse_down=0;
	clearInterval(mouseCheckInt);
	s.releaseMouseCapture();
}

function show_media(sender,args)
{
	sender.findName('show_' + sender.name).Begin();
}

function start_video(sender,args)
{
	if (current_active_video_mediaelement != null)
	{
		if (current_active_video_mediaelement != sender.Tag)
		{
			sender.findName("video_screen_source").SourceName = "";
			sender.findName(current_active_video_mediaelement).autoPlay = false;
			sender.findName(current_active_video_mediaelement).Stop();
			sender.findName(current_active_video_mediaelement).source = '';
			sender.findName(current_active_video_mediaelement).visibility = 'Collapsed';
			sender.findName(current_active_video_mediaelement + '_screenimage').visibility = 'Visible';
			sender.findName(current_active_video_mediaelement).Volume = 0.5;
			var audio_signal = sender.findName('audio_signal');
			audio_signal.Opacity = 1;
			sender.findName(sender.Tag).IsMuted = true;
			sender.findName("canvas_textblock_text").text = "";
			sender.findName("canvas_textblock_title").text = "";
		}
	}
    
	current_active_video_mediaelement = sender.Tag;
	var screen_image = sender.findName(current_active_video_mediaelement + '_screenimage');
	var video_source = screen_image.Tag;
	var mediaelement = sender.findName(current_active_video_mediaelement);
	mediaelement.autoPlay = true;        
	mediaelement.Source = video_source;
	mediaelement.visibility = 'Visible';
	screen_image.visibility = 'Collapsed';
	
	//mediaelement.Play(); 
	mediaelement.IsMuted = false;
	mediaelement.Volume = 0.5;
	do_volume_visual(mediaelement,sender);
	var audio_signal = sender.findName('audio_signal');
	audio_signal.Opacity = 1;
	sender.findName("video_screen_source").SourceName = sender.findName(sender.Tag).name;
	sender.findName("canvas_textblock_text").text = sender.findName('meta_data_text_' + sender.Tag).text;
	sender.findName("canvas_textblock_title").text = sender.findName('meta_data_title_' + sender.Tag).text;
}

function ListCanvasLoaded(sender)
{
	main = sender.findName("root_canvas");
	var list_height = sender.findName("control_list_height");
	var world_offset = sender.findName("control_world_offset");
	var track_length = sender.findName("control_track_length");
	var mask_length = sender.findName("control_mask_length");

	if (list_height != null)
	{
		list_height = sender.findName("control_list_height").text * 1;
		world_offset = sender.findName("control_world_offset").text * 1;
		track_length = sender.findName("control_track_length").text * 1;
		mask_length = sender.findName("control_mask_length").text * 1;
	
		/* alert('list_height:' + list_height +
		'world_offset:' + world_offset +
		'track_length:' + track_length + 
		'mask_length:' + mask_length);
		*/

		scrollerConstraints = new Array();
		scrollerConstraints["myScroller1"]=new Object();
		scrollerConstraints["myScroller1"].container = "contentContainer";
		scrollerConstraints["myScroller1"].direction = "V";
		scrollerConstraints["myScroller1"].world_offset = world_offset; /* scrubber distance from main top edge 50+12 (50 from main canvas, 12 from parent canvas) - you can figure this out by script if you'd like */
		scrollerConstraints["myScroller1"].local_offset = 12;  /* scrubber distance from parent top */
		scrollerConstraints["myScroller1"].track_length = track_length;   /* 2 less than visual track BG, 2 because trackbar is 2 px longer than scrubbing area (just for aesthetics) */
		scrollerConstraints["myScroller1"].start_scroll = scrollerConstraints["myScroller1"].local_offset;
		scrollerConstraints["myScroller1"].mask_length = mask_length;  /* should be same value as contentHolderClip rect height property in xaml, cannot not get from script currently, aka Silverlight sucks (let me know if you know how). for a hack you can put the size in the name of the clip (ex: contentHolderClip_260) and read and parse that ;-) */
		scrollerConstraints["myScroller1"].content_length = list_height;
		scrollerConstraints["myScroller1"].scroll_amount = 6;  /* ex: 1-20 */
                
		if(scrollerConstraints["myScroller1"].content_length <= scrollerConstraints["myScroller1"].mask_length)
		{
			/* alert(scrollerConstraints["myScroller1"].content_length + ' kleiner' + scrollerConstraints["myScroller1"].mask_length ) */
			/* hide scroll bar if content isnt big enough to scroll */
			main.findName("myScroller1_Container").visibility = "Collapsed";
		}
		else    
		{
			main.findName("myScroller1_Container").visibility = "Visible";
		}
		scrubberRef=main.findName("myScroller1_Scrubber")
		scrubberRef.height= (scrollerConstraints["myScroller1"].mask_length/scrollerConstraints["myScroller1"].content_length) * scrollerConstraints["myScroller1"].track_length
	}
}

function loadcanvas(sender,args)
{
	plugin = sender.getHost();
	plugin.content.onfullScreenChange = onFullScreenChanged;
	var slPlugin = sender.getHost();
	var downloader = slPlugin.createObject("downloader");
	downloader.addEventListener("downloadProgressChanged", onDownloadProgressChanged);
	downloader.addEventListener("DownloadFailed", onDownloadError);
	switch(sender.name)
	{
		case "menu_canvas_container":
		{
			downloader.addEventListener("completed", onCompleted_menu_canvas_container);  
			downloader.open("GET", sender.Tag);
			downloader.send();
		}
		break;
		default:
		{
			if (current_active_video_mediaelement != null)
			{
				var mediaelement = sender.findName(current_active_video_mediaelement);
				if (mediaelement != null)
				{
  				current_active_video_mediaelement = null;
  				mediaelement.Stop();
				}
			}
			var rootCanvas = sender.findName("content_canvas_container");
			rootCanvas.children.clear();
			downloader.addEventListener("completed", onCompleted_content_canvas_container); 
			downloader.open("GET", sender.Tag );
			/* DEBUG alert(sender.Tag); */
			downloader.send();
		}
		break;
	}
}

function onDownloadError(sender,args)
{
	var download_info =  sender.findName("error_info");
	download_info.visibility = "Visible";
	var progressText = sender.findName("errorText");
	progressText.text = "Download error: Please try again! Technical_Stuff: " + sender.StatusText + ' code:' + sender.Status + ' URL: ' + sender.uri;
}

function onDownloadProgressChanged(sender, eventArgs)
{
	var download_info =  sender.findName("download_info");
	download_info.visibility = "Visible"
	var percentage = Math.floor(sender.downloadProgress * 100);
	var progressText = sender.findName("progressText");
	progressText.text = percentage + "%";
	var progressRectangle = sender.findName("progressRectangle");
	progressRectangle.width = percentage * 2; 
}

function onCompleted_menu_canvas_container(sender, eventArgs)
{
	var xamlFragment = sender.ResponseText;
	var download_info =  sender.findName("download_info");
	download_info.visibility = "Collapsed"
	var plugin = sender.getHost();
	var button = plugin.content.createFromXaml(xamlFragment);
	var rootCanvas = sender.findName("menu_canvas_container");
	rootCanvas.children.add(button);
}

function onCompleted_content_canvas_container(sender, eventArgs)
{
	var xamlFragment = sender.ResponseText;
	var download_info =  sender.findName("download_info");
	download_info.visibility = "Collapsed"
	var plugin = sender.getHost();
	var button = plugin.content.createFromXaml(xamlFragment);
	var rootCanvas = sender.findName("content_canvas_container");
	rootCanvas.children.add(button);
}

/* standard rollon */
function rollon(sender,args)
{
	if (sender.Tag.length != 0)
	{
		sender.Fill = "black";
	}
}

function rolloff(sender,args)
{
	if (sender.Tag.length != 0)
	{
		sender.Fill = sender.Tag;
	}
}

/* MAIN VIDEOTIMER LOOP */ 

function init_videoplayer(sender,args)
{
	var timer = sender.findName("timerStoryboard");
	timer.begin();
}

function TimerFinished(sender,args)
{
	if (current_active_video_mediaelement != null)
	{
		var current_media = sender.findName(current_active_video_mediaelement);
		if (current_media != null)
		{
			var TimeLength = sender.findName("TimeLength");
			var TimePosition = sender.findName("TimePosition");
			if (current_media.Position.Seconds > 0 && current_media.CanPause)
			{
				var currentPosition = 0;
				var position = current_media.position;
				if (position != null)
				{
					currentPosition = position.seconds;
				}
				/* update timeposition */

				var timeString = "";
				timeString += Math.floor((currentPosition * 1000) / 60000);
				if (timeString.length == 1)
				{
					timeString = "0" + timeString;
				}
				timeString += ":";
				var seconds = Math.floor((currentPosition * 1000) / 1000.0) % 60;
				if (seconds < 10)
				{
					timeString += "0";
				}
				timeString += seconds;
				if (current_media.currentState == "Playing")
				{
					TimePosition.text = timeString;
				}

				/* update timelength */
				time_num = Math.ceil(current_media.naturalDuration.seconds);
				elapsedM = Math.floor(time_num/60);
				remaining = time_num-(elapsedM*60);
				elapsedS = Math.floor(remaining);
				remaining = time_num-(elapsedS);
				if (elapsedM < 10)
				{
					minutes = "0"+elapsedM.toString();
				}
				else
				{
					minutes = elapsedM.toString();
				}

				if(elapsedS < 10)
				{
					seconds = "0" + elapsedS.toString();
				}
				else
				{
					seconds = elapsedS.toString();
				}

				if (current_media.currentState == "Playing")
				{
					TimeLength.text =  minutes + ":" + seconds;
				}

				/* scrubber */
				var offset = 0;
				var naturalDuration = current_media.naturalDuration;
				if (naturalDuration != null)
				{
				}

				if (current_media.currentState == "Playing")
				{ 
					if (current_media.CanPause)
					{
						var mediaDuration = naturalDuration.seconds;
						var percent = current_media.position.seconds / mediaDuration;
						offset = Math.floor(percent * sender.findName("time_line").width);
						sender.findName("time_line_pos").width = offset;
						var time_button = sender.findName("time_button");
						time_button["Canvas.Left"] = offset;
					}
				}
			}
			else
			{
				/* no seek 
				TimePosition.text =  "";
				TimeLength.text =  "";   */         
			}
		}  
	}
	var timer =  sender.findName("timerStoryboard");
	timer.begin();
}

function do_volume_button(sender,args)
{
	if (current_active_video_mediaelement != null)
	{
		var mediaelement = sender.findName(current_active_video_mediaelement);
		if (mediaelement != null)
		{
			mediaelement.Volume = sender.Tag;
			do_volume_visual(mediaelement,sender)
		}
	}
}

function do_volume_visual(current_media,sender)
{
	var current_volume = Math.round(current_media.Volume * 10);
	var volume_button_xname;
	for(i = 1; i <= max_volume; i++)
	{
		volume_button_xname = 'vol_' + i;
		if (i <= current_volume)
		{
	  	sender.findName(volume_button_xname).Opacity = 1;
		}
		else
		{
			sender.findName(volume_button_xname).Opacity = 0.5;
		}
	}
}


/* Seek and Volume sliders*/
/* VOLUME */
function slider_MouseLeftButtonDown(sender, args)
{
	var coordinate = args.getPosition(null).x - sender.Tag;
	slider_SetValue(sender, coordinate);
}

function slider_thumb_MouseLeftButtonDown(sender, args)
{
	switch (sender.name)
	{
		case "time_linemarker_thumb":
		{
			var slider = sender.findName("Canvas_TimeLine");
			break;
		}
	}
	sender.captureMouse();
	mouseDownValue = slider_GetValue(slider);
	mouseDownPosition = args.getPosition(null).x;
}

function slider_thumb_MouseLeftButtonUp(sender, args)
{
	sender.releaseMouseCapture();
	mouseDownValue = -1;
}

function slider_thumb_MouseMove(sender, args)
{
	switch (sender.name)
	{
		case "time_linemarker_thumb":
		{
			var slider = sender.findName("Canvas_TimeLine");
			break;
		}
	}
	if (mouseDownValue != -1)
	{
		var newValue = mouseDownValue + (args.getPosition(null).x - mouseDownPosition);
		slider_SetValue(slider, newValue);
	}
}

function slider_GetValue(sender)
{
	switch (sender.name)
	{
		case "Canvas_TimeLine":
		{
			var thumb = sender.findName("time_linemarker_thumb");
			break;
		}
	}
	return thumb["Canvas.Left"] + .5 * thumb.width;
}

function slider_SetValue(sender, newValue)
{
	/* DEBUG: alert(newValue + '=newvalue' + sender.width + '=sender.width'); */

	if (newValue > sender.width)
	{
		newValue = sender.width;
	}
	if (newValue < 0)
	{
		newValue = 0;
	}
	switch (sender.name)
	{
		case "time_line":
		{
			if (current_active_video_mediaelement != null)
			{
				var mediaelement = sender.findName(current_active_video_mediaelement);
				if (mediaelement != null)
				{
					if (mediaelement.CanSeek)
					{
						mediaelement.Pause();
						sender.findName("time_line_pos").width = newValue;
						
						var time_button = sender.findName("time_button");
						time_button["Canvas.Left"] = newValue;
						
						Pos = newValue / (sender.width / 100)
						Pos = (((Math.floor(Pos)) *  mediaelement.naturalDuration.seconds) / 100);
						var position = mediaelement.position;
						position.seconds = Pos;
						mediaelement.position = position;
						mediaelement.Play();
					}
				}
			}     
			break;
		}
		case "time_line_pos":
		{
			if (current_active_video_mediaelement != null)
			{
				var mediaelement = sender.findName(current_active_video_mediaelement);
				if (mediaelement != null)
				{
					if (mediaelement.CanSeek)
					{
						mediaelement.Pause();
						sender.findName("time_line_pos").width = newValue;
						Pos = newValue / (sender.findName("time_line").width / 100)
						Pos = (((Math.floor(Pos)) *  mediaelement.naturalDuration.seconds) / 100);
						var position = mediaelement.position;
						position.seconds = Pos;
						mediaelement.position = position;
						mediaelement.Play();
					}
				}
			}     
			break;
		}
	}
}

/* VIDEO  CONTROLLER */
function mute_audio(sender,args)
{
	if (current_active_video_mediaelement != null)
	{
		var mediaelement = sender.findName(current_active_video_mediaelement);
		if (mediaelement != null)
		{
			var audio_signal = sender.findName('audio_signal');
			if (mediaelement.IsMuted == true)
			{
				mediaelement.IsMuted = false;
				audio_signal.Opacity = 1;
			}
			else
			{
				mediaelement.IsMuted = true;
				audio_signal.Opacity = 0;
			} 
		}
	}
}

function do_media_action(sender,args)
{
	if (current_active_video_mediaelement != null)
	{
		var mediaelement = sender.findName(current_active_video_mediaelement);
		if (mediaelement.Source.length > 0)
		{
			if (mediaelement != null)
			{
				switch(sender.Tag)
				{
					case "Stop":
					{
						if (mediaelement.CanPause)
						{
							mediaelement.Stop();
							var position = mediaelement.position;
		  				position.seconds = 0;
		  				mediaelement.position = position;
						}
						else
						{
							mediaelement.Stop();
						}
					}
					break;
	
					case "Play":
					{
						mediaelement.Play();
					}
					break;
	
					case "Pause":
					{
						mediaelement.Pause();
					}
					break;
				}
			}
		}
	}
}

function do_43_video_size(sender,args)
{
	var video_screen = sender.findName("video_screen");
	video_screen.Width  = 384;
	video_screen.Height  = 288;
	var video_frame = sender.findName("video_frame");
	video_frame.Width = 401;
	video_frame.Height = 354;
	var media_controller = sender.findName("media_controller");
	media_controller["Canvas.Left"] = 9;
	media_controller["Canvas.Top"] = 312;
	var volume_slider = sender.findName("volume_slider");
	volume_slider["Canvas.Left"] = 310;
	var speaker_container = sender.findName("speaker_container");
	speaker_container["Canvas.Left"] = 285;
	var canvas_textblock = sender.findName("canvas_textblock");
	canvas_textblock["Canvas.Top"] = 384;
}

function do_169_video_size(sender,args)
{
	var video_screen = sender.findName("video_screen");
	video_screen.Width  = 426;
	video_screen.Height  = 240;
	var video_frame = sender.findName("video_frame");
	video_frame.Width = 443;
	video_frame.Height = 306;
	var media_controller = sender.findName("media_controller");
	media_controller["Canvas.Left"] = 9;
	media_controller["Canvas.Top"] = 263;
	var volume_slider = sender.findName("volume_slider");
	volume_slider["Canvas.Left"] = 350;
	var speaker_container = sender.findName("speaker_container");
	speaker_container["Canvas.Left"] = 325;
	var canvas_textblock = sender.findName("canvas_textblock");
	canvas_textblock["Canvas.Top"] = 340;
}

function main_screen_CurrentStateChanged(sender,args)
{
	var timelinecanvas = sender.findName("Canvas_TimeLine");
	if (timelinecanvas != null)
	{
		if (current_active_video_mediaelement != null)
		{
			var mediaelement = sender;
			if (mediaelement.Name == current_active_video_mediaelement)
			{
				if (mediaelement.Source.length > 0)
				{
					var button_pauze = sender.findName("button_pauze");   
					var button_play = sender.findName("button_play");
					var button_stop = sender.findName("button_stop");
					var video_beeld = sender.findName("video_beeld");
					var volume_slider = sender.findName("volume_slider");
					var speaker_container = sender.findName("speaker_container");
					var time_counter = sender.findName("time_counter");
					var TimeLength = sender.findName("TimeLength");
					TimeLength.Text = mediaelement.currentState;

					switch(mediaelement.currentState)
					{
						case "Playing":
						{
							if (Math.round(mediaelement.NaturalVideoWidth / mediaelement.NaturalVideoHeight) == 1)
							{
								/* 4:3 video size */
								do_43_video_size(sender,args);	
							}
							else
							{
								/* 16:9 video size */
								do_169_video_size(sender,args);
							}
							speaker_container.visibility = "Visible";
							volume_slider.visibility = "Visible";
							video_beeld.visibility = "Collapsed";
							button_play.visibility = "Visible";
							button_stop.visibility = "Visible"; 
							if (mediaelement.CanPause)
							{
								time_counter.visibility = "Visible";
								button_pauze.visibility = "Visible";
								timelinecanvas.visibility = "Visible";
							}
							else
							{
								time_counter.visibility = "Collapsed";
								button_pauze.visibility = "Collapsed";
								timelinecanvas.visibility = "Collapsed";
							}
						}
						break;
						
						case "Paused":
						{
							speaker_container.visibility = "Visible";
							volume_slider.visibility = "Visible";
							video_beeld.visibility = "Collapsed";
							button_play.visibility = "Visible";
							button_stop.visibility = "Visible"; 
							if (mediaelement.CanPause)
							{
								button_pauze.visibility = "Visible";
								timelinecanvas.visibility = "Visible";
								time_counter.visibility = "Visible";
							}
							else
							{
								time_counter.visibility = "Collapsed";
								button_pauze.visibility = "Collapsed";
								timelinecanvas.visibility = "Collapsed";
							}
						}
						break;

						case "Buffering":
						{
							speaker_container.visibility = "Collapsed";
							volume_slider.visibility = "Collapsed";
							video_beeld.visibility = "Collapsed";
							button_play.visibility = "Collapsed";
							button_stop.visibility = "Collapsed"; 
							button_pauze.visibility = "Collapsed";
							time_counter.visibility = "Visible";
						}
						break;
						
						case "Stopped":
						{
							do_169_video_size(sender,args)
							speaker_container.visibility = "Collapsed";
							volume_slider.visibility = "Collapsed";
							video_beeld.visibility = "Visible";
							button_play.visibility = "Collapsed";
							button_stop.visibility = "Collapsed"; 
							timelinecanvas.visibility = "Collapsed";
							time_counter.visibility = "Collapsed";
						}
						break;  
					}/* switch */
				}/* source length */ 
			}/*mediaelement.Name == current_active_video_mediaelement*/
		} /*current_active_video_mediaelement != null */
	} /* timelinecanvas != null*/
}


/* full screen */

function full_screen(sender,args)
{
	var silverlightPlugin = sender.getHost();
	silverlightPlugin.content.fullScreen = !silverlightPlugin.content.fullScreen;
}

function onFullScreenChanged(sender, args)
{
	var silverlightPlugin = sender.getHost();
	if (current_active_video_mediaelement != null)
	{
		var mediaelement = sender.findName(current_active_video_mediaelement);
		if (mediaelement != null)
		{
			var video_active = sender.findName(current_active_video_mediaelement)
			var video_fullscreen = sender.findName("video_fullscreen");
			var video_fullscreen_source = sender.findName("video_fullscreen_source");
			var video_screen = sender.findName("video_screen");
			var video_screen_source = sender.findName("video_screen_source");
			var main_container = sender.findName("main_container");
			if (silverlightPlugin.content.fullScreen == true)
			{
				video_screen_source.SourceName = "";
				video_screen.visibility = "Collapsed";
				video_fullscreen.visibility = "Visible";
				video_fullscreen_source.SourceName = video_active.name;
				video_fullscreen["Canvas.ZIndex"] = 10;
				video_fullscreen.width = silverlightPlugin.content.actualWidth;
				video_fullscreen.height = silverlightPlugin.content.actualHeight;
				main_container.Opacity = 0;
			}
			else
			{
				video_screen.visibility = "Visible"
				video_screen_source.SourceName = video_active.name; 
				video_fullscreen_source.SourceName = "";
				video_fullscreen.visibility = "Collapsed";
				main_container.Opacity = 1;
			}
		}
	}
}

function createSilverlight()
{
	Silverlight.createObjectEx
	(
		{
			source: 'container.xaml',
			parentElement:silverlighthost,
			id:'slgen_id_1',
			properties:
			{
				width:'840',
				height:'600',
				inplaceInstallPrompt:true,
				background:'#000000',
				isWindowless:'false',
				framerate:'25',
				version:'1.0'
			},
			events:
			{
				onError:null,
				onLoad:null
			}
		}
	);
}

if (!window.Silverlight)
{
	window.Silverlight = {};
}

Silverlight.createDelegate = function(instance, method) 
{
	return function() 
	{
		return method.apply(instance, arguments);
	}
}

Silverlight.InstallAndCreateSilverlight = function(version, installPromptDiv, createSilverlightDelegate)
{
	var RetryTimeout=3000;	              //The interval at which Silverlight instantiation is attempted(ms)
	if ( Silverlight.isInstalled(version) )
	{
		document.getElementById('collapsethis').innerHTML = "";
		createSilverlightDelegate();
	}
	else
	{
		if ( installPromptDiv )
		{
			installPromptDiv.innerHTML = Silverlight.createObject(null, null, null, {version: version, inplaceInstallPrompt:true},{}, null);
		}
		TimeoutDelegate = function()
		{
			Silverlight.InstallAndCreateSilverlight(version, null, createSilverlightDelegate);
		}
		setTimeout (TimeoutDelegate, RetryTimeout);
	}
}
