﻿Agility.RegisterNamespace("BNN.Modules.CurrenciesData");

(function(CurrenciesData) {

    CurrenciesData.Load = function(target, currencyList, exclude) {

        var data = [];
        var processed = 0;

        for (var i = 0; i < currencyList.length; i++) {
            var currency = currencyList[i].split("|");
            if (currency[0] != exclude) {
                $.getJSON(MarketDataServiceUrl + "/GetStockQuote?symbol=" + exclude + "/" + currency[0] + "-I", function(result) {

                    if (result != undefined && result.Ticker != null) {
                        var ticker = result.Ticker.split("/")[1];
                        var change = result.NetChange;
                        var price = result.Last;
                        var positive = change != null && change != "" && change.indexOf("-") != 0;
                        var cssClass = (change == "0" || change == "") ? "Neutral" : (positive ? "Positive" : "Negative");
                        var order = _getOrderFromCurrencyList(currencyList, ticker);
                        var alt = (order == 0 || order == 1 || (order % 2) == 1) ? "" : "Alt";

                        // use custom symbols in design
                        var displayedTicker = ticker == "CAD" ? "$Cdn"
                            : ticker == "USD" ? "$US"
                            : ticker == "JPY" ? "Yen"
                            : ticker == "EUR" ? "Euro" : ticker;

                        change = _formatCurrency(change);
                        formattedPrice = _formatCurrency(price);
                        price = _getSymbolFromCurrencyList(currencyList, ticker) + " " + formattedPrice;

                        data.push({ "Order": order, "RowCssClass": alt, "Name": displayedTicker, "ChangeCssClass": cssClass, "Change": change, "Price": price })
                    }

                    processed++;

                    if (processed >= currencyList.length - 1) {
                        data.sort(function(a, b) {
                            return (a.Order < b.Order) ? -1 : 1;
                        });
                        _processCurrencyTemplate(target, data);
                    }

                });
            }
        }
    };

    _processCurrencyTemplate = function(target, data) {
        var container = $("#" + target);
        var templateUrl = Agility.ResolveUrl("~/ClientTemplates/CurrenciesData.htm");

        container.setTemplateURL(templateUrl)
        container.processTemplate(data);
    }

    _formatCurrency = function(data) {
        var tmp = data;
        if (tmp.indexOf("-") == 0) {
            tmp = tmp.substring(1);
        }

        if (tmp.indexOf(".") == 0) {
            tmp = "0" + tmp;
        }

        return tmp;
    }

    _getSymbolFromCurrencyList = function(currencyList, ticker) {
        for (var i = 0; i < currencyList.length; i++) {
            var currency = currencyList[i].split("|");
            if (currency != undefined && currency.length == 2 && currency[0] == ticker) {
                return currency[1];
            }
        }
    }

    _getOrderFromCurrencyList = function(currencyList, ticker) {
        for (var i = 0; i < currencyList.length; i++) {
            var currency = currencyList[i].split("|");
            if (currency != undefined && currency.length > 0 && currency[0] == ticker) {
                return i;
            }
        }
    }

})(BNN.Modules.CurrenciesData);
