var c=0 // режим расчета(0 - прямой от суммы к оплате, 1-обратный, от суммы к получению)
var ex; // индекс текущей валюты(на ввод)
var px; // пара

// прототип объекта пары
function pair(outemi)
{
  this.outemi=outemi;
  this.rates=new Array();
  this.vals=new Array();
}
// прототип объекта валюты
function emoney(id, label, name, precis, in_info, out_info)
{
  this.id=id;
  this.label=label;
  this.name=name;
  this.precis=precis;
  this.in_info=in_info
  this.out_info=out_info
  this.pairs=new Array;
}
// Получение индекса валюты по коду
function emindex(emi)
{
  for(e=0;e<ems.length;e++)
    if(ems[e].id==emi) return e;
}
// возвращает HTML-код таблицы курсов для указанной пары
function showRatesTable()
{  
  if(ems[ex].pairs.length == 0) 
    rs = '<td><table><tr><td>по выбранному направлению обмена заявки временно не обслуживаются</td></tr></table></td>' 
  else
  {
    pr=ems[ex].pairs[px]
    rs="<td><table><tr><td>Сумма</td><td>Курс</td></tr>"
    for(i=0;i<pr.vals.length; i++)
      if(pr.rates[i])rs=rs+"<tr><td>до "+pr.vals[i]+"</td><td>"+pr.rates[i]+" ("+rounds(1/pr.rates[i], 1000)+")</td></tr>"
      else rs=rs+"<tr><td>до "+pr.vals[i]+"</td><td>-</td></tr>"
    rs=rs+"</table></td>"
  }
  document.getElementById('rates').innerHTML=rs
}

// Загрузка списка "Отдаете"
function loadEms()
{
  //document.xform.inem.options[0]=new Option("-", 0);
  for(e=0;e<ems.length; e++)
  {
    opt=new Option(ems[e].name, ems[e].id);
    eval("document.xform.inem.options["+e+"]=opt");
  }
  ex=0
}
// функция задает начальные значения (вызывается при загрузке страницы)
function init()
{
  loadEms();
}
// обработчик изменений в списке "Отдаете"
function inemChange()
{
  for(s=0;s<document.xform.outem.options.length;s++) // очистка списка outem
    document.xform.outem.options[s]=null;
  ex=emindex(document.xform.inem.value); // получение индекса вводимой валюты
  
  
  for(p=0;p<ems[ex].pairs.length;p++)
  {
    ox=ems[ex].pairs[p].outemi; 
    opt=new Option(ems[emindex(ox)].name, ox);
    eval("document.xform.outem.options["+p+"]=opt");
  }
  document.getElementById('inl').innerHTML=ems[ex].label
  document.getElementById('in_info').innerHTML=ems[ex].in_info  
  outemChange()
}
// обработчик изменений в списке "Получаете"
function outemChange()
{
  px=0
  for(p=0;p<ems[ex].pairs.length;p++) // перебор пар
    if(ems[ex].pairs[p].outemi==document.xform.outem.value) px=p;
  showRatesTable();  
  if(ems[ex].pairs.length == 0)
  {
    document.getElementById('out_info').innerHTML=""
    document.getElementById('outl').innerHTML=""
  }
  else
  {
    outx = emindex(ems[ex].pairs[px].outemi)
    document.getElementById('out_info').innerHTML=ems[outx].out_info
    document.getElementById('outl').innerHTML=ems[outx].label
  }
  calc()
}
// определение расчетного курса по сумме к оплате
function rate(sum)
{
  if(ems[ex].pairs.length == 0)return -2;
  pr=ems[ex].pairs[px]
  for(i=0; i<pr.vals.length; i++)
    if(sum <= pr.vals[i])
      return pr.rates[i]
  return -1
}
// определение расчетного курса по сумме к получению
function rateR(sum)
{
  if(ems[ex].pairs.length == 0)return -2;
  pr=ems[ex].pairs[px]
  l=pr.rates.length-1
  if(sum>pr.vals[l]*pr.rates[l])
    return -1
  for(i=l; i>0; i--)
  {
    if(sum>pr.rates[i]*pr.vals[i-1])
      return pr.rates[i]
  }
  return pr.rates[0]
}

// обработчик изменений cуммы к оплате
function insumChange(sender)
{
  c=0
  insum=strToSum(document.xform.insum.value)
  if(!ex) return
  crate=rate(insum) // получение расчетного курса
  if(crate == -2)
  {
    document.xform.outsum.value = 0
    document.xform.insum.value = 0
    document.getElementById('cr').innerHTML="расчетный курс: 0"
    return
  }
  if(crate==-1)
  {
    alert("Укажите меньшую сумму!")
    return
  }
  outsum=crate*insum
  outx=emindex(ems[ex].pairs[px].outemi)
  if(sender==1)document.xform.insum.value=rounds(insum, ems[ex].precis)
  document.xform.outsum.value=rounds(outsum, ems[outx].precis)
  document.getElementById('cr').innerHTML="расчетный курс: "+crate+" ("+rounds(1/crate, 1000)+")"
}
// обработчик изменений cуммы к получению
function outsumChange(sender)
{
  c=1
  outsum=strToSum(document.xform.outsum.value)
  if(!ex) return
  r = rateR(outsum)
  if(r == -2)
  {
    document.xform.outsum.value = 0
    document.xform.insum.value = 0
    document.getElementById('cr').innerHTML="расчетный курс: 0"
    return
  }
  if(r==-1)
  {
    alert("Укажите меньшую сумму!")
    return
  }
  document.getElementById('cr').innerHTML="расчетный курс: "+r+" ("+rounds(1/r, 1000)+")"
  insum=outsum/rateR(outsum)
  document.xform.insum.value=rounds(insum, ems[ex].precis)
  if(sender==1)document.xform.outsum.value=rounds(outsum, ems[outx].precis)
}
// пересчет полей формы
function calc()
{
  /*
  if(ems[ex].pairs.length == 0)
  {
    document.xform.insum.value = 0
    document.xform.outsum.value = 0
    return
  }
  */
  if(c==0) insumChange()
  else outsumChange()
}
// проверка формы
function сheckForm()
{
  m="";
  if(document.xform.inem.value==0) m=m+"Выберете, что Вы хотите отдать для обмена! \n"
  if(document.xform.outem.value==0) m=m+"Выберете, что Вы хотите получить в результате обмена! \n"
  if(document.xform.insum.value==0 || document.xform.outsum.value==0) m=m+"Укажите сумму которую Вы хотите обменять или сумму которую Вы хотите получить! \n"
  if(m=="") return true
  alert(m)
  return false
}