
gid('calc').style.display='';

//         0     1      2          3   4        5
//{symbol:[title,spread,limit_stop,gap,swap_buy,swap_sell],...}

fx4u_bids={};

function calc_fx4u_update_quotes(quotes)
{
 var fx4u_allowed_symbols=[];
 for (var i in quotes['data']) 
  if ('GOLD'!=i && 'SILVER'!=i && i.substring(0,1)!='#')
   fx4u_allowed_symbols.push(i);

var q=[];
var append=(!gid('symbol').childNodes.length);
//alert(append);

for (var i in fx4u_allowed_symbols)
{
 var s=fx4u_allowed_symbols[i];
 if (q=quotes['data'][s])
 {
  fx4u_bids[s]=q['bid'];
  if (6==s.length)
  {
   var base=s.substring(0,3);var supp=s.substring(3);
   if (!fx4u_bids[base]) fx4u_bids[base]={};fx4u_bids[base][supp]=q['bid'];
   if (!fx4u_bids[supp]) fx4u_bids[supp]={};fx4u_bids[supp][base]=1/q['bid'];
  }
  if (append && fx4u_symbols[s]) gid('symbol').appendChild(elem('option',{'value':s},[],s+' / '+fx4u_symbols[s][0]));
 }
}

calc();

}

if (typeof fx4u_update_quotes_callback=='undefined') fx4u_update_quotes_callback={};
fx4u_update_quotes_callback['calc']=calc_fx4u_update_quotes;

function conv_curr(from,to)
{
 var i,ratio;

 // 1 check fromto or tofrom symbols
 if (fx4u_bids[from][to]) return fx4u_bids[from][to];
 else 
 {
  for (i in fx4u_bids[from])
   if (ratio=conv_curr(i,to)) 
    return ratio*fx4u_bids[from][i];
 }
 
 return false;
}

function num_format(v,l)
{
 if ((''+Math.round(1*v)).length>l) return Math.round(v);
 else return 1*((''+v).substring(0,l));
}

function calc()
{
 var full_contract=100000;
 var bid=''+fx4u_bids[val('symbol')];
 var symbol=val('symbol');

 var i=0,point='';
 for (i=0;i<bid.length-1;i++) 
  if ('.'==bid.charAt(i)) point+='.';else point+=0;
 point=1*(point+'1');

 if (6==symbol.length)
 {
  var base=symbol.substring(0,3);
  var supp=symbol.substring(3);
 }
 else
 {
  var base=symbol;
  var supp='USD';
 }
 var curr=val('currency');
 var supp_mul=1,base_mul=1;
 if (curr!=supp) supp_mul=conv_curr(supp,curr);
 if (curr!=base) base_mul=conv_curr(base,curr);

 var cents=gid('cents').checked;
 var lot=val('lot').replace(/,/,'.');
 if (isNaN(lot))
 {
  gid('error').style.display='';
  gid('result').style.display='none';
  return false;
 }
 lot=1*lot;
 if (cents) lot*=0.01;

 var contract=lot*full_contract;
 var point_value=contract*point;

 var lot_point=supp_mul*point_value;
     if (cents) lot_point*=100;
     lot_point=num_format(lot_point,5);
 var margin=base_mul*contract/val('leverage');
     if (cents) margin*=100;
     margin=num_format(margin,5);


 var sdata=fx4u_symbols[symbol];
 gid('ssymbol').innerHTML=symbol;
 gid('squote').innerHTML=bid;

 gid('stitle').innerHTML=sdata[0];
 gid('spread').innerHTML=sdata[1]+lang['p']+num_format(sdata[1]*lot_point,6)+' '+(cents?lang['of_cents']:'')+curr+')';
 gid('swap_buy').innerHTML=sdata[4]+lang['p']+num_format(sdata[4]*lot_point,6)+' '+(cents?lang['of_cents']:'')+curr+')';
 gid('swap_sell').innerHTML=sdata[5]+lang['p']+num_format(sdata[5]*lot_point,6)+' '+(cents?lang['of_cents']:'')+curr+')';
 gid('contract').innerHTML=''+num_format(contract,5)+' '+base;
 gid('lot_point').innerHTML=''+lot_point+' '+(cents?lang['of_cents']:'')+curr;
 gid('margin').innerHTML=''+margin+' '+(cents?lang['of_cents']:'')+curr;
 gid('result').style.display='';
 gid('error').style.display='none';


 return false;
}

function elem(name, attrs, style, text, children) {
    var e=document.createElement(name);
    if (attrs) {
        for (key in attrs) {
            if (key == 'class') e.className = attrs[key];
            else if (key == 'id') e.id = attrs[key];
            else if (key == 'innerHTML') e.innerHTML = attrs[key];
            else if (key == 'colspan') e.colSpan = attrs[key];
            else e.setAttribute(key, attrs[key]);
        }
    }
    if (style) for (key in style) e.style[key] = style[key];
    if (text) e.appendChild(document.createTextNode(text));
    if (children) for (key in children) e.appendChild(children[key]);
    return e;
}

function gid(id) {return document.getElementById(id);}
function val(id) {return gid(id).value;}
