//////////////////////////////////////////////////////////////////////////////
//
// FUNCIONES GENERALES
//
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
// Funcion para el mouseover de un grid
//
// Parï¿½metros
//    inObject    Objeto sobre el que se realiza el mouse over
//////////////////////////////////////////////////////////////////////////////
function rollover( inObject )
{
  inObject.style.backgroundColor="#E2D78E";
}

//////////////////////////////////////////////////////////////////////////////
// Funcion para el mouseout de un grid
//
// Parametros
//    inObject    Objeto sobre el que se realiza el mouseout
//////////////////////////////////////////////////////////////////////////////
function rollout( inObject )
{
  inObject.style.backgroundColor="#FAFADF";
}


//////////////////////////////////////////////////////////////////////////////
// Función que compara dos fechas
//
//Parámetros:
//  inFechaIni      fecha incio
//  inFechaFin      fecha fin
//  inFechaIniDes   descripción de la fecha inicio (para el mensaje)
//  inFechaFinDes   descripción de la fecha fin (para el mensaje)
//
//Devuelve
//  -1 si la fecha inicio es menor que la fecha fin
//  0 si las fechas coinciden
//  1 si la fecha inicio es mayor que la fecha fin (además muestra un mensaje de aviso)
//////////////////////////////////////////////////////////////////////////////
function comparaFechas( inFechaIni, inFechaFin, inFechaIniDes, inFechaFinDes )
{
	var fechaIni;
	var fechaFin;
	
	//Inicializamos la fecha inicio
	var aux = inFechaIni.split("/");
	fechaIni = aux[2] + aux[1] + aux[0];
	//Inicializamos la fecha fin
	aux = inFechaFin.split("/");
	fechaFin = aux[2] + aux[1] + aux[0];
	
	//Comparamos las dos fechas
	var nReturn;
	if( fechaIni < fechaFin )
	{
		nReturn = -1
	}
	else if( fechaIni == fechaFin )
	{
		nReturn = 0;
	}
	else if( fechaIni > fechaFin )
	{
		alert("La "+ inFechaIniDes +" no puede ser mayor que la "+ inFechaFinDes +".");
		nReturn = 1;
	}
	return nReturn;
}

// Función que pasa un nº en minutos a horas
//    ej.   45 -> 0:45
//          75 -> 1:15
function minutosAhoras( totalMinutos )
{
  var horas = "";
  var minutos = "";
  minutos = totalMinutos % 60;
  horas = Math.floor((totalMinutos - minutos )/ 60);
  horas = "00" + horas;
  minutos = "00"+ minutos;
  minutos = minutos.substring( minutos.length - 2 );
  horas = horas.substring( horas.length - 2 );
  return horas + ":" + minutos;
}

//función que suma dos tiempos en formato hh:mm
function sumaTiempos(t1, t2)
{
  var dot1 = t1.indexOf(":");
  var dot2 = t2.indexOf(":");
  var m1 = t1.substr(0, dot1);
  var m2 = t2.substr(0, dot2);
  var s1 = t1.substr(dot1 + 1);
  var s2 = t2.substr(dot2 + 1);
  var sRes = (Number(s1) + Number(s2));
  var mRes;
  var addMinute = false;
  if (sRes >= 60){
  addMinute = true;
  sRes -= 60;
  }
  mRes = (Number(m1) + Number(m2) + (addMinute? 1: 0));
  sRes = "00" + sRes;
  sRes = sRes.substring( sRes.length - 2);
  return String(mRes) + ":" + String(sRes);
}

function trim(s) {
  while (s.length>0 && (s[0]==' '||s[0]=='\n')) s=s.substring(1);
  while (s.length>0 && (s[s.length-1]==' '||s[s.length-1]=='\n')) s=s.substring(0, s.length-1);
  if( s.length == 1 && s==" ") s = "";
  return s; 
}


///////////////////////////////////////////////////////////////////////////////
//******************************************************************
//valipunt
//
//parameters: Array con los parámetros necesarios
//
//parameters(0): Objeto a validar. Ej.: frm.fecha
//parameters(1): Nombre del campo que saldra en el posible
//				 mensaje de error
//parameters(2): Longitud maxima
//parameters(3): Tipo de longitud. C=Caracteres / B=Bytes
//parameters(4): NUM=Numeros
//				 CHR=Solo texto
//				 ALF=Alfanum?rico
//				 DAT=Fecha (dd/mm/aaaa)
//               TME=Tiempo (hh:mm)
//				 EML=Email
//				 SEL=Select. El valor "Seleccionar" debe ser -1
//				 IMPORTANTE: El valor sin seleccionar ha de ser "-1"
//				 Vac?o=No valida. Util para Metadata.
//parameters(5): Requerido. True/False
//parameters(6): N? mánimo (para validar rangos de n?s)
//parameters(7): N? máximo (para validar rangos de n?s)
//parameters(8): N? decimales (para validar n?s)
//*******************************************************************
///////////////////////////////////////////////////////////////////////////////
function valinput(parameters)
{


var flg,i,tst;
var valor;	//Valor a validar
var cmp;	//Caracteres permitidos
var mensaje;
var aux;	//variable auxiliar

flg=0;

valor=parameters[0].value;
if( valor != "" )
{
    valor = trim(valor);
    parameters[0].value = valor;
}

//Si el tipo de validación estÃ¡ vacio, no validamos
//Util para Metadata

if (parameters[4]=="")
	return true;

//Se comprueba si tiene valor
if (valor!="")
{	
	//Valida si es requerido

	
	switch (parameters[4].toUpperCase())
		{
//***** NUMEROS *********
			case "NUM":
			
					//validación LONGITUD
					if (parameters[3].toUpperCase()=="B")	//Es por bytes
						{
						//Si es por bytes no aceptamos decimales
						//Se modifica el rango
						switch (parameters[2])
							{
							case 1:
								//Tipo TINYINT en SqlServer
								parameters[6]=0;
								parameters[7]=255;
								parameters[8]=0;
								break;
							case 2:
								//Tipo SMALLINT en SqlServer
								parameters[6]=-32768;
								parameters[7]=32767;
								parameters[8]=0;
								break;
							case 4:
								//Tipo INT en SqlServer
								parameters[6]=-2147483648;
								parameters[7]=2147483647;
								parameters[8]=0;
								break;
							default:
								//En cualquier otro caso, se toma como 2 bytes
								parameters[6]=-32768;
								parameters[7]=32767;
								parameters[8]=0;
								break;
							}//Fin switch
						}
					else	//La longitud es por caracteres
						{
						if ( valor.length>parseInt(parameters[2]) )
							{
							alert("El campo " + parameters[1] + " no puede superar los " + parameters[2] + " caracteres.");
							parameters[0].focus();
							return false;
							}
						}
					
					//Segun acepte decimales o no.
					if ((parameters[8]==0) || (parameters[8]==""))
						{
						//No acepta decimales
						parameters[8]=0; //Para evitar que este vacio.
						aux=0	//Nº dec. del valor. Para comprobar nº decimales mas adelante
						cmp="-0123456789" // son los caracteres permitidos sin decimales
						mensaje="El campo " + parameters[1] + " sólo permite números y sin decimales";
						}
					else
						//Acepta decimales
						{
						//Se comprueba nº decimales del valor.
						aux=valor.split(".")
						if (aux.length>0)	//tiene decimales
              {
							//aux=parseInt(aux[1]);
              aux=aux[1];
              }
						else
							aux="";
							
						cmp="-0123456789." // son los caracteres permitidos con decimales
						mensaje="El campo " + parameters[1] + " sólo permite números y el caracter \",\". ";
						}
					for (i=0;i<valor.length;i++)
					{	
						tst=valor.substring(i,i+1)
						if (cmp.indexOf(tst)<0)
							{
							flg++;
							}
					}
					//Se comprueba si existe caracter no permitido, sino, se comprueba decimales
					if (flg!=0)
						{
						alert(mensaje);
						parameters[0].focus();
						return false;
						}
					else
						{	
						
						//Se comprueba si tiene más decimales de lo establecido
            auxlen=parseInt(aux.length);
            paramlen=parseInt(parameters[8]);
						if ( auxlen>paramlen )
							{
							alert("El nº de decimales no puede ser superior a " + parameters[8] + ".");
							parameters[0].focus();
							return false;
							}
						}
					//Validación de rango
					
					
					if ( (parseFloat(valor)<parseFloat(parameters[6])) && ( (parameters[6]!="") || (parameters[6]==0) ) )
						{
						alert("El valor del campo " + parameters[1] + " no está en el rango permitido (" + parameters[6] + " / " + parameters[7] + ")");
						parameters[0].focus();
						return false;
						}
					if ( (parseFloat(valor)>parseFloat(parameters[7])) && ( (parameters[7]!="") || (parameters[7]==0) ) )
						{
						alert("El valor del campo " + parameters[1] + " no está en el rango permitido (" + parameters[6] + " / " + parameters[7] + ")");
						parameters[0].focus();
						return false;
						}
						
					break;
					
//****** SOLO TEXTO **********
				
			case "CHR":		
				
				cmp="0123456789"; // son los caracteres no permitidos
				for (i=0;i<valor.length;i++)
				{	
					tst=valor.substring(i,i+1);
					if (cmp.indexOf(tst)>=0)
						{
						flg++;
						}
				}
				//Se comprueba si existe caracter no permitido
				if (flg!=0)
					{
					alert("El valor del campo " + parameters[1] + " no admite nÃºmeros");
					parameters[0].focus();
					return false;
					}
				
				//Valida longitud
				
				if ( valor.length>parseInt(parameters[2]) )
					{
					alert("El campo " + parameters[1] + " no puede superar los " + parameters[2] + " caracteres.");
					parameters[0].focus();
					return false;
					}
				break;

//****** ALFANUMERICO **********
				
			case "ALF":		
				
				//Valida longitud
				
				if ( valor.length>parseInt(parameters[2]) )
					{
					alert("El campo " + parameters[1] + " no puede superar los " + parameters[2] + " caracteres.");
					parameters[0].focus();
					return false;
					}
				
				while (valor.indexOf("'")!=-1)
					{
						valor=valor.replace("'","`");
					}	
				
				parameters[0].value=valor;
					
				break;
				
//****** FECHA *********				
			case "DAT":
				var matri,pos,diaini,mesini,anoini,ok;
				matri = valor.split("/");
				pos= valor.indexOf("/");
				ok=true;
				if (pos == -1)
					{
					alert('Debe introducir una fecha, el formato debe ser dd/mm/yyyy');
					parameters[0].focus();
					return false;
					}
				pos = valor.indexOf("/",pos+1);
				if (pos == -1)
					{
					alert('Debe introducir una fecha, el formato debe ser dd/mm/yyyy');
					parameters[0].focus();
					return false;
					}
					
				diaini = matri[0];
				mesini = matri[1];
				anoini = matri[2];
					
				if ((diaini=="") || (mesini=="") || (anoini==""))
				{	
					alert('Debe introducir una fecha, el formato debe ser dd/mm/yyyy');
					parameters[0].focus();
					return false;
				}
					
				if (valor.length!=10)
				{
					alert('La longitud de la fecha no es correcta, el formato debe ser dd/mm/yyyy');
					parameters[0].focus();
					return false;
				}
				if ((isNaN(diaini)==true) || (isNaN(mesini)==true) || (isNaN(anoini)==true))
				{
					alert('La cadena introducida no es una fecha, el formato debe ser dd/mm/yyyy');
					parameters[0].focus();
					return false;
				}
					
				if ((diaini<1) || (mesini<1) || (anoini<1900))
				{		
					alert('La fecha no es vÃ¡lida, debe ser posterior a 01/01/1900');
					parameters[0].focus();
					return false;
				}		
				if ((mesini>12) || (diaini>31))
				{
					alert('El rango de la fecha no es válido, el formato debe ser dd/mm/yyyy');
					parameters[0].focus();
					return false;
				}
				if ((!bisiesto(anoini)) && (mesini=="02") && (diaini>28))
				{
					if (diaini==29)
						alert("El año " + anoini + " no es bisiesto");
					else
						alert("El mes " + mesini + " no tiene " + diaini + " días");
					parameters[0].focus();
					return false;
				}
				if ((diaini=="31") && ((mesini=="02") || (mesini=="04") || (mesini=="06") || (mesini=="09") || (mesini=="11")))
				{
					alert("El mes " + mesini + " no tiene 31 días ");
					parameters[0].focus();
					return false;
				}
				break;

//***** TIEMPO *********				
			case "TME":
				var aTme = valor.split(":");
				if( aTme.length != 2 )
				{
					alert("El campo "+ parameters[1] + " debe tener el formato hh:mm");
					parameters[0].focus();
					return false;
				}
				else
				{
					var sHour = aTme[0];
					var sMin = aTme[1];
					if( sHour < 0 || sHour >= 24 )
					{
						alert("La hora debe estar comprendida entre las 00 y las 23");
						parameters[0].focus();
						return false;
					}
					else
					{
            if( sMin < 0 || sMin >= 60 )
						{
							alert("Los minutos deben estar comprendidos entre el 00 y el 59");
							parameters[0].focus();
							return false;
						}
					}
				}
				break;


//****** EMAIL **********
			case "EML":		
				var EmailOk  = false;
				var AtSym    = valor.indexOf('@')
				var Period   = valor.lastIndexOf('.')
				var Length   = valor.length - 1   

				if ((AtSym < 1) || (valor.indexOf(' ')>-1) || (Period == Length ) || (valor.indexOf('.')==-1))                    
				   {  
				      alert('Por favor, introduzca una dirección de correo valida.');
				      parameters[0].focus();
				      return false;
				   }
				
				//Valida longitud
				if ( valor.length>parseInt(parameters[2]) )
					{
					alert("El campo " + parameters[1] + " no puede superar los " + parameters[2] + " caracteres.");
					parameters[0].focus();
					return false;
					}
				break;
				
//****** COMBO ********				
			case "SEL":
			//Si es requerido y esta seleccionado "Seleccionar"
			if ( (valor=="-1") && (parameters[5]) )
				{
					alert("El campo " + parameters[1] + " es requerido. Haga una selección, por favor.");
					parameters[0].focus();
					return false;
				}
			

		}//**Fin del switch

			
	}//Fin de validar si tiene valor
//Esta vacio
else
	{
	//Si es requerido
	if(parameters[5])
		{
		alert("El campo " + parameters[1] + " es obligatorio");
		parameters[0].focus();
		return false;
		}
	}

return true;


}//**fin function

//////////////////////////////////////////////////////////////////////////////
// FUNCION PARA COMPROBAR SI EL AÑO ES BISIESTO O NO
//////////////////////////////////////////////////////////////////////////////

function bisiesto(anno)
{
	if (((anno%4==0) && (anno%100!=0)) || (anno%400==0))
		return true;
	else
		return false;
}
//////////////////////////////////////////////////////////////////////////////
// MUESTRA EL FORMATO PARA ENVIAR INFORMACION A LA FUNCION VALINPUT
//////////////////////////////////////////////////////////////////////////////

function valAyuda()
{
var txtAyuda;
txtAyuda="******************************************************************\n";
txtAyuda+="valipunt\n";
txtAyuda+="\n";
txtAyuda+="parameters: Array con los parámetros necesarios\n";
txtAyuda+="\n";
txtAyuda+="parameters(0): Objeto a validar. Ej.: frm.fecha\n";
txtAyuda+="parameters(1): Nombre del campo que saldra en el posible\n";
txtAyuda+="	 mensaje de error\n";
txtAyuda+="parameters(2): Longitud maxima\n";
txtAyuda+="parameters(3): Tipo de longitud. C=Caracteres / B=Bytes\n";
txtAyuda+="parameters(4):	NUM=Numeros\n";
txtAyuda+="		CHR=Texto\n";
txtAyuda+="		ALF=Alfanumérico\n";
txtAyuda+="		DAT=Fecha (dd/mm/aaaa)\n";
txtAyuda+="		EML=Email\n";
txtAyuda+="		SEL=Select. El valor 'Seleccionar' debe ser -1\n";
txtAyuda+="		IMPORTANTE: El valor sin seleccionar ha de ser '-1'\n";
txtAyuda+="		Vacío=No valida. Util para Metadata.\n";
txtAyuda+="parameters(5): Requerido. True/False\n";
txtAyuda+="parameters(6): Nº mínimo (para validar rangos de nºs)\n";
txtAyuda+="parameters(7): Nº máximo (para validar rangos de nºs)\n";
txtAyuda+="parameters(8): Nº decimales (para validar nºs)\n";
txtAyuda+="*******************************************************************";

alert(txtAyuda);
}


//funcion que llama a la pagina de busqueda sin cerrar la actual
function buscar(path, tipo, parametros, destino)
{
  	window.top.frameOculto.location.href=path + "otros/busqueda.php?tipo="+ tipo +"&parametros="+ parametros +"&destino="+ destino;
}

// Función que abre una página de tamaño fijo y sin herramientas
function AbrirPagina_850_550( pagina ){
	pagina_abierta=window.open ( pagina,"", "width=850,height=550,scrollbars=no");
	pagina_abierta.focus();
} 

function mensaje()
{
  alert("detro");
}



////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Función de efecto nieve para la navidad
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function efecto_nieve()
{
	<!-- Original:  Altan (snow@altan.hr) -->
	<!-- Web Site:  http://www.altan.hr/snow -->
	
	<!-- This script and many more are available free online at -->
	<!-- The JavaScript Source!! http://javascript.internet.com -->
	
	<!-- Begin
	var no = 25; // snow number
	var speed = 10; // smaller number moves the snow faster
	var snowflake = "./images/copo_nieve_1.gif";
	
	var ns4up = (document.layers) ? 1 : 0;  // browser sniffer
	var ie4up = (document.all) ? 1 : 0;
	var dx, xp, yp;    // coordinate and position variables
	var am, stx, sty;  // amplitude and step variables
	var i, doc_width = 800, doc_height = 600;
	if (ns4up) {
	doc_width = self.innerWidth;
	doc_height = self.innerHeight;
	} else if (ie4up) {
	doc_width = document.body.clientWidth;
	doc_height = document.body.clientHeight;
	}
	dx = new Array();
	xp = new Array();
	yp = new Array();
	am = new Array();
	stx = new Array();
	sty = new Array();
	for (i = 0; i < no; ++ i) 
	{  
		//snowflake = "./images/copo_nieve_" +  Math.round((Math.random()*2)) +".gif";
		dx[i] = 0;                        // set coordinate variables
		xp[i] = Math.random()*(doc_width-50);  // set position variables
		yp[i] = Math.random()*doc_height;
		am[i] = Math.random()*20;         // set amplitude variables
		stx[i] = 0.02 + Math.random()/10; // set step variables
		sty[i] = 0.7 + Math.random();     // set step variables
		if (ns4up) 
		{                      // set layers
			if (i == 0) 
			{
				document.write("<layer name=\"dot"+ i +"\" left=\"15\" ");
				document.write("top=\"15\" visibility=\"show\"><img src=\"");
				document.write(snowflake + "\" border=\"0\"></layer>");
			} else {
				document.write("<layer name=\"dot"+ i +"\" left=\"15\" ");
				document.write("top=\"15\" visibility=\"show\"><img src=\"");
				document.write(snowflake + "\" border=\"0\"></layer>");
	   		}
		} else if (ie4up) {
			if (i == 0) {
				document.write("<div id=\"dot"+ i +"\" style=\"POSITION: ");
				document.write("absolute; Z-INDEX: "+ i +"; VISIBILITY: ");
				document.write("visible; TOP: 15px; LEFT: 15px;\"><img src=\"");
				document.write(snowflake + "\" border=\"0\"></div>");
			} else {
				document.write("<div id=\"dot"+ i +"\" style=\"POSITION: ");
				document.write("absolute; Z-INDEX: "+ i +"; VISIBILITY: ");
				document.write("visible; TOP: 15px; LEFT: 15px;\"><img src=\"");
				document.write(snowflake + "\" border=\"0\"></div>");
			}
	   }
	}
	function snowNS() {  // Netscape main animation function
	for (i = 0; i < no; ++ i) {  // iterate for every dot
	yp[i] += sty[i];
	if (yp[i] > doc_height-50) {
	xp[i] = Math.random()*(doc_width-am[i]-30);
	yp[i] = 0;
	stx[i] = 0.02 + Math.random()/10;
	sty[i] = 0.7 + Math.random();
	doc_width = self.innerWidth;
	doc_height = self.innerHeight;
	}
	dx[i] += stx[i];
	document.layers["dot"+i].top = yp[i];
	document.layers["dot"+i].left = xp[i] + am[i]*Math.sin(dx[i]);
	}
	setTimeout("snowNS()", speed);
	}
	function snowIE() {  // IE main animation function
	for (i = 0; i < no; ++ i) {  // iterate for every dot
	yp[i] += sty[i];
	if (yp[i] > doc_height-50) {
	xp[i] = Math.random()*(doc_width-am[i]-30);
	yp[i] = 0;
	stx[i] = 0.02 + Math.random()/10;
	sty[i] = 0.7 + Math.random();
	doc_width = document.body.clientWidth;
	doc_height = document.body.clientHeight;
	}
	dx[i] += stx[i];
	document.all["dot"+i].style.pixelTop = yp[i];
	document.all["dot"+i].style.pixelLeft = xp[i] + am[i]*Math.sin(dx[i]);
	}
	setTimeout("snowIE()", speed);
	}
	if (ns4up) {
	snowNS();
	} else if (ie4up) {
	snowIE();
	}
	// End -->
}


function aniadirOpcionSelect(obj, opcion)
{
	//Esto depende del navegador que se use
	alert(navigator.appVersion);
	if( navigator.appVersion.indexOf('MSIE') > 0 )
		obj.add( opcion );
	else
		obj.add( opcion,null ); 
}

function abrirVentanaPequena( direccion )
{
	window.open(direccion,'', 'toolbar=no,status=no,directories=no,location=no, scrollbars=nos,resizable=no, width=400,height=100');
}




	

