﻿// Slideshow functions
var slideShow_images = null;
var slideShow_imagesObj = null;
var slideShow_album = null;
var slideShow_index = 0;
var slideShow_started = false;
var slideShow_timer = null;
var slideShow_fader = null;
var slideShow_dialogTitle = null;
var preloadImage = new Image();
var albumId = '';
var isMediaStorePartnerSlideShow = false;

function CallSlideshowFolder(folderId, isMsp) {
	var object = new eXpress.Web.UI.Website.FolderContentResult();
	object.AlbumId = folderId;
	albumId = folderId
	isMediaStorePartnerSlideShow = isMsp;
	ShowLoadingDialog();
	eXpress.Web.UI.Website.UiService.GetFilesForFolder(true, true, object, SlideshowFolderComplete);
}

function SlideshowFolderComplete(obj) {
	if ((obj.FileIds != null) && (obj.FileIds.length > 0)) {
		// Start the slideshow for these items
		slideShow_images = obj.FileIds;
		slideShow_album = obj.Album;
		slideShow_index = -1;
		slideShow_timer = new Sys.Preview.Timer();
		slideShow_timer.set_id('slider');
		slideShow_timer.set_interval(3000);
		slideShow_timer.add_tick(slider_onTick);
		slideShow_timer.set_enabled(false);
		slideShow_fader = new Sys.Preview.UI.Effects.FadeAnimation();
		slideShow_fader.set_id('fader');
		slideShow_fader.onEnd = removeAlphaFilterForIe;
		slideShow_fader.set_effect(Sys.Preview.UI.Effects.FadeEffect.FadeIn);

		// Attach an event when image is done loading
		preloadImage.onload = imageLoaded;

		eXpress.Web.UI.Website.UiService.GetSlideshowDialog(slideShow_album.Name, SlideshowFolderDialogComplete);
	}
	else {
		HideLoadingDialog();
		if (obj.Message && obj.Message != '') {
			alert(obj.Message);
		}
	}
}

function customFadeAnimationTick() {
	// Overwrite the AnimationTick with this custom implementation where we change the background-color of the parent div
	// The Background-Color is changed to black when the animation starts to fix a bug in IE
	var slideshowitem = $get('slideshowitem');
	if (this._percentComplete >= 0) {
		if (slideshowitem.parentNode.style.backgroundColor != '#000') {
			slideshowitem.src = slideShow_imagesObj.Path;
			slideshowitem.parentNode.style.backgroundColor = '#000';
		}
	}
	this._updatePercentComplete(this._percentComplete + this._percentDelta, true);
}

function removeAlphaFilterForIe() {
	// IE has a bug where the background-color bleeds through images
	// Black pixels will look transparent on a white background
	// We remove the filter to be sure at the end of the fade effect
	var slideshowitem = $get('slideshowitem');
	slideshowitem.style.filter = '';
}

function SlideshowFolderDialogComplete(obj) {
	//RenderBigDialog(obj); 
	CreateOverlayDialog(obj, true, 'dialogSlideshow');
	StartSlideshow();
}

function SlideshowPrevious() {
	if (slideShow_images.length <= 1)
		return;

	// Decrease the index only after first time
	if (slideShow_index > 1) {
		// Disable the slider timer
		slideShow_timer.set_enabled(false);
		slideShow_index -= 2;
		// Perform the tick manually
		slider_onTick();
	}
	// When it was at the end
	else if (slideShow_index == 1) {
		// Disable the slider timer
		slideShow_timer.set_enabled(false);
		slideShow_index = slideShow_images.length - 1;
		// Perform the tick manually
		slider_onTick();
	}
	else if (slideShow_index == 0) {
		// Disable the slider timer
		slideShow_timer.set_enabled(false);
		slideShow_index = slideShow_images.length - 2;
		slider_onTick();
	}
}

function SlideshowNext() {
	if (slideShow_images.length <= 1)
		return;

	if (slideShow_index >= 0) {
		// Disable the slider timer
		slideShow_timer.set_enabled(false);
		// Perform the tick manually
		slider_onTick();
	}
}

function HideSlideshowFolder() {
	StopSlideshow();
	// Clean up
	slideShow_fader.stop();
	slideShow_fader = null;
	slideShow_timer = null;
	CloseImageDetail();
}

function SetSlideshowSpeed(speed) {
	slideShow_timer.set_interval(speed * 1000);
}

// When the timer hits
function slider_onTick(sender, eventArgs) {
	// Disable the slideshow until we have downloaded the image
	slideShow_timer.set_enabled(false);

	slideShow_index++;

	if (slideShow_index >= slideShow_images.length) {
		slideShow_index = 0;
	}

	// Get info of this file
	eXpress.Web.UI.Website.UiService.GetLightFile(slideShow_images[slideShow_index], albumId, isMediaStorePartnerSlideShow, GetFileInfoComplete);
}

function GetFileInfoComplete(obj) {
	if (obj) {
		slideShow_imagesObj = obj;

		// Hits the web server for the image
		preloadImage.src = slideShow_imagesObj.Path;
	}
}

// When the preLoaded image is done
function imageLoaded() {
	var slideshowitem = $get('slideshowitem');
	if (slideshowitem) {
		var imageNr = slideShow_index + 1;
		var imageObj = slideShow_imagesObj;

		// Set the fields
		if (imageObj.Name.length > 15) {
			$get('imageTitle').innerHTML = imageObj.Name.substring(0, 15) + '...';
		}
		else {
			$get('imageTitle').innerHTML = imageObj.Name;
		}
		$get('imageNr').innerHTML = imageNr;
		$get('imageTotal').innerHTML = slideShow_images.length;

		// Remove the img node    
		var parent = slideshowitem.parentNode;
		parent.removeChild(slideshowitem);

		// Dynamically create the element
		slideshowitem = document.createElement('img')
		slideshowitem.id = 'slideshowitem';

		// Put opacity on it so that Firefox doesn't flicker when set_imageURL is called
		slideshowitem.style.opacity = 0;

		// Reference image
		var image = (slideshowitem.control == null ? new Sys.Preview.UI.Image(slideshowitem) : slideshowitem.control);
		slideShow_fader.set_target(image);
		//slideShow_fader.stop();

		// Set the image to the cached image
		image.set_imageURL(imageObj.Path);
		
		// set max resolution (needed for partner photos)
		if (slideShow_imagesObj.Height > slideShow_imagesObj.Width) {
			
			slideshowitem.height = 500;
			slideshowitem.width = (slideShow_imagesObj.Width / slideShow_imagesObj.Height * 500);	
		}
		else {			
			slideshowitem.width = 500;
			slideshowitem.height = (slideShow_imagesObj.Height / slideShow_imagesObj.Width * 500);
		}
		// append the img to the DOM
		parent.appendChild(slideshowitem);

		// Play the animation and enable timer
		slideShow_fader.play();

		if (slideShow_images.length <= 1)
			return;

		if (slideShow_started) {
			slideShow_timer.set_enabled(true);
		}
	}
}

function ToggleSlideshow(play) {
	if (slideShow_images.length <= 1)
		return;

	if (!slideShow_started) {
		if (play) {
			StartSlideshow();
			var a_Pause = $get("a_Pause");
			if (Sys.UI.DomElement.containsCssClass(a_Pause, 'highlight')) {
				var a_Play = $get("a_Play");
				Sys.UI.DomElement.removeCssClass(a_Pause, 'highlight');
				Sys.UI.DomElement.addCssClass(a_Play, 'highlight');
			}
		}
	}
	else {
		if (!play) {
			StopSlideshow();
			var a_Play = $get("a_Play");
			if (Sys.UI.DomElement.containsCssClass(a_Play, 'highlight')) {
				var a_Pause = $get("a_Pause");
				Sys.UI.DomElement.removeCssClass(a_Play, 'highlight');
				Sys.UI.DomElement.addCssClass(a_Pause, 'highlight');
			}
		}
	}
}

function StartSlideshow() {
	// no need to enable the timer for 1 item
	if (slideShow_images.length > 1) slideShow_timer.set_enabled(true);
	slider_onTick();
	slideShow_started = true;
}

function StopSlideshow(close) {
	slideShow_fader.stop();
	slideShow_timer.set_enabled(false);
	slideShow_started = false;
	if (close) { CloseDialog(); }
}