// ----------------------------------------------------
// docoptions tile client side functions
// ----------------------------------------------------
// Componay: FAST Search & Transfer
// Copyright 2005 All Rights Reserved
// ----------------------------------------------------
// Author: Brett Jorgensen
// Created: July 26, 2005
// -------------------------------------------------------------------------------------
function DocoptionsTC(callBack)
{
     /**
     * The parent layout's callback method for this tile.
     * @private
     * @type function
     */
    this.m_callback = callBack;

     /**
     * Element that triggered the event
     * @private
     * @type object
     */
    this.m_element = null;

     /**
     * Current hit index
     * @private
     * @type string
     */
    this.m_currentHitIndex = 0;

     /**
     * Toggle to determine whether or not to highlight hits
     * @private
     * @type string
     */
    this.m_highlightHits = false;

    this.m_tocState = "site";
}

DocoptionsTC.prototype = new EventController();
DocoptionsTC.prototype.name = "docoptionsTile";

DocoptionsTC.prototype.setElement = function (element)
{
    this.m_element = element;
}

DocoptionsTC.prototype.getElement = function ()
{
    return this.m_element;
}

DocoptionsTC.prototype.sendEvent = function (name, element)
{
    this.setEvent(name);
    this.setElement(element);
    return this.m_callback(this);
}

DocoptionsTC.prototype.init = function ()
{
    try
    {
        var docFrame = document.getElementById("docFrame");
        var docObj = getDocumentFromFrame(docFrame);

        var MainLCO = top.LCO;
        this.m_tocState = MainLCO.getTocState();
        if (this.m_tocState == 'category')
        {
            var syncTocBtn = document.getElementById("sync");
            syncTocBtn.className = "buttonOut textDisabled";
            var syncTocImg = document.getElementById("syncImg");
            syncTocImg.src = "images/docoptions/sync-disabled.gif";
        
            var prevTocDocBtn = document.getElementById("prevDoc");
            prevTocDocBtn.className = "buttonOut textDisabled";
            var prevTocDocImg = document.getElementById("prevDocImg");
            prevTocDocImg.src = "images/docoptions/prev-disabled.gif";
        
            var newTocDocBtn = document.getElementById("nextDoc");
            newTocDocBtn.className = "buttonOut textDisabled";
            var newTocDocImg = document.getElementById("nextDocImg");
            newTocDocImg.src = "images/docoptions/next-disabled.gif";
        }

        var hitObj = docObj.getElementById("hitstyle" + (this.m_currentHitIndex + 1));
        if (hitObj)
        {
            // Enable next hit button.
            var nextHitBtn = document.getElementById("nextHit");
            nextHitBtn.className = "buttonOut text";
            var nextHitImg = document.getElementById("nextHitImg");
            nextHitImg.src = "images/docoptions/nexthit.gif";

            // Enable highlight button.
            var highlightBtn = document.getElementById("highlight");
            highlightBtn.className = "buttonOut text";
            highlightBtn.title = "Remove highlighting";
            var highlightImg = document.getElementById("highlightImg");
            highlightImg.src = "images/docoptions/highlight.gif";
            this.m_highlightHits = true;

            this.onClickNextHit();
        }
    }
    catch(e)
    {
    }
}

DocoptionsTC.prototype.scrollToHit = function (hitNum)
{
    var iFrame = document.getElementById("docFrame");
    var docObj = getDocumentFromFrame(iFrame);
    var hitObj = docObj.getElementById("hitstyle" + hitNum);
    var scrollTime = 500; // 1/2 second

    if (xPageY(hitObj) < xScrollTop(docFrame, true))
    {
        xWinScrollTo(docFrame, 0, xPageY(hitObj), scrollTime)
    }
    else if (xPageY(hitObj) > xScrollTop(docFrame, true) + xClientHeight(docFrame) - 60)
    {
        xWinScrollTo(docFrame, 0, xPageY(hitObj) - xHeight(iFrame) + 50, scrollTime);
    }
}

DocoptionsTC.prototype.getHitObjs = function (docObj, hitNum)
{
    var hitObjs = new Array();
    var elementList = null;
    var tagName = "span";

    if (docObj.getElementsByTagName)
    {
        elementList = docObj.getElementsByTagName(tagName);
    }

    // If hitNum = 0, then return all elements with the tag name.
    if (hitNum == 0)
    {
        for (element in elementList)
        {
            if (elementList[element].id)
            {
                if (elementList[element].id.indexOf("hitstyle") == 0)
                {
                    hitObjs = hitObjs.concat(elementList[element]);
                }
            }
        }
    }
    else
    {
        for (element in elementList)
        {
            if (elementList[element].id == "hitstyle" + hitNum)
            {
                hitObjs = hitObjs.concat(elementList[element]);
            }
        }
    }
    return hitObjs
}


DocoptionsTC.prototype.clearHit = function (docObj, hitNum)
{
    var hitObjs = this.getHitObjs(docObj, hitNum);
    for (hitObj in hitObjs)
    {
        hitObjs[hitObj].style.backgroundColor = "transparent";
    }
}

DocoptionsTC.prototype.highlightHit = function (docObj, hitNum)
{
    var hitObjs = this.getHitObjs(docObj, hitNum);
    for (hitObj in hitObjs)
    {
        hitObjs[hitObj].style.backgroundColor = "#F0B48C";
    }
}

DocoptionsTC.prototype.unHighlightHit = function (docObj, hitNum)
{
    var hitObjs = this.getHitObjs(docObj, hitNum);
    for (hitObj in hitObjs)
    {
        hitObjs[hitObj].style.backgroundColor = "#F0E68C";
    }
}

DocoptionsTC.prototype.onClickPrevHit = function ()
{
    if (this.m_highlightHits == true)
    {
        var docFrame = document.getElementById("docFrame");
        var docObj = getDocumentFromFrame(docFrame);
        var hitObj = docObj.getElementById("hitstyle" + (this.m_currentHitIndex - 1));
        if (hitObj)
        {
            if (this.m_currentHitIndex > 1)
            {
                this.unHighlightHit(docObj, this.m_currentHitIndex);
            }
            this.m_currentHitIndex--;

            // Disable previous hit button if at the first hit.
            if (this.m_currentHitIndex == 1)
            {
                var prevHitBtn = document.getElementById("prevHit");
                prevHitBtn.className = "buttonOut textDisabled";
                var prevHitImg = document.getElementById("prevHitImg");
                prevHitImg.src = "images/docoptions/prevhit-disabled.gif";
            }

            // Always enable the next hit button.
            var nextHitBtn = document.getElementById("nextHit");
            nextHitBtn.className = "buttonOut text";
            var nextHitImg = document.getElementById("nextHitImg");
            nextHitImg.src = "images/docoptions/nexthit.gif";

            this.highlightHit(docObj, this.m_currentHitIndex);
            this.scrollToHit(this.m_currentHitIndex);
        }
    }
}

DocoptionsTC.prototype.onClickNextHit = function ()
{
    if (this.m_highlightHits == true)
    {
        var docFrame = document.getElementById("docFrame");
        var docObj = getDocumentFromFrame(docFrame);
        var hitObj = docObj.getElementById("hitstyle" + (this.m_currentHitIndex + 1));
        if (hitObj)
        {
            if (this.m_currentHitIndex > 0)
            {
                this.unHighlightHit(docObj, this.m_currentHitIndex);
            }
            this.m_currentHitIndex++;

            // Enable the previous hit button if at the second hit.
            if (this.m_currentHitIndex == 2)
            {
                var prevHitBtn = document.getElementById("prevHit");
                prevHitBtn.className = "buttonOut text";
                var prevHitImg = document.getElementById("prevHitImg");
                prevHitImg.src = "images/docoptions/prevhit.gif";
            }

            // Disable the next hit button if there are no more hits.
            var nextHitObj = docObj.getElementById("hitstyle" + (this.m_currentHitIndex + 1));
            if (nextHitObj == null)
            {
                var nextHitBtn = document.getElementById("nextHit");
                nextHitBtn.className = "buttonOut textDisabled";
                var nextHitImg = document.getElementById("nextHitImg");
                nextHitImg.src = "images/docoptions/nexthit-disabled.gif";
            }

            this.highlightHit(docObj, this.m_currentHitIndex);
            this.scrollToHit(this.m_currentHitIndex);
        }
    }
}

DocoptionsTC.prototype.onClickToggleHighlight = function ()
{
    var docFrame = document.getElementById("docFrame");
    var docObj = getDocumentFromFrame(docFrame);
    var hitObj = docObj.getElementById("hitstyle" + (this.m_currentHitIndex));
    if (hitObj)
    {
        var prevHitBtn = document.getElementById("prevHit");
        var nextHitBtn = document.getElementById("nextHit");
        var prevHitImg = document.getElementById("prevHitImg");
        var nextHitImg = document.getElementById("nextHitImg");
        var highlightBtn = document.getElementById("highlight");

        if (this.m_highlightHits == true)
        {
            // Turn highlighting off.
            this.m_highlightHits = false;
            highlightBtn.title = "Highlight hits";
            prevHitBtn.className = "buttonOut textDisabled";
            prevHitImg.src = "images/docoptions/prevhit-disabled.gif";
            nextHitBtn.className = "buttonOut textDisabled";
            nextHitImg.src = "images/docoptions/nexthit-disabled.gif";
            this.clearHit(docObj, 0);
        }
        else
        {
            // Turn highlighting on.
            this.m_highlightHits = true;
            highlightBtn.title = "Remove highlighting";
            var nextHitObj = docObj.getElementById("hitstyle" + (this.m_currentHitIndex + 1));
            if (nextHitObj != null)
            {
                nextHitBtn.className = "buttonOut text";
                nextHitImg.src = "images/docoptions/nexthit.gif";
            }
            if (this.m_currentHitIndex > 1)
            {
                prevHitBtn.className = "buttonOut text";
                prevHitImg.src = "images/docoptions/prevhit.gif";
            }
            this.unHighlightHit(docObj, 0);
            this.highlightHit(docObj, this.m_currentHitIndex);
        }
    }
}

DocoptionsTC.prototype.printDoc = function ()
{

// comment to implement multi-print functionality
    var docFrame = window.frames["docFrame"];
    docFrame.focus();
    docFrame.print();
// uncomment to implement multi-print functionality
//    this.sendEvent("E_MULTI_PRINT", null);
}

DocoptionsTC.prototype.emailDoc = function ()
{
    this.sendEvent("E_EMAIL_DOC", null);
}

DocoptionsTC.prototype.bookmarkDoc = function (object)
{
    this.sendEvent("E_BOOKMARK_DOC", object);
}

DocoptionsTC.prototype.onMouseOver = function (object)
{
    if (object.className != "buttonOut textDisabled")
    {
        object.className = "buttonOver text";
    }
}

DocoptionsTC.prototype.onMouseOut = function (object)
{
    if (object.className != "buttonOut textDisabled")
    {
        object.className = "buttonOut text";
    }
}

DocoptionsTC.prototype.syncToToc = function (id)
{
    if (this.m_tocState == "category")
    {
        return false;
    }

    if (id != "")
    {
        this.sendEvent("E_SYNC_TO_TOC", id);
    }
}

DocoptionsTC.prototype.onClickPrevResult = function (hitIndex)
{
    this.sendEvent("E_SET_HITDOC", hitIndex - 1);
}

DocoptionsTC.prototype.onClickNextResult = function (hitIndex, totalHits)
{
    this.sendEvent("E_SET_HITDOC", hitIndex + 1);
}

DocoptionsTC.prototype.onClickPrevDocument = function (id, hitCount)
{
    if (this.m_tocState == "category")
    {
        return false;
    }

    if (hitCount > 0)
    {
        this.sendEvent("E_SET_HITTOCDOC", id);
    }
    else
    {
        this.sendEvent("E_SET_TOCDOC", id);
    }
}

DocoptionsTC.prototype.onClickNextDocument = function (id, hitCount)
{
    if (this.m_tocState == "category")
    {
        return false;
    }

    if (hitCount > 0)
    {
        this.sendEvent("E_SET_HITTOCDOC", id);
    }
    else
    {
        this.sendEvent("E_SET_TOCDOC", id);
    }
}

DocoptionsTC.prototype.onClickPrevLeaf = function (leafIndex)
{
    this.sendEvent("E_SET_LEAFDOC", leafIndex - 1);
}

DocoptionsTC.prototype.onClickNextLeaf = function (leafIndex, totalLeafs)
{
    this.sendEvent("E_SET_LEAFDOC", leafIndex + 1);
}

DocoptionsTC.prototype.onClickOriginalPdf = function (href)
{
    this.sendEvent("E_SET_PDFDOC", href);
    var leafInfo = document.getElementById("leafInfo");
    leafInfo.style.visibility = "hidden";
}