﻿var nf = new NumberFormat();
nf.setCurrency(false);

var pv = 'X';
var margin, marginCurr;

var upToRate;
var downToRate;
var direction = "1";

function ECancelBubble(eventObj) {
    if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Safari") != -1)// FireFox
    {
        eventObj.stopPropagation();
        eventObj.preventDefault();
    }
    else    //IE 
    {
        event.cancelBubble = true;
        event.returnValue = false;
    }

    return false;
}

var submited = false;
function submitFilter(e) {
    if (submited) {
        ECancelBubble(eventObj)
    }
    btnOkClicked = submited = true;
}

function getState(ddObj) {
    if (ddObj) {
        for (a = 0; (a < ddObj.options.length && !ddObj.options[a].selected); a++);
        return a;
    }
    return 0;
}

function getAmountsCtrl() {
    var a = gebi('ddAmounts');
    if (a) {
        a.disabled = true;
        a.style.backgroundColor = 15066597; //gray
    }
    disableMargins();
    //var	getURL = "Services/Forex.Simulator.aspx?c=getAmountsCtrl&p=3&bc="+ gebi('buyCurr').value + "&sc=" +gebi('sellCurr').value +"&sr=" + aCurrRow;
    //loadXMLDoc(getURL, setAmountsCtrl);
    SimulatorService.getAmountsCtrl(3, gebi('buyCurr').value, gebi('sellCurr').value, aCurrRow, wsid, getAmountsCtrlCallback);
}

function getAmountsCtrlCallback(res) {
    setAmountsCtrl(res.value);
    //window.setTimeout(getQuotes,  upInt);
}


function ddAmounts_onchange() {
    var frmForex = gebi('frmForex');
    if (tabIndex == 0) {
        deactivateRateHolding();
        if (frmForex.btnHoldR != undefined) frmForex.btnHoldR.disabled = true;
    }
    else resetRigthPanel();

    deactivateRSMTimer();
    aCurrRow = getState(gebi('ddAmounts'));
    getMarginsCtrl();
}

function disableMargins() {
    var a = gebi('ddMargins');
    var b = gebi('SLR');
    if (a) {
        a.disabled = true;
        a.style.backgroundColor = 15066597; //gray
    }
    if (b) {
        b.disabled = true;
        b.style.backgroundColor = 15066597; //gray
    }
}

function getMarginsCtrl() {
    var a = gebi('ddAmounts');
    if (a) {
        clearInterval(mScript);
        mScript = null;
        if (!a.disabled) {
            disableMargins();
            SimulatorService.getMarginsCtrl(3, marginCurr, a.value, mCurrRow, setMarginsCtrlCallback);
        }
    }
}

function setMarginsCtrlCallback(res) {
    setMarginsCtrl(res.value);

}
var cScript = null;
function setMarginsCtrl(resVal) {

    var a = gebi('tdSLRU');

    if (resVal == 'RL') return activateRL();
    var res = resVal.split('^');
    if (res.length == 4 && res[0] == 'M')
        if (res[2] == marginCurr && 1 * res[3] == 1 * gebi('ddAmounts').value) {
        gebi('tdMargins').innerHTML = res[1];
        if (a && a.innerHTML == '') a.innerHTML = txtSL2;
        if (cScript == null) cScript = setInterval(contScript, 200);
    }

}

function contScript() {
    if (gebi('ddMargins')) {
        clearInterval(cScript);
        cScript = null;
        ddMargins_onchange();
        startRatesCalc();
    }
}

function startRatesCalc() {
    var a = gebi('SLR');
    if (a) {
        a.disabled = false;
        a.style.backgroundColor = (tabIndex == 0 ? 16777215 : 15066597); //white:gray
    }

    if (tRSM != null) {
        window.clearTimeout(tRSM);
        tRSM = null;
    }

    getRSM();
    //if (tRSM==null) activateRSMTimer();
}

function getRSM() {
    var getURL = clFolder + "Forex.Simulator.aspx";
    var buyLocCurr = gebi('buyCurr').value;
    var sellLocCurr = gebi('sellCurr').value;

    if (tabIndex == 0)
        SimulatorService.getRSM(buyLocCurr, sellLocCurr, (gebi('ddAmounts').value * contSize), amountCurr, margin, escape(getHalfSpread(buyLocCurr, sellLocCurr, 3)), setRSMCtrlCallback);
    else {
        SimulatorService.getRD(buyLocCurr, sellLocCurr, setRSMCtrlCallback);
    }
}


function setRSMCtrlCallback(res) {
    setRSM(res.value);

    tRSM = window.setTimeout(getRSM, (this._UpdateIntervals ? this._UpdateIntervals.mainDtrLmt : 1500));
}

var wasRL = false; enableUpdates = true;
function setRSM(resVal) {
    var a = gebi('ddMargins');
    var b = gebi('ddAmounts');
    var c = gebi('SLR');
    var frmForex = gebi('frmForex');

    if (resVal == 'RL') return activateRL();
    if (b && a)
        if (b.disabled || a.disabled)
        checkCurrs2(frmForex.buyCurr, frmForex.sellCurr);
    else {
        if (tabIndex == 0) //Day Trading
        {
            if (resVal != '' && !wasRL && enableUpdates) {
                if (frmForex.rate) pv = frmForex.rate.value;
                var res = resVal.split('|');
                if (res.length != 5) return; //Day Trading respons length
                if (1 * res[0] == 1 * margin) {
                    if (!isNaN(res[1])) {
                        if (frmForex.rate) frmForex.rate.value = res[2];
                        c.value = res[1];
                    }
                    else {
                        if (frmForex.rate) frmForex.rate.value = res[1];
                        c.value = res[1];
                        if (frmForex.rate) frmForex.rate.style.color = 'black';
                    }
                    if (a) a.disabled = false;
                    if (c) c.disabled = false;
                    if (frmForex.rate &&!isNaN(pv) && !isNaN(frmForex.rate.value)) {
                        if (1 * pv > 1 * frmForex.rate.value) frmForex.rate.style.color = 'red';
                        else if (1 * pv < 1 * frmForex.rate.value) frmForex.rate.style.color = '#007000';
                    }
                    _setQBoxMode(3, frmForex.buyCurr.value, frmForex.sellCurr.value, res[3], getHalfSpread(frmForex.buyCurr.value, frmForex.sellCurr.value, 3));
                    if (!isNaN(res[1])) {
                        if (!doRefreeze && frmForex.btnHoldR != undefined) frmForex.btnHoldR.disabled = false;
                        else activateRateHolding();
                    }
                    else frmForex.btnHoldR.disabled = true;
                }
            }
        }
        else // Limits
        {
            if (resVal != '' && !wasRL) {
                //pv=frmForex.rate.value;
                var res = resVal.split('|');
                if (res.length != 7) return; //Limits respons length
                if (res[0] == gebi('buyCurr').value && res[1] == gebi('sellCurr').value) {
                    gebi('upBandRate').innerHTML = res[2];
                    upToRate = res[3];
                    gebi('downBandRate').innerHTML = res[4];
                    downToRate = res[5];
                    direction = res[6];
                    if (frmForex.rate) frmForex.rate.readOnly = false;
                }
            }
        }
    }

}

var tRSM = null;
function activateRSMTimer() {
    getRSM();
}

function deactivateRSMTimer() {
    if (tRSM != null) window.clearTimeout(tRSM);
    tRSM = null;
}

function activateRL() {
    wasRL = true;
    if (_userLoggedIn) {
        alert(msgContent2);
        _Logout();
    }
    return false;
}

function deactivateRateHolding() {
    var frmForex = gebi('frmForex');
    if (tRH != null) { clearInterval(tRH); tRH = null; }
    if (!btnOkClicked && !submited) {
        if (tabIndex == 0) {
            if (frmForex.btnOk != undefined) frmForex.btnOk.disabled = true;
            if (frmForex.btnHoldR != undefined) {
                frmForex.btnHoldR.disabled = true;
                if (!doRefreeze) {
                    frmForex.btnHoldR.value = (tabIndex == 0 ? btnHoldRTitle1 : btnHoldRTitle2);
                    frmForex.btnHoldR.onclick = activateRateHolding;
                }
            }
            if (typeof (pbSetPos)!='undefined') pbSetPos(0);
            enableUpdates = true;
            gebi('rate').style.backgroundColor = 16777215; //white
        }
    }
}

var doRefreeze = false;
function refreeze() {
    doRefreeze = true;
    deactivateRateHolding();
}

function pbTick() {
    if (!btnOkClicked && !submited) {
        if (typeof (pbSetPos) != 'undefined') pbSetPos(pbMaxPos - (pbCurrentPos++));
        if (pbCurrentPos > pbMaxPos) deactivateRateHolding();
    }
}

var amountCurr = '', contSize, mScript = null;
var wsScript = null;
function checkCurrs2(obj1, obj2) {
    var frmForex = gebi('frmForex');
    if (obj1 && obj2) {
        if (obj1.value == obj2.value) obj2.value = defaultSellCurr;
        if (obj1.value == obj2.value) obj2.value = defaultBuyCurr;
        if (obj1.value == '') obj1.value = obj1.options[0].value;
        if (obj2.value == '') obj2.value = obj2.options[0].value;
        var ind = 0;
        while (obj1.value == obj2.value && 1 * ind < 1 * obj2.options.length)
            obj2.value = obj1.options[ind++].value;
    }

    deactivateRSMTimer();

    if (tabIndex == 0) {
        deactivateRateHolding();
        if (frmForex.btnHoldR != undefined) frmForex.btnHoldR.disabled = true;
        gebi('rate').value = msgContent6;
        if (frmForex.rate) frmForex.rate.style.color = '#000000';
    }
    else {
        if (frmForex.rate) frmForex.rate.value = '';
        if (frmForex.rate) frmForex.rate.readOnly = true;
        resetRigthPanel();
    }

    _setQBoxMode(3);
    getAmountsCtrl();
}

function ddMargins_onchange() {
    var frmForex = gebi('frmForex');
    var a = gebi('ddMargins');
    if (tabIndex == 0) {
        deactivateRateHolding();
        if (frmForex.btnHoldR != undefined) frmForex.btnHoldR.disabled = true;
        gebi('rate').value = msgContent6;
        gebi('SLR').value = msgContent6;
        margin = a.value;
        mCurrRow = getState(a);
        getRSM();
    }
    else {
        margin = a.value;
        resetRigthPanel();
    }
}

var xmlDOM;
function loadXMLDoc(url, call) {
    xmlDOM = new ActiveXObject("Microsoft.XMLDOM");

    if (xmlDOM) {
        xmlDOM.onreadystatechange = call;
        xmlDOM.async = "false";
        xmlDOM.load(url);
    }
}

function setAmountsCtrl(resVal) {
    var frmForex = gebi('frmForex');
    if (resVal == 'RL') return activateRL();
    var arrAmnts = resVal.split('|');
    if (arrAmnts.length == 6 && arrAmnts[0] == 'A') {
        if (arrAmnts[4] == frmForex.buyCurr.value && arrAmnts[5] == frmForex.sellCurr.value) {
            amountCurr = arrAmnts[2];
            contSize = arrAmnts[3];
            if (amountCurr == frmForex.buyCurr.value)
                marginCurr = frmForex.sellCurr.value;
            else
                marginCurr = frmForex.buyCurr.value;
            if (mScript == null) mScript = setInterval(getMarginsCtrl, 200);
            gebi('tdAmounts').innerHTML = arrAmnts[1];
        }
    }

}

var pbCurrentPos = 0;
var tRH = null;
function activateRateHolding() {
    var frmForex = gebi('frmForex');
    var a = gebi('ddAmounts');
    var b = gebi('ddMargins');
    doRefreeze = false;
    if (a && b)
        if (!a.disabled && !b.disabled)
        if (!isNaN(gebi('SLR').value) && frmForex.rate && !isNaN(frmForex.rate.value)) {
        if (frmForex.btnHoldR != undefined) frmForex.btnHoldR.disabled = true;
        enableUpdates = false;
        gebi('rate').style.backgroundColor = 15066597; //gray
        _setQBoxMode(3);
        pbCurrentPos = 0;
        if (typeof (pbSetPos) != 'undefined') pbSetPos(pbMaxPos);
        tRH = setInterval(pbTick, 200);
        btnOkClicked = submited = false;
        if (frmForex.btnOk != undefined) frmForex.btnOk.disabled = false;

        if (frmForex.btnHoldR != undefined) {
            frmForex.btnHoldR.value = btnHoldRTitle2;
            frmForex.btnHoldR.onclick = refreeze;
            frmForex.btnHoldR.disabled = false;
        }
    }
}

var btnOkClicked = false;
function btnOk_onclick(e) {
    var frmForex = gebi('frmForex');
    if (frmForex.btnOk.disabled || btnOkClicked || submited || 1 * event.button > 1) {
        ECancelBubble(e)
    }
    btnOkClicked = true;
    gebi('btnHoldR').disabled = true;
    if (tRH != null) { clearInterval(tRH); tRH = null; }
    document.body.style.cursor = "wait";
    if (frmForex.btnOk != undefined) frmForex.btnOk.click();
}

function Doc_unload() {
    if (wsScript != null) clearInterval(wsScript);
    if (mScript != null) clearInterval(mScript);
    if (cScript != null) clearInterval(cScript);
    if (tRSM != null) clearInterval(tRSM);
    if (tRH != null) clearInterval(tRH);
}

function Doc_onload2(e) {

    var btnOk = gebi('btnOk');
    var frmForex = gebi('frmForex');
    btnOk.style.backgroundColor = 15066597; //gray 
    //_setQBoxMode(3);	this in remark fixes the OQB missing rate;
    if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Safari") != -1) {
        btnOk.onmousedown = btnOk.onkeydown = "btnOk_onclick(event)";
    }
    else {
        btnOk.onmousedown = btnOk.onkeydown = btnOk_onclick;
    }
    checkCurrs2(frmForex.buyCurr, frmForex.sellCurr);
    btnOk.value = (_userLoggedIn ? btnOkTxt2 : btnOkTxt1);
}

function demoDealSend() {
    var a = gebi('buyCurr');
    var b = gebi('sellCurr');
    var c = gebi('ddAmounts');
    var d = gebi('ddMargins');
    if (tabIndex == 0) window.location = 'Forex.DayTrading.aspx?buyCurr=' + a.value + '&sellCurr=' + b.value + (_userLoggedIn ? '&ai=' + c.selectedIndex + "&mi=" + d.selectedIndex : '');
    else window.location = 'Forex.LimitsTrading.aspx?buyCurr=' + a.value + '&sellCurr=' + b.value + '&fDate=' + gebi('fDate').value.replace('/', 'V').replace('/', 'V') + (_userLoggedIn ? '&ai=' + c.selectedIndex + "&mi=" + d.selectedIndex : '');
}

var panelSave = null;
var tabIndex = 0;

function selectSimulatorTab(tabNum) {
    var btnOk = gebi('btnOk');
    var a = gebi("pannel1");
    var b = gebi("limitSet");
    var c = gebi("tdLblSLRU");
    var d = gebi("tdSLRU");
    var dt = document.images["dt"];
    var lo = document.images["lo"];
    var o1 = a.style;
    var o2 = b.style;
    if (tabNum == 1) {
        dt.src = "i/dtF.gif";
        lo.src = "i/loN.gif";
    } else {
        dt.src = "i/dtN.gif";
        lo.src = "i/loF.gif";
    }
    if (tabNum == 0 && tabIndex == 1) {
        a.innerHTML = panelSave;
        tabIndex = 0;
        c.innerText = txtSL1;
        d.innerHTML = txtSL2;
        contScript();
    }
    if (tabNum == 1 && tabIndex == 0) {
        deactivateRateHolding();
        if (frmForex.btnHoldR != undefined) frmForex.btnHoldR.disabled = true;
        tabIndex = 1;
        if (panelSave == null) panelSave = a.innerHTML;
        a.innerHTML = b.innerHTML;
        c.innerText = txtRU1;
        d.innerHTML = txtRU2;
        gebi("fDate").value = limDefDateShore;
        btnOk.value = (_userLoggedIn ? btnOkTxt2 : btnOkTxt1);
        getRSM();
    }
}

function date_onclick(pos, e) {
    CalendarOpen(-1, gebi("fDate"), pos, limMaxDuration, 4, e);
}

function rate_onkeyup(e) {
    try {
        var a = frmForex.SLR;
        var b = frmForex.rate.value;
        if (b != '' && !isNaN(b)) {
            if (frmForex.btnOk != undefined) frmForex.btnOk.disabled = true;
            frmForex.btnCalculate.disabled = false;
            calc = false;
            if (frmForex.SLR) {
                a.value = '';
                a.style.backgroundColor = 15066597; //gray
                a.disabled = true;
            }
        }
        else resetRigthPanel();

    }
    catch (ex) {

    }
}

function rate_onkeypress(e) {
    var frmForex = gebi('frmForex');
    var num, a, WasPoint = false;

    if (!frmForex.rate) return;
    if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Safari") != -1)// FireFox
    {
        e.stopPropagation();
        num = e.charCode - 48;
        for (a = 0; a < frmForex.rate.value.length; a++)
            if (frmForex.rate.value.charAt(a) == '.') WasPoint = true;
        if (e.charCode == 46 && (!WasPoint))
            return true; //Point
        if (((e.charCode < 48) || (e.charCode > 57)) && (e.charCode != 0))
            return false;

    }
    else    //IE 
    {
        e.cancelBubble = true;
        num = e.keyCode - 48;
        for (a = 0; a < frmForex.rate.value.length; a++)
            if (frmForex.rate.value.charAt(a) == '.') WasPoint = true;
        if (e.keyCode == 46 && (!WasPoint)) return true; //Point
        if (((event.keyCode < 48) || (event.keyCode > 57)) && (event.keyCode != 0))
            return false;
    }


    return true;
}

function resetRigthPanel() {
    var frmForex = gebi('frmForex');
    if (frmForex.btnOk != undefined) frmForex.btnOk.disabled = true;
    if (frmForex.rate && frmForex.rate.value != '' && !isNaN(frmForex.rate.value)) frmForex.btnCalculate.disabled = false;
    else frmForex.btnCalculate.disabled = true;
    if (frmForex.SLR) {
        frmForex.SLR.value = '';
        frmForex.SLR.style.backgroundColor = 15066597; //gray
        frmForex.SLR.disabled = true;
    }
}

var calc = false;
function getLimSLR() {

    if (!frmForex.rate) return;
    var frmForex = gebi('frmForex');
    var a = gebi('upBandRate');
    var b = gebi('downBandRate');
    if (frmForex.rate && frmForex.rate.value == '' || isNaN(frmForex.rate.value) || frmForex.rate.value * 1 <= 0) {
        alert(msgContent7);
        frmForex.rate.select();
        return;
    }

    var rate = frmForex.rate.value * 1;
    var upBandRate = a.innerText * 1;
    var downBandRate = b.innerText * 1;

    if (downBandRate <= rate && rate <= upBandRate) {
        alert(msgContent3.replace("*", a.innerText).replace("*", b.innerText));
        frmForex.rate.select();
        return;
    }

    if (rate > upBandRate && rate > upToRate) {
        alert(msgContent4.replace("*", upToRate));
        frmForex.rate.select();
        return;
    }

    if (rate < downBandRate && rate < downToRate) {
        alert(msgContent5.replace("*", downToRate));
        frmForex.rate.select();
        return;
    }

    frmForex.btnCalculate.disabled = true;
    if (frmForex.SLR != undefined) frmForex.SLR.value = msgContent6;
    calc = true;
    SimulatorService.getSLR(gebi('buyCurr').value, gebi('sellCurr').value, (gebi('ddAmounts').value * contSize), amountCurr, margin, frmForex.rate.value, setLimSLRCallback);
}





function setLimSLRCallback(res) {
    setLimSLR(res.value);

}

function setLimSLR(resVal) {
    var frmForex = gebi('frmForex');
    var a = gebi('ddAmounts');
    var b = gebi('ddMargins');
    if (tabIndex != 1) return;

    if (resVal == 'RL') return activateRL();
    if (a && b)
        if (a.disabled || b.disabled)
        checkCurrs(frmForex.buyCurr, frmForex.sellCurr, true);
    else {
        if (resVal != '' && !wasRL) {
            var res = resVal.split('|');
            if (res.length == 3) {
                if ((res[0] != "") && (1 * res[0] == 1 * frmForex.rate.value) && calc) {
                    if (1 * res[1] <= 0) {
                        alert(msgContent7);
                        if (frmForex.SLR != undefined) frmForex.SLR.value = '';
                        return;
                    }
                    frmForex.rate.value = res[2];
                    if (frmForex.SLR != undefined) {
                        frmForex.SLR.value = res[1];
                        frmForex.SLR.style.backgroundColor = 16777215; //white
                        frmForex.SLR.disabled = false;
                    }
                    if (frmForex.btnOk != undefined) frmForex.btnOk.disabled = false;
                }
            }
        }
    }

}
