﻿/// <reference path="../API/Agility.js" />

Agility.RegisterNamespace("BNN.Modules.MarketMonitorSmall");

(function(MarketMonitorSmall) {

    var marketLabels = ["TSX", "DJIA", "S&P 500", "Nasdaq"];
    var marketNames = ["S&P/TSX", "Dow Jones", "S&P 500", "NASDAQ"];
    var marketSymbols = ["TSX-I", "DJIA", "SPX-I", "COMP-I"];

    MarketMonitorSmall.OnInit = function() {

        $("#MarketMonitorSmall .Main .Indexes div").bind("click", function() {

            $("#MarketMonitorSmall .Main .Indexes div").each(function(index) {
                $(this).removeClass("Selected");
            });

            $(this).addClass("Selected");
            //update chart
            var symbol = _getMarketSymbolFromMarketLabel($(this).text());

            _populateMarketChart($(this), symbol);

        });

        _populateMarketChart($("#MarketMonitorSmall .Main .Indexes div:first-child"), marketSymbols[0]);

        // populate the market data table underneath
        var marketData = [];

        var processed = 0;

        for (var i = 0; i < marketSymbols.length; i++) {

            $.getJSON(MarketDataServiceUrl + "/GetStockQuote?symbol=" + marketSymbols[i] + "", function(result) {

                if (result != undefined && result.Ticker != null) {
                    var change = result.NetChange;
                    change = change.indexOf("-") == 0 ? change.substring(1) : change;
                    change = change.indexOf(".") == 0 ? "0" + change : change;

                    marketData.push({
                        "Order": _getOrderFromMarketSymbols(result.Ticker),
                        "Name": _getMarketNameFromTicker(result.Ticker),
                        "Change": change,
                        "Price": result.Last,
                        "CssClass": (result.NetChange == undefined || result.NetChange == "") ? "Neutral" : (result.NetChange.indexOf("-") == 0 ? "Negative" : "Positive")
                    });
                }

                processed++;

                if (processed >= marketSymbols.length - 1) {
                    marketData.sort(function(a, b) {
                        return (a.Order < b.Order) ? -1 : 1;
                    });
                    _processMarketTemplate(marketData);
                }
            });
        };
		
		var searchBox = $(".MarketMonitorSmall_StockSearch .SearchBox").bind("focus", function() {
            if (searchBox.val() == searchBox.attr('watermark')) {
                searchBox.val("");
            }
        }).bind("blur", function() {
            if (searchBox.val() == "") {
                searchBox.val(searchBox.attr('watermark'));
            }
        }).bind("keydown", function(event) {
            if (event.which || event.keyCode) {
                if ((event.which == 13) || (event.keyCode == 13)) {
                    $(this).next().trigger("click");
                }
            }
        });
		
		if (searchBox.val() == "") {
			searchBox.val(searchBox.attr('watermark'));
		}
    };

    _getMarketSymbolFromMarketLabel = function(marketLabel) {
        for (var i = 0; i < marketLabels.length; i++) {
            if (marketLabel == marketLabels[i]) {
                return marketSymbols[i];
            }
        }
    }

    _processMarketTemplate = function(data) {
        var container = $("#MarketMonitorSmall .MarketMonitorData");
        var templateUrl = Agility.ResolveUrl("~/ClientTemplates/MarketMonitorSmall.htm");
        container.setTemplateURL(templateUrl);
        container.processTemplate(data);
    }

    _getOrderFromMarketSymbols = function(ticker) {
        for (var i = 0; i < marketSymbols.length; i++) {
            if (marketSymbols[i].indexOf(ticker) == 0) {
                return i;
            }
        }
    }

    _getMarketNameFromTicker = function(ticker) {
        for (var i = 0; i < marketSymbols.length; i++) {
            if (marketSymbols[i].indexOf(ticker) == 0) {
                return marketNames[i];
            }
        }
    }

    _populateMarketChart = function(obj, selectedMarketSymbol) {

        $(obj).addClass("Selected");

        //load chart
        $.getJSON(MarketDataServiceUrl + "/GetMarketMonitorSmallChartUrl?symbol=" + selectedMarketSymbol + "", function(result) {
            var chartHtml = "<img src=\"" + result + "\" id=\"chart1\">";
            $("#MarketMonitorSmall .Main .Chart").html(chartHtml);
        });
    }

})(BNN.Modules.MarketMonitorSmall);
