﻿// sort 

var incertIn;
var dataHttp;
var ecColumns = { date: 0, time: 1, currency: 2, msg: 3, impact: 4, actual: 5, forecast: 6, previous: 7 }

function cmpDateTime(row1, row2) {
    var day1 = row1.cells[ecColumns.date].getAttribute("day");
    var month1 = row1.cells[ecColumns.date].getAttribute("month");
    var year1 = row1.cells[ecColumns.date].getAttribute("year");
    var day2 = row2.cells[ecColumns.date].getAttribute("day");
    var month2 = row2.cells[ecColumns.date].getAttribute("month");
    var year2 = row2.cells[ecColumns.date].getAttribute("year");

    var item1 = new Date(Date.parse(formatDate.getMonth(parseInt(month1) - 1, "en-us") + " " + day1 + "," + year1 + " " + row1.cells[ecColumns.time].innerHTML));
    var item2 = new Date(Date.parse(formatDate.getMonth(parseInt(month2) - 1, "en-us") + " " + day2 + "," + year2 + " " + row2.cells[ecColumns.time].innerHTML));

    if (isNaN(item1.getDate()) || isNaN(item2.getDate()))
        return 1;

    if (item1 == item2) return 0;
    return (item1 > item2 ? 1 : -1);
}

function getDateContent(row1, row2) {
    return cmpDateTime(row1, row2);
}
function getTimeContent(row1, row2) {
    return cmpDateTime(row1, row2);
}
function getECurrencyContent(row1, row2) {
    var item1 = row1.cells[ecColumns.currency].innerHTML;
    var item2 = row2.cells[ecColumns.currency].innerHTML;

    if (item1 == item2) return 0;
    return (item1 > item2 ? 1 : -1);
}

//-----------------------------------------------------------------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);
}

//var lastChange = 20090803221319; //new Date().getFullYear() + dd(new Date().getMonth() + 1) + dd(new Date().getDate()) + dd(new Date().getHours()) + dd(new Date().getMinutes()) + dd(new Date().getSeconds());
var getCurrencyChangesId = 0;

function GetCurrencyChanges() {
    Web.Modules.EconomicTool.module.GetCalendarChanges($("#" + tblEconomicCalendarClientID).attr("lastchange"), CallBack_GetCalendarChanges, CutCurrencyChanges);
}

function CutCurrencyChanges() {
    if (getCurrencyChangesId) {
        clearTimeout(getCurrencyChangesId);
    }
}

function CallBack_GetCalendarChanges(xmlChanges) {
    clearTimeout(getCurrencyChangesId);

    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[ecColumns.date].innerHTML = dd(date.getDate()) + "/" + dd((date.getMonth() + 1)); //formatDate.getMonth(date);
                        tr.cells[ecColumns.date].day = day;
                        tr.cells[ecColumns.date].month = month;
                        tr.cells[ecColumns.date].year = year;
                        break;
                    case 'time':                        
                        tr.cells[ecColumns.time].innerHTML = node.childNodes[0].data;
                        break;
                    case 'currency':
                        tr.cells[ecColumns.currency].innerHTML = node.childNodes[0].childNodes[0].data;                        
                        break;
                    case 'msg':
                        tr.cells[ecColumns.msg].innerHTML = node.childNodes[0].data;
                        break;
                    case 'impact':
                        var oldImg = tr.cells[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[ecColumns.impact].removeChild(oldImg);
                        tr.cells[ecColumns.impact].appendChild(newImg);
                        break;
                    case 'unitType':
                        unitType = node.childNodes[0].data;
                        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[ecColumns.forecast].innerHTML.length;                        
                        var smbl = tr.cells[ecColumns.forecast].innerHTML.substring(len - 1);
                        var val = node.childNodes[0].data;
                        tr.cells[ecColumns.actual].innerHTML = val != "0" && val.length > 0 ? parseFloat(val).toFixed(2) + smbl : "";
                        break;
                    case 'forecast':
                        var len = tr.cells[ecColumns.forecast].innerHTML.length;
                        var smbl = tr.cells[ecColumns.forecast].innerHTML.substring(len - 1);
                        tr.cells[ecColumns.forecast].innerHTML = parseFloat(node.childNodes[0].data).toFixed(2) + smbl;
                        break;
                    case 'previous':
                        var len = tr.cells[ecColumns.previous].innerHTML.length;
                        var smbl = tr.cells[ecColumns.previous].innerHTML.substring(len - 1);
                        tr.cells[ecColumns.previous].innerHTML = parseFloat(node.childNodes[0].data).toFixed(2) + smbl;
                        break;
                }
                //Change UnitType
                if (unitType != "") {
                    //Actual
                    var len = tr.cells[ecColumns.actual].innerHTML.length;
                    if (len > 0) //actual can be empty(if it = 0)
                        tr.cells[ecColumns.actual].innerHTML = tr.cells[ecColumns.actual].innerHTML.substring(0, len - 1) + unitType;
                    //Forecast
                    len = tr.cells[ecColumns.forecast].innerHTML.length;
                    tr.cells[ecColumns.forecast].innerHTML = tr.cells[ecColumns.forecast].innerHTML.substring(0, len - 1) + unitType;
                    //Previous
                    len = tr.cells[ecColumns.previous].innerHTML.length;
                    tr.cells[ecColumns.previous].innerHTML = tr.cells[ecColumns.previous].innerHTML.substring(0, len - 1) + unitType;
                }
            }
        }
    }
    getCurrencyChangesId = setTimeout("GetCurrencyChanges()", 3000);
}

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";
    }
}};
