$(function(){
  $('.reverse-currency-calculator').each(function(){
    var obj = $(this);
    var cb = function(){
      calculateReverseCurrencyFields(obj);
    };
    
    obj.keyup(cb).focus(cb).blur(cb);
    $('#' + obj.attr('currency')).change(cb);
    
    $("#region_1").change(cb);
    $("#region_2").change(cb);
    
    cb();
  });
});

function calculateReverseCurrencyFields(obj) {
  var fieldReceive = obj;
  var amount = parseFloat(obj.val());
  var currencyAction = obj.attr('currencyAction');
  var fieldDeposit = $('#' + obj.attr('pay'));
  var fieldCurrency = $('#' + obj.attr('currency'));
  var fieldCurrencySelected = $('#' + obj.attr('currencySelected'));
  var fieldCommissionWM = $('#' + obj.attr('commissionWM'));
  var fieldCommissionService = $('#' + obj.attr('commissionService'));
  var bank_id = obj.attr("bank_id");
  
  fieldCurrencySelected.html(fieldCurrency.val());
  var currency = fieldCurrency.val().toLowerCase();
  
  switch (currencyAction) {
    case 'deposit':
      fieldDeposit.val(roundVal(calculateReverseDeposit(currency, amount), 2));
      break;
    
    case 'withdraw':
      if (amount > 0) {
        $region_2 = $("#region_2");
        if ($region_2 && $region_2.attr("checked")) {
          amount *= 1.01;
        }
        
        if (bank_id == "vtb24-telebank" || bank_id == "vtb24-card") {
          var new_amount;
          
          new_amount = amount * 1.001;
          if ((new_amount - amount) < 5) {
            new_amount = amount + 5;
          }
          
          amount = new_amount;
        } else if (bank_id == "otherbank") {
          amount += 10;
        } else if (bank_id == "blic") {
          var diff;
          
          diff = amount * 0.0175;
          if (diff < 150) {
            diff = 150;
          }
          
          amount += 200 + diff;
        }
      }
      
      var pay = calculateReverseWithdraw(currency, amount)
      fieldDeposit.val(roundVal(pay, 2));
      
      var wmcommission = 0;
      wmcommission = getWMCommission(currency, pay);
      if (wmcommission < 0) { wmcommission = 0; }
      fieldCommissionWM.val(roundVal(wmcommission, 2));
      
      fieldCommissionService.val(roundVal(getServiceCommission(currency, pay), 2));
      
      break;
  }
}

function calculateReverseServiceCommission(currency, amount) {
  var ret = 0;
  
  switch(currency) {
    case 'wmr':
      ret = amount / (rates.kwmrvyv * 100) * 100;
      
      if ((ret - amount) < 35) {
        ret = amount + 35;
      }
      break;
    
    case 'wmz':
      ret = ((amount / (rates.kwmzvyv * 100)) * 100);
      
      if ((ret - amount) < 35) {
        ret = amount + 35;
      }
      
      ret /= rates.wmzvyv;
      break;
  }
  
  if (ret < 0.01 || amount < 0.01) {
    ret = 0;
  }
  
  return ret;
}

function calculateReverseWithdraw(currency, amount) {
  var ret = 0;
  var bankCommission = 0;
  
  ret = calculateReverseServiceCommission(currency, amount) + bankCommission;
  
  if (ret < 0.01) {
    ret = 0;
  }
  
  return ret;
}

function calculateReverseDeposit(currency, amount) {
  var ret = 0;
  
  currency = currency.toLowerCase();
  
  switch (currency) {
    case 'wmr':
      var min = 999.99 * rates.kwmrvv1;
      
      if (amount < min) {
        ret = amount / (rates.kwmrvv1 * 100) * 100;
      } else if (amount >= 1000) {
        ret = amount / (rates.kwmrvv2 * 100) * 100;
      }
      
      break;
    
    case 'wmz':
      ret = amount * rates.wmzvv;
      var min = 999.99 * rates.kwmzvv1;
      
      if (ret < min) {
        ret = ret / (rates.kwmzvv1 * 100) * 100;
      } else if (ret >= 1000) {
        ret = ret / (rates.kwmzvv2 * 100) * 100;
      }
      break;
  }
  
  return ret;
}
