/*
    Toggles a popup menu
*/
function togglePopup(pItem, pField)
{
    var obj = document.getElementById('popupmenu');
    var objvisible = obj.style.display == 'block';
    
    if (pField == 'inpleverage' && fixed_lev)
        return;
    
    // The user has clicked on the current popup's handle again
    // so the popup should be hidden
    if (pItem == currentPopup && objvisible)
    {
        hideObj('popupmenu');
    }
    // The user has clicked on a previously selected popup, but it's
    // not currently visible so we need to show it
    else if (pItem == currentPopup)
    {
        showObj('popupmenu');
    }
    // The user clicked on a different popup that needs to be regenerated
    else
    {
        regeneratePM(pItem, obj);
        fObj = document.getElementById(pField);
        if (!fObj)
            alert('not found');
        var objpos = getElementPos(pField);
        var objdim = getElementDimensions(pField);
        var newy = objpos.top + objdim.height + pmYOffset;
        var newx = objpos.left + pmXOffset;
        obj.style.left = newx + 'px';
        obj.style.top = newy + 'px';
        showObj('popupmenu');
    }
    
    currentPopup = pItem;
    currentField = pField;
}

/*
    Regenerates a popup menu
*/
function regeneratePM(pItem, pObj)
{
    var mitems = '';

    
    for (var i = 0; i < contextMenus[pItem].length; i++)
        mitems += '<div class="pmitem" onclick="selectVal(\'' + contextMenus[pItem][i] + '\')">' + contextMenus[pItem][i] + '</div>';

    pObj.innerHTML = mitems;
}

/*
    Selects a value from a popup menu
*/
function selectVal(pValue)
{
    var obj = document.getElementById(currentField);
    obj.value = pValue;
    hideObj('popupmenu');
    
    // Additionally, process instrument selection
    if (currentField == 'inpinstr')
        getInstrumentInfo();
}

/*
    Initializes calculations
*/
function initCalc()
{
    var lnk = document.getElementById('calclink');
    lnk.onclick = null;
    lnk.innerHTML = str_wait;
    showObj('progressdiv');
    setTimeout('getResults()', 1000);
}

/*
    Executes calculations
*/
function getResults()
{
    setContent('errlabel', '');
    var buysell = 'buy';
    
    if (getVal('inppos') != contextMenus[4][0])
        buysell = 'sell';
        
    var url = base_url + 'ajcalc.php?input=' + encodeURIComponent(getVal('inpinstr')) + '&output=' + getVal('inpdeposit')
            + '&lot=' + getVal('inplot') + '&leverage=' + getVal('inpleverage')
            + '&cpopen=' + getVal('inpcpopen') + '&cpclose=' + getVal('inpcpclose')
            + '&lng=' + current_lang + '&pos=' + buysell + '&rnd=' + Math.random();
    ajaxGet(url, null, calcCompleted);
}

/*
    Parses calculation results
*/
function calcCompleted(pResult, pError)
{
    var lnk = document.getElementById('calclink');
    lnk.onclick = initCalc;
    lnk.innerHTML = str_calc;
    resp = eval(pResult);
    
    if (resp.error == 'yes')
    {
        setContent('errlabel', resp.errmsg);
    }
    else
    {
        setContent('rescontract', resp.contract);
        setContent('resspread', resp.spread);
        setContent('restick', resp.tick);
        setContent('respip', resp.pip);
        setContent('resswapshort', resp.swap_short);
        setContent('resswaplong', resp.swap_long);
        setContent('resmargin', resp.margin);
        setContent('resprofit', resp.profit);
        setContent('comstext', resp.coms);
    }
    
    hideObj('progressdiv');
}

/*
    Downloads information about an instrument
*/
function getInstrumentInfo()
{
    var url = base_url + 'ajinstrument.php?input=' + encodeURIComponent(getVal('inpinstr')) + '&rnd=' + Math.random();
    ajaxGet(url, null, instrumentInfoCompleted);
}

/*
    Sets default prices, received by ajax call
*/
function instrumentInfoCompleted(pResult, pError)
{
    if (!pError)
    {
        var obj = eval(pResult);
        var levobj = document.getElementById('inpleverage');
        setVal('inpcpopen', obj.openprice);
        setVal('inpcpclose', obj.closeprice);
        setContent('comstext', obj.price);
        contextMenus[1] = obj.lots;
        setVal('inplot', obj.deflot);
        
        if (obj.leverage != 'default')
        {
            if (obj.leverage == 'none')
                obj.leverage = '';
            setVal('inpleverage', obj.leverage);
            fixed_lev = true;
            levobj.className = 'definput inpleveragedis';
        }
        else
        {
            setVal('inpleverage', contextMenus[2][1]);
            fixed_lev = false;
            levobj.className = 'definput inpleverage';
        }
    }
}

/*
    Updates the url with new language and theme parameters
*/
function updateUrl(pLang, pTheme)
{    
    if (pLang != '')
        current_lang = pLang;
    
    if (pTheme != '')
        current_theme = pTheme;
        
    var furl = 'http://admiral.fxservice.com/tools/ekocalc/ekocalc.php?lang=' + current_lang + '&theme=' + current_theme;
    location.href = furl;
}
