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

function calculateCurrencyFields(obj) {
  var fieldDeposit = obj;
  var amount = parseFloat(obj.val());
  var currencyAction = obj.attr('currencyAction');
  var fieldCurrency = $('#' + obj.attr('currency'));
  var fieldReceive = $('#' + obj.attr('receive'));
  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':
      fieldReceive.val(roundVal(calculateDeposit(currency, amount), 2));
      break;
    
    case 'withdraw':
      var receive = calculateWithdraw(currency, amount)
      
      if (amount > 0) {
        if (bank_id == "vtb24-telebank" || bank_id == "vtb24-card") {
          var new_receive;

          new_receive = receive / 1.001;
          if ((receive - new_receive) < 5) {
            new_receive = receive - 5;
          }

          receive = new_receive;
        } else if (bank_id == "otherbank") {
          receive -= 10;
        } else if (bank_id == "blic") {
          var diff;
          
          receive -= 200;
          
          diff = receive / 1.0175;
          if ((receive - diff) < 150) {
            receive -= 150;
          } else {
            receive = diff;
          }
        }
      }
      
      $region_2 = $("#region_2");
      if ($region_2 && $region_2.attr("checked")) {
        receive /= 1.01;
      }
      
      if (receive < 0.01) {
        receive = 0;
      }
      
      fieldReceive.val(roundVal(receive, 2));
      
      var wmcommission = 0;
      wmcommission = getWMCommission(currency, amount);
      if (wmcommission < 0) {
        wmcommission = 0;
      }
      
      fieldCommissionWM.val(roundVal(wmcommission, 2));
      fieldCommissionService.val(roundVal(getServiceCommission(currency, amount), 2));
      break;
  }
}

function fetchWMID(field, purse) {
  $('#loader-' + field.attr('to')).show();
  
  $.getJSON('/ajax-wm.php', {
    action: 'fetchwmid',
    purse: purse
  }, function(data){
    $('#' + field.attr('to')).val(data);
    $('#loader-' + field.attr('to')).hide();
  });
}

function validateWMID(field, wmid) {
  $('#loader-' + field.attr('id')).show();
  
  $.getJSON('/ajax-wm.php', {
    action: 'validatewmid',
    wmid: wmid
  }, function(data){
    $('#' + field.attr('id')).val(data);
    $('#loader-' + field.attr('id')).hide();
  });
}

function getWMCommission(currency, amount) {
  if (amount < 0.01) {
    return 0;
  }
  
  var ret = amount * 0.008;
  
  switch (currency) {
    case 'wmr':
      if (ret < 0.01) {
        ret = 0.01;
      } else if (ret > 1500) {
        ret = 1500;
      }
      break;
    
    case 'wmz':
      if (ret < 0.01) {
        ret = 0.01;
      } else if (ret > 50) {
        ret = 50;
      }
      break;
  }
  
  return amount + ret;
}

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

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

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

function calculateWithdraw(currency, amount) {
  var ret = 0;
  var bankCommission = 0;
  
  ret = calculateServiceCommission(currency, amount) - bankCommission;
  
  if (ret < 0.01) {
    ret = 0;
  }
  
  return ret;
}
