/**
 * (c) Slideshow for http://www.houie.com
 * Copyright (c) 2003 Hou-En Han. All rights reserved.
 */

var isSlideshow = false;

var imagesDir = "images";
var thumbsDir = "thumbnails";

var onBorderWidth  = "1";           // border width if image exists
var offBorderWidth = "0";           // border width if image does not exist

var onThumbColor   = "#000000";     // border color if image exists
var offThumbColor  = "transparent"; // border color if image does not exist

var rotate_delay = 5000; // delay in ms

var currentImageIdx = 0; // current index of the image being displayed
var currentPageIdx  = 0; // current index of the page of thumbs being displayed

var blankImg    = "/images/menu/thumb_blank.gif";
var blankImgB   = "/images/menu/thumb_blank_b.gif";
var blankNavImg = "/images/menu/nav_blank.gif";

var tempImg = new Image();

var rotateID = 0;

var fadeImg = new Image(); // variable holding the fade image

var fadeInterval = 5; // fade opacity change amount
var fadeDelay    = 1; // fade change frequency

var DHTML = (document.getElementById || document.all || document.layers);

var thumbArray = new Array();

function getCookieVal (offset) {
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1)
        endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
            return getCookieVal (j);
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return null;
}

/**
 * Functions for controlling thumbs, images, and text.
 */

function fnGetElement(name) {
    if (document.getElementById) {
        return document.getElementById(name);
    }
    else if (document.all) {
        return document.all[name];
    }
    else if (document.layers) {
        return document.layers[name];
    }
}

function fnGetArrayElement(name) {
    if (document.getElementByName) {
        return document.getElementByName(name);
    }
    else return document[name];
}

function fnSetImage(objId, imageSrc) {
    var mainImage = fnGetElement(objId);
    mainImage.src=imageSrc
    mainImage.style.borderWidth=onBorderWidth;
}

function fnCrossFade(objId, imageSrc) {

    // if image has not been loaded yet,
    if (!fadeImg.complete) {
        window.setTimeout("fnCrossFade('"+objId+"', '"+imageSrc+"')", 10);
    }

    // else, crossfade
    else {

        // if IE, use blendTrans
        if (document.all) {
            var mainImage = fnGetElement(objId);

            mainImage.style.filter="blendTrans(duration=2)";
            mainImage.style.filter="blendTrans(duration=crossFadeDuration)";
            mainImage.filters.blendTrans.Apply();

            fnSetImage(objId, imageSrc);

            mainImage.filters.blendTrans.Play();
        }

        // otherwise, use custom crossfader
        else if (document.getElementById) {
            fnFadeOut(objId, 100, imageSrc);
        }

        fnUpdateCaption();
        fnUpdateImageNumber();
        if (!isSlideshow)
            fnToggleWaitCursor(false);
    }
}

function fnChangeSlide(imageIdx){

    if (thumbPage && thumbPage[imageIdx]) {

        var image_name  = thumbPage[imageIdx][0];
        var image_album = thumbPage[imageIdx][1];

        var imageSrc = rootDir+"/"+image_album+"/"+imagesDir+"/"+image_name;

        fadeImg = new Image();
        fadeImg.src = imageSrc;

        if (!isSlideshow)
            fnToggleWaitCursor(true);
        fnCrossFade("mainImage", imageSrc);
    }
}

function fnReplaceQuote(value) {
    var result = value.replace(/&quot;/g, "\"");
    return result;
}

function fnGetImageIndex(pageIdx, thumbIdx) {
    var imageIdx = (pageIdx*fnNumberOfThumbs()) + thumbIdx;
    return imageIdx;
}

function fnUpdateCaption() {
    if (!DHTML) return;

    var image_name    = thumbPage[currentImageIdx][0];
    var image_album   = thumbPage[currentImageIdx][1];
    var image_date    = thumbPage[currentImageIdx][2];
    var image_title   = thumbPage[currentImageIdx][3];
    var image_desc    = thumbPage[currentImageIdx][4];
    var image_rank    = thumbPage[currentImageIdx][5];
    var image_rankct  = thumbPage[currentImageIdx][6];
    var image_ownrank = thumbPage[currentImageIdx][7];

    if (image_name) {
        var obj = fnGetElement("mainLink");
        if (obj) {
            obj.href = "/photo.php?p="+image_name;
            obj.target = "photos";
        }
    }

    if (image_date) {
        var fileObj = fnGetElement("fileText");
        if (fileObj)
            fileObj.innerHTML = image_name;

        var dateObj = fnGetElement("dateText");
        if (dateObj) {

            var hasTitle = (image_title);

            var dateText = "";
            if (hasTitle)
                dateText = "&nbsp;|&nbsp;";
            dateText += image_date;
            dateObj.innerHTML = dateText
        }
    }

    var titleObj = fnGetElement("titleText");
    if (titleObj)
        titleObj.innerHTML = "";

    var descObj = fnGetElement("descText");
    if (descObj)
        descObj.innerHTML = "";

    if (image_title) {
        var obj = fnGetElement("mainImage");
        if (obj)
            obj.title = fnReplaceQuote(image_title);

        var titleObj = fnGetElement("titleText");
        if (titleObj)
            titleObj.innerHTML = image_title;
    }

    if (image_desc) {
        var descObj = fnGetElement("descText");
        if (descObj)
            descObj.innerHTML = image_desc;
    }
    else {
        var obj = fnGetElement("mainImage");
        if (obj)
            obj.title = "";
    }

    var obj = fnGetElement("p");
    if (obj)
        obj.value = image_name;

    var obj = fnGetElement("avg_rank");
    if (obj)
        obj.value = image_rank;

    var obj = fnGetElement("avg_count");
    if (obj)
        obj.value = image_rankct;

    var obj = fnGetElement("own_rank");
    if (obj)
        obj.value = image_ownrank;

    showRank();
}

function fnLoadThumbs(pageIdx) {

    // clearing out the thumbnails
    for (i=0; i<thumbArray.length; i++) {
        thumbArray[i].src = blankImg;
        thumbArray[i].style.borderWidth=offBorderWidth;
    }

    var startIdx = fnGetImageIndex(pageIdx, 0);

    // replacing thumbnail only if it exists
    for (i=0; i<thumbArray.length; i++) {

        if (thumbPage[startIdx+i]) {
            var image_name  = thumbPage[startIdx+i][0];
            var image_album = thumbPage[startIdx+i][1];

            thumbArray[i].src = rootDir+"/"+image_album+"/"+thumbsDir+"/"+image_name;
            thumbArray[i].style.borderWidth=onBorderWidth;
        }
        else {
            thumbArray[i].src = blankImgB;
        }
    }

    // clearing out thumbnail control images
    var thumb_next = fnGetElement("thumb_next");
    var thumb_prev = fnGetElement("thumb_prev");
    if (thumb_prev) thumb_prev.src = blankNavImg;
    if (thumb_next) thumb_next.src = blankNavImg;

    // replacing thumbnail control images if appropriate
    if (thumb_prev && pageIdx > 0) {
        thumb_prev.src = navImg[0][1];
    }
    if (thumb_next && pageIdx < fnNumberOfPages()-1) {
        thumb_next.src = navImg[1][1];
    }
}

/**
 * Functions for preloading images.
 */
var preloadImage = new Image();
function fnPreload(imageSrc) {

    if (preloadImage)
        preloadImage = new Image();

    if (preloadImage.src != imageSrc)
        preloadImage.src = imageSrc;

    if (!preloadImage.complete)
        window.setTimeout("fnPreload('"+imageSrc+"')", 10);
}

function fnStartPreloads(pageIdx) {
    // preload the next and previous pages of thumbs
    setTimeout("fnPreloadThumbs("+(pageIdx+1)+")", 0);
    setTimeout("fnPreloadThumbs("+(pageIdx-1)+")", 0);
}

var preloadThumbs = new Array();

function fnPreloadThumbs(pageIdx) {

    var startIdx = fnGetImageIndex(pageIdx, 0);
    var endIdx   = startIdx + fnNumberOfThumbs();

    for (i=startIdx; i<endIdx; i++) {
        // preload thumbnail only if it exists
        if (thumbPage[i]) {

            var image_name  = thumbPage[i][0];
            var image_album = thumbPage[i][1];

            preloadThumbs[i] = new Image();
            preloadThumbs[i].src = rootDir+"/"+image_album+"/"+thumbsDir+"/"+image_name;
        }
    }
}

function fnPreloadIndex(imageIdx) {

    if (imageIdx < 0)
        imageIdx = (thumbPage.length-1);
    if (imageIdx > (thumbPage.length-1))
        imageIdx = 0;

    var image_name  = thumbPage[imageIdx][0];
    var image_album = thumbPage[imageIdx][1];

    tempImg = new Image();
    tempImg.src = rootDir+"/"+image_album+"/"+imagesDir+"/"+image_name;
}

/**
 * Functions for toggling button images.
 */

function fnIsWaiting() {
    return (document.body.style.cursor == 'wait');
}

function fnToggleWaitCursor(isOn) {
    if (isOn)
        document.body.style.cursor = 'wait';
    else
        document.body.style.cursor = 'default';
}

function fnToggleCursor(isOn) {
    if (!fnIsWaiting()) {
        if (isOn)
            document.body.style.cursor = 'pointer';
        else
            document.body.style.cursor = 'default';
    }
}

function fnTogglePrev(isOn) {
    var thumb_prev = fnGetElement("thumb_prev");
    if (thumb_prev && currentPageIdx > 0) {
        if (isOn)
            thumb_prev.src = navImg[0][0];
        else
            thumb_prev.src = navImg[0][1];
        fnToggleCursor(isOn);
    }
}

function fnToggleNext(isOn) {
    var thumb_next = fnGetElement("thumb_next");
    if (thumb_next && currentPageIdx < (fnNumberOfPages()-1)) {
        if (isOn)
            thumb_next.src = navImg[1][0];
        else
            thumb_next.src = navImg[1][1];
        fnToggleCursor(isOn);
    }
}

function fnToggleLink(isOn) {
    var slide_link = fnGetElement("slide_link");
    if (slide_link && thumbPage[0]) {
        if (isOn)
            slide_link.src = navImg[5][0];
        else
            slide_link.src = navImg[5][1];
        fnToggleCursor(isOn);
    }
}

function fnTogglePrevSlide(isOn) {
    var slide_prev = fnGetElement("slide_prev");
    if (slide_prev && thumbPage[0]) {
        if (isOn)
            slide_prev.src = navImg[0][0];
        else
            slide_prev.src = navImg[0][1];
        fnToggleCursor(isOn);
    }
}

function fnToggleNextSlide(isOn) {
    var slide_next = fnGetElement("slide_next");
    if (slide_next && thumbPage[0]) {
        if (isOn)
            slide_next.src = navImg[1][0];
        else
            slide_next.src = navImg[1][1];
        fnToggleCursor(isOn);
    }
}

function fnTogglePlay(isOn) {
    var image_play = fnGetElement("image_play");
    if (image_play && thumbPage[0]) {
        if (isSlideshow) {
            image_play.title = "Pause Slideshow";
            if (isOn) {
                image_play.src = navImg[3][0];
            }
            else
                image_play.src = navImg[3][1];
        }
        else {
            image_play.title = "Play Slideshow";
            if (isOn)
                image_play.src = navImg[2][0];
            else
                image_play.src = navImg[2][1];
        }
        fnToggleCursor(isOn);
    }
}

function fnToggleZoom(isOn) {
    if (thumbPage[0]) {
        if (isOn)
            fnGetElement("image_zoom").src = navImg[4][0];
        else
            fnGetElement("image_zoom").src = navImg[4][1];
        fnToggleCursor(isOn);
    }
}

var highlightStyle = "dashed";
var lowlightStyle  = "solid";

function fnHighlight(theObj, isOn) {
    if (theObj) {
        if (isOn)
            theObj.style.borderStyle=highlightStyle;
        else
            theObj.style.borderStyle=lowlightStyle;
        fnToggleCursor(isOn);
    }
}

/**
 * Functions called by HTML page.
 */

function fnThumbClick(thumbIdx) {

    var imageIdx = fnGetImageIndex(currentPageIdx, thumbIdx);

    if (thumbPage[imageIdx]) {

        fnStopRotate();

        if (currentImageIdx != imageIdx) {
            currentImageIdx = imageIdx;

            fnChangeSlide(currentImageIdx);

            setTimeout("fnPreloadIndex("+(imageIdx-1)+")", 100);
            setTimeout("fnPreloadIndex("+(imageIdx+1)+")", 200);
        }
    }
}

function fnShowLink() {
    var image_name  = thumbPage[currentImageIdx][0];
    var image_url   = "/photo.php?p="+image_name;
    var win_props   = "location=yes,menubar=no,toolbar=yes,width=870,height=640";
    window.open(image_url, "Link_Reference", win_props);
}

function fnNumberOfThumbs() {
    return thumbArray.length;
}

function fnNumberOfPages() {
    return Math.ceil(thumbPage.length/fnNumberOfThumbs());
}

function fnUpdatePageNumber() {
    var thumbPageObj = fnGetElement("currentPage");
    if (thumbPageObj) {
        var numPages = fnNumberOfPages();
        if (numPages > 1) {
            thumbPageObj.innerHTML = (currentPageIdx+1)+" of "+fnNumberOfPages();
        }
    }
}

function fnUpdateImageNumber() {
    var imageIdxObj = fnGetElement("currentImage");
    if (imageIdxObj)
        imageIdxObj.innerHTML = (currentImageIdx+1)+" of "+thumbPage.length;
}

function fnPrevPage() {
    currentPageIdx--;
    if (currentPageIdx < 0) {
        currentPageIdx = 0;
    }
    fnLoadThumbs(currentPageIdx);

    if (currentPageIdx > 0)
        setTimeout("fnPreloadThumbs("+(currentPageIdx-1)+")", 0);

    fnUpdatePageNumber();
}

function fnNextPage() {
    currentPageIdx++;

    var numPages = fnNumberOfPages();
    if (currentPageIdx >= numPages) {
        currentPageIdx = numPages-1;
    }
    fnLoadThumbs(currentPageIdx);

    if (currentPageIdx < (numPages-1))
        setTimeout("fnPreloadThumbs("+(currentPageIdx+1)+")", 0);

    fnUpdatePageNumber();
}

function fnPrevSlide() {

    // continue if current image is loaded
    var mainImage = fnGetElement("mainImage");
    if (mainImage.complete && tempImg.complete) {

        if (thumbPage) {
            currentImageIdx--;

            if (currentImageIdx < 0) {
                currentImageIdx = thumbPage.length-1;
            }

            setTimeout("fnChangeSlide("+currentImageIdx+")", 0);
            setTimeout("fnPreloadIndex("+(currentImageIdx-1)+")", 0);
        }
    }
}

function fnNextSlide() {

    // continue if current image is loaded
    var mainImage = fnGetElement("mainImage");
    if (mainImage.complete && tempImg.complete) {

        if (thumbPage) {
            currentImageIdx++;

            if (currentImageIdx >= thumbPage.length) {
                currentImageIdx = 0;
            }

            setTimeout("fnChangeSlide("+currentImageIdx+")", 0);
            setTimeout("fnPreloadIndex("+(currentImageIdx+1)+")", 0);
        }
    }
}

function fnRotate() {
    if (isSlideshow) {
        fnNextSlide();
    }
}

function fnStartRotate() {
    isSlideshow = true;
    rotateID = setInterval("fnRotate()", rotate_delay);
    fnTogglePlay(false);
}

function fnStopRotate() {
    isSlideshow = false;
    clearInterval(rotateID);
    fnTogglePlay(false);
}

function fnToggleSlide() {
    if (isSlideshow)
        fnStopRotate();
    else {
        fnNextSlide();
        fnStartRotate();
    }
}

function fnSetDelay(delay) {
    rotate_delay = delay;
    if (isSlideshow) {
        fnStopRotate();
        fnStartRotate();
    }
    fnSetCookie("rotate_delay", rotate_delay);
}

var qsParm = new Array();

function fnParseQuery() {
    var query = window.location.search.substring(1);
    var parms = query.split('&');
    for(var i=0; i<parms.length; i++) {
        var pos = parms[i].indexOf('=');
        if (pos > 0) {
            var key = parms[i].substring(0,pos);
            var val = parms[i].substring(pos+1);
            qsParm[key] = val;
        }
   }
}

function fnGetQueryValue(key) {
    return qsParm[key];
}

function fnSetCookie(name, value) {
    document.cookie = name+"="+value;
}

function fnGetCookie(name) {
    var cookies = document.cookie;
    if (cookies.indexOf(name) != -1)   {
        var startpos = cookies.indexOf(name)+name.length+1;
        var endpos = cookies.indexOf(";",startpos)-1;
        if (endpos == -2) endpos = cookies.length;
        return unescape(cookies.substring(startpos,endpos));
    }
    else   {
        return false; // the cookie couldn't be found! it was never set before, or it expired.
    }
}


/**
 * Main function to get everything started.
 */

function fnStartSlide() {
    // Netscape seems to call onLoad() twice; check if slideshow started
    if (!isSlideshow) {
        isSlideshow = true;

        thumbArray = fnGetArrayElement("thumb");

        if (fnGetElement("slide_link")) fnGetElement("slide_link").src = blankNavImg;
        if (fnGetElement("slide_prev")) fnGetElement("slide_prev").src = blankNavImg;
        if (fnGetElement("image_play")) fnGetElement("image_play").src = blankNavImg;
        if (fnGetElement("slide_next")) fnGetElement("slide_next").src = blankNavImg;
        // if (fnGetElement("image_zoom")) fnGetElement("image_zoom").src = blankNavImg;

        // if thumbPage array exists
        if (thumbPage) {

            // setting the slideshow control icons
            fnToggleLink(false);
            fnTogglePrevSlide(false);
            fnTogglePlay(false);
            fnToggleNextSlide(false);
            // fnToggleZoom(false);

            // display the text for the current image
            fnUpdateCaption();
            fnUpdatePageNumber();
            fnUpdateImageNumber();

            // load the thumbnails
            fnLoadThumbs(currentPageIdx);

            // stagger load the next image and next thumbnails
            setTimeout("fnPreloadIndex("+(currentImageIdx+1)+")", 100);
            setTimeout("fnPreloadThumbs("+(currentPageIdx+1)+")", 200);

            // start the rotation if more than 1 image
            if (thumbPage.length > 1)
                setTimeout("fnStartRotate()", 300);
            else
                setTimeout("fnStopRotate()", 300);
        }
    }
}

function fnFadeIn(objId, opacity, imageSrc) {
    var mainImage = fnGetElement(objId);
    if (opacity <= 100) {
        mainImage.style.MozOpacity = opacity/100;
        opacity += fadeInterval;
        window.setTimeout("fnFadeIn('"+objId+"',"+opacity+", '"+imageSrc+"')", fadeDelay);
    }
}

function fnFadeOut(objId, opacity, imageSrc) {
    var mainImage = fnGetElement(objId);
    if (opacity >= 0) {
        mainImage.style.MozOpacity = opacity/100;
        opacity -= fadeInterval;
        window.setTimeout("fnFadeOut('"+objId+"',"+opacity+", '"+imageSrc+"')", fadeDelay);
    }
    else {
        fnSetImage(objId, imageSrc);
        fnFadeIn(objId, opacity, imageSrc);
    }
}