﻿/*
            Autor:		Apolinar Plancarte Yáñez
            Carrera:	Ingeniero en Sistemas Computacionales
            Fecha:		19/Julio/2006
*/



//-------------------------------------------------------------------------------------
//                   Definimos la plantilla de la clase y sus métodos                  |
//-------------------------------------------------------------------------------------
function ApyTools()
{
	//Metodo1: Se usa para extraer el valor de un parámetro dado respecto una URL
	this.getParamValue		= _getParamValue;

	//Metodo2: Se usa para extraer todos los parámetros respecto una URL
	this.getQueryString		= _getQueryString;

    //Metodo3: Se usa para centrar un formulario al centro de la pantalla
	this.cargarPopup		= _cargarPopup;

	//Metodo4: Valida que la fecha de inicio no sea mayor a la fecha fin. _validarRangoFechas(fechaInicio, fechaFin)
	this.validarRangoFechas = _validarRangoFechas;

	//Metodo5: Elimina espacios en blanco en una cadena
	this.eliminarEspacios	= _eliminarEspacios;

	//Metodo6: Valida que se hayan tecleado sólo numeros en una cadena
	this.validaNumeros		= _validaNumeros;

	//Metodo7: Desarrollado para el evento OnKeyPress, permite que se escriban sólo números en la entrada de datos
	this.permitirSoloNumeros= _permitirSoloNumeros;
	
	//Metodo8: Desarrollado para el evento OnKeyPress, permite que se escriban números flotantes en la entrada de datos
	this.permitirFlotantes= _permitirFlotantes;

	//Metodo9: Valida que se hayan tecleado numeros en una cadena y su formato respectivo
	this.validaNumFormat	= _validarNumFormat;

	//Metodo10: Carga la pagina respectiva en el iframeEdicion de la pagina actual
	this.cargarIframeEdicion= _cargarIframeEdicion;

	//Metodo11: Elimina espacios en blanco por la parte derecha e izquierda
	this.Trim  = _Trim;

	//Metodo12: Valida el formato correcto para un eMail
	this.validaEmail		= _validaEmail;

	//Metodo13: Valida los tipos de archivos aceptados
	this.validaTipoArchivo  = _validaTipoArchivo;
	
	//Metodo14: Devuelve el valor de los radios o Check seleccionados separados por comas.
	this.radioCheckValue	= _radioCheckValue;
	
	//Metodo15: Devuelve una cadena binaria (0/1) si los Check de la tabla dada están seleccionados o no.
	this.serieBinaria		= _serieBinaria;
	
	//Metodo16: Cambia caracteres a mayusculas
	this.ConvertirMayus		= _ConvertirMayus;
	
	//Metodo17: Dada una fecha inicio y fin, devuelve años, meses, dias según el caso. _validarRangoFechas(fechaInicio, fechaFin)
	this.difFechas = _difFechas;

}



//-------------------------------------------------------------------------------------
function _getParamValue(paramName)
{
	var url = location.href.replace("#1","").replace("#here","");

	paramName = paramName.toLowerCase();
	var indiceParams = url.indexOf("?");
	if(indiceParams!=-1)
	{
		var params = url.substring(indiceParams+1).split('&') ;
		var param;
		for (i=0; i < params.length; i++ )
		{
			param = params[i].substring(0, params[i].indexOf('='))
			if(param.toLowerCase()==paramName.toLowerCase())
				return params[i].substring(params[i].indexOf('=') + 1);
		}
	}
	return "";
}



//-------------------------------------------------------------------------------------
function _getQueryString()
{
	var url = location.href.replace("#1","").replace("#here","");

	var indiceParams = url.indexOf("?");
	if(indiceParams!=-1)
		return url.substring(indiceParams + 1);

	return "";
}



//-------------------------------------------------------------------------------------
function _cargarPopup(url, height, width)
{		
	topV  = (screen.availHeight/2) - height/2;
	leftV = (screen.availWidth/2) - width/2;
	
	atributos= "scrollbars=yes, width="+width+",height="+height+",screenX="+leftV +",screenY="+topV+",top="+topV+",left="+leftV;
	ventana = window.open(url, 'popup', atributos);
	ventana.focus();
}




//-------------------------------------------------------------------------------------
function getOffsetTop (el)
{
	var ot = el.offsetTop;
	while((el = el.offsetParent) != null)
		ot += el.offsetTop;
	return ot;
}



//-------------------------------------------------------------------------------------
function getOffsetLeft (el)
{
	var ol = el.offsetLeft;
	while ((el = el.offsetParent) != null)
		ol += el.offsetLeft;
	return ol;
}



//-------------------------------------------------------------------------------------
function _cargarIframeEdicion(divHeight, divWidth, ddlEdicion, pagina)
{
	if (ddlEdicion.value=="-1")
	{
		document.getElementById("divEdicion").style.display="";
		document.getElementById("divEdicion").style.top= getOffsetTop(ddlEdicion) + 20;
		document.getElementById("divEdicion").style.left=getOffsetLeft(ddlEdicion);

		document.getElementById("divEdicion").style.height =divHeight;
		document.getElementById("divEdicion").style.width  =divWidth;
		document.getElementById("ifrEdicion").style.height =divHeight;
		document.getElementById("ifrEdicion").style.width  =divWidth;
		document.getElementById("ifrEdicion").src= pagina;
	}
	else
		document.getElementById("divEdicion").style.display="none";
}



//-------------------------------------------------------------------------------------
function _validarRangoFechas(fechaInicio, fechaFin)
{
	var diaMesAnio	= fechaInicio.split('/');
	fechaInicial = new Date(diaMesAnio[2], diaMesAnio[1]-1, diaMesAnio[0]);

	diaMesAnio	= fechaFin.split('/');
	fechaFinal = new Date(diaMesAnio[2], diaMesAnio[1]-1, diaMesAnio[0]);

	//alert ("LA fecha final es:"+ fechaFinal +", la fecha inicial es:"+ fechaInicial);
	//alert (fechaFinal>=fechaInicial);

	if (fechaFinal>=fechaInicial)
		return true;
		
	return false;
}


//-------------------------------------------------------------------------------------
function _eliminarEspacios(cadena)
{
	var i=0;
	var temp = "";
	for(i=0; i<cadena.length; i++)
	{
		if(cadena.charAt(i)!= " ")
			temp += cadena.charAt(i);
	}
	return temp;
}


//-------------------------------------------------------------------------------------
function _validaNumeros(cadena)
{
	var i=0;
	if(cadena.length>0)
	{
		for(i=0; i<cadena.length; i++)
		{
		   if(cadena.charAt(i)<"0" || cadena.charAt(i)>"9")
			  return false;
		}
	}
	else
		return false;

	return true;
}

//-------------------------------------------------------------------------------------
function _permitirSoloNumeros(e,control)
{		
 var key;

	 if(window.event) // IE
	 {
	  key = e.keyCode;
	 }
	  else if(e.which) // Netscape/Firefox/Opera
	 {
	  key = e.which;
	 }

 if (key < 48 || key > 57) 
    {
		document.getElementById(control).value = "Sólo numeros";	
		document.getElementById(control).style.backgroundColor='#faf5c2';
		document.getElementById(control).style.color="#FF0000"; 
     key.returnValue = false;
	 // return false;
    }

 return true;



}


//-------------------------------------------------------------------------------------
function _permitirFlotantes(cadena)
{
	if (event.keyCode < 45 || event.keyCode > 57)
		event.returnValue = false;
	else if (event.keyCode==46 && cadena.indexOf(".")!=-1)
		event.returnValue = false;
	else if (event.keyCode==45 && cadena.indexOf("-")!=-1)
		event.returnValue = false;
}


//-------------------------------------------------------------------------------------
function _validarNumFormat(cadena, tipoDato)
{
	var temp;
	try{
		temp = eval(cadena);

		if (tipoDato=='entero')
		{
			temp = parseInt(temp);
			if (cadena.indexOf('.')!=-1 || isNaN(temp))
				return false;
			return true;
		}
		else if (tipoDato=='entero_positivo')
		{
			temp = parseInt(temp);
			if (cadena.indexOf('.')!=-1 || isNaN(temp) || temp<0)
				return false;
			return true;
		}
		else if (tipoDato=='entero_negativo')
		{
			temp = parseInt(temp);
			if (cadena.indexOf('.')!=-1 || isNaN(temp) || temp>=0)
				return false;
			return true;
		}
		else if (tipoDato=='float')
		{
			temp = parseFloat(temp);
			return !isNaN(temp);
		}

	}catch(e){
		alert("hubo error");
		return false;
	}
}


//-------------------------------------------------------------------------------------
function _Trim(cadena)
{
	var temp = cadena;
	var i=0;

	//Eliminando espacios de la parte izquierda de la cadena
	for(i=0; i<cadena.length; i++)
		if (cadena.charAt(i)!=' ')
			break;
			
	temp = cadena.substring(i, temp.length);

	//Eliminando espacios de la parte derecha de la cadena, incluyendo saltos de línea
	for(i=temp.length-1; i>0; i--)
	{
		if (cadena.charAt(i)!=' ')
		{
			break;
			i--;
		}
	}			
	temp = temp.substring(0,i+1);

	return temp;
}


//-------------------------------------------------------------------------------------
function _validaEmail(email)
{
	if (email.indexOf('@')<1 || email.indexOf('.')<1 || email.indexOf('@') > email.lastIndexOf('.') || email.lastIndexOf('.')==email.length-1 || email.lastIndexOf('.')== email.indexOf('@')+1)
		return false;
	else
	{
		for (cont=0, i=0; i<email.length; i++)
		{
			if (email.charAt(i)=='@')
			{
				cont++;

				if (cont>1)
					return false;
			}
		}
	}

	return true;
}


//-------------------------------------------------------------------------------------
function _validaTipoArchivo(nombreArchivo, tipoArchivos)
{
	var extensiones = tipoArchivos.toLowerCase().split(',');

	for(i=0; i<extensiones.length; i++)
		if(nombreArchivo.indexOf(extensiones[i])!=-1)
			return true;

	return false;
}


//-----------------------------------------------------------------------------------------
function _radioCheckValue(tableName, radio)
{
	var inputs		= document.getElementById(tableName).getElementsByTagName("input");
	var typeInput	= radio? "radio" : "checkbox";
	var valores		= "";
	
	for (i=0; i<inputs.length; i++)
		if (inputs[i].type==typeInput && inputs[i].checked)
			valores += inputs[i].value + ",";
	
	return valores.length>0? valores.substring(0, valores.length-1) : valores;
}


//-----------------------------------------------------------------------------------------
function _serieBinaria(tableName)
{
	var inputs	= document.getElementById(tableName).getElementsByTagName("input");
	
	var valores	= "";
	for (i=0; i<inputs.length; i++)
		valores += (inputs[i].type=="checkbox" && inputs[i].checked)? "1":"0";
	
	return valores;
}


//---------------------------------------------------------------------------------------
function _ConvertirMayus(Myfield)
{
	Myfield.value = Myfield.value.toUpperCase();
}


//---------------------------------------------------------------------------------------
function _difFechas(fechaInicio, fechaFin, returnDiasMesesAnios)
{
	var diaMesAnio	= fechaInicio.split('/');
	fechaInicial = new Date(diaMesAnio[2], diaMesAnio[1]-1, diaMesAnio[0]);

	diaMesAnio	= fechaFin.split('/');
	fechaFinal = new Date(diaMesAnio[2], diaMesAnio[1]-1, diaMesAnio[0]);
	
	totalDiasInicio = fechaInicial.getDate() + ((fechaInicial.getMonth()+1)*30) + fechaInicial.getYear()*365;
	totalDiasFinal  = fechaFinal.getDate() + ((fechaFinal.getMonth()+1)*30) + fechaFinal.getYear()*365;
	
	if (returnDiasMesesAnios=="años")
		return parseInt((totalDiasFinal - totalDiasInicio) / 365);
	else if (returnDiasMesesAnios=="meses")
		return parseInt((totalDiasFinal - totalDiasInicio) / 30);

	return parseInt(totalDiasFinal - totalDiasInicio);
}





//Creamos un objeto que accese a los métodos desarrollados de la clase
var objAPY = new ApyTools();


