/*

//------------------------------------------------------------------------------------------------------------------------
//  PROYECTO: DESARROLLO WEB
//  DESARROLLADO POR:  Luis Acosta
//  AUTOR: Luis Acosta
//  EMAIL: lacosta@andinatel.com
//  WEBSITE:
//------------------------------------------------------------------------------------------------------------------------
//  NOMBRE: cadenas.js
//  DESCRIPCIÓN: Funciones javascript para el manejo de cadenas.
//  FECHA DE CREACIÓN: 2005/09/22
//  MODIFICACIONES:
//		FECHA			AUTOR			DESCRIPCIÓN
//   1) 2007/03/06		Luis Acosta		Función para controlar el número de caracteres de un textarea

*/

/*Funciópn para remplazar catacteres*/
function reemplazarCaracter(caracter,caracter1,texto)
{  
  while (texto.indexOf(caracter,0) != -1)
  {
    texto=texto.replace(caracter,caracter1);
  }
  
  return texto;
}

/*Funcion que retira los espacios en blanco que estan a la izquierda de nuestra cadena*/
function LTrim(str)
{
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(0)) != -1)
   {
      var j=0, i = s.length;

      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;

      s = s.substring(j, i);
   }
   return s;
}

/*Funcion que retira los espacios en blanco a la derecha de nuestra cadena*/
function RTrim(str)
{
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(s.length-1)) != -1)
   {
      var i = s.length - 1;

      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;

      s = s.substring(0, i+1);
   }

   return s;
}

/*Funcion que retira los especios en blanco de la cadena*/
function Trim(str)
{
   return RTrim(LTrim(str));
}

var int_va=0; //Inicializamos la variable que almacena el valor anterior del texto

/*Función para validar que ingrese sólo números
recibe como parámetro el objeto de la pagina web*/
function fnValorant(valor)
{
  str_tmp=valor.value;	//Almacenamos temporalmente el valor del texto
  if ((str_tmp>0)||(str_tmp<=0))	//Verificamos si el valor es numerico
    int_va=valor.value;		//Si es numérico almacenamos en la variable global int_va el nuevo valor
}

/*Funcion para validar un numero entero*/
function fnValidarCantidad(cant)
{
   str_cadena=/^[0-9]*$/;   //Inicializamos la cadena con los valores aceptados
   if(str_cadena.test(cant))   //Verificamos si la cadena tiene unicamente los valores del array inicializado
      return 1;		//Devolvemos 1 cuando el string es valido
   else
      return 0;		//Devolvemos 0 cuando el string no es valido
}

/*Función para validar que ingrese sólo números
recibe como parámetro el objeto de la pagina web*/
function fnValidarletra(valor)
{
  str_tmp=valor.value;		//Almacenamos temporalmente el valor del texto
  if (fnValidarCantidad(str_tmp)==0)  //Verificamos si el valor es numerico
    valor.value=int_va;		// Si no es numérico asignamos el último valor correcto que tuvo el campo
}

/*Función para validar que ingrese sólo números
recibe como parámetro el objeto de la pagina web*/
function fnValidarletra1(valor)
{
	a=valor.value		//Almacenamos temporalmente el valor del texto
	if (!((a>0)||(a<=0)))
	{ //Verificamos si el valor es numerico
		//alert("Ingrese únicamente digitos de 0 al 9, para separacion de decimales ingrese '.'")
		valor.value=int_va // Si no es numérico asignamos el último valor correcto que tuvo el campo
	}
}

/*Función para retornar la posición del mouse*/
function getCaretPosition(objeto)
{ 
  var i = objeto.value.length+1; 
  
  if (objeto.createTextRange)
  {
	  caracter = document.selection.createRange().duplicate(); 
	  while (caracter.parentElement()==objeto && caracter.move("character",1)==1)
	    --i; 
  } 
  return i; 
}

/*Función para cambiar a mayúsculas*/
function cambiar(objeto)
{
  //alert(window.event.keyCode);
  if (window.event.keyCode!=8 && window.event.keyCode!=16 && window.event.keyCode!=17 && window.event.keyCode!=32 && window.event.keyCode!=35 && window.event.keyCode!=36 && window.event.keyCode!=37 &&  window.event.keyCode!=38 && window.event.keyCode!=39 && window.event.keyCode!=40 && window.event.keyCode!=46 && window.event.keyCode!=90)
  {
    pos = getCaretPosition(objeto);
	objeto.value=objeto.value.toUpperCase();
    rng  = objeto.createTextRange();
	if (objeto.type=="textarea")
	  rng .move("Character",pos);
    else
	  rng .move("Character",pos-1);
    rng .select();
  }
}

function validarMail(mail)
{  
	cadena=/^([a-zA-Z0-9\._-]+)@([a-zA-Z0-9\._-]+)\.([a-zA-Z0-9\._-]+)$/;  
	if(cadena.test(mail))
    	return 1;
    else
    	return 0;
}

/*Función para validar el número de cédula*/
function validarCedula(cedula)
{	
	cadena=/^[0-9]{10}$/;
	sumaprod=0;
	coef='212121212';
    if(cadena.test(cedula))
	{		
		i=0;
		while(i<9)
		{				
			if(i==0)
			{
			  numruc=cedula.substr(0,1);		
			  numcoef=coef.substr(0,1);	  		 
			}
			else
			{
			  numruc=cedula.substr(i,1);		
			  numcoef=coef.substr(i,1);	  
			}		
			product=numruc*numcoef;		
			if (product>=10)
			{			
			  product1=String(product);	  			
			  num1=product1.substr(0,1);		 
			  num2=product1.substr(1,1);			
			  product=Number(num1)+Number(num2);	 
			}
			 sumaprod=sumaprod+product;				 		 
			 i=i+1;		
		}		
		resid=sumaprod%10;
		if(resid==0)
		 digverf=0;
		else
		 digverf=10-resid;
		digverfced=cedula.substr(9,1)											
		if(digverfced==digverf)
		 return 1;	 
		else
		 return 0;	         
	}
	else
	 return 0;	 
}

/*Función para validar el RUC de una persona natural*/
function validarRucPN(rucpn)
{	
	cadena=/^[0-9]{13}$/;
	sumaprod=0;
	coef='212121212';		
	if(cadena.test(rucpn)&&(rucpn.substr(10,3))==001&&(rucpn.substr(2,1))<6&&(rucpn.substr(0,2))>=1&&(rucpn.substr(0,2))<=22)
	{		
		i=0;
		while(i<9)
		{				
			if(i==0)
			{
			  numruc=rucpn.substr(0,1);		
			  numcoef=coef.substr(0,1);	  		 
			}
			else
			{
			  numruc=rucpn.substr(i,1);		
			  numcoef=coef.substr(i,1);	  
			}		
			product=numruc*numcoef;		
			if (product>=10)
			{			
			  product1=String(product);	  			
			  num1=product1.substr(0,1);		 
			  num2=product1.substr(1,1);			
			  product=Number(num1)+Number(num2);	 
			}
			 sumaprod=sumaprod+product;				 		 
			 i=i+1;		
		}			
		resid=sumaprod%10;
		if(resid==0)
		 digverf=0;
		else
		 digverf=10-resid;
		digverfced=rucpn.substr(9,1)											
		if(digverfced==digverf)
		 return 1;	 
		else
		 return 0;	          
	}
	else
	 return 0;	 
}

/*Función para validar el RUC de sociedades públicas*/
function validarRucSP(rucsp)
{
	cadena=/^[0-9]{13}$/;
	sumaprod=0;
	coef='32765432';
	if(cadena.test(rucsp)&&(rucsp.substr(9,4))==0001&&(rucsp.substr(2,1))==6&&(rucsp.substr(0,2))>=1&&(rucsp.substr(0,2))<=22)
	{		
		i=0;
		while(i<8)
		{				
			if(i==0)
			{
			  numruc=rucsp.substr(0,1);		
			  numcoef=coef.substr(0,1);	  		 
			}
			else
			{
			  numruc=rucsp.substr(i,1);		
			  numcoef=coef.substr(i,1);	  

			}		
			product=numruc*numcoef;					
            sumaprod=sumaprod+product;				 		 
		    i=i+1;		
		}		
		resid=sumaprod%11;
		digverf=11-resid;
		digverfruc=rucsp.substr(8,1)		
		if(digverfruc==digverf)
		 return 1;	 
		else
		 return 0; 
	}
	else
	 return 0;	 
}

/*Función para validar un RUC de sociedades privadas y extranjeros*/
function validarRucSPE(rucspe)
{	
	cadena=/^[0-9]{13}$/;
	sumaprod=0;	
	coef='432765432';	
	if(cadena.test(rucspe)&&(rucspe.substr(10,3))==001&&(rucspe.substr(2,1))==9&&(rucspe.substr(0,2))>=1&&(rucspe.substr(0,2))<=22){			
		i=0;
		while(i<9){				
			if(i==0){
			  numruc=rucspe.substr(0,1);		
			  numcoef=coef.substr(0,1);	  		 
			}
			else{
			  numruc=rucspe.substr(i,1);		
			  numcoef=coef.substr(i,1);	  
			}		
			product=numruc*numcoef;					
            sumaprod=sumaprod+product;				 		 
		    i=i+1;		
		}
		resid=sumaprod%11;
		digverf=11-resid;
		digverfruc=rucspe.substr(9,1)		
		if(digverfruc==digverf)
		 return 1;	 
		else
		 return 0; 
	}
	else
	 return 0;	 
}

/*Función para cambiar a mayúsculas*/
function cambiarMayusculas(objeto)
{
  //alert(window.event.keyCode);
  if (window.event.keyCode!=8 && window.event.keyCode!=16 && window.event.keyCode!=17 && window.event.keyCode!=32 && window.event.keyCode!=35 && window.event.keyCode!=36 && window.event.keyCode!=37 &&  window.event.keyCode!=38 && window.event.keyCode!=39 && window.event.keyCode!=40 && window.event.keyCode!=46)
  {
    pos = getCaretPosition(objeto);
	objeto.value=objeto.value.toUpperCase();
    rng  = objeto.createTextRange();
	if (objeto.type=="textarea")
	  rng .move("Character",pos);
    else
	  rng .move("Character",pos-1);
    rng .select();
  }
}

/*Función para abrir un popup*/
function abrirPopUp(pag,nomb,ancho,alto)
{
	left = (screen.availWidth/2)-(ancho / 2);
	top1 = (screen.availHeight/2)-(alto / 2);
	
	params="toolbar=no,directories=no,menubar=no,status=yes,scrollbars=yes,resizable=no,left="+left+",top="+top1+",width="+ancho+",height="+alto;
	MiVent=open(pag,nomb,params);
}

/*Función para abrir un pop up con todos los parámetros*/
function abrirVentana(url,name,toolbar,directories,menubar,status,scrollbars,resizable,width,height)
{
	left = (screen.availWidth/2)-(width / 2);
	top1 = (screen.availHeight/2)-(height / 2);
	
	params="toolbar="+toolbar+",directories="+directories+",menubar="+menubar+",status="+status+",scrollbars="+scrollbars+",resizable="+resizable+",left="+left+",top="+top1+",width="+width+",height="+height;
	MiVent=open(url,name,params);
}

/*Función para mostrar y ocultar información*/
function showData(id)
{
	obj = document.getElementById(id);
	if (obj.style.display == "none")
	  obj.style.display = "";
	else
	  obj.style.display = "none";
}

/*Función para esconder información*/
function hideData(id)
{
	obj = document.getElementById(id);
	obj.style.display = "none";
}

/*Función para mostrar información*/
function mostrarData(id)
{
	obj = document.getElementById(id);
	obj.style.display = "";
}

/*Función para poder expandir o contraer la información*/
function showDataMasMenos(id,idmas,idmenos)
{
	obj = document.getElementById(id);
	objmas=document.getElementById(idmas);
	objmenos=document.getElementById(idmenos);
	if (obj.style.display == "none")
	{
		obj.style.display = "";
		objmas.style.display="none";
		objmenos.style.display="";
	}
	else
	{
		obj.style.display = "none";
		objmas.style.display="";
		objmenos.style.display="none";
	}
}

/*Función para validar que sólo se ingrese número en un text*/
var nav4 = window.Event ? true : false;

function soloNumeros(evento)
{
	// NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
	var key = nav4 ? evento.which : evento.keyCode;
	return (key <= 13 || (key >= 48 && key <= 57));
}

function soloNumerosDecimales(evento)
{
	// NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57 , '46' = .
	var key = nav4 ? evento.which : evento.keyCode;
	return (key <= 13 || (key >= 48 && key <= 57) || key == 46);
}

/*Comprobar formato de número decimal*/
function validaFloat(value)
{
	return(value.match(/^[0-9]+(.[0-9]+)*$/))
}

/*Función para validar números flotantes*/
function validaInputFloat(objInput)
{
	var error="";
	if (! validaFloat(objInput.value) )
		error=objInput.value + " no es un número válido!";
	else if (! IsNum(objInput.value))
		error="Para ingresar números decimales utilice el punto (.)!";
	
	return error;
}

/*Función para validar números decimales*/
function checkDecimals(fieldName, fieldValue, decallowed)
{
	if (isNaN(fieldValue) || fieldValue == "")
	{
		return "No has introducido un numero.";
		fieldName.select();
		fieldName.focus();
	}
	else
	{
		if (fieldValue.indexOf('.') == -1) fieldValue += ".";
		dectext = fieldValue.substring(fieldValue.indexOf('.')+1, fieldValue.length);
		if (dectext.length > decallowed)
		{
			return "Introduce un numero con " + decallowed + " decimales.";
			fieldName.select();
			fieldName.focus();
		}
		else
		{
			return "OK";
		}
   }
}

/*Función para validar los números*/
function IsNum( numstr )
{
	// Return immediately if an invalid value was passed in
	if (numstr+"" == "undefined" || numstr+"" == "null" || numstr+"" == "")
	  return false;
	var isValid = true;
	var decCount = 0;		// number of decimal points in the string
	// convert to a string for performing string comparisons.
	numstr += "";
	// Loop through string and test each character. If any
	// character is not a number, return a false result.
	// Include special cases for negative numbers (first char == '-')
	// and a single decimal point (any one char in string == '.').
	for (i = 0; i < numstr.length; i++)
	{
		// track number of decimal points
		if (numstr.charAt(i) == ".")
		decCount++;
		if (!((numstr.charAt(i) >= "0") && (numstr.charAt(i) <= "9") || (numstr.charAt(i) == "-") || (numstr.charAt(i) == ".")))
		{
			isValid = false;
			break;
		}
		else if ((numstr.charAt(i) == "-" && i != 0) || (numstr.charAt(i) == "." && numstr.length == 1) || (numstr.charAt(i) == "." && decCount > 1))
		{
			isValid = false;
			break;
		}
		//if (!((numstr.charAt(i) >= "0") && (numstr.charAt(i) <= "9")) ||
	} // END for
	return isValid;
}  // end IsNum

/*Función para remplazar un caracter por otro*/
function replaceChars(oldChar,newChar,entry)
{
  temp = "" + entry;
  while (temp.indexOf(oldChar)>-1)
  {
	pos = temp.indexOf(oldChar);
	temp = "" + (temp.substring(0, pos) + newChar +
    temp.substring((pos + oldChar.length), temp.length));
  }
  return temp;
}

/*Función para centrar la pantalla*/
function centrarPantalla(ancho,alto)
{
	left = (screen.availWidth/2)-(ancho / 2);
	top1 = (screen.availHeight/2)-(alto / 2);
	window.moveTo(left,top1);
}

/*Función para validar la cédula o ruc*/
function fnValidarCIRUC(cadena)
{
	if (validarCedula(cadena)==0 && validarRucPN(cadena)==0 && validarRucSP(cadena)==0 && validarRucSPE(cadena)==0)
	  return 0;
	else
	  return 1;
}

/*Función para cambiar el tamaño de un popUp*/
function fnResizePopUp(ancho,alto)
{
	window.resizeTo(ancho,alto);
	centrarPantalla(ancho,alto)
}

/*Función para codificar a utf8*/
function encode_utf8(rohtext)
{
	// dient der Normalisierung des Zeilenumbruchs
	rohtext = rohtext.replace(/\r\n/g,"\n");
	var utftext = "";
	for(var n=0; n<rohtext.length; n++)
	{
		// ermitteln des Unicodes des  aktuellen Zeichens
		var c=rohtext.charCodeAt(n);
		// alle Zeichen von 0-127 => 1byte
		if (c<128)
			utftext += String.fromCharCode(c);
		// alle Zeichen von 127 bis 2047 => 2byte
		else if((c>127) && (c<2048))
		{
			utftext += String.fromCharCode((c>>6)|192);
			utftext += String.fromCharCode((c&63)|128);
		}
		// alle Zeichen von 2048 bis 66536 => 3byte
		else
		{
			utftext += String.fromCharCode((c>>12)|224);
			utftext += String.fromCharCode(((c>>6)&63)|128);
			utftext += String.fromCharCode((c&63)|128);
		}
	}
	return utftext;
}

/*Función para decodificar a utf8*/
function decode_utf8(utftext)
{
	var plaintext = ""; var i=0; var c=c1=c2=0;
	// while-Schleife, weil einige Zeichen uebersprungen werden
	while(i<utftext.length)
	{
		c = utftext.charCodeAt(i);
		if (c<128)
		{
			plaintext += String.fromCharCode(c);
			i++;
		}
		else if((c>191) && (c<224))
		{
			c2 = utftext.charCodeAt(i+1);
			plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
			i+=2;
		}
		else
		{
			c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2);
			plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
			i+=3;
		}
	}
	return plaintext;
}

/*Función para redireccionar a una página*/
function fnRedireccionar(page)
{
  document.location.href=page;
}

/*Función para contar los caracteres de un textarea*/
function fnContadorTexto(campo, contadorCampo, limite)
{
  if (campo.value.length > limite)
  {
    campo.value = campo.value.substring(0, limite);
	campo.style.color="#ff0000";
  }
  else
  {
    campo.style.color="";
	contadorCampo.innerHTML = limite - campo.value.length;
  }
}