<!-- Hide from browsers that do not support JavaScript
//Limpia campos de entrada y salida
function iniciar()
{
	document.formato.banco.value="01";
	document.formato.tipo.value = "CC";
	document.formato.cuenta.value="";
    document.formato.resultado.value="";
}

//verifica que la longitud este dentro de los parametros deseados, sino envia un mensaje explicativo
function revisaLongitud(sinGuiones,longitudMin,longitudMax)
{
	if (sinGuiones.length >= longitudMin && sinGuiones.length <= longitudMax) {
		return sinGuiones;
	}
	else {
		if (longitudMin == longitudMax) {
		   return "La cuenta debe tener " + longitudMin +" digitos";
		}
		else {
			return "La cuenta debe tener de " + longitudMin + " a " + longitudMax + " digitos";
		}
    }
}

//rellena de ceros a la izquierda a la variable sinCeros hasta llegar a la longitud deseada
function rellenaCerosIzq(sinCeros,longitud)
{
	conCeros = sinCeros
	while (conCeros.length < longitud) {
		conCeros = "0" + conCeros;
	}
	return conCeros;
}

//de una cuenta con guion obtiene el grupo de numeros especificado en indice
function obtieneCampo(texto,indice)
{	
	campo = "";
	i=0;
    x=1;
    
    continuar = true;
    while (continuar) {
        if (texto.charAt(i) != "-" && x==indice && i<texto.length) {
			campo = campo + texto.charAt(i);
		}
        if (texto.charAt(i) == "-") {
			x++;
		}
        if (x>indice || i>= texto.length) {
			continuar = false;
		}		
        i++;
    }
	return campo;
}

function bCentral(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
			return revisaLongitud(sinGuiones,14,14);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bAtlantida(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
    switch (tipoCuenta) {
		case "CC":
		case "CA":
		case "PM":
			return revisaLongitud(sinGuiones,10,12);
			break;
		case "TC":
			return revisaLongitud(sinGuiones,16,16);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bContinental(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
    switch (tipoCuenta) {
		case "CC":
		case "CA":
		case "PM":
            if (guiones != 2) {
				return "La cuenta debe tener 2 guiones";
			}
			primerCampo=obtieneCampo(cuentaDelBanco,1);
            primerCampo = rellenaCerosIzq(primerCampo,2);
            if (primerCampo.length > 2) {
				return "la cuenta debe tener maximo 2 digitos antes del primer guion";
            }
            if (primerCampo == "00") {
                return "El primer campo no puede ser todo ceros";
            }
			segundoCampo=obtieneCampo(cuentaDelBanco,2);
            segundoCampo = rellenaCerosIzq(segundoCampo,2);
            if (segundoCampo.length > 2) {
				return("la cuenta debe tener maximo 2 digitos entre el primer y segundo guion");
            }
            if (segundoCampo == "00") {
                return "El segundo campo no puede ser todo ceros";
            }
			tercerCampo=obtieneCampo(cuentaDelBanco,3);            
            tercerCampo = rellenaCerosIzq(tercerCampo,6);
            if (tercerCampo.length > 6) {
				return("la cuenta debe tener maximo 6 digitos despues del segundo guion");
            }
            if (tercerCampo == "000000") {
                return "El tercer campo no puede ser todo ceros";
            }
           cuentafinal = primerCampo + segundoCampo + tercerCampo;
			return revisaLongitud(cuentafinal,10,10);
			break;
		case "TC":
			return revisaLongitud(sinGuiones,16,16);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bCuscatlan(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
	switch (tipoCuenta) {
		case "CC":
        case "CA":
            cuentafinal = rellenaCerosIzq(sinGuiones,15)
			return revisaLongitud(cuentafinal,15,15);
			break;
		case "PM":
			cuentafinal = revisaLongitud(sinGuiones,6,12);
			return rellenaCerosIzq(cuentafinal,12);			
			break;
		case "TC":
            if (sinGuiones.charAt(0) != "4") {
				return "El numero de tarjeta debe comenzar con 4";
			}
			return revisaLongitud(sinGuiones,16,16);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bTrabajadores(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
	switch (tipoCuenta) {
		case "CC":
        case "CA":
			return revisaLongitud(sinGuiones,12,12);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bOccidente(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
	prefijo = sinGuiones.charAt(0);
    if (sinGuiones.charAt(2) == "0") {
		return "El tercer digito no puede ser cero";
	}
    switch (tipoCuenta) {
		case "CC":
            if (prefijo != "1") {
				return "Las cuentas de cheques comienzan con 1";
			}
			return revisaLongitud(sinGuiones,12,12);
			break;
		case "CA":
            if (prefijo != "2") {
				return "Las cuentas de ahorros comienzan con 2";
			}
			return revisaLongitud(sinGuiones,12,12);
			break;
		case "PM":
			return revisaLongitud(sinGuiones,12,12);
			break;
		case "TC":
			return revisaLongitud(sinGuiones,16,16);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bBamer(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
    switch (tipoCuenta) {
		case "CC":
		case "CA":
            if (guiones != 1) {
				return "La cuenta debe tener 1 guion";
			}
			if (sinGuiones.length < 4) {
				return("La cuenta debe tener por lo menos 4 digitos");
			}
			primerCampo=obtieneCampo(cuentaDelBanco,1);
			if (primerCampo.length == 0) {
				return("La cuenta debe tener por lo menos un digito antes del guion");
			}
			segundoCampo=obtieneCampo(cuentaDelBanco,2);
			if (segundoCampo.length == 0) {
				return("La cuenta debe tener por lo menos un digito despues del guion");
			}
            segundoCampo = rellenaCerosIzq(segundoCampo,3);
            if (segundoCampo.length > 3) {
				return("La cuenta debe tener maximo 3 digitos despues del guion");
            }
           cuentafinal = primerCampo + segundoCampo;
			return cuentafinal
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}

}

function bHonduras(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
    switch (tipoCuenta) {
		case "CC":
			return revisaLongitud(sinGuiones,7,10);
			break;
		case "CA":
			return revisaLongitud(sinGuiones,10,10);
			break;
		case "PM":
			return revisaLongitud(sinGuiones,10,10);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bBanhcafe(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
		case "CA":
		case "PM":
			return revisaLongitud(sinGuiones,10,12);
			break;
		case "TC":
			return revisaLongitud(sinGuiones,16,16);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bBanpais(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
		case "CA":
			return revisaLongitud(sinGuiones,7,10);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}

}

function bUno(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
		case "CA":
			return revisaLongitud(sinGuiones,4,15);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bLafise(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
    switch (tipoCuenta) {
		case "CC":
		case "CA":
		case "PM":
            if (guiones != 3 &&  guiones!=1) {
				return "La cuenta debe tener 1 o 3 guiones";
			}
           if (guiones == 1) {
				primerCampo=obtieneCampo(cuentaDelBanco,1);
				segundoCampo=obtieneCampo(cuentaDelBanco,2);
				cuentafinal = primerCampo+segundoCampo;
				return revisaLongitud(cuentafinal,12,12);
			}
			if (guiones == 3) {
				primerCampo=obtieneCampo(cuentaDelBanco,1);
				segundoCampo=obtieneCampo(cuentaDelBanco,2);
				tercerCampo = obtieneCampo(cuentaDelBanco,3);
				cuartoCampo = obtieneCampo(cuentaDelBanco,4);
				if (tercerCampo.length > 2) {
					cuentafinal = primerCampo+tercerCampo;
				}
				else {
					cuentafinal = primerCampo + segundoCampo + tercerCampo + cuartoCampo;
				}
				return revisaLongitud(cuentafinal,12,12);
			}	
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bFicensa(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
		case "CA":
			if (guiones == 0 || guiones == 1) {
			   cuentaFinal = rellenaCerosIzq(sinGuiones,10);
			   return revisaLongitud(cuentaFinal,10,10);
			}
			if (guiones == 2) {
				primerCampo=obtieneCampo(cuentaDelBanco,1);
				if (primerCampo.length == 0) {
					return "la cuenta debe tener por lo menos un digito antes del primer guion";
				}
				segundoCampo=obtieneCampo(cuentaDelBanco,2);
				if (segundoCampo.length == 0) {
					return "la cuenta debe tener por lo menos un digito entre el primer y segundo guion";
				}
				tercerCampo = obtieneCampo(cuentaDelBanco,3);
				if (tercerCampo.length != 1) {
					return "la cuenta debe tener un solo digito despues del segundo guion";
				}
				primerCampo = rellenaCerosIzq(primerCampo,3);
				if (primerCampo.length > 3) {
					return "la cuenta debe tener maximo 3 digitos antes del primer guion";
				}
				if (segundoCampo.length > 6) {
					return "la cuenta debe tener maximo 6  entre el primer y segundo guion";
				}
                segundoCampo = rellenaCerosIzq(segundoCampo,6);
				cuentafinal = primerCampo + segundoCampo + tercerCampo;
			    return revisaLongitud(cuentafinal,10,10);
			}
			if (guiones > 2) {
				return "No se permiten mas de 2 guiones en la cuenta" 
			}
			break
		case "PM":
            cuentaFinal = rellenaCerosIzq(sinGuiones,7);
			return revisaLongitud(cuentaFinal,7,7);
			break;
		case "TC":
			return revisaLongitud(sinGuiones,16,16);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bBac(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
		case "CA":
			return revisaLongitud(sinGuiones,9,9);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bPromerica(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
		case "CA":
			return revisaLongitud(sinGuiones,1,14);
			break;
		case "PM":
			return revisaLongitud(sinGuiones,1,7);
			break;
		case "TC":
			return revisaLongitud(sinGuiones,16,16);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bFicohsa(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
    switch (tipoCuenta) {
		case "CC":
		case "CA":
            if (guiones != 2) {
				return "La cuenta debe tener 2 guiones";
			}
			primerCampo=obtieneCampo(cuentaDelBanco,1);
            if (primerCampo.length == 0) {
				return "la cuenta debe tener por lo menos un digito antes del primer guion";
            }
            primerCampo = rellenaCerosIzq(primerCampo,3);
            if (primerCampo.length != 3) {
				return "la cuenta debe tener 3 digitos antes del primer guion";
            }
			segundoCampo=obtieneCampo(cuentaDelBanco,2);
            if (segundoCampo.length != 3) {
				return("la cuenta debe tener 3 digitos entre el primer y segundo guion");
            }
			if (tipoCuenta == "CC" && segundoCampo.charAt(0) !="1") {
				return("La cuenta de cheques comienza con 1 en el segundo campo");
			}
			if (tipoCuenta == "CA" && segundoCampo.charAt(0) !="2") {
				return("La cuenta de cheques comienza con 1 en el segundo campo");
			}
			tercerCampo=obtieneCampo(cuentaDelBanco,3);            
            if (tercerCampo.length == 0) {
				return("la cuenta debe tener por lo menos un digito despues del segundo guion");
            }
            tercerCampo = rellenaCerosIzq(tercerCampo,8);
            if (tercerCampo.length > 8) {
				return("la cuenta debe tener maximo 6 digitos despues del segundo guion");
            }
           cuentafinal = primerCampo + segundoCampo + tercerCampo;
			return revisaLongitud(cuentafinal,14,14);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bBga(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
		case "CA":
			cuentaFinal = rellenaCerosIzq(sinGuiones,10);
			return revisaLongitud(cuentaFinal,1,10);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function bBanadesa(tipoCuenta,cuentaDelBanco,sinGuiones,numericos,guiones)
{
   switch (tipoCuenta) {
		case "CC":
		case "CA":
		case "PM":
			return revisaLongitud(sinGuiones,5,13);
			break;
		default:
			return "El banco destino no acepta transacciones ACH a este tipo de cuenta";
	}
}

function formatearCuenta()
{    
	 // verificar que solo contenga letras o numeros
    tipo = document.formato.tipo.value;
	cuentaIngresada = document.formato.cuenta.value;
    cuentaIntermedia = "";
    cuentaSinGuiones = "";
	numericos = 0;
    invalido = false;
    guiones = 0;
		for (var i=0; i<=cuentaIngresada.length; i++) {
			digito = cuentaIngresada.charAt(i);
			switch (digito) {
				case "1":
				case "2":
				case "3":
                case "4":
                case "5":
                case "6":
                case "7":
                case "8":
                case "9":
                case "0":
					numericos++;
					cuentaIntermedia = cuentaIntermedia + digito;
                    cuentaSinGuiones = cuentaSinGuiones + digito;
					break;
				case "-":
					guiones++
					cuentaIntermedia = cuentaIntermedia + digito;
					break;
				case " ":
                case "":
					break;
                default:
					invalido = true;
                   break;
		    }
		}
    if (invalido) {
		alert("La cuenta solo debe contener numeros o guiones");
	}
    switch (document.formato.banco.value) {
	    case "01":	
			document.formato.resultado.value= bCentral(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "02":
			document.formato.resultado.value= bAtlantida(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "03":
			document.formato.resultado.value= bContinental(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "05":
			document.formato.resultado.value= bCuscatlan(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "06":
			document.formato.resultado.value= bTrabajadores(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "07":
			document.formato.resultado.value= bOccidente(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "12":
			document.formato.resultado.value= bBamer(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "13":
			document.formato.resultado.value= bHonduras(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "14":
			document.formato.resultado.value= bBanhcafe(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "15":
			document.formato.resultado.value= bBanpais(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "16":
			document.formato.resultado.value= bUno(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "17":
			document.formato.resultado.value= bLafise(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "18":
			document.formato.resultado.value= bFicensa(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "24":
			document.formato.resultado.value= bBac(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "25":
			document.formato.resultado.value= bPromerica(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "28":
			document.formato.resultado.value= bFicohsa(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "30":
			document.formato.resultado.value= bBga(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
        case "51":
			document.formato.resultado.value= bBanadesa(tipo,cuentaIntermedia,cuentaSinGuiones,numericos,guiones);
            break;
	}
}
// --> Finish hiding