//************************************************************************************************/
//	Extensiones de la Clase String
//	Fecha de creacion:	01/10/2005
//	Fecha Modificación: 04/10/2005
//
//	String.darVueltaNumero() => Invierte los caracteres de una cadena;
//
//	String.ponerMillares([nMillares]) => Pone comas en una cadena. 
//		*	nPatron = cada cuantos caracteres, por definición es = 3
//		*	No contempla números con decimales
//
//	String.ponerFormato([nMillares],[nDecimales]) => Da formato a una cadena.
//		*	Comprueba que sea un número, si no lo és, devuelve la cadena tal como la recivió.
//		*	Devuelve un cadena separada por comas y con los decimales ( redondeando si es necesario ) que se le piden
//		*	Por definicion; nMillares = 3 y nDecimales = 2
// String.controlaIntroNumero() => Controla el formato de un número introducido. Ej: 1.253,32, lo daria como bueno y devuelve el número 
//		*	Si el número no es bueno devuelve "NaNString"
//
// String.esNumero()	=>	Devuelve True o False si el número contenido el la cadena es válido como número.
//	
// String.limpiarString()	=> Limpia un string de comas y puntos.
/*************************************************************************************************/


String.prototype.darVueltaNumero = function()
{
		var r, re;         
		var arrai;
		re = /\d{1}/g;    //Patron que nos devuelve el numero separado por comas
		r = this.match(re);   //Intenta buscar en la cadena de búsqueda.
		arrai = r.toString().split(",");
		arrai.reverse();
		r = arrai.join("")
		return(r);         
}

String.prototype.ponerMillares = function( nPatron )
{
	var r,re;
	if( nPatron == undefined ) nPatron = 3;
	if( this.length > 2 )
	{
		var f,f2;
		var numero = this.darVueltaNumero()
		
		//Lo dividimos en partes de 3 
		var patron = "\\d{" + nPatron + "}";
		re = new RegExp(patron,"g");    //Patron que nos devuelve el numero separado por comas
		r = numero.match(re);   //Intenta buscar en la cadena de búsqueda.
		var longitud = r.length * 3;
		
		var sobras = numero.substr( longitud, numero.length )
		r.push(sobras)
		r.reverse()
		
		f2 = ( r[0] == "" ) ? 1:0;
		
		//Volvemos a dar la vuelta a todos los numero de cada elemento del array	
		for( f = f2; f < r.length ; f++ )
			r[f] = r[f].darVueltaNumero();
			
		numero = r.toString()
	
		if( numero.substr(0,1) == "," ) 
			numero = numero.substr(1,numero.length);
	}
	else
		numero = this;
	
	var reg = /\,+/g
	//alert("numero antes de M : " + numero )
	//alert("numero despues de M : " + numero.replace(reg,".") )
	return numero.replace(reg,".");
}

String.prototype.ponerDecimales = function(nDecimales)
{

//	alert("numero llega : " + this.toString());
	if( nDecimales == undefined ) nDecimales = 2;
	re = /\,+/g
	var numero = parseFloat(this.toString().replace(re,"."));

	var posDec = numero.toString().lastIndexOf(".");

	if (posDec == -1) 
	{
		numero +=".00";
		posDec = numero.toString().lastIndexOf(".");
	}
	var _len = numero.toString().length;
	var decimales = numero.toString().substr( posDec , ( _len - posDec )  );
//	alert("numero: " + numero.toString() + "\nposDec:" + posDec + "\nlongitud: " + ( _len - posDec ) + "\ndecimales: " + decimales)
	
	//Miramos los decimales que tenemos
	if ( posDec != -1 )
	{
		for(f = decimales.length-1 ; f < nDecimales ; f++)
			decimales += "0";
	}
	
	return numero.toString().substr( 0 ,posDec ) + decimales;

}
String.prototype.ponerFormato = function(nMillares,nDecimales)
{
	
	if( nMillares == undefined ) nMillares = 3;
	if( nDecimales == undefined ) nDecimales = 2;
	
	var numero = this.toString();
	var f;
	//Comprobamos si es un número válido 			
	if( !isNaN( parseFloat(numero) ) )
	{
		var posDec = numero.lastIndexOf(".");
		var decimales = numero.substr( posDec ,numero.length );
		//Miramos los decimales que tenemos
		if( posDec != -1 && decimales.length - 1 > nDecimales )
		{
			//redondeamos los decimales
			var dividendo = Math.pow(10,(decimales.length-1 - nDecimales ) ) ;
			var redondeo = parseFloat( decimales.substr(1,decimales.length) ) / dividendo;
			decimales = "," + Math.round( redondeo ).toString();
		}
		else if ( posDec != -1 )
		{
			for(f = decimales.length-1 ; f < nDecimales ; f++)
				decimales += "0";
		}
			
		var numeroEntero;
		
		if( posDec == -1  ) 
		{
			decimales =",";
			for(f = decimales.length-1 ; f < nDecimales ; f++)
				decimales += "0";
			numeroEntero = numero;
		}
		else
			numeroEntero = numero.substr( 0 ,posDec );
		
		//alert( numeroEntero + " : " + decimales )
		numero = numeroEntero.ponerMillares(nMillares) + decimales.replace(".",",");
		
	}
	
	return numero;
}

 String.prototype.controlaIntroNumero = function ()
{
	
	var f,nError,numeroFinal;
	var result = false;
	var valor = this;
	var nComas = valor.split(",").length-1;
	var nPuntos = valor.split(".").length-1;
	var ultimoSigno = null;
	var posSignoDec=-1;
	var nDecimales=0;
	var c;
    var numeroNat;
    var parteDecimal;

	for (f = valor.length-1  ; f >= 0 ; f--) 
	{
	    c = valor.substr(f,1);
	    if ( c == " " ) continue;
	    if (!((c>='0' && c<='9') || c=='.' || c==',' || (c=='-' && f==0))) return "0";
	    if (ultimoSigno==null) {
		    if( c == "," ) ultimoSigno = "coma";
		    if( c == "." ) ultimoSigno = "punto";
		    if( ultimoSigno != null ) {
		        posSignoDec=f;
		        nDecimales=valor.length-1-posSignoDec;
		    }
		}
	}
	
	if (posSignoDec==0) {
	    if (valor.length>1) return "0." + valor.substr(posSignoDec+1);
	    else return "0";
	}
	
	if (nDecimales == 0) return valor.limpiarString();
	
	numeroNat=valor.substr(0,posSignoDec).limpiarString();
	parteDecimal=valor.substr(posSignoDec+1);
		
	if (nDecimales != 3) return numeroNat + "." + parteDecimal;
	    
	if (ultimoSigno == "punto") {
	    if (nComas > 0) return numeroNat + "." + parteDecimal;
	    return numeroNat + parteDecimal;
	}
	
	if (nPuntos>0) return numeroNat + "." + parteDecimal;
	if (nComas>1) return numeroNat + parteDecimal;
	return numeroNat + "." + parteDecimal;
	
}

String.prototype.esNumero = function()
{
	return ( !isNaN( parseFloat( this.toString() ) ) ) ? true:false;
}

String.prototype.limpiarString =  function()
{
	var cadena,re;
	
	re = /\.+/g
	cadena = this.toString().replace(re,"");
	re = /\,+/g
	cadena = cadena.replace(re,"");
	return cadena;
}
