﻿var SLIDE_TYPE_IMAGE = 0;
var SLIDE_TYPE_TEXT = 1;
var SLIDE_TYPE_FLASH = 2;

var isScrollingVertically = false;
var slideSpacing = 30;
var currentSlideIndex = -1;
var currentMenuPage = 0;
var maxMenuPage = 0;
var menuWidth = 200;
var slideRows = new Array();
var currentActiveFlash = null;

var IE = (window.navigator.userAgent.indexOf("MSIE") > -1) ? true : false;
var IE6 = false;
if (IE) {
    var _ua = window.navigator.userAgent;
    var _msie = _ua.indexOf("MSIE");
    var _vMsie = _ua.substring(_msie + 5, (_msie + 8));
    IE6 = (IE && parseInt(_ua.substring(_msie + 5, _msie + 8)) >= 6) ? true : false;
}

function Slide() {
    this.slideImage = null;
    this.slideWidth = 0;
    this.slideHeight = 0;
    this.slideType = SLIDE_TYPE_IMAGE;
    this.slideHTML = "";
    this.flashSlide = null;
}
function _loadSlide() {
    document.getElementById(this.id.replace("image", "slide")).className = "slideLoaded";
}

function FlashSlide() {
    this.flashPath = null;
    this.flashVersion = 6;
    this.flashBackgroundColor = "#FFFFFF";
}

function SlideRow() {
    this.slideRightVisible = 50;
    this.isStatic = false;
    this.isLoaded = false;
    this.slideRowID = null;
    this.slides = new Array();
    this.currentSlide = 0;
    this.menuText = "MENU TEXT NOT SET";
    this.menuPage = -1;
    this.scrollY = 0;
    this.timeout = null;
    this.isScrolling = false;
    this.scrollRowLeft = function(column) {
        if (!this.isScrolling) {
            this.isScrolling = true;
            var totalX = 0;
            if (column != undefined) {
                totalX = 0;
                for (var i = this.currentSlide; i < column; i++) {
                    totalX += this.slides[i].slideWidth + slideSpacing;
                }
                scrollLeft(this.slideRowID, totalX - (this.currentSlide==0?this.slideRightVisible:0));
                this.currentSlide = column;
            }
            else {
                if (this.slides[this.currentSlide + 1] != null) {
                    totalX = this.slides[this.currentSlide].slideWidth + slideSpacing;
                    //if (this.currentSlide == 0) totalX+=2;
                    scrollLeft(this.slideRowID, totalX - (this.currentSlide == 0 ? this.slideRightVisible : 0));
                    this.currentSlide++;
                }
                else {
                    for (var i = 0; i < this.slides.length - 1; i++) {
                        totalX += this.slides[i].slideWidth + slideSpacing;
                    }
                    scrollRight(this.slideRowID, totalX - this.slideRightVisible);
                    this.currentSlide = 0;
                }
            }
            this.isScrolling = false;
        }
    }
    this.scrollRowRight = function(column) {
        if (!this.isScrolling) {
            this.isScrolling = true;
            var totalX = 0;
            if (column != undefined) {
                for (var i = this.currentSlide-1; i >= column; i--) {
                    totalX += this.slides[i].slideWidth + slideSpacing;
                }
                //alert(totalX);
                scrollRight(this.slideRowID, totalX - (column == 0 ? this.slideRightVisible : 0));
                this.currentSlide = column;
            }
            else {
                if (this.currentSlide > 0) {
                    this.currentSlide--;
                    totalX = this.slides[this.currentSlide].slideWidth + slideSpacing;
                    //if (this.currentSlide == 0) totalX+=2;
                    scrollRight(this.slideRowID, totalX - (this.currentSlide == 0 ? this.slideRightVisible : 0));
                }
                else {
                    for (var i = 0; i < this.slides.length - 1; i++) {
                        totalX += this.slides[i].slideWidth + slideSpacing;
                    }
                    scrollLeft(this.slideRowID, totalX - this.slideRightVisible);
                    this.currentSlide = this.slides.length - 1;
                }
            }
            this.isScrolling = false;

        }
    }
    this.scrollColumnIntoView = function(column) {
        if (column > this.currentSlide) {
            this.scrollRowLeft(column);
        } else if (column < this.currentSlide) {
            this.scrollRowRight(column);
        }
    }
}

function slideRowLeft(rowIndex) {
    slideRows[rowIndex].scrollRowLeft();
}

function slideRowRight(rowIndex) {
    slideRows[rowIndex].scrollRowRight();
}

function scrollLeft(divID, totalX) {
    var obj = document.getElementById(divID);
    var x = parseInt(obj.style.left);
    //alert(obj.style);
    var delta = 0;
    if (totalX > 3)
        delta = Math.floor(totalX / 3);
    else
        delta = 1;
    obj.style.left = x - delta + "px";
    totalX -= delta;
    if (totalX > 0) {
        setTimeout('scrollLeft("' + divID + '", ' + totalX + ')', 50);
    }
}
function scrollMenuRight() {
    if (currentMenuPage > 0) {
        scrollRight("divMenuRows", menuWidth);
        currentMenuPage--;
    }
}
function scrollMenuLeft() {
    if (currentMenuPage < maxMenuPage) {
        scrollLeft("divMenuRows", menuWidth);
        currentMenuPage++;
    }
}
function scrollRight(divID, totalX) {
    var obj = document.getElementById(divID);
    var x = parseInt(obj.style.left);
    var delta = 0;
    if (totalX > 3)
        delta = Math.floor(totalX / 3);
    else
        delta = 1;
    obj.style.left = x + delta + "px";
    totalX -= delta;
    if (totalX > 0) {
        setTimeout('scrollRight("' + divID + '", ' + totalX + ')', 50);
    }
}
function scrollMainUp(totalY, func) {
    var obj = document.getElementById("divSlideRows");
    var y = parseInt(obj.scrollTop);
    var delta = 0;
    if (totalY > 3)
        delta = Math.floor(totalY / 3);
    else
        delta = 1;
    obj.scrollTop = y - delta;
    totalY -= delta;
    if (totalY > 0) {
        setTimeout('scrollMainUp(' + totalY + ', "' + func + '")', 50);
    }
    else {
        eval(func);
    }
}

function scrollMainDown(totalY, func) {
    var obj = document.getElementById("divSlideRows");
    var y = parseInt(obj.scrollTop);
    var delta = 0;
    if (totalY > 3)
        delta = Math.floor(totalY / 3);
    else
        delta = 1;
    obj.scrollTop = y + delta;
    totalY -= delta;
    if (totalY > 0) {
        setTimeout('scrollMainDown(' + totalY + ', "' + func + '")', 50);
    }
    else {
        eval(func);
    }
}

function scrollToAbout() {
    if (currentSlideIndex >= 0) {
        document.getElementById("spanMenuControls" + currentSlideIndex).style.visibility = "hidden";
    }
    var currentY = parseInt(document.getElementById("divSlideRows").scrollTop);
    scrollMainUp(currentY, null);
}

function scrollIntoView(rowIndex, func) {
    var scrollHeight = parseInt(document.getElementById("divSlideRows").scrollHeight);
    var divHeight = parseInt(document.getElementById("divSlideRows").style.height);
    var currentY = parseInt(document.getElementById("divSlideRows").scrollTop);
    var maxY = scrollHeight - divHeight;
    var yAdjust = 0;
    var objAbout = document.getElementById("about");
    if (getStyle(objAbout, "display") != "none") {
        yAdjust = parseInt(getStyle(objAbout, "height"));
    }
    //alert(yAdjust);
    var rowY = slideRows[rowIndex].scrollY + yAdjust;
    if (rowY > currentY) {
        if (rowY < maxY) {
            scrollMainDown(rowY - currentY, func);
        }
        else if (currentY < maxY) {
            scrollMainDown(maxY - currentY, func);
        }
        else
            eval(func);
    }
    else {
        scrollMainUp(currentY - rowY, func);
    }
}

function init() {
    var divMenuHTML = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"><tr><td valign=\"top\" width=\"" + menuWidth + "\">";
    var divHTML = "";
    var rowPage = 0;

    for (var i = 0; i < slideRows.length; i++) {
        if (i > 0) {
            var previousMaxHeight = 0;
            for (var j = 0; j < slideRows[i - 1].slides.length; j++) {
                if (slideRows[i - 1].slides[j].slideHeight > previousMaxHeight) {
                    previousMaxHeight = slideRows[i - 1].slides[j].slideHeight;
                }
            }
            slideRows[i].scrollY = slideRows[i - 1].scrollY + previousMaxHeight + (slideSpacing * 2);
        }
        if (slideRows[i].menuPage > maxMenuPage)
            maxMenuPage = slideRows[i].menuPage;
        if (slideRows[i].menuPage > rowPage) {
            divMenuHTML += "</td><td valign=\"top\" width=\"" + menuWidth + "\">";
            rowPage = slideRows[i].menuPage;
        }

        if (!slideRows[i].isStatic) {
            divMenuHTML += "<div style=\"clear:both;\">";
            divMenuHTML += "<div class=\"menuText\"><a class=\"menuOptionOff\" id=\"linkMenuOption" + i + "\" href=\"javascript:loadSlideRow(" + i + ", false);\">" + slideRows[i].menuText + "</a></div>";
            divMenuHTML += "<div id=\"spanMenuControls" + i + "\" class=\"menuControls\"><a href=\"javascript:slideRowRight(" + i + ");\" class=\"menuContolLink\"><img src=\"images/left_inactive.gif\" alt=\"&lt;-\" onmouseover=\"this.src='images/left_active.gif';\" onmouseout=\"this.src='images/left_inactive.gif';\" /></a><a href=\"javascript:slideRowLeft(" + i + ");\" class=\"menuContolLink\"><img src=\"images/right_inactive.gif\" alt=\"-&gt;\" onmouseover=\"this.src='images/right_active.gif';\" onmouseout=\"this.src='images/right_inactive.gif';\" /></a></div>";
            divMenuHTML += "</div>";
        }

        var divWidth = slideSpacing;
        for (var j = 0; j < slideRows[i].slides.length; j++) {
            divWidth += slideRows[i].slides[j].slideWidth;
            divWidth += slideSpacing;
        }

        slideRows[i].slideRowID = "divSlideRow" + i;

        var rowHTML = "<div id=\"divSlideRow" + i + "\" style=\"overflow:hidden;position:relative;left:0px;width:" + divWidth + "px;z-index:1;\"><table cellpadding=\"0\" cellspacing=\"" + slideSpacing + "\" border=\"0\"><tr>";
        for (var j = 0; j < slideRows[i].slides.length; j++) {
            //slideRows[i].slides[j].id = "divSlideRow"+i+"_slide"+j;
            rowHTML += "<td valign=\"top\"><div id=\"divSlideRow" + i + "_slide" + j + "\" class=\"slideHolder\" style=\"z-index:1;padding:0px;\"><a id=\"divSlideRow" + i + "_link" + j + "\" href=\"javascript:loadSlideRow(" + i + ", " + ((slideRows[i].isStatic == false) ? "true" : "false") + ", "+j+");\"><img id=\"divSlideRow" + i + "_image" + j + "\" src=\"images/spacer.gif\" width=\"" + slideRows[i].slides[j].slideWidth + "\" height=\"" + slideRows[i].slides[j].slideHeight + "\" border=\"0\" /></a></div></td>";
        }
        rowHTML += "</tr></table></div>";
        divHTML += rowHTML;
    }
    divMenuHTML += "</td></tr></table>";
    //alert(divMenuHTML);
    document.getElementById("divSlideRows").innerHTML = divHTML;
    document.getElementById("divMenuRows").innerHTML = divMenuHTML;

    var aboutBox = document.getElementById("about");
    document.body.removeChild(aboutBox);
    document.getElementById("divSlideRows").insertBefore(aboutBox, document.getElementById("divSlideRows").firstChild);
}

function syncMenuPage(loadedMenuPage) {
    if (loadedMenuPage > currentMenuPage) {
        scrollLeft("divMenuRows", (menuWidth * (loadedMenuPage - currentMenuPage)));
        currentMenuPage = loadedMenuPage;
    }
    else if (loadedMenuPage < currentMenuPage) {
        scrollRight("divMenuRows", (menuWidth * (currentMenuPage - loadedMenuPage)));
        currentMenuPage = loadedMenuPage;
    }
}

function loadSlideRow(rowIndex, changeMenuPage, column) {
    var func = "loadSlideRow2(" + rowIndex + "," + changeMenuPage + (column != undefined ? "," + column : "") + ")";
    if (!slideRows[rowIndex].isLoaded) {
        for (var i = 0; i < slideRows[rowIndex].slides.length; i++) {
            document.getElementById("divSlideRow" + rowIndex + "_slide" + i).className = "slideLoading";
        }
    }
    scrollIntoView(rowIndex, func);
}
function loadSlideRow2(rowIndex, changeMenuPage, column) {
    if (!slideRows[rowIndex].isLoaded) {
        slideRows[rowIndex].isLoaded = true;
        for (var i = 0; i < slideRows[rowIndex].slides.length; i++) {
            switch (slideRows[rowIndex].slides[i].slideType) {
                case SLIDE_TYPE_IMAGE:
                    if (slideRows[rowIndex].slides[i].slideImage.indexOf(".png") != -1 && IE6) {
                        document.getElementById("divSlideRow" + rowIndex + "_slide" + i).innerHTML = getIePng(slideRows[rowIndex].slides[i]);
                        document.getElementById("divSlideRow" + rowIndex + "_slide" + i).className = "slideLoaded";
                    }
                    else {
                        document.getElementById("divSlideRow" + rowIndex + "_image" + i).onload = _loadSlide;
                        document.getElementById("divSlideRow" + rowIndex + "_image" + i).src = slideRows[rowIndex].slides[i].slideImage;
                    }
                    break;
                case SLIDE_TYPE_TEXT:
                    document.getElementById("divSlideRow" + rowIndex + "_slide" + i).innerHTML = slideRows[rowIndex].slides[i].slideHTML;
                    document.getElementById("divSlideRow" + rowIndex + "_slide" + i).className = "slideLoaded";
                    break;
                case SLIDE_TYPE_FLASH:
                    writeFlash(slideRows[rowIndex].slides[i], "divSlideRow" + rowIndex + "_flash" + i, "divSlideRow" + rowIndex + "_slide" + i);
                    document.getElementById("divSlideRow" + rowIndex + "_slide" + i).className = "slideLoaded";
                    break;
            }
        }
    }
    //alert(column != "");
    if (column != undefined) {
    
        slideRows[rowIndex].scrollColumnIntoView(column);
    }
    if (currentSlideIndex >= 0) {
        document.getElementById("spanMenuControls" + currentSlideIndex).style.visibility = "hidden";
    }
    if (slideRows[rowIndex].isStatic == false) {
        document.getElementById("linkMenuOption" + rowIndex).className = "menuOptionOn";
        document.getElementById("spanMenuControls" + rowIndex).style.visibility = "visible";
    }

    currentSlideIndex = rowIndex;

    if (changeMenuPage) {
        syncMenuPage(slideRows[rowIndex].menuPage);
    }
}

function writeFlash(slide, flashID, divID) {
    var div = document.getElementById(divID);
    //div.innerHTML = "";
    var flashDiv = document.createElement("div");
    flashDiv.setAttribute("id", divID + "_flash");
    flashDiv.setAttribute("style", "position:absolute;left:0px;top:0px;width:"+slide.slideWidth+"px;height:"+slide.slideHeight+"px;");
    div.appendChild(flashDiv);
    var so = new SWFObject(slide.flashSlide.flashPath, flashID, slide.slideWidth, slide.slideHeight, slide.flashSlide.flashVersion, slide.flashSlide.flashBackgroundColor);
    so.addParam("wmode", "transparent");
    so.write(divID + "_flash");
    var clickDiv = document.createElement("div");
    clickDiv.setAttribute("id", divID + "_click");
    clickDiv.setAttribute("style", "position:absolute;left:0px;top:0px;width:" + slide.slideWidth + "px;height:" + slide.slideHeight + "px;cursor:pointer;");
    div.appendChild(clickDiv);

    attachEvent(divID + "_click", "click", clickDivClicked);
    
    document.getElementById(divID).style.backgroundColor = slide.flashSlide.flashBackgroundColor;
}

function getIePng(slide) {
    return "<span style=\"display:inline-block;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + slide.slideImage + "', sizingMethod='scale');width:" + slide.slideWidth + "px;height:" + slide.slideHeight + "px;cursor:hand;\"></span>";
}

function resizeMainDiv() {
    var winW = parseInt(document.documentElement.clientWidth);
    var winH = parseInt(document.documentElement.clientHeight);
    if (window.innerWidth)
        winW = parseInt(window.innerWidth);
    if (window.innerHeight)
        winH = parseInt(window.innerHeight);
    
    document.getElementById("divSlideRows").style.width = winW + "px";
    document.getElementById("divSlideRows").style.height = winH + "px";
    document.getElementById("divMenu").style.left = (winW - 200) + "px";
}



function browserDetect() {
    var msg = "This website works best with IE 6+, Firefox 2+, and Safari 3+. Please use one of these browsers for the best possible experience.";
    var showAlert = false;
    var userAgent = window.navigator.userAgent;
    if (userAgent.indexOf("Firefox") > -1) {
        var version = parseInt(userAgent.substring(userAgent.indexOf("Firefox/") + 8));
        if (version < 2)
            showAlert = true;
    }
    else if (userAgent.indexOf("MSIE") > -1) {
        var version = parseInt(userAgent.substring(userAgent.indexOf("MSIE") + 5));
        if (version < 6)
            showAlert = true;
    }
    else if (userAgent.indexOf("Safari") > -1) {
        var version = parseInt(userAgent.substring(userAgent.indexOf("Safari/") + 7));
        if (version < 522)
            showAlert = true;
    }
    else {
        showAlert = true;
    }
    if (showAlert) {
        alert(msg);
    }
}

function clickDivClicked() {
    if (currentActiveFlash != null) {
        document.getElementById(currentActiveFlash).style.display = "block";
    }
    currentActiveFlash = this.id;
    this.style.display = "none";
    var arr = this.id.split("_");
    loadSlideRow(arr[0].replace("divSlideRow", ""), true, arr[1].replace("slide", ""));
}

function getStyle(el, style) {
    if (!document.getElementById)
        return;
    var value = el.style[style];
    if (!value) {
        if (el.currentStyle)
            value = el.currentStyle[style];
        else if (document.defaultView)
            value = document.defaultView.getComputedStyle(el, "").getPropertyValue(style);
    }
    return value;
}

function attachEvent(elemID, eventName, func) {
    var obj = document.getElementById(elemID);
    if (obj.attachEvent) {
        obj.attachEvent("on" + eventName, func);
    } else {
        obj.addEventListener(eventName, func, false);
    }
}