// --------------------------------
// Variables de javascript globales
// --------------------------------
ie=(navigator.appName.indexOf('Microsoft')!=-1)?true:false;
ns=(navigator.appName == "Netscape" && document.getElementById)?true:false;

isNS6 = (!document.all && document.getElementById) ? true : false;
// ---------
// Funciones
// ---------

function abrePopup(cual, nombre_pop, alto, ancho, donde_x, donde_y, ajustable, barras_de_scroll) {
	if (ie) {
		window.open(cual, nombre_pop, 'toolbar=no, location=no, directories=no, status, menubar=no, scrollbars='+barras_de_scroll+', resizable='+ajustable+', copyhistory=no, width='+ancho+', height='+alto+', top='+donde_y+', left='+donde_x+'');
	} else if (ns) {
		window.open(cual, nombre_pop,'left='+donde_x+',top='+donde_y+',width=740,height=500,location=no,toolbar=no,directories=no,menubar=no,resizable='+ajustable+',scrollbars=yes,status=no');		
	} else {
		window.open(cual, nombre_pop, 'left=0,top=0,width='+ancho+',height='+(alto+5)+',location=no,toolbar=no,directories=no,menubar=no,resizable='+ajustable+',scrollbars=no,status=no');		
	}
}
/*
function openPopup(cual,na,ancho,alto) {
	izquierda=(screen.width-ancho)/2;
  	arriba=(screen.height-alto)/2;
	if (ie) {
		//window.open(cual, na, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars, resizable=no, copyhistory=no, width='+ancho+', height='+alto+', top='+arriba+', left='+izquierda+'');
		window.open(cual, na, 'toolbar=no, location=no, directories=no, status, menubar=no, scrollbars, resizable, copyhistory=no, width=760, height=500, top='+arriba+', left='+izquierda+'');
	} else if (ns) {
	window.open(cual,na,'left=0,top=0,width=800,height=500,location=no,toolbar=no,directories=no,menubar=no,resizable=yes,scrollbars=yes,status=no');		
	} else {
		//window.open(cual, '', 'left=0,top=0,width='+ancho+',height='+(alto+5)+',location=no,toolbar=no,directories=no,menubar=no,resizable=no,scrollbars=no,status=no');		
		window.open(cual, '', 'left=0,top=0,width=800,height='+(500+5)+',location=no,toolbar=no,directories=no,menubar=no,resizable,scrollbars=no,status=no');	
	}
}
*/

// función GENÉRICA para cualquier formulario
function chekea(cual) {
var i, tipo, valor;
	if (cual.elements) {
		for (i=0; i<cual.elements.length; i++) {
			if (cual.elements[i].name.substr(0,4) == "chk|") {
				tipo = cual.elements[i].name.split("|");
				valor = cual.elements[i].value;
				//if (valor != null) alert(valor);
				switch (tipo[2]) {
					case "str":
						// Primero veo si es obligatorio RELLENARLO
						if ((valor.length == 0) && tipo[5] == "true") {
							alert("El campo \""+tipo[6]+"\" es OBLIGATORIO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después veo si es menor que el mínimo
						if (tipo[5] == "true" && valor.length < parseInt(tipo[3],10)) {
							alert("El campo \""+tipo[6]+"\" NO puede ser menor de "+tipo[3]+" caracteres");				
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Y por último si es mayor que el máximo
						if (valor.length > parseInt(tipo[4],10)) {
							alert("El campo \""+tipo[6]+"\" NO puede ser mayor de "+tipo[4]+" caracteres");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						break;
					case "int":
						// Primero veo si es obligatorio RELLENARLO
						if ((valor.length == 0) && tipo[5] == "true") {
							alert("El campo \""+tipo[6]+"\" es OBLIGATORIO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después compruebo que sea NUMÉRICO
						if (!(esnumerico(valor))) {
							alert("El campo \""+tipo[6]+"\" debe ser NUMÉRICO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
								cual.elements[i].select();
							}
							return false;
						}
						// Después veo si es menor que el mínimo
						if (parseInt(valor,10) < parseInt(tipo[3],10)) {
							alert("El campo \""+tipo[6]+"\" NO puede ser menor que "+tipo[3]);
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Y por último si es mayor que el máximo
						if (parseInt(valor,10) > parseInt(tipo[4],10)) {
							alert("El campo \""+tipo[6]+"\" NO puede ser mayor que "+tipo[4]);
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
								cual.elements[i].select();
							}
							return false;
						}
						break;
					case "float":
						// Primero veo si es obligatorio RELLENARLO
						if ((valor.length == 0) && tipo[5] == "true") {
							alert("El campo \""+tipo[6]+"\" es OBLIGATORIO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después compruebo que sea NUMÉRICO
						if (!(esnumerico(valor))) {
							alert("El campo \""+tipo[6]+"\" debe ser NUMÉRICO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
								cual.elements[i].select();
							}
							return false;
						}
						// Después veo si es menor que el mínimo
						if (parseFloat(valor) < parseFloat(tipo[3])) {
							alert("El campo \""+tipo[6]+"\" NO puede ser menor que "+tipo[3]);
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después veo si es mayor que el máximo
						if (parseFloat(valor) > parseFloat(tipo[4])) {
							alert("El campo \""+tipo[6]+"\" NO puede ser mayor que "+tipo[4]);
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						break;
					case "date":
						// Primero veo si es obligatorio RELLENARLO
						if ((valor.length == 0) && tipo[5] == "true") {
							alert("El campo \""+tipo[6]+"\" es OBLIGATORIO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después compruebo que sea FECHA
						if (esfecha(valor) != "si" && valor != "") {
							alert("El campo \""+tipo[6]+"\" debe ser de tipo fecha: DD/MM/AAAA\n"+esfecha(valor));
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después veo si es menor que el mínimo
						if (convierte_fecha(valor) < convierte_fecha(tipo[3])) {
							alert("El campo \""+tipo[6]+"\" NO puede ser menor que "+tipo[3]);
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después veo si es mayor que el máximo
						if (convierte_fecha(valor) > convierte_fecha(tipo[4])) {
							alert("El campo \""+tipo[6]+"\" NO puede ser mayor que "+tipo[4]);
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						break;
					case "hora":
						// Primero veo si es obligatorio RELLENARLO
						if ((valor.length == 0) && tipo[5] == "true") {
							alert("El campo \""+tipo[6]+"\" es OBLIGATORIO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después compruebo que sea HORA
						if (eshora(valor) != "si") {
							alert("El campo \""+tipo[6]+"\" debe ser de tipo hora: HH:MM\n"+eshora(valor));
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						break;
					case "codnom":
						// Primero veo si es obligatorio RELLENARLO
						if ((valor.length == 0) && tipo[5] == "true") {
							alert("El campo \""+tipo[6]+"\" es OBLIGATORIO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						// Después compruebo que sea HORA
						/*if (escodnom(valor)!=true) {
							alert("El campo \""+tipo[6]+"\" debe ser de tipo Código/Nombre);
							cual.elements[i].focus();
							return false;
						}*/
						break;
					case "combo":
						if (tipo[5] == "true" && valor == "") {
							alert("El campo \""+tipo[6]+"\" es OBLIGATORIO");
							if (cual.elements[i].type!="hidden"){
								cual.elements[i].focus();
							}
							return false;
						}
						break;
					default:
						alert("No existen restricciones de tipo \""+tipo[2]+"\"");
						return false;
						break;
				}
			}
		}
	}
	return true;
}

// Función para comprobar que el campo sea numérico
function esnumerico(str) {
var i;
	for(i=0; i<str.length; i++) {
		if(!(((str.charAt(i)<='9')&&(str.charAt(i)>='0')) || (str.charAt(i)==' ')||(str.charAt(i) == '.')||(str.charAt(i) == '-'))) return(false);
	}
	return(true);
}

// Función para comprobar que el campo sea hora
function eshora(dato) {
var hora_split;
var thora, tmin;
	hora_split = dato.split(":");
	thora = hora_split[0];
	tmin = hora_split[1];
	// Comprobamos que sean 2 elementos
	if(hora_split.length != 2) return("Debe tener HH:MM");
	// Comprobamos el formato de la hora
	if(!esnumerico(thora)) return("La hora debe ser un número");
	if(thora < 0 || thora > 24) return("La hora debe estar entre 0 y 24");
	// Comprobamos el formato de los minutos
	if(!esnumerico(tmin)) return("Los minutos deben ser un número");
	if(tmin < 0 || tmin > 60) return("Los minutos deben estar entre 0 y 60");
	return("si");
}

// Función para comprobar que el campo sea fecha
function esfecha(dato) {
var fecha_split;
var i;
var tdia, tmes, tano;
	fecha_split = dato.split('/');
	tdia = parseInt(fecha_split[0],10);
	tmes = parseInt(fecha_split[1],10);
	tano = parseInt(fecha_split[2],10);
	// Comprobamos que sean 3 elementos
	if(fecha_split.length != 3) return("Debe tener DD/MM/AAAA");
	// Comprobamos que no sean ceros
	for (i=0; i<fecha_split.length; i++) {
		if (parseInt(fecha_split[i],10) == 0) return("No existe la fecha: 0");
	}
	// Comprobamos que el AÑO tenga 4 dígitos
	if(fecha_split[2].length != 4) return("El año debe tener 4 dígitos: AAAA");
	// Comprobamos que sea dia/mes/año: 28/02/1997
	var f = convierte_fecha(dato);
	if(f.getDate() != tdia) return("El día no es correcto");
	if(f.getMonth() != (tmes-1)) return("El mes no es correcto");
	if(f.getFullYear() != tano) return("El año no es correcto");
	return("si");
}
// funcion que comprueba si el valor de un campo es int/str para enviar pares codigo-nombre
function escodnom(codnom){
   var patron = /^(\d{4})(\/)([\w]+)$/;
   var matchArray = codnom.match(patron);
   
   if (matchArray == null)  return false;
   cod = matchArray[0]; // agrupacion en fragmentos
   nom = matchArray[2];
   if (nom.length > 20) return false;
     
    return true; // date is valid
}

// Función para devolver una FECHA
function convierte_fecha(quien) {
	var fecha_split;	
	var tdia, tmes, tano;
	fecha_split = quien.split('/');
	tdia = parseInt(fecha_split[0],10);
	tmes = parseInt(fecha_split[1],10);
	tano = parseInt(fecha_split[2],10);
	return date = new Date(tano,tmes-1,tdia);
}
// Funcion para colocar el submenu debajo del submenu
/*function colocamenu() {
	if (!ns) {
		// le sumamos el margen de la izquierda
		document.getElementById("menu1").style.left = (document.mptotal.width - document.mp.width +82);
		document.getElementById("menu1").style.top = (document.all.mp.style.top+130);
	}
}

function muestralacapa(id) {
	if (ns) document.layers[id].visibility = "show";
	if (ie) document.all[id].style.visibility = "visible";
	if (isNS6) document.getElementById(id).style.visibility = "visible";
	
}
function ocultalacapa(id) {
	if (ns) document.layers[id].visibility = "hide";
	if (ie) document.all[id].style.visibility = "hidden";
	if (isNS6) document.getElementById(id).style.visibility = "hidden";
}*/

if (ns) { // Netscape
    document.captureEvents(Event.MOUSEMOVE);
    document.onmousemove = captureMousePosition;
} else if (ie) { // Internet Explorer
    document.onmousemove = captureMousePosition;
} else if (isNS6) { // Netcsape 6
    document.onmousemove = captureMousePosition;
}
// Global variables
xMousePos = 0; // Horizontal position of the mouse on the screen
yMousePos = 0; // Vertical position of the mouse on the screen
xMousePosMax = 0; // Width of the page
yMousePosMax = 0; // Height of the page

function captureMousePosition(e) {
    if (document.layers) {
        xMousePos = e.pageX;
        yMousePos = e.pageY;
        xMousePosMax = window.innerWidth+window.pageXOffset;
        yMousePosMax = window.innerHeight+window.pageYOffset;
    } else if (document.all) {
        xMousePos = window.event.x+document.body.scrollLeft;
        yMousePos = window.event.y+document.body.scrollTop;
        xMousePosMax = document.body.clientWidth+document.body.scrollLeft;
        yMousePosMax = document.body.clientHeight+document.body.scrollTop;
    } else if (document.getElementById) {
        // Netscape 6 behaves the same as Netscape 4 in this regard 
        xMousePos = e.pageX;
        yMousePos = e.pageY;
        xMousePosMax = window.innerWidth+window.pageXOffset;
        yMousePosMax = window.innerHeight+window.pageYOffset;
    }
	if (yMousePos < 80 || yMousePos > 280) {
		//if (document.getElementById('menu1')) ocultalacapa("menu1");
	}
}
