﻿
// global variables
var currentLatestID = null;
var currentLinkID = null;
var spotlightTitleDiv;
var spotlightContentDiv;
var spotlightImageDiv;
var latestTitleDiv;
var latestContentDiv;
var loiTitleDiv;
var loiContentDiv;
var ajaxFetchInProgress = false;
var fadeOutInProgress = false;
var fetchResult; // variable to hold result until the wait finishes
var mouseX;
var mouseY;


/***** Show Silverlight or alternate header *****/
function slCheck() {
    var isSLInstalled = Silverlight.isInstalled('3.0');

    if (!isSLInstalled) {
        document.getElementById("silverlightControlHost").style.display = 'none';
        document.getElementById("alternateHeader").style.display = 'block';
    }
    else {
        document.getElementById("alternateHeader").style.display = 'none';
    }
}


/************* drop-down menu *******************/

var timeout = 250;
var closetimer = 0;
var openMenuItem = 0;

function openMenu(id) {

    resetCloseTimer();

    if (openMenuItem)
        openMenuItem.style.visibility = 'hidden';

    openMenuItem = document.getElementById(id);
    openMenuItem.style.visibility = 'visible';
}

function closeLayer() {
    if (openMenuItem)
        openMenuItem.style.visibility = 'hidden';
}

function startCloseTimer() {
    closetimer = window.setTimeout(closeLayer, timeout);
}

function resetCloseTimer() {
    if (closetimer) {
        window.clearTimeout(closetimer);
        closetimer = null;
    }
}
document.onclick = closeLayer;


/****** side panels *******/

function setFocus(elemId) {
    document.getElementById(elemId).focus();
}

function getLatest(getNext) {
    if (ajaxFetchInProgress != true) {
        ajaxFetchInProgress = true;
        fade('out', latestTitleDiv);
        fade('out', latestContentDiv);
        AJAXCalls.GetLatest(currentLatestID, getNext, onGetLatestCompleted, onGetLatestFailed);
    }
}
function onGetLatestCompleted(result, userContext, methodName) {

    currentLatestID = result[0];
    var divLatestTitle = document.getElementById(latestTitleDiv);
    if (divLatestTitle != null)
        divLatestTitle.innerHTML = result[1];
    var divLatestContent = document.getElementById(latestContentDiv);
    if (divLatestContent != null)
        divLatestContent.innerHTML = result[2];

    if (result[3] == 0) {
        document.getElementById('divLatestPrevious').style.display = 'none';
    }
    else {
        document.getElementById('divLatestPrevious').style.display = 'block';
    }
    if (result[4] == 0) {
        document.getElementById('divLatestNext').style.display = 'none';
    }
    else {
        document.getElementById('divLatestNext').style.display = 'block';
    }

    fade('in', latestTitleDiv);
    fade('in', latestContentDiv);

    ajaxFetchInProgress = false;
}

function onGetLatestFailed() {
}

function getLOI() {
    if (ajaxFetchInProgress != true) {
        ajaxFetchInProgress = true;
        fade('out', loiTitleDiv);
        fade('out', loiContentDiv);
        AJAXCalls.GetLOI(currentLinkID, onGetLOICompleted, onGetLOIFailed);
    }
}

function onGetLOICompleted(result, userContext, methodName) {
    currentLinkID = result[0];
    var divLOITitle = document.getElementById(loiTitleDiv);
    if (divLOITitle != null)
        divLOITitle.innerHTML = result[1];

    var divLOIContent = document.getElementById(loiContentDiv);
    if (divLOIContent != null)
        divLOIContent.innerHTML = result[2];

    fade('in', loiTitleDiv);
    fade('in', loiContentDiv);

    ajaxFetchInProgress = false;
}

function onGetLOIFailed() {
    ajaxFetchInProgress = false;
}

function getSpotlight() {

    if (ajaxFetchInProgress != true) {
        ajaxFetchInProgress = true;
        fade('out', spotlightImageDiv);
        fade('out', spotlightTitleDiv);
        fade('out', spotlightContentDiv);

        AJAXCalls.GetSpotlight(currentLinkID, onGetSpotlightCompleted, onGetSpotlightFailed);
    }
}

function onGetSpotlightCompleted(result, userContext, methodName) {
    fetchResult = result;
    
    ajaxFetchInProgress = false;
    setTimeout(setSpotlight, 550);
}

function setSpotlight() {
    result = fetchResult;

    currentLinkID = result[0];

    var divSpotlightTitle = document.getElementById(spotlightTitleDiv);
    if (divSpotlightTitle != null)
        divSpotlightTitle.innerHTML = result[1];

    var divSpotlightContent = document.getElementById(spotlightContentDiv);
    if (divSpotlightContent != null)
        divSpotlightContent.innerHTML = result[2];

    var divSpotlightImage = document.getElementById(spotlightImageDiv);
    if (divSpotlightImage != null)
        divSpotlightImage.innerHTML = result[3];

    fade('in', spotlightImageDiv);
    fade('in', spotlightTitleDiv);
    fade('in', spotlightContentDiv);
}

function onGetSpotlightFailed() {
    ajaxFetchInProgress = false;
}




/********************** General Functions ********************/

function showDiv(divName) {
    var div = document.getElementById(divName);
    if (div.style.display == 'none')
        div.style.display = 'block';
    else 
        div.style.display = 'none';
}

function fade(direction, elementId) {

    var element = document.getElementById(elementId);

    if (element.FadeDirection == null)
        element.FadeDirection = direction;
    else {
        if (element.FadeDirection != direction) {
            setTimeout("fade('" + direction + "', '" + elementId + "')", 35);
            return;
        }
    }
    if (element.CurrentOpacity == null)
        element.CurrentOpacity = 1;

    if (direction == 'in')
        element.style.display = 'block';
    else
        fadeOutInProgress = true;

    // apply the new opacity value in IE + FireFox
    element.CurrentOpacity = (element.CurrentOpacity + ((direction == 'out') ? -.22 : .22));
    element.style.opacity = element.CurrentOpacity;
    element.style.filter = 'alpha(opacity = ' + (element.CurrentOpacity * 100) + ')';

    if (element.CurrentOpacity < 0 || element.CurrentOpacity > 1) {
        element.FadeDirection = null;

        if (element.CurrentOpacity < 0) {
            element.style.display = 'none';
            element.CurrentOpacity = 0;
        }
        if (element.CurrentOpacity > 1)
            element.CurrentOpacity = 1;

        fadeOutInProgress = false;
        return;
    }

    setTimeout("fade('" + direction + "', '" + elementId + "')", 35);
}








/******** Silverlight error *************/

function onSilverlightError(sender, args) {
    var appSource = "";
    if (sender != null && sender != 0) {
        appSource = sender.getHost().Source;
    }

    var errorType = args.ErrorType;
    var iErrorCode = args.ErrorCode;

    if (errorType == "ImageError" || errorType == "MediaError") {
        return;
    }

    var errMsg = "Unhandled Error in Silverlight Application " + appSource + "\n";

    errMsg += "Code: " + iErrorCode + "    \n";
    errMsg += "Category: " + errorType + "       \n";
    errMsg += "Message: " + args.ErrorMessage + "     \n";

    if (errorType == "ParserError") {
        errMsg += "File: " + args.xamlFile + "     \n";
        errMsg += "Line: " + args.lineNumber + "     \n";
        errMsg += "Position: " + args.charPosition + "     \n";
    }
    else if (errorType == "RuntimeError") {
        if (args.lineNumber != 0) {
            errMsg += "Line: " + args.lineNumber + "     \n";
            errMsg += "Position: " + args.charPosition + "     \n";
        }
        errMsg += "MethodName: " + args.methodName + "     \n";
    }

    // throw new Error(errMsg);
}