
/**
 *
 * BankControl.js
 *
 * Author: Dailton Santana de Almeida
 *
 */


// Comp validations

function validateComp(comp) {
  var i, validComps = new Array("001", "002", "003", "006", "007", "008", "009", "010", "016", "018", "021", "033", "048", "086", "198" ,"452", "900", "902");

  for (i = 0; i < validComps.length; i++) {
    if (comp == validComps[i]) {
      return true;
    }
  }
  return false;
}


// Bank validations

function validateBank(bank) {
  
  if(bank != null) {
  	if(bank.length < 3) {
	  	return false;
  	}
  }
    
  //CT-0808.07 - Adicionado os bancos 008 (Santander Meridional), 353 (Santander Brasil) e 479  (Ita?/Bank Boston)
  return (bank != "291" && bank != "008" && bank != "353" && bank != "409" && bank != "479"); // MIGRACAO BCN -> BRADESCO; DEIXA DE ACEITAR CODIGO DO BCN
}


// Module 11

function validateMod11(data, digit) {
  return digit == calcMod11(data);
}

function lpadZeros(txtField, size) {
  var str = txtField.value;
  while (str.length < size) {
    str = "0" + str;
  }
  txtField.value = str;
}


function getOnlyNumbers(numero) {

	var temp = "";
	var i;
	var ch;

        // Verify arguments
    	var tam = numero.length;
		
    	// Verify if number contains only digits
    	for (i = 0; i < tam; i++) {
        	ch = numero.charAt(i);
        	if (ch >= '0' && ch <= '9') {
        		temp = temp + ch;
        	}
	}

	return temp;
}

function validateNroChequeC3Fields(numeroCheque) {

	var i, resto, tam, digito;
	var d_aux;
	var valor;

	digito = 0;
	d_aux = getOnlyNumbers(numeroCheque);
	tam = d_aux.length;

	for(i = 0; i < tam; i++) {
		valor = d_aux.charAt(i) - '0';
		digito = digito + (valor * (tam+2-(i+1)));
	}

	digito = digito * 10;
	resto = digito % 11;
	digito = resto;
	resto = digito % 10;

	return resto;
}



function validateCompBankAgencyC1Fields(txtComp, txtBank, txtAgency, txtC1) {
  lpadZeros(txtComp  , 3);
  lpadZeros(txtBank  , 3);
  lpadZeros(txtAgency, 4);
  return validateMod11(txtComp.value + txtBank.value + txtAgency.value, txtC1.value);
}

function validateAccountC2Fields(txtComp, txtBank, txtAgency, txtC1, txtAccount, txtC2) {
  var bank = parseInt(txtBank.value, 10), agency = parseInt(txtAgency.value, 10), account = txtAccount.value, aux;
  switch (bank) {
    case 275:
    case 356:
      // BANCO REAL OU ABN - ULTIMO DIGITO DA CONTA NAO EH USADO PARA CALCULO DO C2
      aux = account.substr(0, account.length - 1);
      break;
    case 347:
      // BANCO SUDAMERIS - SE AGENCIA COM QUATRO DIGITOS, ULTIMO DIGITO DA CONTA NAO EH USADO PARA CALCULO DO C2
      if (agency >= 1000) {
        aux = account.substr(0, account.length - 1);
      } else {
        aux = account;
      }
      break;
    default:
      aux = account;
  }
  return validateMod11(aux, txtC2.value);
}

function calcMod11(data) {
  var i, j, result = 0;

  for (i = data.length - 1, j = 0; i >= 0; i--, j = (j + 1) % 8) {
    result += data.charAt(i) * (j + 2);
  }

  result %= 11;
  result = ((result <= 1) ? 0 : (11 - result));

  return result;
}

// LARP - 07/02/06
function validateAccount(cc){
	if (cc.length <= 10 || (cc.length == 11 && cc.charAt(0) == '0')){
		return true;
	}  else {
		return false;
	}
}

