/// <reference path="jquery-1.3.2-vsdoc2.js" />

var ServiceUrl = "/~request/Component.DigitalFive.TRKD.QuotesList/?Code=";

var StockItems = {};
var CurrencyItems = {};

var Stocks = ["/.KLSE", "/.N225", "/.HSI", "XAU=X", "XAG=X"];
var Currencies = ["SGDMYR=X", "JPYMYR=X", "MYR=X", "EURMYR=X"];
var CurrencyCode = ["AUD", "GBP", "CAD",  "EUR", "JPY", "MYR", "SGD", "CHF", "USD"];

var greenBgClass = "finance_greenbg";
var redBgClass = "finance_redbg";
var greenTxtClass = "finance_greentxt";
var redTxtClass = "finance_redtxt";

var SideBarStockLabels = new Array();

SideBarStockLabels["/.KLSE"] = "KLSE";
SideBarStockLabels["/.N225"] = "NIKKEI";
SideBarStockLabels["/.HSI"] = "HANG SENG";
SideBarStockLabels["XAU=X"] = "GOLD (CMX)";
SideBarStockLabels["XAG=X"] = "SILVER (CMX)";

var CurrencyLabels = new Array();

CurrencyLabels["AUD"] = "Australian dollar";
CurrencyLabels["GBP"] = "British pound";
CurrencyLabels["CAD"] = "Canadian dollar";
CurrencyLabels["EUR"] = "Euro";
CurrencyLabels["JPY"] = "Japanese yen";
CurrencyLabels["MYR"] = "Malaysian ringgit";
CurrencyLabels["SGD"] = "Singapore dollar";
CurrencyLabels["CHF"] = "Swiss franc";
CurrencyLabels["USD"] = "United States dollar";

String.format = function () {
    var s = arguments[0];
    for (var i = 0; i < arguments.length - 1; i++) {
        var reg = new RegExp("\\{" + i + "\\}", "gm");
        s = s.replace(reg, arguments[i + 1]);
    }

    return s;
} 

$(document).ready(function () {
    InitSidebar();
});

function InitSidebar() {

    for(code in CurrencyLabels){
        $('#CurrencyFrom').
              append($("<option></option>").
              attr("value",code).
              text(CurrencyLabels[code])); 

        $('#CurrencyTo').
              append($("<option></option>").
              attr("value",code).
              text(CurrencyLabels[code]));
    }

    for (var i = 0; i < CurrencyCode.length; i++){
        for (var j = 0; j < CurrencyCode.length; j++){

            var quotes = CurrencyCode[i] + CurrencyCode[j] + "=X";

            if (j == 0){
                quotes = quotes + "|" + CurrencyCode[i] + "=X";
            }
            
            $.ajax({
                url: ServiceUrl + quotes,
                dataType: "xml",
                success: function (xml) {
                    $(xml).find("Item").each(function () {
                
                        var quoteName = $(this).find("quote").text();

                        if (CurrencyItems[quoteName] == undefined) {
                            CurrencyItems[quoteName] = {};
                        }

                        CurrencyItems[quoteName].quote = quoteName;
                        CurrencyItems[quoteName].name = $(this).find("name").text();
                        CurrencyItems[quoteName].tick = $(this).find("tick").text();
                        CurrencyItems[quoteName].price = $(this).find("price").text();
                        CurrencyItems[quoteName].change = $(this).find("change").text();
                        CurrencyItems[quoteName].changepct = $(this).find("changepct").text();
                    });
                }
            });
        }
    }

    $('#CurrencyFrom > option[value="USD"]').attr('selected', 'selected');
    $('#CurrencyTo > option[value="MYR"]').attr('selected', 'selected');
    $('#CurrencyCode').html("MYR");

    $.ajax({
        url: ServiceUrl + Stocks.join("|") + "|" + Currencies.join("|"),
        dataType: "xml",
        success: function (xml) {
            $(xml).find("Item").each(function () {
                
                var quoteName = $(this).find("quote").text();

                if (StockItems[quoteName] == undefined) {
                    StockItems[quoteName] = {};
                }

                StockItems[quoteName].quote = quoteName;
                StockItems[quoteName].name = $(this).find("name").text();
                StockItems[quoteName].tick = $(this).find("tick").text();
                StockItems[quoteName].price = $(this).find("price").text();
                StockItems[quoteName].change = $(this).find("change").text();
                StockItems[quoteName].changepct = $(this).find("changepct").text();
            });

            DisplayStocks();
            DisplayCurrencies();
        }
    });
}

function Convert(){
    var inputAmount = parseFloat($.trim($("#AmountText").val()));

    var fromCode = $("#CurrencyFrom option:selected").val();
    var toCode = $("#CurrencyTo option:selected").val();
    var keyName = fromCode + toCode + "=X";

    if (isNaN(inputAmount)){
        $("#ConvertedResult").html("");
        $("#CurrencyCode").html(toCode);

        return;
    }

    if (!isNaN(inputAmount) && fromCode == toCode){
        $("#ConvertedResult").html(inputAmount);
        $("#CurrencyCode").html(toCode);

        return;
    }

    if (toCode == "USD"){
        keyName = fromCode + "=X";
    }

    if (fromCode == "USD" && (toCode == "CAD" || toCode == "JPY" || toCode == "MYR" || toCode == "SGD" || toCode == "CHF")) {
        keyName = toCode + "=X";
    }

    if (CurrencyItems[keyName] != undefined && !isNaN(inputAmount))
    {
        var convertedResult = 0;

        if (toCode == "USD" && (fromCode == "CAD" || fromCode == "JPY" || fromCode == "MYR" || fromCode == "SGD" || fromCode == "CHF")) {
            convertedResult = inputAmount / parseFloat(CurrencyItems[keyName].price);
        }        
        else{
            convertedResult = parseFloat(CurrencyItems[keyName].price) * inputAmount;
        }

        if (isNaN(convertedResult)){
            convertedResult = "";
        }
        else{
            convertedResult = Math.round(convertedResult * 100) / 100;
        }

        $("#ConvertedResult").html(convertedResult);
        $("#CurrencyCode").html(toCode);
    }
}

function DisplayStocks() {
    var stockHtml = "";
    var stockTmpl = "<tr>" + 
                  "<td><a href='http://finance.mylaunchpad.com.my/WorldMarket/Stock?Code={6}' onclick='trackThis(this);' target='_blank' title='{0}' rel='external FinanceRightCol'><div class='finance_bluetxt'>{0}</div></a></td>" + 
                  "<td><div class='finance_greytxt'> {1}</div></td>" + 
                  "<td><div class='{4}'> {2}</div></td>" + 
                  "<td><div class='{5}'> {3}%</div></td>" + 
                  "</tr>";

    for(var i = 0; i < Stocks.length; i++){
        var item = StockItems[Stocks[i]];
        var isUp = parseFloat(item.change) >= 0;
        
        var bgClass = isUp ? greenBgClass : redBgClass;
        var txtClass = isUp ? greenTxtClass : redTxtClass;

        stockHtml += String.format(stockTmpl, SideBarStockLabels[item.quote], item.price, item.change, item.changepct, bgClass, txtClass, item.quote);
    }

    $("#StockList").prepend(stockHtml);
}

function DisplayCurrencies(){
    for (var i = 0; i < Currencies.length; i++){
        var item = StockItems[Currencies[i]];

        $("#Currency" + (i + 1)).html(item.price);
        $("#Currency" + (i + 1) + "Link").attr("href", "http://finance.mylaunchpad.com.my/Currencies/CurrencyDetail?Code=" + item.quote);
    }
}

function MyEncodeURI(sBuf) {
    sRet = sBuf;
    
    try
    {
        sRet = encodeURI(sBuf);
    }
    catch(e)
    {
        sRet = escape(sBuf);
    }

    return sRet;
}
