//----------------------- main -----------------------//

var folios = new Array();
var currentFolioIndex = -1;
var currentFolioName = '';
var opacities = new Array();

var folioUpdating = false;
var folioRefresh = 80;

function KeyHandler(e) {
    var e = window.event ? event : e;
    var code = e.keyCode ? e.keyCode : e.charCode;
    var innerFrame = document.getElementById("MainFrame");
    if (innerFrame.contentDocument && innerFrame.contentDocument.KeyCodeHandler) { // DOM
        innerFrame.contentDocument.KeyCodeHandler(code);
    } else if (innerFrame.contentWindow && innerFrame.contentWindow.KeyCodeHandler) { // IE win
        innerFrame.contentWindow.KeyCodeHandler(code);
    }
}

document.onkeydown = KeyHandler;

function ScrollUp() {
    document.getElementById('folioDiv' + folios[0]).scrollIntoView(true);
    document.getElementById('imgUp').style.visibility = 'hidden';
    document.getElementById('imgDown').style.visibility = 'visible';
}

function ScrollDown() {
    document.getElementById('folioDiv' + folios[folios.length - 1]).scrollIntoView(true);
    document.getElementById('imgDown').style.visibility = 'hidden';
    document.getElementById('imgUp').style.visibility = 'visible';
}

function SetCurrentFolio(folioIndex, folioName) {
    currentFolioIndex = folioIndex;
    currentFolioName = folioName;

    if (folioIndex != -1) {
        SetFolioOpacity(folioIndex, opacities[folioIndex] + 0.15);
    }

    if (!folioUpdating) {
        folioUpdating = true;
        Update();
    }
}

function InitializeMain() {
    setTimeout('Update();', folioRefresh);
}

function Update() {
    var keepUpdating = false;
    var currentPageUrl = document.getElementsByName("MainFrame")[0].src;

    for (i = 0; i < folios.length; i++) {
        var currentOpacity = opacities[i];
        if (folios[i] == currentFolioName) {
            if (currentOpacity < 1) {
                SetFolioOpacity(i, currentOpacity + 0.15)
                keepUpdating = true;
            }
        }
        else {
            if (currentOpacity > 0) {
                currentOpacity = currentOpacity - 0.08;
                if (currentOpacity < 0) {
                    currentOpacity = 0;
                }
                SetFolioOpacity(i, currentOpacity);
                keepUpdating = true;
            }
            /*
            if (currentOpacity > 0.21)
            {
            currentOpacity = currentOpacity - 0.08;
            if (currentOpacity < 0.21)
            {
            currentOpacity = 0.21;
            }
            SetFolioOpacity(i, currentOpacity);
            keepUpdating = true;
            }
            else if (currentOpacity < 0.2)
            {
            SetFolioOpacity(i, currentOpacity + 0.02)
            keepUpdating = true;
            }
            */
        }

        var folioUrl = '/' + folios[i] + '.htm';
        var folioDiv = document.getElementById("folioDiv" + folios[i]);
        if (currentPageUrl.length > folioUrl.length
        && currentPageUrl.substring(currentPageUrl.length - folioUrl.length) == folioUrl) {
            folioDiv.className = "folio-active";
        }
        else {
            folioDiv.className = "folio";
        }
    }

    if (keepUpdating) {
        setTimeout('Update();', folioRefresh);
    }
    else {
        folioUpdating = false;
    }
}

function SetFolioOpacity(i, opacity) {
    var folioImage = document.getElementsByName("folioImage" + folios[i])[0];

    if (opacity >= 1) {
        folioImage.style.opacity = 1;
        folioImage.style.display = 'block';
        folioImage.style.filter = '';
    }
    else if (opacity > 0) {
        folioImage.style.opacity = opacity;
        folioImage.style.display = 'block';
        folioImage.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';
    }
    else {
        folioImage.style.opacity = 0;
        folioImage.style.display = 'none';
        folioImage.style.filter = 'alpha(opacity=0)';
    }

    opacities[i] = opacity;
}

function PickFolio() {
    var pickIndex = -1;
    var pickUrl = '';

    if (location.search != null && location.search.length > 2) {
        var fields = location.search.substring(1).split('/');
        if (fields[0] == 'link=print') {
          pickIndex = 1000;
          pickUrl = "print/making.htm";
        }
        else if (fields[0] == 'link=shows') {
          pickIndex = 1000;
          pickUrl = "shows/current.htm";
        }
        else {
            for (i = 0; i < folios.length; i++) {
                if (folios[i].toLowerCase() == fields[0].toLowerCase()) {
                    pickIndex = i;
                    pickUrl = "Photos/" + folios[i] + ".htm" + (fields.length > 1 ? "?" + fields[1] : "");
                    break;
                }
            }
        }
    }

    /*
    if (pickIndex == -1) {
        pickIndex = Math.floor(Math.random() * folios.length);
        if (pickIndex >= folios.length) {
            pickIndex = folios.length - 1;
        }
        pickUrl = "Photos/" + folios[pickIndex] + ".htm";
    }
    */

    if (pickIndex >= 0) {
    /*
        if (pickIndex < 20) {
            ScrollUp();
        }
        else {
            ScrollDown();
        }
        */
        document.getElementsByName("MainFrame")[0].src = pickUrl;
    }
}

function GotoFolio(folio) {
    document.getElementsByName('MainFrame')[0].src = 'Photos/' + folio + '.htm';
    Update();
}

function GotoImage(folio, image) {
    document.getElementsByName('MainFrame')[0].src = 'Photos/' + folio + '.htm?' + image;
    Update();
}

//----------------------- menu -----------------------//

var MenuSpeed = 9;
var MenuTimer = 15;
var MenuOpacity = 0.8;

// main function to handle the mouse events //
function Menu(id, inside) {
    var h = document.getElementById(id + '-ddheader');
    var c = document.getElementById(id + '-ddcontent');

    clearInterval(c.timer);

    if (inside) {
        clearTimeout(h.timer);
        if (c.maxh && c.maxh <= c.offsetHeight) {
            return
        }
        else if (!c.maxh) {
            c.style.display = 'block';
            c.style.height = 'auto';
            c.maxh = c.offsetHeight;
            c.style.height = '1px';
        }
        c.timer = setInterval(function () { MenuSlide(c, 1) }, MenuTimer);
    }
    else {
        h.style.backgroundColor = "";
        h.timer = setTimeout(function () { MenuCollapse(c) }, 50);
    }
}

// collapse the menu //
function MenuCollapse(c) {
    c.timer = setInterval(function () { MenuSlide(c, -1) }, MenuTimer);
}

// cancel the collapse if a user rolls over the dropdown //
function MenuCancelHide(id) {
    var h = document.getElementById(id + '-ddheader');
    var c = document.getElementById(id + '-ddcontent');
    clearTimeout(h.timer);
    clearInterval(c.timer);
    if (c.offsetHeight < c.maxh) {
        c.timer = setInterval(function () { MenuSlide(c, 1) }, MenuTimer);
    }
}

// incrementally expand/contract the dropdown and change the opacity //
function MenuSlide(c, d) {
    var currh = c.offsetHeight;
    var dist;

    if (d == 1) {
        dist = (Math.round((c.maxh - currh) / MenuSpeed));
    }
    else {
        dist = (Math.round(currh / MenuSpeed));
    }

    if (dist <= 1 && d == 1) {
        dist = 1;
    }

    c.style.height = '' + (currh + (dist * d)) + 'px';
    MenuSetOpacity(c, MenuOpacity * currh / c.maxh);

    if ((currh < 2 && d != 1) || (currh > (c.maxh - 2) && d == 1)) {
        clearInterval(c.timer);
    }
}

function MenuSetOpacity(item, opacity) {
    item.style.opacity = opacity;
    item.style.filter = 'alpha(opacity=' + opacity * 100 + ')';
}

//----------------------- photos -----------------------//

var pages = new Array();
var pageIndex = 0
var pageWidth = 800;
var pageHeight = 670;

var pageTimer = null;
var fadeTimer = null;
var fadeTimeout = 40;

var playing = true;
var savedPlaying = false;

var ie9 = (navigator.userAgent.indexOf('MSIE 9.') != -1);

var left = 37;
var right = 39;

function KeyHandler(e) {
    var e = window.event ? event : e;
    var code = e.keyCode ? e.keyCode : e.charCode;
    KeyCodeHandler(code);
}

function KeyCodeHandler(code) {
    if (code == left) {
        PrevPage();
    }
    else if (code == right) {
        NextPage();
    }
}

document.onkeydown = KeyHandler;

var imageUrls = new Array();

function Start() {
    var selectedPage = SelectedPage();

    if (selectedPage >= 0) {
        pageIndex = selectedPage;
        playing = false;
        document.getElementById('playButton').src = '../play.png';
        UpdatePage();
        UpdateControls();
    }
    else {
        UpdatePage();
        UpdateControls();
        playing = true;
        document.getElementById('playButton').src = '../pause.png';

        if (pageIndex < pages.length) {
            pageTimer = setTimeout('Play();', pageIndex == 0 ? 3000 : 6000);
        }
    }
    setTimeout('PreloadImage(0);', 500);
}

function PreloadImage(i) {
    var img = new Image();
    img.src = imageUrls[i];
    i = i + 1;
    if (i < imageUrls.length) {
        setTimeout('PreloadImage(' + i + ');', 100);
    }
}

function Play() {
    if (pageIndex < pages.length - 1) {
        NextPage();
    }
    else {
        SetPage(0);
    }
    playing = true;
    document.getElementById('playButton').src = '../pause.png';

    if (pageIndex < pages.length - 1) {
        pageTimer = setTimeout('Play();', pageIndex == 0 ? 3000 : 6000);
    }
    else {
        document.getElementById('playButton').src = '../play.png';
    }
}

function Pause() {
    if (pageTimer) {
        clearTimeout(pageTimer);
        pageTimer = null;
    }

    playing = false;

    document.getElementById('playButton').src = '../play.png';
}

function PlayPause() {
    SetPlayingState(!playing);
}

function SetPlayingState(state) {
    playing = state;
    if (playing) {
        Play();
    }
    else {
        Pause();
    }
}

function SuspendPlay() {
    savedPlaying = playing;
    SetPlayingState(false);
}

function ResumePlay() {
    SetPlayingState(savedPlaying);
}

function FirstPage() {
    SetPage(0);
    Start();
}

function NextPage() {
    if (pageIndex < pages.length - 1) {
        SetPage(pageIndex + 1);
    }
}

function PrevPage() {
    if (pageIndex > 0) {
        SetPage(pageIndex - 1);
    }
}

function LastPage() {
    SetPage(pages.length - 1);
}

function SetPage(index) {
    Pause();
    pageIndex = index;
    UpdatePage();
    UpdateControls();
}

function SetPageById(id) {
    for (i = 0; i < pages.length; i++) {
        if (pages[i] == id) {
            SetPage(i);
            break;
        }
    }
}

function UpdateControls() {
    if (pageIndex <= 0) {
        document.getElementById('prevButton').src = '../prev-d.png';
    }
    else {
        document.getElementById('prevButton').src = '../prev.png';
    }

    if (pageIndex >= pages.length - 1) {
        document.getElementById('nextButton').src = '../next-d.png';
    }
    else {
        document.getElementById('nextButton').src = '../next.png';
    }
}

function FadeOut(pageIndex, opacity) {
    if (opacity <= 0) {
        document.getElementById("pageContent").innerHTML = document.getElementById(pages[pageIndex]).innerHTML;
        document.getElementById('controls').style.visibility = 'visible';
        fadeTimer = setTimeout('FadeIn(0.1);', fadeTimeout)
    }
    else {
        SetOpacity(opacity);
        fadeTimer = setTimeout('FadeOut(' + pageIndex + ',' + (opacity - 0.1) + ');', fadeTimeout);
    }
}

function FadeIn(opacity) {
    SetOpacity(opacity);
    if (opacity < 1) {
        fadeTimer = setTimeout('FadeIn(' + (opacity + 0.1) + ');', fadeTimeout);
    }
}

function UpdatePage() {
    FadeOut(pageIndex, 0.9);
}

function SetOpacity(opacity) {
    if (opacity >= 1) {
        if (ie9) {
            document.getElementById("pageContent").style.filter = '';
        } else {
            document.getElementById("pageContent").style.opacity = opacity;
        }
    }
    else {
        if (ie9) {
            document.getElementById("pageContent").style.filter = 'alpha(opacity=' + opacity * 100 + ')';
        } else {
            document.getElementById("pageContent").style.opacity = opacity;
        }
    }
}

function AddPage(id) {
    pages[pages.length] = id;
}

function SelectedPage() {
    if (location.search != null && location.search.length > 2) {
        var pageId = ("PhotoPage" + location.search.substring(1)).toLowerCase();
        for (i = 0; i < pages.length; i++) {
            if (pages[i].toLowerCase() == pageId) {
                return i;
            }
        }
    }

    return -1;
}

