
	var STR_PAD_LEFT = 1;
	var STR_PAD_RIGHT = 2;
	var STR_PAD_BOTH = 3;
	
	
	
	
    /* RECUBRIMIENTO FUNCIONES */

    function ValCodigoDC(source, arguments){
	    var lBolRes;
	      
        var lStrBanco;
        var lStrUrbana;
        var lStrCuenta;  
	    var lStrCodigoDC;   
	    var lStrCodigoDC_Calculado;   	    
	    
	            		  
      	lStrBanco = document.getElementById("txtClaveBanco").value;
      	lStrUrbana = document.getElementById("txtClaveSucursal").value;
        lStrCuenta = document.getElementById("txtNumero").value;    	      		  
        
		//comprobamos que nos vengan los valores de entrada
		if( (lStrBanco=='') || (lStrUrbana=='') || (lStrCuenta=='') ){
			lBolRes=true
		}else{
		
			lStrCodigoDC = document.getElementById("txtDC").value; 
              	  
			lStrCodigoDC_Calculado = CalcularDC(lStrBanco,lStrUrbana,lStrCuenta);
    	    	    	
		    if(lStrCodigoDC==lStrCodigoDC_Calculado){
			    lBolRes=true
		    }else{
			   lBolRes=false
		    }  
		}		
		
	    arguments.IsValid=lBolRes;
      }
      
  

	function pad(str, len, pad, dir) {
	 
		if (typeof(len) == "undefined") { var len = 0; }
		if (typeof(pad) == "undefined") { var pad = ' '; }
		if (typeof(dir) == "undefined") { var dir = STR_PAD_RIGHT; }
	 
		if (len + 1 >= str.length) {
	 
			switch (dir){
	 
				case STR_PAD_LEFT:
					str = Array(len + 1 - str.length).join(pad) + str;
				break;
	 
				case STR_PAD_BOTH:
					var right = Math.ceil((padlen = len - str.length) / 2);
					var left = padlen - right;
					str = Array(left+1).join(pad) + str + Array(right+1).join(pad);
				break;
	 
				default:
					str = str + Array(len + 1 - str.length).join(pad);
				break;
	 
			} // switch
	 
		}
	 
		return str;
	 
	}
	
	function Mid(str, start, len)
	{
	// Make sure start and len are within proper bounds
		if (start < 0 || len < 0) return "";
		var iEnd, iLen = String(str).length;
		if (start + len > iLen)
			  iEnd = iLen;
		else
			  iEnd = start + len;
		return String(str).substring(start,iEnd);
	}
	

	function CalcularDC(pStrBanco,pStrUrbana,pStrCuenta)
	{
		
		 //pesos de los digitos del banco
		 PBanco = new Array (4, 8, 5, 10); 
		 
		 //pesos de los digitos de la urbana(sucursal)
		 PUrbana = new Array (9, 7, 3, 6); 
		 
		 //Pesos de los dígitos de la cuenta
		 PCuenta =new Array (1,2,4,8,5,10,9,7,3,6);
		
		 //Rellena los códigos de banco, urbana y cuenta a 0's por la izq.			 
	     pStrBanco=pad(pStrBanco,4,'0',STR_PAD_LEFT);
		 pStrUrbana=pad(pStrUrbana,4,'0',STR_PAD_LEFT);
		 pStrCuenta=pad(pStrCuenta,10,'0',STR_PAD_LEFT);
		
		//alert(pStrBanco);
		//alert(pStrUrbana);
		//alert(pStrCuenta);	
		
		//Suma de productos de pesos por dígitos del banco y la sucursal
		
		lIntSumaBancoSucursal = 0;
		
		for (i=0; i<4; i++){						
			lIntSumaBancoSucursal = lIntSumaBancoSucursal + PBanco[i]  * Mid(pStrBanco, i, 1);
			lIntSumaBancoSucursal = lIntSumaBancoSucursal + PUrbana[i] * Mid(pStrUrbana, i, 1);
		}
						
		//Calcula el DC asociado al banco y la urbana
		lIntRes = lIntSumaBancoSucursal%11;
		
		
		if((lIntRes==1)||(lIntRes==0)){
			lStrDC=lIntRes + '' //CStr
		}else{
			lStrDC= (11 - lIntRes) + '' //CStr
		}
						
		//Suma de productos de pesos por dígitos del número de cuenta
		
		lIntSumaCuenta = 0;
		
		for (i=0; i<10; i++){						
			lIntSumaCuenta = lIntSumaCuenta + PCuenta[i] * Mid(pStrCuenta, i, 1);
		}
		
	    //Calcula el DC asociado al número de cuenta
	  	lIntRes = lIntSumaCuenta%11;
		
		if((lIntRes==1)||(lIntRes==0)){
			lStrDC = lStrDC + (lIntRes + '')
		}else{
			lStrDC=  lStrDC + ((11 - lIntRes) + '')
		} 

	    //Valor de retorno
    	return lStrDC		

	}