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 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.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() 
    {
        if (!this.isScrolling)
        {
            this.isScrolling = true;
            var totalX = 0;
            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++;
            }
            else
            {
                for (var i=0; i<this.slides.length-1; i++)
                {
                    totalX += this.slides[i].slideWidth + slideSpacing;
                }
                scrollRight(this.slideRowID, totalX);
                this.currentSlide = 0;
            }
            this.isScrolling = false;
        }
    }
    this.scrollRowRight = function()
    {
        if (!this.isScrolling)
        {
            this.isScrolling = true;
            var totalX = 0;
            if (this.currentSlide > 0)
            {
                this.currentSlide--;
                totalX = this.slides[this.currentSlide].slideWidth + slideSpacing;
                //if (this.currentSlide == 0) totalX+=2;
                scrollRight(this.slideRowID, totalX);
            }
            else
            {
                for (var i=0; i<this.slides.length-1; i++)
                {
                    totalX += this.slides[i].slideWidth + slideSpacing;
                }
                scrollLeft(this.slideRowID, totalX);
                this.currentSlide = this.slides.length-1;
            }
            this.isScrolling = false;
            
        }
    }
}

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 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 rowY = slideRows[rowIndex].scrollY;
    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>";
            divMenuHTML += "<a class=\"menuOptionOff\" id=\"linkMenuOption"+i+"\" href=\"javascript:loadSlideRow("+i+", false);\">"+slideRows[i].menuText+"</a>";
            divMenuHTML += "<span id=\"spanMenuControls"+i+"\" class=\"menuControls\"><a href=\"javascript:slideRowRight("+i+");\" class=\"menuContolLink\">&nbsp;&lt;&nbsp;</a><a href=\"javascript:slideRowLeft("+i+");\" class=\"menuContolLink\">&nbsp;&gt;&nbsp;</a></span>";
            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")+");\"><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;
}  

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)
{
    var func = "loadSlideRow2("+rowIndex+","+changeMenuPage+")";
    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)
{
    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;
            }
        }
    }
    if (currentSlideIndex >= 0 && currentSlideIndex != (slideRows.length-1))
    {
        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 so = new SWFObject(slide.flashSlide.flashPath, flashID, slide.slideWidth, slide.slideHeight, slide.flashSlide.flashVersion, slide.flashSlide.flashBackgroundColor);
    so.addParam("wmode", "transparent");
	so.write(divID);
	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-260) + "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);
    }
}