﻿// JavaScript File

// Slideshow script creates slideshow from HTML
// Requires a div with ID "slideshow" that contains only img children, and appropriate CSS
// David Colls 2008

var slidesDiv;
var slides;
var viewFullControl;
var imageControl;

var width = 400;
var height = 300;
var thumbNailURL = "?width={0}&height={1}&ImgFilePath={2}";
var generateURL;

var multipleImages = false;
var isPaused = false;
var currentIndex = 0;
var displayTime = 5000;
var noImageName = 'NoImage.gif';

function slideshowInit(genURL, pwidth, pheight) {

    generateURL = genURL;
    width = pwidth;
    height = pheight;

    slidesDiv = document.getElementById("slideshow");
    if (slidesDiv == null) {
        return;
    }
    
    slides = slidesDiv.getElementsByTagName("img");
    if (slides.length == 0) {
        return;
    }    
    
    setSlideSize(width, height);
    addControls();

    multipleImages = slides.length > 2;
    
    setImage(0);
	// set the timeout for further rotations - if not paused
	isPaused = readCookie("isPaused") == "true";
	if (!isPaused && multipleImages) {
        cueRotate();
	}
	else if (multipleImages) {
		document.getElementById("slideshow_playpause").innerHTML = "Resume";
	}    
}

function setSlideSize(width, height) {
    for (i = 0; i < slides.length; i++) {
        slides[i].style.width = width + "px";
        slides[i].style.height = height + "px";
        slides[i].style.display = "none";
    }
}

function addControls() {

    var controlsList = document.createElement("ul");
    controlsList.setAttribute("id", "slideshow_controls");
    
    var prevControl = document.createElement("li");
    prevControl.innerHTML = "<span onclick='prev()'>Previous</span>";
    
    var playPauseControl = document.createElement("li");
    playPauseControl.innerHTML = "<span id='slideshow_playpause' onclick='playPause()'>Pause</span>";
    
    var nextControl = document.createElement("li");
    nextControl.innerHTML = "<span onclick='next()'>Next</span>";
    
    var lineBreak = document.createElement("br");   

    viewFullControl = document.createElement("a");   
    viewFullControl.innerHTML = "View Full Size Image"; 
    viewFullControl.target = "_blank"; 
    
    imageControl = document.createElement("img");   
    imageControl.alt = "";
    imageControl.style.display = "block";
    imageControl.style.width = width + "px";
    imageControl.style.height = height + "px";
    
    var countControl = document.createElement("span");
    countControl.innerHTML = "Number of Images: " + slides.length;

    
    controlsList.appendChild(prevControl);
    controlsList.appendChild(playPauseControl);
    controlsList.appendChild(nextControl);
    
    slidesDiv.appendChild(imageControl);
    if (slides.length > 2)
    {
        slidesDiv.appendChild(countControl);
        slidesDiv.appendChild(lineBreak);
        slidesDiv.appendChild(controlsList);
    }
    slidesDiv.appendChild(viewFullControl);
}

function setImage(index) {

    currentIndex = index;
    //imageControl.src = slides[currentIndex].src;
    imageControl.src = generateURL + thumbNailURL.format(width, height, slides[currentIndex].src);
    imageControl.alt = slides[currentIndex].alt;
    //slides[currentIndex].style.display = "block";
    viewFullControl.href = slides[currentIndex].src;
    viewFullControl.style.display = "block";
    
    if (endsWith(slides[currentIndex].src, noImageName))
    {
        viewFullControl.style.display = "none";
    }
}

function next() {
    setImage((currentIndex + 1) % (slides.length - 1));
}

function prev() {
    setImage((currentIndex + (slides.length - 2)) % (slides.length - 1));
}

function rotate() {
    if (isPaused) {
        return;
    }
    next();
    cueRotate();
}

function cueRotate() {
    setTimeout("rotate()", displayTime);
}

function playPause() {
    if (isPaused) {
	    cueRotate();
    }
    isPaused = !isPaused;
    createCookie("isPaused", "" + isPaused, 365);
    document.getElementById("slideshow_playpause").innerHTML = isPaused ? "Resume" : "Pause";
}


function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

String.prototype.format = function()
{
    var str = this;

    for(var i=0;i<arguments.length;i++)
    {
        var re = new RegExp('\\{' + (i) + '\\}','gm');
        str = str.replace(re, arguments[i]);
    }

    return str;
}

function endsWith(testString, endingString){
      if(endingString.length > testString.length) return false;
      return testString.indexOf(endingString)==(testString.length-endingString.length);
}