﻿function VNum(objText, lngKeyCode, posDecimales, blnNegativos){
	/*	Julio 2003-Oliver Lopez
			
			Esta funcion solo permitira introducir numeros, y una coma, sustituyendo el punto por una coma
			Solo permitira introducir un numero de decimales especificado por parametro,
			blnNegativos permitira negativos o no.
			Esta funcion no emplementa usar codigos del tipo 00004
	*/
	
	var intLongitud = objText.value.length;
	var intPosComa = objText.value.lastIndexOf(",");
	
	if (lngKeyCode == 17){
		event.keyCode = 0;
		return false;
	}
	
	//Si permite negativos y el primer caracter es -
	if ( blnNegativos ){ 
		if (( intLongitud == 0 ) && ( lngKeyCode == 45 ) ){
			event.keyCode = 45;
			return false;
		}
	}
	
	//Si el primer caracter que escribe es un cero solo puede escribir una coma a continuacion
	if ( ( intLongitud == 1 ) && ( objText.value == "0" ) && 
											(lngKeyCode != 46) && (lngKeyCode != 44) ){
			event.keyCode = 0;
			return false;
	}
	
	//Si el primer caracter es una coma no le dejamos
	if ( ( intLongitud == -1 ) && ((lngKeyCode == 46) || (lngKeyCode == 44) )){
			event.keyCode = 0;
			return false;
	}
	
	
	//-- Si existe una coma controlamos las posiciones decimales
	if (objText.value.indexOf(',') != -1){
		if ( (intLongitud - intPosComa) > posDecimales ){
			//alert('Solo se permiten ' + posDecimales + ' decimales');
			event.keyCode = 0;
			return false;
		}
	}	
	
	
	if ((lngKeyCode < 48) || (lngKeyCode) > 57){
		if ((lngKeyCode != 46) && (lngKeyCode != 44)){  
				event.keyCode = 0;
			
		}else{ // Tratamos las comas
			
			//solo puede escribir una coma si ha escrito por lo menos un numero
			// y si el numero de decimales es distinto de 0
			if(intLongitud == 0 || posDecimales == 0){
				event.keyCode = 0;
				return false;
			}
			
			//Comprobamos que no exista ya una coma
			if (objText.value.indexOf(',') != -1){
				event.keyCode = 0;
				return false;
					
			}else{
				if (lngKeyCode == 46){
					event.keyCode = 44;
				}
			}
		}
	}
}


//Comprueba que solo se introducen numeros enteros
function VCodigo(objText, lngKeyCode){
	if ((lngKeyCode < 48) || (lngKeyCode) > 57){
		event.keyCode = 0;
		return false;
	}
}

//Comprueba que solo se introducen horas en el formato hh:mm
function VHora(objText, lngKeyCode){
	if ((lngKeyCode < 48) || (lngKeyCode) > 58){
		event.keyCode = 0;
		return false;
	}
}

// Devuelve un trim del texto indicado
function Trim(s){
	var iLen = s.length;
	var iIni;
	var iFin;
	// A la izquierda
	for (iIni = 0; iIni < iLen; iIni++){
		if (s.charAt(iIni) != " ") break;
	}
	if(iIni != iLen){
		// A la derecha
		for(iFin = iLen - 1; iFin >= 0; iFin--){
			if (s.charAt(iFin) != " ") break;
		}
		return s.substring(iIni, iFin + 1);
	}
	else
		return '';
}




//Comprueba que solo se introducen numeros enteros
function VCodigo(objText, lngKeyCode){
	    if ((lngKeyCode < 48) || (lngKeyCode) > 57)
	    {
		    event.keyCode = 0;
		    return false;
	    }
	    
    }
 
//Comprueba que solo se introducen numeros enteros, sin cero   
 
 function VCodigo_sincero(objText, lngKeyCode){ 

      if (lngKeyCode ==48)
	    {
	      event.keyCode = 0;
		    return false;
	    }
		
	    if ((lngKeyCode < 48) || (lngKeyCode) > 57)
	    {
		    event.keyCode = 0;
		    return false;
	    }
	  }
    
  //VARIABLE GLOBAL
    var textoAnterior = '';

    //ESTA FUNCIÓN DEFINE LAS REGLAS DEL JUEGO
    function cumpleReglas(simpleTexto)
        {
            //la pasamos por una poderosa expresión regular
            var expresion = new RegExp("^(|([0-9]{1,5}(\\,([0-9]{1,2})?)?))$");
            //si pasa la prueba, es válida
            if(expresion.test(simpleTexto))
                return true;
            return false;
        }//end function checaReglas

    //ESTA FUNCIÓN REVISA QUE TODO LO QUE SE ESCRIBA ESTÉ EN ORDEN
    function revisaCadena(textItem)
        {
          // Reemplazamos el punto por una coma, mantenemos asi la
          // configuracion regional de españa
          textItem.value = textItem.value.replace(".",",");
          
            //si comienza con un punto, le agregamos un cero
            if(textItem.value.substring(0,1) == ',') 
                textItem.value = '0' + textItem.value;

            //si no cumples las reglas, no te dejo escribir
            if(!cumpleReglas(textItem.value))
                textItem.value = textoAnterior;
            else //todo en orden
                textoAnterior = textItem.value;
        }//end function revisaCadena



    //EVITA QUE EL USUARIO INTRODUZCA CARACTERES NO VÁLIDOS EN UNA CAJA DE TEXTO
    //UTILIZADA PARA LA ENTRADA DE TELEFONOS,PODRA INTRODUCIR UN '+' COMO PRIMER CARACTER
    //CUANDO VALLA A INTRODUCIR UN TELEFONO INTERNACIONAL
    //PARAMETROS DE ENTRADA:
    //objTxt-->Es la caja de texto
    //lngKeyCode-->Es el codigo de la tecla pulsada
    function checkInputTelefono(objTxt, lngKeyCode)
    {
        //si se ha pulsado la tecla '+' y la caja estaba vacia
        if (objTxt.value.length ==0 && lngKeyCode == 43)
            event.keyCode = 43;
        else
        {
            //No tenemos que hacer nada
        if (lngKeyCode < 48 || lngKeyCode > 57)
            event.keyCode = 0;    
        }
    }

    /*
      Funcion que formateara el numero de la caja pasada al fomato español, 
      Simbolo de miles '.' - Simbolo decimales ','
      Parametros:
      objTxt: Contendra el objeto textbox que contine el numero a formatear
      dec: Numero de decimales
    */
    function FormatearNumero(objTxt, dec)
    {

      if (objTxt.value.length == 0)
        return false;
      
      var txtObjTxt = RemplazarCarater(objTxt.value,'.','').replace(',','.');
      
      
      var num = txtObjTxt, signo=3, expr;
      var cad = ""+txtObjTxt;
      var ceros = "", pos, pdec, i;
      
      for (i=0; i < dec; i++)
        ceros += '0';
      pos = cad.indexOf('.')
      if (pos < 0)
        cad = cad+"."+ceros;
      else
      {
        pdec = cad.length - pos -1;
        if (pdec <= dec)
        {
          for (i=0; i< (dec-pdec); i++)
            cad += '0';
        }
        else
        {
          num = num*Math.pow(10, dec);
          num = Math.round(num);
          num = num/Math.pow(10, dec);
          cad = new String(num);
        }
      }
      pos = cad.indexOf('.')
      if (pos < 0) 
        pos = cad.lentgh
      if (cad.substr(0,1)=='-' || cad.substr(0,1) == '+')
        signo = 4;
        
      if (pos > signo)
        do
        {
          expr = /([+-]?\d)(\d{3}[\.\,]\d*)/
          cad.match(expr)
          cad=cad.replace(expr, RegExp.$1+','+RegExp.$2)
        }
        while (cad.indexOf(',') > signo)
        
        
      if (dec<0) 
        cad = cad.replace(/\./,'')

        //Remplazamos los caracteres para formatear 
        cad = RemplazarCarater(cad,'.','@');
        cad = RemplazarCarater(cad,',','.');
        cad = RemplazarCarater(cad, '@', ',');
        
        objTxt.value = cad;
      
    }

    /*
      Funcion que devuelve el texto remplazando todos los caracteres de una cadena
      
      Parametros
      TextoOriginal: Texto original a remplazar
      TextoARemplazar: Texto que tenemos que reemplazar
      TextoRemplazo: Texto por el cual remplazamos
    */
    function RemplazarCarater(TextoOriginal, TextoARemplazar, TextoRemplazo)
    {
      while (TextoOriginal.indexOf(TextoARemplazar)>-1)
      {
        pos = TextoOriginal.indexOf(TextoARemplazar);
        TextoOriginal = "" + (TextoOriginal.substring(0,pos) + TextoRemplazo + TextoOriginal.substring((pos + TextoARemplazar.length), TextoOriginal.length));
      }
      return TextoOriginal;
    }
