﻿function marketsummary_jslib() {

    this.regionId = "US";
    this.marketSymbol = "US;SPX";
    this.chartLabel = "S&P 500";    

    this.environmentPath = "http://investing.businessweek.com/";
   

    var siteLocation = document.domain;
    if (siteLocation == "dev2.wallst.com") {
        this.chartPath = "http://dev2.wallst.com/businessweek";
    } else if (siteLocation == "businessweek.wsodqa.com") {
        this.chartPath = "http://businessweek.wsodqa.com";    
    } else {
        this.chartPath = "http://charts.businessweek.com";
    }

    this.className = "className";
    var browserName = navigator.appName; // Get the Browser Name
    var userAgent = navigator.userAgent;    

    if (browserName == "Microsoft Internet Explorer") {
        if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { //test for MSIE x.x;
            var ieversion = new Number(RegExp.$1) // capture x.x portion and store as a number
           }           
        if (ieversion >= 8) {
            this.className = "className";
        } else {
            this.className = "className";
        }
    } else {
        if (document.addEventListener) {
            this.className = "class";
        }
    }
}

marketsummary_jslib.prototype.initPage = function(el, dur, alt) {

    //this.setRegionId();

    if (this.regionId == "US") {
        this.marketSymbol = "US;SPX";
        this.chartLabel = "S&P 500";
    } else if (this.regionId == "Europe") {
        this.marketSymbol = "GB;FTSE ";
        this.chartLabel = "FTSE 100";
    } else if (this.regionId == "Asia") {
        this.marketSymbol = "CN;SHI";
        this.chartLabel = "Shanghai";
    }
}

marketsummary_jslib.prototype.getActiveTab = function(section) {

    if (section == 1) {

        var us = document.getElementById("ms-us-top");
        var eu = document.getElementById("ms-eu-top");
        var as = document.getElementById("ms-as-top");

    } else if (section == 2) {

        var us = document.getElementById("ms-us-bottom");
        var eu = document.getElementById("ms-eu-bottom");
        var as = document.getElementById("ms-as-bottom");
    }

    var activeTab = 0;

    if (us.className.indexOf("active") > -1) {
        activeTab = 0;
    } else if (eu.className.indexOf("active") > -1) {
        activeTab = 1;
    } else if (as.className.indexOf("active") > -1) {
        activeTab = 2;
    }

    return activeTab;

}

marketsummary_jslib.prototype.getActiveTabBottom = function(div, className) {


    if (div != "ms-nav") {
        var el = div;
    } else {
        var el = document.getElementById(div);
    }

    var tabs = [];
    var activeTab = 0;
    var j = 0;

    for (var i = 0; i < el.childNodes.length; i++) {
        if (el.childNodes[i].nodeType == 1) {
            tabs[j] = el.childNodes[i];
            if (el.childNodes[i].className == className) {
                activeTab = j;
            }
            j++;
        }
    }
    return activeTab;
}

marketsummary_jslib.prototype.changeTab = function(tab) {

    this.tab = tab;
    var usMarketsDiv = document.getElementById("ms-us-top");
    var europeMarketsDiv = document.getElementById("ms-eu-top");
    var asianMarketsDiv = document.getElementById("ms-as-top");

    var usMarketsDivBottom = document.getElementById("ms-us-bottom");
    var europeMarketsDivBottom = document.getElementById("ms-eu-bottom");
    var asianMarketsDivBottom = document.getElementById("ms-as-bottom");

    var activeTab = marketSummary.getActiveTab(1);

    if (this.tab == 0) {

    	document.getElementById("ms-nav-image").src = "http://charts.businessweek.com/research/markets/summary/images/ustabimage.png";
        
        usMarketsDiv.setAttribute(this.className, "active");
        europeMarketsDiv.setAttribute(this.className, "");
        asianMarketsDiv.setAttribute(this.className, "");
        usMarketsDivBottom.setAttribute(this.className, "active");
        europeMarketsDivBottom.setAttribute(this.className, "");
        asianMarketsDivBottom.setAttribute(this.className, "");

        this.regionId = "US";
        this.marketSymbol = "US;SPX";
        this.chartLabel = "S&P 500";
        this.changeChartLabel(this.regionId);
    }
    if (this.tab == 1) {
        document.getElementById("ms-nav-image").src = "http://charts.businessweek.com/research/markets/summary/images/eutabimage.png";
        usMarketsDiv.setAttribute(this.className, "");
        europeMarketsDiv.setAttribute(this.className, "active");
        asianMarketsDiv.setAttribute(this.className, "");
        usMarketsDivBottom.setAttribute(this.className, "");
        europeMarketsDivBottom.setAttribute(this.className, "active");
        asianMarketsDivBottom.setAttribute(this.className, "");

        this.regionId = "Europe";
        this.marketSymbol = "GB;FTSE";
        this.chartLabel = "FTSE 100";
        this.changeChartLabel(this.regionId);
    }
    if (this.tab == 2) {
        document.getElementById("ms-nav-image").src = "http://charts.businessweek.com/research/markets/summary/images/astabimage.png";
        usMarketsDiv.setAttribute(this.className, "");
        europeMarketsDiv.setAttribute(this.className, "");
        asianMarketsDiv.setAttribute(this.className, "active");
        usMarketsDivBottom.setAttribute(this.className, "");
        europeMarketsDivBottom.setAttribute(this.className, "");
        asianMarketsDivBottom.setAttribute(this.className, "active");
        this.regionId = "Asia";
        this.marketSymbol = "HK;HSI";
        this.chartLabel = "Hang Seng Comp";
        this.changeChartLabel(this.regionId);
    }

}

marketsummary_jslib.prototype.setRegionId = function(num, div, title) {

    var activeTab = this.getActiveTab("ms-nav", "first active");
    if (activeTab == 0) {
        this.regionId = "US";
    } else if (activeTab == 1) {
        this.regionId = "Europe";
    } else if (activeTab == 2) {
        this.regionId = "Asia";
    }
}

marketsummary_jslib.prototype.changeRowTimeOut = function(num, div, title) {

    var activeTab = this.getActiveTab(1);

    if (activeTab == 0) {
        this.regionId = "US";
    }
    if (activeTab == 1) {
        this.regionId = "Europe";
    }
    if (activeTab == 2) {
        this.regionId = "Asia";
    }

    var table = document.getElementById(div);

    var rows = [];

    for (var i = 0; i < table.getElementsByTagName("tr").length; i++) {
        row = table.getElementsByTagName("tr")[i];
        if (row.className == "selected") {
            this.oldActiveRow = i;
        }
        row.setAttribute(this.className, "");
        rows[i] = row;
    }

    rows[num].setAttribute(this.className, "selected");

    var time = 500;

    var that = this;

    this.changeRowTimer = window.setTimeout(function() { changeIndexRow(num, table, title) }, time);

    function changeIndexRow(rowNumber, tableDiv, graphTitle) {

        //var table = document.getElementById(tableDiv);

        var rows = [];

        for (var i = 0; i < tableDiv.getElementsByTagName("tr").length; i++) {
            row = tableDiv.getElementsByTagName("tr")[i];
            rows[i] = row;
        }

        //rows[rowNumber].setAttribute(that.className, "selected");

        var chartLabel = rows[rowNumber].title;

        if (rows[rowNumber].id == "SPX") {
            that.marketSymbol = "US;SPX";
            graphTitle = "S&amp;P 500";
        } else if (rows[rowNumber].id == "DJI") {
            that.marketSymbol = "US&DJI";
            graphTitle = "DJIA";
        } else if (rows[rowNumber].id == "COMP") {
            that.marketSymbol = "US;COMP";
            graphTitle = "NASDAQ";
        } else if (rows[rowNumber].id == "FTSE") {
            that.marketSymbol = "GB;FTSE";
            graphTitle = "FTSE 100";
        } else if (rows[rowNumber].id == "CAC") {
            that.marketSymbol = "FR;CAC";
            graphTitle = "CAC 40";
        } else if (rows[rowNumber].id == "DAX") {
            that.marketSymbol = "DE;DAXX";
            graphTitle = "DAXX Index";
        } else if (rows[rowNumber].id == "SHI") {
            that.marketSymbol = "CN;SHI";
            graphTitle = "Shanghai";
        } else if (rows[rowNumber].id == "HSI") {
            that.marketSymbol = "HK;HSI";
            graphTitle = "Hang Seng";
        } else if (rows[rowNumber].id == "NSX") {
            that.marketSymbol = "IN;NSX";
            graphTitle = "India NSE 50";
        }

        if (graphTitle) {
            var altTag = graphTitle;
        } else {
            var altTag = that.marketSymbol;
        }

        that.updateChart('1', altTag, chartLabel);
        that.oldActiveRow = rowNumber;
    };

}

marketsummary_jslib.prototype.changeRow = function(num, div, title) {

    var table = document.getElementById(div);

    var rows = [];

    for (var i = 0; i < table.getElementsByTagName("tr").length; i++) {
        row = table.getElementsByTagName("tr")[i];
        row.setAttribute(this.className, "");
        rows[i] = row;
    }

    rows[num].setAttribute(this.className, "selected");

    var chartLabel = rows[num].title;

    if (rows[num].id == "SPX") {
        this.marketSymbol = "US;SPX";
    } else if (rows[num].id == "DJI") {
        this.marketSymbol = "US&DJI";
    } else if (rows[num].id == "COMP") {
        this.marketSymbol = "US;COMP";
    } else if (rows[num].id == "BEL") {
        this.marketSymbol = "BE;BEL";
    } else if (rows[num].id == "CAC") {
        this.marketSymbol = "FR;CAC";
    } else if (rows[num].id == "DAX") {
        this.marketSymbol = "DE;DAXX";
    } else if (rows[num].id == "SHI") {
        this.marketSymbol = "CN;SHI";
    } else if (rows[num].id == "HSI") {
        this.marketSymbol = "HK;HSI";
    } else if (rows[num].id == "NSX") {
        this.marketSymbol = "IN;NSX";
    }

    if (title) {
        var altTag = title;
    } else {
        var altTag = this.marketSymbol;
    }

    this.updateChart('1', altTag);
}

marketsummary_jslib.prototype.updateChart = function(dur, alt, chartLabel) {
    marketSummary.chartLabel = chartLabel;
    var chartSym = this.marketSymbol;

    if (chartSym == "US&DJI") {
        var chartSym = "DJI";
    }

    if (this.regionId == "US") {
        var imagesrc = '<img alt="Stock Market Index Performance for ' + this.marketSymbol + '" title="Graph of  ' + alt + ' Stock Market Index Performance" src="' + this.chartPath + '/services/charts/marketsModuleChart.asp?sym=' + chartSym + '&amp;w=210&amp;h=145&amp;style=mountain&amp;d=' + dur + '&amp;upperheight=127&amp;type=m" /><div id=chart-label-us>' + this.chartLabel + '</div>';
        document.getElementById("ms-us-chart-img").innerHTML = imagesrc;
    }
    else if (this.regionId == "Europe") {
        var imagesrc = '<img alt="Stock Market Index Performance for ' + this.marketSymbol + '" title="Graph of  ' + alt + ' Stock Market Index Performance" src="' + this.chartPath + '/services/charts/marketsModuleChart.asp?sym=' + chartSym + '&amp;w=210&amp;h=145&amp;style=mountain&amp;d=' + dur + '&amp;upperheight=127&amp;type=m" /><div id=chart-label-eu>' + this.chartLabel + '</div>';
        document.getElementById("ms-eu-chart-img").innerHTML = imagesrc;
    }
    else if (this.regionId == "Asia") {
        var imagesrc = '<img alt="Stock Market Index Performance for ' + this.marketSymbol + '" title="Graph of  ' + alt + ' Stock Market Index Performance" src="' + this.chartPath + '/services/charts/marketsModuleChart.asp?sym=' + chartSym + '&amp;w=210&amp;h=145&amp;style=mountain&amp;d=' + dur + '&amp;upperheight=127&amp;type=m" /><div id=chart-label-as>' + this.chartLabel + '</div>';
        document.getElementById("ms-as-chart-img").innerHTML = imagesrc;
    }
}

marketsummary_jslib.prototype.changeSection = function(num, region) {

    if (region == "US") {
        var el = "ms-us-screener-tabs";
        var divPrefix = "ms-us-screener-"
    } else if (region == "Europe") {
        var el = "ms-eu-screener-tabs";
        var divPrefix = "ms-eu-screener-"
    } else if (region == "Asia") {
        var el = "ms-as-screener-tabs";
        var divPrefix = "ms-as-screener-"
    }

    var tabs = [];
    var j = 0;

    var navigation = document.getElementById(el).getElementsByTagName("ul")[0];

    var activeTab = marketSummary.getActiveTabBottom(navigation, "first active");

    if (activeTab != num) {
        for (var i = 0; i < navigation.childNodes.length; i++) {
            if (navigation.childNodes[i].nodeType == 1) {
                tabs[j] = navigation.childNodes[i];
                j++;
            }
        }

        var listItems = navigation.getElementsByTagName("li");
        tabs[num].setAttribute(this.className, "first active");
        tabs[activeTab].setAttribute(this.className, "");

        if (num == 0) {
            document.getElementById(divPrefix + "gainers").setAttribute(this.className, "screener-stats screener-gainers");
            document.getElementById(divPrefix + "losers").setAttribute(this.className, "screener-stats screener-losers");
            document.getElementById(divPrefix + "actives").setAttribute(this.className, "screener-stats screener-actives active");
            listItems[0].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/activesactivetab.png";
            listItems[1].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/gainerstab.png";
            listItems[2].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/loserstab.png";
        }
        if (num == 1) {
            document.getElementById(divPrefix + "gainers").setAttribute(this.className, "screener-stats screener-gainers active");
            document.getElementById(divPrefix + "losers").setAttribute(this.className, "screener-stats screener-losers");
            document.getElementById(divPrefix + "actives").setAttribute(this.className, "screener-stats screener-actives");
            listItems[0].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/activestab.png";
            listItems[1].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/gainersactivetab.png";
            listItems[2].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/loserstab.png";
        }
        if (num == 2) {
            document.getElementById(divPrefix + "gainers").setAttribute(this.className, "screener-stats screener-gainers");
            document.getElementById(divPrefix + "losers").setAttribute(this.className, "screener-stats screener-losers active");
            document.getElementById(divPrefix + "actives").setAttribute(this.className, "screener-stats screener-actives");
            listItems[0].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/activestab.png";
            listItems[1].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/gainerstab.png";
            listItems[2].getElementsByTagName('img')[0].src = this.environmentPath + "/research/markets/summary/images/losersactivetab.png";
        }
    }
}

marketsummary_jslib.prototype.initPopUp = function(evt, sym) {
    // BW FIX FOR JS ERRORS
    sym = sym.replace(";", "semi");

    newsym = sym.replace("semi", ";");

    var flyoutImage = document.getElementById("flyoutImage" + sym);

    flyoutImage.src = "http://charts.businessweek.com/services/charts/marketsModuleChart.asp?sym=" + newsym + "&w=190&h=118&style=mountain&d=1&upperheight=100&type=p";

    //hide all currently open popups in case user is rapidly mousing over multiple targets
    var popupContentDiv = document.getElementById("ms-popup-content");
    var individualPopups = popupContentDiv.childNodes;
    for (var i in individualPopups) {
        if (individualPopups[i].id) {
            individualPopups[i].setAttribute(this.className, "iH");
        }
    }

    //track mouse location
    var e = evt;
    var x = 0;
    var y = 0;

    if (e.pageX || e.pageY) {
        x = e.pageX;
        y = e.pageY;
    }
    else if (e.clientX || e.clientY) {
        x = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
        y = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
    }

    var popUpContentDivId = "ms-popup-symbol-" + sym;

    var popUpDiv = document.getElementById("ms-popup");
    var popUpSymbolDiv = document.getElementById(popUpContentDivId);

    popUpDiv.style.top = (y - 0) + 'px';
    popUpDiv.style.left = (x + 10) + 'px';
    // BW FIX FOR MAKING FLYOUTS SHOW UP ON TOP OF AND NOT OBSCURED BY BELLY-BAND
    popUpDiv.style.zIndex = '10';

    popUpDiv.setAttribute(this.className, "active");
    document.getElementById("ms-popup-content").setAttribute(this.className, "");
    popUpSymbolDiv.setAttribute(this.className, "");

}

marketsummary_jslib.prototype.closePopUp = function(evt, sym) {

    // BW FIX FOR JS ERRORS
    sym = sym.replace(";", "semi");

    var popUpDiv = document.getElementById("ms-popup");

    var popUpContentDivId = "ms-popup-symbol-" + sym;

    //alert("X: " + popUpDiv.offsetLeft + ", Y: " + popUpDiv.offsetTop);
    var popUpContentDiv = document.getElementById(popUpContentDivId);

    popUpDiv.setAttribute(this.className, "iH");
    document.getElementById("ms-popup-content").setAttribute(this.className, "iH");
    popUpContentDiv.setAttribute(this.className, "iH");

}

marketsummary_jslib.prototype.changeChartLabel = function(region) {

    if (region == "US") {
        document.getElementById("chart-label-us").innerHTML = this.chartLabel;
    } else if (region == "Europe") {
        document.getElementById("chart-label-eu").innerHTML = this.chartLabel;
    } else {
        document.getElementById("chart-label-as").innerHTML = this.chartLabel;
    }
}

marketsummary_jslib.prototype.popUpTimeOut = function(evt, sym, time) {

    var symbol = sym;
    this.popUpTimer = window.setTimeout(function(evt, symbol) { marketSummary.closePopUp(evt, sym) }, time);

}

marketsummary_jslib.prototype.popUpCancelTimeOut = function(evt, sym) {

    window.clearTimeout(this.popUpTimer);

}

marketsummary_jslib.prototype.changeRowCancelTimeOut = function(div) {

    window.clearTimeout(this.changeRowTimer);

    var table = document.getElementById(div);

    var rows = [];

    for (var i = 0; i < table.getElementsByTagName("tr").length; i++) {
        row = table.getElementsByTagName("tr")[i];
        row.setAttribute(this.className, "");
        rows[i] = row;
    }

    rows[this.oldActiveRow].setAttribute(this.className, "selected");
}

var marketSummary = new marketsummary_jslib();