﻿// sort 

var incertIn;
var dataHttp;



//-----------------------------------------------------------------Handling changes of EC-----------------------------------------------------
function loadXMLDoc(fname) {
    var xmlDoc;
    // code for IE
    if (window.ActiveXObject) {

        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument) {

        xmlDoc = document.implementation.createDocument("", "", null);
    }
    else {
        alert('Your browser cannot handle this script');
    }

    xmlDoc.async = false;
    //xmlDoc.onload = readXML;
    xmlDoc.load(fname);

    return (xmlDoc);
}


function dd(val) {
    return (val > 9 ? val : "0" + val);
}
var formatDate = { getMonth: function(month) {
    var langCode = arguments[1] == undefined ? LanguageCode : arguments[1];
    switch (month) {
        case 0:
            return langCode == 'he-il' ? "ינו" : "Jan";
        case 1:
            return langCode == 'he-il' ? "פבר" : "Feb";
        case 2:
            return langCode == 'he-il' ? "מרץ" : "Mar";
        case 3:
            return langCode == 'he-il' ? "מאי" : "Apr";
        case 4:
            return langCode == 'he-il' ? "אפר" : "May";
        case 5:
            return langCode == 'he-il' ? "יונ" : "Jun";
        case 6:
            return langCode == 'he-il' ? "יול" : "Jul";
        case 7:
            return langCode == 'he-il' ? "אוג" : "Aug";
        case 8:
            return langCode == 'he-il' ? "ספט" : "Sep";
        case 9:
            return langCode == 'he-il' ? "אוק" : "Oct";
        case 10:
            return langCode == 'he-il' ? "נוב" : "Nov";
        case 11:
            return langCode == 'he-il' ? "דצמ" : "Dec";
    }
}
};


//(function($) {
EconomicCalendar =
    {
        _timerInterval: 3000,
        _timer: 0,
        ajax: null,
        getCalendarChanges: false,
        ecColumns: { date: 0, time: 0, currency: 1, msg: 2, impact: 3, actual: 4, forecast: 5, previous: 6 },
        init: function() {
            this.ajax = Web.Modules.EconomicTool.module;
        },
        initEvents: function() {
        },
        switchOn: function() {
            this.getCalendarChanges = true;
            this.startTimer();
        },
        switchOff: function() {
            this.getCalendarChanges = false;
            this.stopTimer();
        },
        startTimer: function() {
            if (this.getCalendarChanges)
                this._timer = setTimeout("EconomicCalendar.getData()", this._timerInterval);
        },
        stopTimer: function() {
            clearTimeout(this._timer);
        },
        getData: function() {
            this.stopTimer();
            this.ajax.GetCalendarChanges($("#" + tblEconomicCalendarClientID).attr("lastchange"),
                                                                                        function(response) {
                                                                                            EconomicCalendar.onSuccess(response);
                                                                                        }, function(response) {
                                                                                            EconomicCalendar.stopTimer();
                                                                                        });
        },
        onSuccess: function(xmlChanges) {
            if (xmlChanges.length > 0) {
                var eCalendar = document.getElementById(tblEconomicCalendarClientID);
                var xmlDoc = new DOMParser().parseFromString(xmlChanges, "text/xml");
                var xmlRowsLen = xmlDoc.getElementsByTagName('rows')[0].childNodes.length;   //Num of rows to be changed
                var ecRows = eCalendar.rows;      //Rows object of tblEconomicCalendar
                var lenEcRows = ecRows.length;  //Num of rows in tblEconomicCalendar            

                //Set the lastChange date
                eCalendar.setAttribute("lastChange", xmlDoc.getElementsByTagName('rows')[0].attributes.getNamedItem("date").nodeValue);
                //Unselect last changed rows
                for (var i = 1; i < lenEcRows; i++) {
                    ecRows[i].style.color = "black";
                }

                for (var i = 0; i < xmlRowsLen; i++) {
                    var rowId = xmlDoc.getElementsByTagName('rows')[0].childNodes[i].attributes.getNamedItem("id").nodeValue;
                    //Find row that has to be changed in ecBlock
                    for (var j = 1; j < lenEcRows; j++) {
                        if (ecRows[j].getAttribute("id") == rowId) {
                            ecRows[j].style.color = "blue";
                            break;
                        }
                    }

                    var tr;
                    if (xmlDoc.getElementsByTagName('rows')[0].childNodes[i].nodeName == "delete") {                                //Delete row
                        var tbody = eCalendar.getElementsByTagName("tbody")[0];
                        //If row found
                        if (j != lenEcRows) {
                            tbody.removeChild(ecRows[j]);
                            --lenEcRows;
                        }
                        continue;
                    }
                    else if (xmlDoc.getElementsByTagName('rows')[0].childNodes[i].nodeName == "add") {                              //Add new row            

                        tr = document.createElement("tr");
                        tr.setAttribute("id", rowId);
                        tr.style.color = "blue";

                        for (var j = 0; j < eCalendar.rows[0].cells.length; j++) tr.appendChild(document.createElement("td"));
                        eCalendar.getElementsByTagName("tbody")[0].appendChild(tr);
                    }
                    else {                                                                                                           //Update row
                        //If row found
                        if (j == lenEcRows) continue;
                        tr = ecRows[j];
                    }
                    //Num of cells to change 
                    var numCellsToChange = xmlDoc.getElementsByTagName('rows')[0].childNodes[i].childNodes.length;
                    var changedRow = xmlDoc.getElementsByTagName('rows')[0].childNodes[i];
                    for (var j = 0; j < numCellsToChange; j++) {
                        var unitType = "";
                        var node = changedRow.childNodes[j];
                        switch (node.nodeName) {
                            case 'date':
                                var day = node.getElementsByTagName('day')[0].childNodes[0].data;
                                var month = node.getElementsByTagName('month')[0].childNodes[0].data - 1;
                                var year = node.getElementsByTagName('year')[0].childNodes[0].data;
                                var date = new Date(year, month, day);

                                tr.cells[this.ecColumns.date].innerHTML = dd(date.getDate()) + "/" + dd((date.getMonth() + 1)); //formatDate.getMonth(date);
                                tr.cells[this.ecColumns.date].day = day;
                                tr.cells[this.ecColumns.date].month = month;
                                tr.cells[this.ecColumns.date].year = year;
                                break;
                            case 'time':
                                tr.cells[this.ecColumns.time].innerHTML = node.childNodes[0].data;
                                break;
                            case 'currency':
                                tr.cells[this.ecColumns.currency].innerHTML = node.childNodes[0].childNodes[0].data;
                                break;
                            case 'msg':
                                var msg = node.childNodes[0] == undefined ? "" : node.childNodes[0].data;
                                tr.cells[this.ecColumns.msg].innerHTML = msg;
                                break;
                            case 'impact':
                                var oldImg = tr.cells[this.ecColumns.impact].childNodes[0];
                                var newImg = document.createElement("img");

                                newImg.setAttribute("src", "/Images/" + node.childNodes[0].data + ".gif");
                                newImg.setAttribute("alt", node.childNodes[0].data);

                                if (oldImg != undefined) tr.cells[this.ecColumns.impact].removeChild(oldImg);
                                tr.cells[this.ecColumns.impact].appendChild(newImg);
                                break;
                            case 'unitType':
                                unitType = node.childNodes.length > 0 ? node.childNodes[0].data : "&nbsp;";
                                break;
                            case 'actual':
                                //Take symbol from next cell(e.g. 'forecast'), because 'actual' can be empty and symbol is not passed if it's not changed
                                var len = tr.cells[this.ecColumns.forecast].innerHTML.length;
                                var smbl = tr.cells[this.ecColumns.forecast].innerHTML.substring(len - 1);
                                var val = node.childNodes.length > 0 ? node.childNodes[0].data : "";
                                tr.cells[this.ecColumns.actual].innerHTML = val.length > 0 ? parseFloat(val).toFixed(2) + smbl : "&nbsp;";
                                break;
                            case 'forecast':
                                var len = tr.cells[this.ecColumns.forecast].innerHTML.length;
                                var smbl = tr.cells[this.ecColumns.forecast].innerHTML.substring(len - 1);
                                var val = node.childNodes.length > 0 ? node.childNodes[0].data : "";
                                tr.cells[this.ecColumns.forecast].innerHTML = val.length > 0 ? parseFloat(val).toFixed(2) + smbl : "&nbsp;";
                                break;
                            case 'previous':
                                var len = tr.cells[this.ecColumns.previous].innerHTML.length;
                                var smbl = tr.cells[this.ecColumns.previous].innerHTML.substring(len - 1);
                                var val = node.childNodes.length > 0 ? node.childNodes[0].data : "";
                                tr.cells[this.ecColumns.previous].innerHTML = val.length > 0 ? parseFloat(val).toFixed(2) + smbl : "&nbsp;";
                                break;
                        }
                        //Change UnitType
                        if (unitType != "") {
                            //Actual
                            var len = tr.cells[this.ecColumns.actual].innerHTML.length;
                            if (len > 0) //actual can be empty(if it = 0)
                                tr.cells[this.ecColumns.actual].innerHTML = tr.cells[this.ecColumns.actual].innerHTML.substring(0, len - 1) + unitType;
                            //Forecast
                            len = tr.cells[this.ecColumns.forecast].innerHTML.length;
                            tr.cells[this.ecColumns.forecast].innerHTML = tr.cells[this.ecColumns.forecast].innerHTML.substring(0, len - 1) + unitType;
                            //Previous
                            len = tr.cells[this.ecColumns.previous].innerHTML.length;
                            tr.cells[this.ecColumns.previous].innerHTML = tr.cells[this.ecColumns.previous].innerHTML.substring(0, len - 1) + unitType;
                        }
                    }
                }
            }
            this.startTimer();
        },
        cmpDateTime: function(row1, row2) {
            var day1 = row1.cells[this.ecColumns.date].getAttribute("day");
            var month1 = row1.cells[this.ecColumns.date].getAttribute("month");
            var year1 = row1.cells[this.ecColumns.date].getAttribute("year");
            var day2 = row2.cells[this.ecColumns.date].getAttribute("day");
            var month2 = row2.cells[this.ecColumns.date].getAttribute("month");
            var year2 = row2.cells[this.ecColumns.date].getAttribute("year");

            var item1 = new Date(Date.parse(formatDate.getMonth(parseInt(month1) - 1, "en-us") + " " + day1 + "," + year1 + " " + row1.cells[this.ecColumns.time].innerHTML));
            var item2 = new Date(Date.parse(formatDate.getMonth(parseInt(month2) - 1, "en-us") + " " + day2 + "," + year2 + " " + row2.cells[this.ecColumns.time].innerHTML));

            if (isNaN(item1.getDate()) || isNaN(item2.getDate()))
                return 1;

            if (item1 == item2) return 0;
            return (item1 > item2 ? 1 : -1);
        },
        getDateContent: function(row1, row2) {
            return this.cmpDateTime(row1, row2);
        },
        getTimeContent: function(row1, row2) {
            return this.cmpDateTime(row1, row2);
        },
        getECurrencyContent: function(row1, row2) {
            var item1 = row1.cells[this.ecColumns.currency].innerHTML;
            var item2 = row2.cells[this.ecColumns.currency].innerHTML;

            if (item1 == item2) return 0;
            return (item1 > item2 ? 1 : -1);
        }
    };
//})(jQuery);

$(document).ready(function() {
    EconomicCalendar.init();
});