﻿(function($) {
    CarrencyQuotes = {
        _timerInterval: 1000,
        _timer: 0,
        getQuotesChanges: false,
        ajax: null,
        qColumns: { currency: 0, bid: 1, ask: 2, change: 3, spread: 4 },

        init: function() {
            console.log("init events currency quotes");
            this.ajax = Web.Modules.EconomicTool.module;
            this.intiEvents();
        },

        intiEvents: function() {
            $("#currencyRates .on-off").bind("click", function(e) {
                console.log("start currency quotes");
                CarrencyQuotes.toggle();
            });
        },

        toggle: function() {
            this.getQuotesChanges = !this.getQuotesChanges;
            this.getToWork();
        },

        switchOn: function() {
            this.getQuotesChanges = true;
            this.getToWork();
        },
        startTimer: function() {
            if (this.getQuotesChanges)
                this._timer = setTimeout("CarrencyQuotes.getData()", this._timerInterval);
        },
        switchOff: function() {
            this.getQuotesChanges = false;
            this.getToWork();
        },
        stopTimer: function() {
            clearInterval(this._timer);
        },
        getToWork: function() {
            $("#currencyRates .on-off").html((this.getQuotesChanges ? "<strong>" + _liveModeString + "</strong><span class='on'>On</span>" : "<strong>" + _liveModeString + "</strong><span class='off'>Off</span>"));
            if (this.getQuotesChanges) {
                this.startTimer();
            } else {
                this.stopTimer();
            }
        },
        getData: function() {
            this.stopTimer();
            this.ajax.GetQuotesChanges($("#" + tblCurrencyQuotesClientID).attr("lastchange"),
                function(response) {
                    CarrencyQuotes.onSuccess(response);
                }, function(response) {
                    CarrencyQuotes.stopTimer();
                });
        },
        onSuccess: function(xmlChanges) {
            if (xmlChanges != "") {
                var cQuotes = $("#" + tblCurrencyQuotesClientID);
                var xmlDoc = new DOMParser().parseFromString(xmlChanges, "text/xml");

                if (xmlDoc.getElementsByTagName('rows').length > 0) {
                    var xmlRowsLen = xmlDoc.getElementsByTagName('rows')[0].childNodes.length; //Num of rows to be changed       
                    var qRows = cQuotes[0].rows;  //Rows object of tblCurrencyQuotes
                    var lenQRows = qRows.length;  //Num of rows in tblCurrencyQuotes

                    //Set the lastChange date
                    cQuotes[0].setAttribute("lastChange", xmlDoc.getElementsByTagName('rows')[0].attributes.getNamedItem("date").nodeValue);

                    for (var i = 0; i < xmlRowsLen; i++) {
                        var rowToChange = xmlDoc.getElementsByTagName('rows')[0].childNodes[i].attributes.getNamedItem("name").nodeValue;
                        //Find row that has to be changed in tblCurrencyQuotes            

                        for (var j = 1; j < lenQRows; j++) {
                            if (qRows[j].cells[this.qColumns.currency].innerHTML == rowToChange) break;
                        }

                        //Num of cells to change 
                        var numCellsToChange = xmlDoc.getElementsByTagName('rows')[0].childNodes[i].childNodes.length;
                        rowId = j;
                        var changedRow = xmlDoc.getElementsByTagName('rows')[0].childNodes[i];

                        for (var j = 0; j < numCellsToChange; j++) {
                            switch (changedRow.childNodes[j].nodeName) {
                                case 'bid':
                                    if (qRows[rowId].cells[this.qColumns.bid].innerHTML > changedRow.childNodes[j].childNodes[0].data)
                                        qRows[rowId].cells[this.qColumns.bid].style.color = "red";
                                    else
                                        qRows[rowId].cells[this.qColumns.bid].style.color = "green";

                                    qRows[rowId].cells[this.qColumns.bid].innerHTML = changedRow.childNodes[j].childNodes[0].data;
                                    qRows[rowId].cells[this.qColumns.bid].style.fontWeight = 'bold';
                                    break;
                                case 'ask':
                                    if (qRows[rowId].cells[this.qColumns.ask].innerHTML > changedRow.childNodes[j].childNodes[0].data)
                                        qRows[rowId].cells[this.qColumns.ask].style.color = "red";
                                    else
                                        qRows[rowId].cells[this.qColumns.ask].style.color = "green";

                                    qRows[rowId].cells[this.qColumns.ask].innerHTML = changedRow.childNodes[j].childNodes[0].data;
                                    qRows[rowId].cells[this.qColumns.ask].style.fontWeight = 'bold';
                                    break;
                            }
                        }
                        var ask = changedRow.getElementsByTagName('ask')[0].childNodes[0].data;
                        var relAsk = changedRow.getElementsByTagName('ask')[0].attributes.getNamedItem("relAsk").nodeValue;
                        var bid = changedRow.getElementsByTagName('bid')[0].childNodes[0].data;

                        qRows[rowId].cells[this.qColumns.change].innerHTML = parseFloat(ask - relAsk).toFixed(5);
                        var spread = ask - bid;
                        spread *= qRows[rowId].cells[this.qColumns.currency].innerHTML.search(/jpy/ig) != -1 ? 100 : 10000;

                        qRows[rowId].cells[this.qColumns.spread].innerHTML = parseFloat(spread).toFixed(1);
                    }
                }
            }
            this.startTimer();
        },

        getQCurrencyContent: function(row1, row2) {
            var item1 = row1.cells[this.qColumns.currency].innerHTML;
            var item2 = row2.cells[this.qColumns.currency].innerHTML;

            if (item1 == item2) return 0;
            return (item1 > item2 ? 1 : -1);
        },

        getQSpreadContent: function(row1, row2) {
            var item1 = row1.cells[this.qColumns.spread].innerHTML;
            var item2 = row2.cells[this.qColumns.spread].innerHTML;

            if (item1 == item2) return 0;
            return (parseFloat(item1) > parseFloat(item2) ? 1 : -1);
        }
    }

})(jQuery);

$(document).ready(function() {
    CarrencyQuotes.init();
});
