// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Author:          David Collins - Hiki solutions (david.collins@hikisolutions.co.uk)              
// Date:            29/05/2009                                                                     
// Version:         2.0                                                                            
// Description:     Functions to support a photo gallery viewer
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

// NameSpaces
Hiki.Controls = Hiki.Include (Hiki.Controls, "Hiki.Controls");
Hiki.Timers = Hiki.Include (Hiki.Timers, "Hiki.Timers");
Hiki.UI = Hiki.Include (Hiki.UI, "Hiki.UI");
Hiki.UI.Animation = Hiki.Include (Hiki.UI.Animation, "Hiki.UI.Animation");

if (Hiki.Controls.PhotoGallery == null || typeof(Hiki.Controls.PhotoGallery) != "object") { Hiki.Controls.PhotoGallery = new Object();}


Hiki.Controls.PhotoGallery.ImageSpeed = 6000;
Hiki.Controls.PhotoGallery.SlideSpeed = 10;
Hiki.Controls.PhotoGallery.SelectedImage = 0;
Hiki.Controls.PhotoGallery.ImageList = 
	[
        {Image: 'test.jpg', Name: 'test', Description:'test'},
        {Image: 'test.jpg', Name: 'test', Description:'test'}
    ];

/* Preload Images */
Hiki.Controls.PhotoGallery.PreloadImages = function()
{
	for (i=0; i<Hiki.Controls.PhotoGallery.ImageList.length-1; i++)
	{
		pic1 = new Image(); 
		pic1.src = Hiki.Controls.PhotoGallery.ImageList.Image; 
	}
}
/* Swap Image ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
Hiki.Controls.PhotoGallery.SwapImage = function(ImageID)
{
    Hiki.Timers.ClearTimeouts();
    
    if (ImageID != Hiki.Controls.PhotoGallery.SelectedImage)
    {
        Hiki.Controls.PhotoGallery.SelectedImage = ImageID;
        
        var ImageA = Hiki.FindControl("ImageA");
        var ImageB = Hiki.FindControl("ImageB");
        var DivA = Hiki.FindControl("LargeImageA");
        var DivB = Hiki.FindControl("LargeImageB");
        
        ImageB.src = ImageA.src;
        ImageB.alt = Hiki.Controls.PhotoGallery.ImageList[ImageID].Description;
        
        DivB.style.display="";
        DivB.style.zIndex = 99;
        
		Hiki.UI.Animation.SetOpacity(DivA,0);
        ImageA.src = Hiki.Controls.PhotoGallery.ImageList[ImageID].Image;
        ImageA.alt = Hiki.Controls.PhotoGallery.ImageList[ImageID].Description;

        Hiki.UI.Animation.FadeOut("LargeImageB",100);
        Hiki.UI.Animation.FadeIn("LargeImageA",0);
        
        Hiki.FindControl("HikiPhotoName").innerHTML = Hiki.Controls.PhotoGallery.ImageList[ImageID].Name;
        Hiki.FindControl("HikiPhotoDescription").innerHTML = Hiki.Controls.PhotoGallery.ImageList[ImageID].Description;
    }
}

/* Move left ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
Hiki.Controls.PhotoGallery.MoveLeft = function(Distance)
{
    var strip = Hiki.FindControl("HikiFilmStrip");
    if (strip.scrollLeft > 0 && Distance > 0)
    {
        Distance = Distance - 10;
        strip.scrollLeft = strip.scrollLeft-10;
        Hiki.Timers.Add("Hiki.Controls.PhotoGallery.MoveLeft(" + Distance + ")", Hiki.Controls.PhotoGallery.SlideSpeed);
    }
}

/* Move right ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
Hiki.Controls.PhotoGallery.MoveRight = function(Distance)
{
    var strip = Hiki.FindControl("HikiFilmStrip");
    if (Distance > 0)
    {
        Distance = Distance - 10;    
        strip.scrollLeft = strip.scrollLeft+10
        Hiki.Timers.Add("Hiki.Controls.PhotoGallery.MoveRight(" + Distance + ")", Hiki.Controls.PhotoGallery.SlideSpeed);
    }
}

/* Change the picture automatically ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
Hiki.Controls.PhotoGallery.StartSlideShow = function()
{
    if(Hiki.Controls.PhotoGallery.SelectedImage < Hiki.Controls.PhotoGallery.ImageList.length-1)
    {
        Hiki.Controls.PhotoGallery.SwapImage(Hiki.Controls.PhotoGallery.SelectedImage+1);
    }
    else
    {
        Hiki.Controls.PhotoGallery.SwapImage(0);
    }
    Hiki.Timers.Add("Hiki.Controls.PhotoGallery.StartSlideShow()", Hiki.Controls.PhotoGallery.ImageSpeed);
}

/* Starts/Stops the slide show ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
Hiki.Controls.PhotoGallery.SlideShow = function()
{
    var btn = Hiki.FindControl("HikiSlideShowLink");
    if (btn.innerHTML == "Start Slide Show")
    {
        btn.innerHTML = "Stop Slide Show";
        Hiki.Controls.PhotoGallery.StartSlideShow();
    }
    else
    {
        btn.innerHTML = "Start Slide Show";
        Hiki.Timers.ClearTimeouts();
        var DivA = Hiki.FindControl("LargeImageA");
        var DivB = Hiki.FindControl("LargeImageB");
        Hiki.UI.Animation.SetOpacity(DivA,100);
        Hiki.UI.Animation.SetOpacity(DivB,0);
    }
}
