var TICKER_WIDTH = 760;
var LEFT_CONTAINER = 0;
var DATA_POLLTIME = 60000;
var PING_SERVER_AFTER_ERROR_IN = 20000;
var TICKER_TIMEOUT = 20;
var TICKER_DEFAULTSPEED = 1;
var TICKER_SPEED_MIN_LIMIT = 0;
var TICKER_SPEED_MAX_LIMIT = 6;
var INITIAL_SPACING = 600;
var TICKERDATA_ERROR = '';

var normalAjaxInterval;
var obj_Notes = null;
var obj_HdnTickerSelector = null;
var MOUSEOVER_DIV_WIDTH = 420;
var MOUSEOVER_DIV_HEIGHT = 189;
var offX = 10;
var offY = 10;
var mouseX, mouseY;
var dom = (document.getElementById) ? true : false;
var ns5 = (!document.all && dom || window.opera) ? true : false;
var ie5 = ((navigator.userAgent.indexOf('MSIE') > -1) && dom) ? true : false;
var ie4 = (document.all && !dom) ? true : false;


var cntStarter = 'tckcntr';
var moverStarter = 'tck';
var selectorStarter = 'tckSelector';
var TotalTickers = 0;
var TotalSelectors = 3;
var MaxTickerInPage = 1000;
var TotalMovers = 0;
var Tickers = new Array();
var arrData = new Array();
var reqSend = false;

function TickerDiv(index) {
    this.container = document.getElementById(cntStarter + '_' + index);
    this.mover1 = document.getElementById(moverStarter + '_' + index + '_' + 1);
    this.mover2 = document.getElementById(moverStarter + '_' + index + '_' + 2);
    this.tickerWidth = TICKER_WIDTH;
    this.isPaused = false;
    this.speed = TICKER_DEFAULTSPEED;
    this.rightToleft = true;
    this.currentMover = this.mover1 == null ? '' : this.mover1.id;
    this.leftContainer = LEFT_CONTAINER;
    this.isContentAvailable = false;
    this.loadingText = '';
}

function RegisterTickerElements(hdn, dover, initialPollAjaxInterval, TickerAjaxInterval, errorText) {
    normalAjaxInterval = TickerAjaxInterval;
    DATA_POLLTIME = initialPollAjaxInterval;

    obj_Notes = dover;
    obj_HdnTickerSelector = hdn;
    TICKERDATA_ERROR = errorText;
    /*Extracting divs*/
    for (var i = 1; i <= MaxTickerInPage; i++) {
        var tmp = document.getElementById(cntStarter + '_' + i.toString());
        if (tmp != null)
            TotalTickers++;
        else
            break;
    }
    for (var x = 1; x <= TotalTickers; x++) {
        for (var i = 1; i <= 2; i++) {
            var tmp = document.getElementById(moverStarter + '_' + TotalTickers + '_' + i.toString());
            if (tmp != null)
                TotalMovers++;
            else
                break;
        }
    }
    if (TotalTickers * 2 != TotalMovers)
        alert('Ticker initialization failed.');
    /*End of Extracting divs*/


    /*Create Objects*/
    for (var j = 1; j <= TotalTickers; j++) {
        Tickers.push(new TickerDiv(j));
    }

    InitializeTicker();
}
function InitializeTicker() {
    if (Tickers.length > 0) {
        GetPageLoadData();
    }
}
function GetPageLoadData() {
    if (!reqSend) {
        reqSend = true;
        tickerAsync.GetTickerData("", OnPageLoadDataRetrived, OnPageLoadDataServerException, OnPageLoadDataServerException, OnPageLoadDataServerException);
    }
}

function OnPageLoadDataServerException(result, context, methodName) { reqSend = false; window.setTimeout('InitializeTicker()', PING_SERVER_AFTER_ERROR_IN); }
function OnPageLoadDataRetrived(result, context, methodName) {
    try {
        DATA_POLLTIME = normalAjaxInterval;
        arrData = result;
        if (arrData != null && arrData != undefined && arrData.length > 0) {
            for (tt = 0; tt < Tickers.length; tt++) {
                var objTicker = Tickers[tt];
                if (objTicker != null && objTicker != undefined) {
                    var selctTickerIndex = GetSelectedTickerDataIndex(obj_HdnTickerSelector.value);
                    if (arrData[selctTickerIndex] != null && arrData[selctTickerIndex] != undefined) {
                        if (Object.prototype.toString.apply(arrData[selctTickerIndex]) === '[object String]') {
                            objTicker.mover1.innerHTML = arrData[selctTickerIndex].toString();
                            if (arrData[selctTickerIndex].toString() != TICKERDATA_ERROR) {
                                objTicker.mover2.innerHTML = arrData[selctTickerIndex].toString();
                                objTicker.isContentAvailable = true;
                            }
                            else {
                                objTicker.mover2.innerHTML = '';
                                objTicker.isContentAvailable = false;
                            }

                        }
                    }
                    (objTicker.container != null) ? objTicker.leftContainer = getLeftPos(objTicker.container, 0) : '';
                    (objTicker.container != null) ? objTicker.container.style.cursor = 'arrow' : '';
                    (objTicker.container != null) ? objTicker.container.style.width = objTicker.tickerWidth + 'px' : '';
                    (objTicker.mover1 != null) ? objTicker.loadingText = objTicker.mover1.innerHTML : '';
                    if (objTicker.isContentAvailable) {
                        (objTicker.mover1 != null && objTicker.mover2 != null) ? objTicker.mover2.innerHTML = objTicker.mover1.innerHTML : '';
                    }
                    (objTicker.mover1 != null) ? objTicker.mover1.style.left = INITIAL_SPACING + getLeftPos(objTicker.container, objTicker.leftContainer) + 'px' : '';
                    (objTicker.mover1 != null && objTicker.mover2 != null) ? objTicker.mover2.style.left = getLeftPos(objTicker.mover1, objTicker.leftContainer) + getWidth(objTicker.mover1) + 'px' : '';
                    (objTicker.currentMover != null && objTicker.mover1 != null) ? objTicker.currentMover = objTicker.mover1 : '';
                }
            }

            TICKER_tick();
            window.setTimeout('GetAsyncData()', DATA_POLLTIME);
        }
    }
    finally { reqSend = false; }
}

function TICKER_tick() {
    for (tt = 0; tt < Tickers.length; tt++) {
        var objTicker = Tickers[tt];
        if (objTicker != null && objTicker != undefined) {

            if (!objTicker.isContentAvailable) {
                objTicker.mover1.style.left = (getWidth(objTicker.container) / 2) - 80 + 'px';
                continue;
            }

            if (!objTicker.isPaused) {
                var d1L = parseInt(objTicker.mover1.style.left, 10);
                var d2L = parseInt(objTicker.mover2.style.left, 10);

                if (objTicker.rightToleft) {
                    if (d2L <= -getWidth(objTicker.mover2)) {
                        objTicker.mover2.style.left = getLeftPos(objTicker.mover1, objTicker.leftContainer) + getWidth(objTicker.mover1) + 'px';
                        d2L = parseInt(objTicker.mover2.style.left, 10);
                        objTicker.currentMover = objTicker.mover1;
                    }
                    if (d2L <= getLeftPos(objTicker.container, objTicker.leftContainer)) {
                        objTicker.mover1.style.left = getLeftPos(objTicker.mover2, objTicker.leftContainer) + getWidth(objTicker.mover2) + 'px';
                        d1L = parseInt(objTicker.mover1.style.left, 10);
                        objTicker.currentMover = objTicker.mover2;
                    }
                }

                if (!objTicker.rightToleft) {
                    if (d1L >= TICKER_WIDTH) {
                        objTicker.mover1.style.left = getLeftPos(objTicker.mover2, objTicker.leftContainer) - getWidth(objTicker.mover1) + 'px';
                        d1L = parseInt(objTicker.mover1.style.left, 10);
                        objTicker.currentMover = objTicker.mover2;
                    }
                    if (d2L >= TICKER_WIDTH) {
                        objTicker.mover2.style.left = getLeftPos(objTicker.mover1, objTicker.leftContainer) - getWidth(objTicker.mover2) + 'px';
                        d2L = parseInt(objTicker.mover2.style.left, 10);
                        objTicker.currentMover = objTicker.mover1;
                    }
                }

                d1L -= objTicker.speed * (objTicker.rightToleft ? 1 : -1);
                d2L -= objTicker.speed * (objTicker.rightToleft ? 1 : -1);
                objTicker.mover1.style.left = d1L + 'px';
                objTicker.mover2.style.left = d2L + 'px';

            }
        }
    }
    window.setTimeout('TICKER_tick()', TICKER_TIMEOUT);
}

function GetAsyncData() {
    if (!reqSend) {
        reqSend = true;
        tickerAsync.GetTickerData("", OnAsyncDataRetrived, OnAsyncDataServerException, OnAsyncDataServerException, OnAsyncDataServerException);
    }
}
function OnAsyncDataServerException(result, context, methodName) { reqSend = false; window.setTimeout('GetAsyncData()', PING_SERVER_AFTER_ERROR_IN); }

function OnAsyncDataRetrived(result, context, methodName) {
    try {
        arrData = result;
        if (arrData != null && arrData != undefined && arrData.length > 0) {
            for (tt = 0; tt < Tickers.length; tt++) {
                var objTicker = Tickers[tt];
                if (objTicker != null && objTicker != undefined) {
                    objTicker.isContentAvailable = false;
                    var selctTickerIndex = GetSelectedTickerDataIndex(obj_HdnTickerSelector.value);
                    if (arrData[selctTickerIndex] != null && arrData[selctTickerIndex] != undefined) {
                        if (Object.prototype.toString.apply(arrData[selctTickerIndex]) === '[object String]') {
                            objTicker.mover1.innerHTML = arrData[selctTickerIndex].toString();
                            if (arrData[selctTickerIndex].toString() != TICKERDATA_ERROR) {
                                objTicker.mover2.innerHTML = arrData[selctTickerIndex].toString();
                                objTicker.isContentAvailable = true;
                            }
                            else {
                                objTicker.mover2.innerHTML = '';
                                objTicker.isContentAvailable = false;
                            }

                        }
                    }
                }
            }
        }

        for (tt = 0; tt < Tickers.length; tt++) {
            var objTicker = Tickers[tt];
            if (objTicker != null && objTicker != undefined) {
                var d2L = parseInt(objTicker.mover2.style.left, 10);
                var d1L = parseInt(objTicker.mover1.style.left, 10);
                if (objTicker.rightToleft) {
                    if (objTicker.currentMover.id == objTicker.mover1.id) {
                        objTicker.mover2.style.left = getLeftPos(objTicker.mover1, objTicker.leftContainer) + getWidth(objTicker.mover1) + 'px';
                        d2L = parseInt(objTicker.mover2.style.left, 10);
                    }
                    else {
                        objTicker.mover1.style.left = getLeftPos(objTicker.mover2, objTicker.leftContainer) + getWidth(objTicker.mover2) + 'px';
                        d1L = parseInt(objTicker.mover1.style.left, 10);
                    }
                }
                if (!objTicker.rightToleft) {
                    if (objTicker.currentMover.id == objTicker.mover1.id) {
                        objTicker.mover2.style.left = getLeftPos(objTicker.mover1, objTicker.leftContainer) - getWidth(objTicker.mover2) + 'px';
                        d2L = parseInt(objTicker.mover2.style.left, 10);
                    }
                    else {
                        objTicker.mover1.style.left = getLeftPos(objTicker.mover2, objTicker.leftContainer) - getWidth(objTicker.mover1) + 'px';
                        d1L = parseInt(objTicker.mover1.style.left, 10);
                    }
                }
            }
        }

        window.setTimeout('GetAsyncData()', DATA_POLLTIME);

    }
    finally { reqSend = false; }
}

function getWidth(who) { return parseInt(who.offsetWidth, 10) }
function getLeftPos(who, lft) {
    if (lft == null || lft == undefined)
        lft = 0;
    var t = 0; var l = 0;
    while (who) {
        l += who.offsetLeft;
        t += who.offsetTop;
        who = who.offsetParent;
    }
    l = l - lft;
    return parseInt(l, 10);
}
function GoLeft(w) {
    if (Tickers.length >= w) {
        var objTicker = Tickers[w - 1];
        if (objTicker == null || objTicker == undefined) return;
        objTicker.rightToleft = true;
    }
}
function GoRight(w) {
    if (Tickers.length >= w) {
        var objTicker = Tickers[w - 1];
        if (objTicker == null || objTicker == undefined) return;
        objTicker.rightToleft = false;
    }

}
function Incr(w) {
    if (Tickers.length >= w) {
        var objTicker = Tickers[w - 1];
        if (objTicker == null || objTicker == undefined) return;
        if (objTicker.speed + 1 <= TICKER_SPEED_MAX_LIMIT) {
            objTicker.speed = objTicker.speed + 1;
        }
    }
}
function Decr(w) {
    if (Tickers.length >= w) {
        var objTicker = Tickers[w - 1];
        if (objTicker == null || objTicker == undefined) return;
        if (objTicker.speed - 1 > TICKER_SPEED_MIN_LIMIT) {
            objTicker.speed = objTicker.speed - 1;
        }
    }
}
function DoReset(w) {
    if (Tickers.length >= w) {
        var objTicker = Tickers[w - 1];
        if (objTicker == null || objTicker == undefined) return;
        (objTicker.container != null) ? objTicker.leftContainer = getLeftPos(objTicker.container, 0) : '';
        (objTicker.mover1 != null) ? objTicker.mover1.style.left = INITIAL_SPACING + getLeftPos(objTicker.container, objTicker.leftContainer) + 'px' : '';
        (objTicker.mover1 != null && objTicker.mover2 != null) ? objTicker.mover2.style.left = getLeftPos(objTicker.mover1, objTicker.leftContainer) + getWidth(objTicker.mover1) + 'px' : '';
        (objTicker.currentMover != null && objTicker.mover1 != null) ? objTicker.currentMover = objTicker.mover1 : '';
        objTicker.isPaused = false;
        objTicker.speed = TICKER_DEFAULTSPEED;
        objTicker.rightToleft = true;
    }
}

function sMOver(evt, obj, w) {
    obj.className = '';
    if (!evt) evt = window.event;
    obj.style.cursor = 'pointer';
    trackMouse(evt);
    token = obj.getAttribute('token'); // obj.id;

    if (Tickers.length >= w) {
        var objTicker = Tickers[w - 1];
        objTicker.isPaused = true;
    }
    obj_Notes.style.width = '0px';
    obj_Notes.innerHTML = 'Loading....';

    if (arrData.length > 0) {
        var toks = arrData[arrData.length - 1];
        var str = toks[token];
        if (str != undefined)
            obj_Notes.innerHTML = str;
        else if (toks != undefined && toks != null && toks != '')
            obj_Notes.innerHTML = '';
    }
}

function sMOut(evt, obj, w) {
    obj.className = '';
    obj_Notes.style.visibility = 'hidden';
    if (Tickers.length >= w) {
        var objTicker = Tickers[w - 1];
        objTicker.isPaused = false;
    }

}

function trackMouse(evt) {
    standardbody = (document.compatMode == 'CSS1Compat') ? document.documentElement : document.body //create reference to common 'body' across doctypes
    mouseX = (ns5) ? evt.pageX : window.event.clientX + standardbody.scrollLeft;
    mouseY = (ns5) ? evt.pageY : window.event.clientY + standardbody.scrollTop;
    positionTip(evt);
}
function positionTip(evt) {
    standardbody = (document.compatMode == 'CSS1Compat') ? document.documentElement : document.body;
    mouseX = (ns5) ? evt.pageX : window.event.clientX + standardbody.scrollLeft;
    mouseY = (ns5) ? evt.pageY : window.event.clientY + standardbody.scrollTop;
    var tpWd = (ie4 || ie5) ? MOUSEOVER_DIV_WIDTH : MOUSEOVER_DIV_WIDTH;
    var tpHt = (ie4 || ie5) ? MOUSEOVER_DIV_HEIGHT : MOUSEOVER_DIV_HEIGHT;
    var winWd = (ns5) ? window.innerWidth - 20 + window.pageXOffset : standardbody.clientWidth + standardbody.scrollLeft;
    var winHt = (ns5) ? window.innerHeight - 20 + window.pageYOffset : standardbody.clientHeight + standardbody.scrollTop;
    obj_Notes.style.visibility = 'visible';
    obj_Notes.style.position = 'absolute';
    if ((mouseX + offX + tpWd) > winWd)
        obj_Notes.style.left = mouseX - (tpWd + offX) + 'px';
    else obj_Notes.style.left = mouseX + offX + 'px';
    if ((mouseY + offY + tpHt) > winHt)
        obj_Notes.style.top = winHt - (tpHt + offY) + 'px';
    else obj_Notes.style.top = mouseY + offY + 'px';
}



function SelectTicker(anc, w) {
    obj_HdnTickerSelector.value = GetSelectedTickerText(w);
    if (arrData != null && arrData != undefined && arrData.length > 0) {
        for (tt = 0; tt < Tickers.length; tt++) {
            var objTicker = Tickers[tt];
            if (objTicker != null && objTicker != undefined) {
                var selctTickerIndex = GetSelectedTickerDataIndex(obj_HdnTickerSelector.value);
                if (arrData[selctTickerIndex] != null && arrData[selctTickerIndex] != undefined) {
                    if (Object.prototype.toString.apply(arrData[selctTickerIndex]) === '[object String]') {
                        objTicker.mover1.innerHTML = arrData[selctTickerIndex].toString();
                        if (arrData[selctTickerIndex].toString() != TICKERDATA_ERROR) {
                            objTicker.mover2.innerHTML = arrData[selctTickerIndex].toString();
                            objTicker.isContentAvailable = true;
                        }
                        else {
                            objTicker.mover2.innerHTML = '';
                            objTicker.isContentAvailable = false;
                        }

                    }
                }
                (objTicker.container != null) ? objTicker.leftContainer = getLeftPos(objTicker.container, 0) : '';
                (objTicker.container != null) ? objTicker.container.style.cursor = 'arrow' : '';
                (objTicker.container != null) ? objTicker.container.style.width = objTicker.tickerWidth + 'px' : '';
                (objTicker.mover1 != null) ? objTicker.loadingText = objTicker.mover1.innerHTML : '';
                if (objTicker.isContentAvailable) {
                    (objTicker.mover1 != null && objTicker.mover2 != null) ? objTicker.mover2.innerHTML = objTicker.mover1.innerHTML : '';
                }
                (objTicker.mover1 != null) ? objTicker.mover1.style.left = getLeftPos(objTicker.container, objTicker.leftContainer) + 'px' : '';
                (objTicker.mover1 != null && objTicker.mover2 != null) ? objTicker.mover2.style.left = getLeftPos(objTicker.mover1, objTicker.leftContainer) + getWidth(objTicker.mover1) + 'px' : '';
                (objTicker.currentMover != null && objTicker.mover1 != null) ? objTicker.currentMover = objTicker.mover1 : '';

                for (var i = 1; i <= TotalSelectors; i++) {
                    var tmp = document.getElementById(selectorStarter + '_' + i.toString());
                    if (tmp.id == selectorStarter + '_' + w)
                        tmp.className = 'tickertabselect';
                    else
                        tmp.className = 'tickertabregular';
                }
            }
        }
    }
    DoReset(1);
}

function GetSelectedTickerText(w) {
    var ret = "ALL";
    if (w == 1)
        ret = 'ALL';
    else if (w == 2)
        ret = 'COMMODITY';
    else if (w == 3)
        ret = 'CURRENCY';
    return ret;
}
function GetSelectedTickerDataIndex(w) {
    var ret = 0;
    if (w == "ALL")
        ret = 0;
    else if (w == "COMMODITY")
        ret = 1;
    else if (w == 'CURRENCY')
        ret = 2;
    return ret;
}





