﻿(function($) {
    CarrencyQuotes = {
        _timer: 0,
        getQuotesChanges: false,
        ajax: null,
        qColumns: { currency: 0, bid: 1, ask: 2, change: 3, spread: 4 },

        init: function() {
            this.ajax = Web.Modules.EconomicTool.module;
            this.intiEvents();
        },

        intiEvents: function() {
            $("#currencyRates .on-off").bind("click", function(el) {
                CarrencyQuotes.toggle();
            });
        },

        toggle: function() {
            this.getQuotesChanges = !this.getQuotesChanges;
            CarrencyQuotes.getToWork();
        },

        switchOn: function() {
            this.getQuotesChanges = true;
            CarrencyQuotes.getToWork();
        },

        switchOff: function() {
            this.getQuotesChanges = false;
            CarrencyQuotes.getToWork();
        },

        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._timer = setTimeout("CarrencyQuotes.getData()", 1000);
            } else {
                clearTimeout(this._timer);
            }
        },
        getData: function() {
            clearTimeout(this._timer);
            this.ajax.GetQuotesChanges($("#" + tblCurrencyQuotesClientID).attr("lastchange"),
                function(response) {
                    CarrencyQuotes.onSuccess(response);
                }, function(response) {
                    clearInterval(CarrencyQuotes._timer);
                });
        },

        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;
                            }
                        }
                        qRows[rowId].cells[this.qColumns.change].innerHTML = parseFloat(parseFloat(changedRow.getElementsByTagName('ask')[0].childNodes[0].data).toFixed(5) - parseFloat(changedRow.getElementsByTagName('ask')[0].attributes.getNamedItem("relAsk").nodeValue).toFixed(5)).toFixed(5);
                        var spread = parseFloat(parseFloat(changedRow.getElementsByTagName('ask')[0].childNodes[0].data).toFixed(5) - parseFloat(changedRow.getElementsByTagName('bid')[0].childNodes[0].data).toFixed(5)).toFixed(5);
                        //If 3 digits after point or not
                        qRows[rowId].cells[this.qColumns.spread].innerHTML = (/^[-]?\d*.\d{3}$/.test(qRows[rowId].cells[this.qColumns.bid].innerHTML) ? parseFloat(spread * 100).toFixed(2) : parseFloat(spread * 10000).toFixed(2));
                    }
                }
            }
            this._timer = setTimeout("CarrencyQuotes.getData()", 1000);
        },

        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);
