//----------------------------------------------------------------------
// herramientas.js		Funciones de uso comun de validacion de datos
//----------------------------------------------------------------------
//Autor: Ing. José Luis Ordoņez Vega 	jlovega@yahoo.com
//Objetivo: Proporcionar funciones de uso comun en las paginas web
//01/10/2002
//Modificacion: 26/09/2005
//v2.0
//-----------------------------------------------------------------------

/*document.oncontextmenu = new Function ("return false;");
document.onkeydown  = new Function ("BloquerPagina();");
window.onload =  new Function ("ValidaSiEstaDentroIntranet();");*/


//Valida que las paginas esten dentro de la Intranet 
//NOTA:  Si la pagina tiene definido onLoad entonces esta fuincion se debe llamar explicitamente para hacer la validacion
function ValidaSiEstaDentroIntranet()
{
	try
	{
	var ret = estaDentroDe();
	
	if(ret != 0)
	location.replace('/denegado.asp?u=' + document.URL)
	}
	catch(e){	}
	checaScrolling()	
}

//Verifica posicion Scroll de la ventana 
function checaScrolling()
{
	try
	{
	//Mueve Layer del Mensaje "Procesando" al centro de la pantalla
	document.getElementById("Layer_Fondo").style.top =  document.body.scrollTop 
	document.getElementById("Layer_Fondo").style.left =  document.body.scrollLeft 

	document.getElementById("Layer_msgProcesando").style.top = document.body.scrollTop + (document.body.clientHeight/2) - 42
	document.getElementById("Layer_msgProcesando").style.left = document.body.scrollLeft + (document.body.clientWidth/2) - 100
	}
	catch(e_L){ }
	//window.status = document.body.scrollTop + "," + document.body.scrollLeft	
	setTimeout("checaScrolling()",10);
}

//Despliega Mensaje "Espera Procesando"
function PonMensajeDeEspera()
{
	document.body.scroll = "no";
	
	//Oculta los Objetos de Listas de la forma
	for(var j = 0; j < window.document.forms.length; j++)
	 for(var i = 0; i < window.document.forms[j].elements.length; i++)
		if( document.forms[j].elements[i].type == "select-one" || document.forms[j].elements[i].type == "select-multiple")		
			window.document.forms[j].elements[i].style.visibility = 'hidden'

	//
	document.getElementById("Layer_Fondo").style.top = 0
	document.getElementById("Layer_Fondo").style.left = 0	
	document.getElementById("Layer_Fondo").style.height = document.body.clientHeight
	document.getElementById("Layer_Fondo").style.width = document.body.clientWidth	
	document.getElementById("Layer_Fondo").style.visibility = 'visible'

	document.getElementById("Layer_msgProcesando").style.visibility = 'visible'
}


//Detecta Tipo de Navegador
var vbDOMtype = '';
if (document.getElementById)
{
	vbDOMtype = "std";
}
else if (document.all)
{
	vbDOMtype = "ie4";
}
else if (document.layers)
{
	vbDOMtype = "ns4";
}
//Arreglo de todos los objetos
var vBobjetos = new Array();


// Funcion para simular un document.getElementById
function da_Objeto(idnombre, forzar)
{
	if (forzar || typeof(vBobjetos[idnombre]) == "undefined")
	{
		switch (vbDOMtype)
		{
			case "std":
			{
				vBobjetos[idnombre] = document.getElementById(idnombre);
			}
			break;

			case "ie4":
			{
				vBobjetos[idnombre] = document.all[idnombre];
			}
			break;

			case "ns4":
			{
				vBobjetos[idnombre] = document.layers[idnombre];
			}
			break;
		}
	}
	return vBobjetos[idnombre];
}

//Mensaje de Confirmacion
function Confirmar(mensaje)
{
	var d = document.forms[0]
	return confirm(mensaje)	
}

//Bloquea BackSpace y Refresh (F5 y CTRL+R) de la pagina
function BloquerPagina() {
	//Bloquea  alt + <--- = 37 y alt + ---> = 39
	if ((event.altKey && event.keyCode == 37) || (event.altKey && event.keyCode == 39) )
	{
		alert('Funcion deshabilitada')
		event.keyCode = 0;
        event.returnValue = false;
	}	

	//Perimite escribir la @
	if (event.altKey && event.keyCode == 81)
	{
		return true
	}
	
   	 	if ( (event.altKey) || ((event.keyCode == 8) && (event.srcElement.type != "text" &&	event.srcElement.type != "textarea" && event.srcElement.type != "password")) || 
    	 			((event.ctrlKey) && ((event.keyCode == 78) || (event.keyCode == 82)) ) ||  (event.keyCode == 116) ||  (event.keyCode == 122) ||  (event.keyCode == 123) ) 
				{
        	 		event.keyCode = 0;
        	 		event.returnValue = false;
        	 	}
}

// Funcion para cambiar el atributo 'display' de un objeto
function Sw_display(idnombre)
{
	obj = da_Objeto(idnombre);
	if (obj)
	{
		if (obj.style.display == "none")
		{
			obj.style.display = "";
		}
		else
		{
			obj.style.display = "none";
		}
	}
	return false;
}

//Elimina las comillas simples de los objetos de texto en una pagina web
function BuscaComillas()
{
for(var j = 0; j < window.document.forms.length; j++)
 for(var i = 0; i < window.document.forms[0].elements.length; i++)
	if( document.forms[j].elements[i].type == "text" || document.forms[j].elements[i].type == "textarea")
	{
		window.document.forms[j].elements[i].value = QuitaComillas (window.document.forms[j].elements[i].value)
	}
}

//Funcion Utilizada por BuscaComillas()
function QuitaComillas(cadenas)
{
var pos = 0
var cadena =""
var cadena2 =""

cadena = cadenas
cadena2 = cadenas

pos = cadena.indexOf("'",pos)
if (pos < 0 ) return cadenas
	
for(var i=0; i < cadena.length; i++)
	{
	pos = cadena.indexOf("'",pos)
	if (pos < 0 ) 
		break;
	else	
		cadena2 = cadena.substring(0,pos) + cadena.substr(pos + 1)
	cadena = cadena2

	}

	return cadena2
}



function NoComillas()
{
if(event.keyCode == 39 )
	event.keyCode = 0
}

function NoComillasDoble()
{
if(event.keyCode == 34 )
	event.keyCode = 0
}

function NoEnter()
{
if(event.keyCode == 13 )
	event.keyCode = 0
}

function SoloNumerosConDecimal()
{

if((event.keyCode < 48 || event.keyCode > 57) && event.keyCode != 46)
	event.keyCode = 0
}

function SoloNumeros()
{

if(event.keyCode < 48 || event.keyCode > 57)
	event.keyCode = 0
}

function SoloCaracteresValidos()
{
if((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 65 || event.keyCode > 90) && (event.keyCode < 97 || event.keyCode > 122) && (event.keyCode != 32) && (event.keyCode != 64) && (event.keyCode != 46 ) && (event.keyCode != 47 ))
	event.keyCode = 0
}


function SoloNumerosYEnter()
{

if((event.keyCode < 48 || event.keyCode > 57) && event.keyCode != 13)
	event.keyCode = 0
}

function SoloLetrasYNumeros()
{
	//Solo Numeros, Mayusculas y minusculas
	if((event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 65 || event.keyCode > 90) && (event.keyCode < 97 || event.keyCode > 122))
		event.keyCode = 0
}

function SoloLetras()
{
	if((event.keyCode < 32 || event.keyCode > 32)&&(event.keyCode < 65 || event.keyCode > 90) && (event.keyCode < 97 || event.keyCode > 122))
		event.keyCode = 0
}

// Verifica si la pagina esta dentro en un Iframe o frame
function estaDentroDe()
{
	if( top != self )
	{
     if( window.frameElement.tagName== "IFRAME" )
	 	{
		// Esta dentro de un IFRAME
		// alert( "iframe" ); 
		return 0;
    	}
		else
		{
		// Esta dentro de un FRAME
		// alert( "frame" );     
		return 1;
   		}
	}
	else
	{
	// Pagina Normal
   	//alert( "page" );
	return 2;
	}

}  


//---Funcion que retorna un numero en Foramto de Dinero------
function formatoDinero(mnt) {
    mnt -= 0;
    mnt = (Math.round(mnt*100))/100;
    return (mnt == Math.floor(mnt)) ? mnt + '.00' 
              : ( (mnt*10 == Math.floor(mnt*10)) ? 
                       mnt + '0' : mnt);
}

//Mensaje para objetos q deben ser capturados para poder continuar
function Necesario(nomObj,Etiqueta,foco)
{
	oObjeto = da_Objeto(nomObj);

	//Objeto Tipo radio
	if(oObjeto.type == "radio" || oObjeto.type == "checkbox")
	{
	NoChecado = true
	for(var j = 0; j < window.document.forms.length; j++)
	 for(var i = 0; i < window.document.forms[0].elements.length; i++)
		if( (document.forms[j].elements[i].type == "checkbox" || document.forms[j].elements[i].type == "radio") && document.forms[j].elements[i].name == nomObj)
			NoChecado = NoChecado && !document.forms[j].elements[i].checked
	
		if(NoChecado)
		{		
			if(Etiqueta != "") 
				alert(Etiqueta)	
			oObjeto.style.background = "#FF0000"
			return false
		}
		else
			return true		
	}

	//Otro tipo de objetos
	if(oObjeto.value == "")
  	 {
		if(Etiqueta != "") 
			alert(Etiqueta)
			oObjeto.style.background = "#FFFF00"
		if(foco != 0)
			oObjeto.focus()
		return false
	}		
	else
		return true
}


//Mantiene los valores de Checkbox, listas y options despues de una modificacion
function MantenValor(nomObj,valor)
{
for(var j = 0; j < window.document.forms.length; j++)
 for(var i = 0; i < window.document.forms[j].elements.length; i++)
  {
	if( nomObj == document.forms[j].elements[i].name )
	{
		if(document.forms[j].elements[i].type == "select-one")
			for (var x =0; x< document.forms[j].elements[i].options.length; x++)
				if(document.forms[j].elements[i].options[x].value == valor )
				{
				 document.forms[j].elements[i].options[x].selected = true 
				 return;
				 }	

		if(document.forms[j].elements[i].type == "radio")
			if(document.forms[j].elements[i].value == valor)
				document.forms[j].elements[i].checked = true						

		if(document.forms[j].elements[i].type == "checkbox")
			if(document.forms[j].elements[i].value == valor)
				document.forms[j].elements[i].checked = true						
	}
  }
}

//--------------------Validacion de Fechas----------------------------
function SoloFecha(objeto)
{
var cad = "" + objeto.value

if((event.keyCode < 48 || event.keyCode > 57))
	event.keyCode = 0
else
{
	if(cad.length == 2 || cad.length == 5)
	objeto.value = cad + "/"

	if(cad.length == 10)
  	  event.keyCode = 0	
}

}

var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function esEntero(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Verifica que caracter sea un numero
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var retCadena = "";
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) retCadena += c;
    }
    return retCadena;
}

function DiasEnFebrero (year){
	// Febrero tiene 29 Dias en cualquier aņo y es divisible por 4.
    // EXCEPTO para aņos biciestos divisibles por 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function ArrayDias(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function esFecha(dtStr)
{
	var DiasEnMes = ArrayDias(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var cMes=dtStr.substring(pos1+1,pos2)
	var cDia=dtStr.substring(0,pos1)
	var cAnio=dtStr.substring(pos2+1)
	strYr=cAnio
	if (cDia.charAt(0)=="0" && cDia.length>1) cDia=cDia.substring(1)
	if (cMes.charAt(0)=="0" && cMes.length>1) cMes=cMes.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(cMes)
	day=parseInt(cDia)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("El formato de fecha debe ser: dd/mm/aaaa")
		return false
	}
	if (cMes.length<1 || month<1 || month>12){
		alert("Inserta MES Valido.")
		return false
	}
	if (cDia.length<1 || day<1 || day>31 || (month==2 && day>DiasEnFebrero(year)) || day > DiasEnMes[month]){
		alert("Inserta DIA Valido.")
		return false
	}
	if (cAnio.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Inserta un aņo con 4 digitos entre "+minYear+" y "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || esEntero(stripCharsInBag(dtStr, dtCh))==false){
		alert("Inserta una fecha valida")
		return false
	}
return true
}

//Mueve Valores entre dos objetos list (Listas)
function RelacionaListas(ListaOrigen,ListaDestino,InvertirFlujo)
{
	//Si InvertirFlujo = true entonces el flujo de datos es ListaOrigen -> ListaDestino
	//Si InvertirFlujo = false entonces el flujo de datos es ListaOrigen <- ListaDestino

	if(InvertirFlujo)
	{
	oOrigen = da_Objeto(ListaDestino)
	oDestino = da_Objeto(ListaOrigen)
	}
	else
	{
	oOrigen = da_Objeto(ListaOrigen)
	oDestino = da_Objeto(ListaDestino)
	}
	
	//Esta seleccionado?
	if(oOrigen.selectedIndex != -1)
	{
		//alert(oOrigen.options[oOrigen.selectedIndex].value)					
		//Copia valores en Destino
		oDestino.options[oDestino.length] = new Option(oOrigen.options[oOrigen.selectedIndex].text,oOrigen.options[oOrigen.selectedIndex].value);
		
		//Quita valor de la Lista Origen
		oOrigen.options[oOrigen.selectedIndex] = null
	}
}



//Obliga que el largo del valor del objeto sea el establecido
function ForzarLargo(objeto,largo,Etiqueta)
{
	aObjeto = da_Objeto(objeto)	 
	var cadena = aObjeto.value
	if(cadena.length < largo && cadena.length > 0)
	{
		alert(Etiqueta)
	return false
	}
	
	return true
}