/***** ROLLOVER SENCILLO QE TE CAGAS *****/
//en la imagen --> onmouseover="this.src=Imagenes[0].src;" onmouseout="this.src=Imagenes[1].src;"
//en onLoad de <body> -->onLoad="Precargar('rutarelativa/imagen-ON', 'rutarelativa/imagen-OFF')"


Imagenes = new Array();
function Precargar() {

  for (var i=0; i<Precargar.arguments.length; i++) {
    Imagenes[i]=new Image;
    Imagenes[i].src=Precargar.arguments[i];
  }
}


/*******************************************************************************************************/

/***** VALIDADOR DE CONTENIDO DE FORMULARIOS *****/
//en <form>, añadir el siguiente comportamiento:
//	onSubmit="return formCheck(this, 'mensaje', '\'campo-1\', \'campo-n\'', '\'Nombre-1\', \'Nombre-N\'' );">
//en el JS,
function formCheck(formobj, mensaje, campos, nombresdecampo){
	// name of mandatory fields
	var fieldRequired = eval("Array("+campos+")");
	// field description to appear in the dialog box
	var fieldDescription = eval("Array("+nombresdecampo+")");
	// dialog message
	var alertMsg = mensaje+"\n";


	var l_Msg = alertMsg.length;

	for (var i = 0; i < fieldRequired.length; i++){
		var obj = formobj.elements[fieldRequired[i]];
		if (obj){
			if (obj.type == null){
				var blnchecked = false;
				for (var j = 0; j < obj.length; j++){
					if (obj[j].checked){
						blnchecked = true;
					}
				}
				if (!blnchecked){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				continue;
			}

			switch(obj.type){
			case "select-one":
				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == ""){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "select-multiple":
				if (obj.selectedIndex == -1){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			case "text":
			case "textarea":
				if (obj.value == "" || obj.value == null){
					alertMsg += " - " + fieldDescription[i] + "\n";
				}
				break;
			default:
			}
		}
	}

	if (alertMsg.length == l_Msg){
		return true;
	}else{
		alert(alertMsg);
		return false;
	}
}


/**** Validación de Formularios Genérica ****/
// Generic Form Validation
// Jacob Hage (jacob@hage.dk)
/*
	Uso de la función con Smarty

	La clave está en la llamada a la función 'define' ya que con ella decimos qué campos son
	obligatorios.

	Sin embargo, con Smarty, la función define no aparece al principio de la página, sino
	bastante después de la carga de la página, con lo que no funciona por sí sola. Para solucionar este inconveniente
	se debe usar la función iniciarValidación, definida en cada página que contenga
	formularios que validar.

	La función iniciarValidación, al llamarse, inicia las distintas definiciones usando la
	función define. Debe llamarse en el evento onLoad del BODY de la página que contiene
	el formulario que se desea validar.

	Para distinguir cuándo se debe colocar la función en el evento onLoad, conviene utilizar
	una asignación desde Smarty (p.ej.: $smarty -> assign("es_validacion", 1); )

	De esta forma, si estamos en una validación, llamamos a la función iniciarValidacion, ésta
	carga los define necesarios y finalment, al lanzar el formulario, ya se puede llamar a la
	función validate (propia de este programa) para validar todo el formulario.

	RESUMEN:
		iniciarValidacion (que contiene los define's)
		asignar en Smarty para distinguir la validación
		incluir en el submit del formulario (o en cualquier función que deba lanzarlo) la función validate
*/
var checkObjects	= new Array();
var errors		= "";
var returnVal		= false;
var language		= new Array();
language["header"]	= "Los siguientes datos son obligatorios:"
language["start"]	= "->";
language["field"]	= " Campo ";
language["require"]	= " requerido";
language["min"]		= " y debe contener al menos ";
language["max"]		= " y no debe contener más de ";
language["minmax"]	= " y no más de ";
language["chars"]	= " caracteres";
language["num"]		= " y debe contener un número";
language["email"]	= " debe contener un correo válido";
language["credito"]	= " debe ser tener un código válido";

// -----------------------------------------------------------------------------
// define - Call this function in the beginning of the page. I.e. onLoad.
// n = name of the input field (Required)
// type= string, num, email (Required)
// min = the value must have at least [min] characters (Optional)
// max = the value must have maximum [max] characters (Optional)
// d = (Optional)
// -----------------------------------------------------------------------------
function define(n, type, HTMLname, min, max, d) {
var p;
var i;
var x;
if (!d) d = document;
if ((p=n.indexOf("?"))>0&&parent.frames.length) {
d = parent.frames[n.substring(p+1)].document;
n = n.substring(0,p);
}
if (!(x = d[n]) && d.all) x = d.all[n];
for (i = 0; !x && i < d.forms.length; i++) {
x = d.forms[i][n];
}
for (i = 0; !x && d.layers && i < d.layers.length; i++) {
x = define(n, type, HTMLname, min, max, d.layers[i].document);
return x;
}
eval("V_"+n+" = new formResult(x, type, HTMLname, min, max);");
checkObjects[eval(checkObjects.length)] = eval("V_"+n);
}
function formResult(form, type, HTMLname, min, max) {
this.form = form;
this.type = type;
this.HTMLname = HTMLname;
this.min  = min;
this.max  = max;
}
function validate() {
if (checkObjects.length > 0) {
errorObject = "";
for (i = 0; i < checkObjects.length; i++) {
		validateObject = new Object();
		validateObject.form = checkObjects[i].form;
		validateObject.HTMLname = checkObjects[i].HTMLname;
		validateObject.val = checkObjects[i].form.value;
		validateObject.len = checkObjects[i].form.value.length;
		validateObject.min = checkObjects[i].min;
		validateObject.max = checkObjects[i].max;
		validateObject.type = checkObjects[i].type;
		if (validateObject.type == "num" || validateObject.type == "string") {
			if ((validateObject.type == "num" && validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val))) {
				errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['num'] + "\n";
			} else if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)) {
				errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['minmax'] + validateObject.max+language['chars'] + "\n";
			} else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)) {
				errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['chars'] + "\n";
			} else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)) {
				 errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['max'] + validateObject.max + language['chars'] + "\n";
			} else if (!validateObject.min && !validateObject.max && validateObject.len <= 0) {
				errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + "\n";
			}
		} else if(validateObject.type == "email") {
		// Checking existense of "@" and ".".
		// Length of must >= 5 and the "." must
		// not directly precede or follow the "@"
			if ((validateObject.val.indexOf("@") == -1) || (validateObject.val.charAt(0) == ".") || (validateObject.val.charAt(0) == "@") || (validateObject.len < 6) || (validateObject.val.indexOf(".") == -1) || (validateObject.val.charAt(validateObject.val.indexOf("@")+1) == ".") || (validateObject.val.charAt(validateObject.val.indexOf("@")-1) == ".")) {
					errors += language['start'] + language['field'] + validateObject.HTMLname + language['email'] + "\n";
			}
		}else if(validateObject.type == "credito") {

			var number = validateObject.val;
			var total = 0;
			var flag = 1; //Empezamos a evaludar primero por los números impares
	      var tamano = number.length-1;
			var digits = 0;
			if (number.length != 16 ) { //validamos que tenga 16 digitos
				errors += language['start'] + language['field'] + validateObject.HTMLname + " debe tener 16 digitos" + "\n";
			} else {
 				for (var i=0;i<= tamano; i++) {
 					if (flag == 1) {
						digits = 0;
 						digits = parseInt(number.charAt(i)) * 2;
 						if (digits > 9) digits -= 9;
 						total += digits;
 						flag = 0;
 					} else {
 						total = total + parseInt(number.charAt(i));
 						flag = 1;
 					}
				}
				if ((total % 10) != 0) {
						errors += language['start'] + language['field'] + validateObject.HTMLname + language['credito'] + "\n";
				}
			}
		}
	}
}
if (errors) {
alert(language["header"].concat("\n" + errors));
errors = "";
returnVal = false;
} else {
returnVal = true;
   }
}


function isValidCreditCard(number)
{

}

// popups de imágenes de la galería
function popup(ruta_base, ancho, id_imagen)
{
	var features = "width=" + ancho + ", height=600";

	nueva = window.open(ruta_base + "../../admin/contenidos/ver_imagen.php?id=" + id_imagen, "imagen", features);
	nueva.focus();
}

// popups de imagen para contacto, contenido,...
function popup_imagen(imagen, ancho, alto)
{

	ancho +=  20;
	alto  +=  20;


	var vent_left =  (screen.availWidth - ancho) / 2;
	var vent_top = (screen.availHeight - alto) / 2;

	var features = "width=" + ancho + ", height= "+ alto + ",menubar=0, toolbar=0, location=0, titlebar=0, top = "+vent_top+", left = "+vent_left;

	nueva = window.open(imagen, "imagen", features);
	nueva.focus();
}

function popup_hab(ruta_base, ancho, alto, id_imagen)
{
	var features = "width=" + ancho + ", height= " + alto;

	nueva = window.open(ruta_base + id_imagen, "imagen", features);
	nueva.focus();
}

// funciones para mostrar/ocultar capas
function mostrar_capa(capa)
{
	document.getElementById(capa).style.visibility = "visible";
	document.getElementById(capa).style.position = "relative";
}
function ocultar_capa(capa)
{
	document.getElementById(capa).style.visibility = "hidden";
	document.getElementById(capa).style.position = "absolute";
}

// se utiliza al cambiar plantilla en el módulo de contenidos; cambia un gráfico al vuelo por otro
function cambiar_icono_plantilla(ruta)
{
	var img = document.getElementById("icono_plantilla");
	var i = document.getElementById("idplantilla").value;

	img.src = ruta + "imagenes/iconos_plantillas/icono" + i + ".gif";
}

/* ************** CALENDARIO  ************** */
Date.prototype.compararFechas = function(_fecha_inicio, _fecha_final) {
	var diff_dia, diff_mes, diff_anno;

   _fecha_inicio = _fecha_inicio.split("-");
   _fecha_final = _fecha_final.split("-");


	diff_anno = parseInt( _fecha_final[0] ) - parseInt(_fecha_inicio[0] );
	diff_mes = parseInt(_fecha_final[1] ) - parseInt(_fecha_inicio[1] );
	diff_dia = parseInt(_fecha_final[2] ) - parseInt(_fecha_inicio[2] );
//  alert( "DIFF_ANNO: " + diff_anno );
// alert( "DIFF_MES: " + diff_mes );
// alert( "DIFF_DIA: " + diff_dia );

	if(  diff_anno == 0  && diff_mes == 0 && diff_dia == 0 )
			return 0;
	else if ( ( diff_anno  > 0 ) || ( diff_anno  ==  0  && diff_mes > 0 ) || ( diff_anno  ==  0  && diff_mes == 0 && diff_dia > 0 ) )
			return 1;
	else
			return -1;

}

function fecha_hoy() {
	var fecha_actual = new Date()
   var dia_mes = fecha_actual.getDate()		//dia del mes
   var mes = fecha_actual.getMonth() + 1		//mes del año
   var anio = fecha_actual.getYear()		//año

	if (anio < 100)
      anio = '19' + anio
   else if ( ( anio > 100 ) && ( anio < 999 ) ) {
      var cadena_anio = new String(anio)
      anio = '20' + cadena_anio.substring(1,3)
   }

   if (mes < 10)
      mes = '0' + mes

   if (dia_mes < 10)
      dia_mes = '0' + dia_mes

	return anio+"-"+mes+"-"+dia_mes;
}

/* ************ Temporadas ***************** */

var la_fecha_final;
var la_prim_fecha;
// función para poner el día del calendario.
// Adicionalmente, pone la fecha completa
function poner_dia_desde(dia, dia_normal)
{
	var fecha = new Date()

	diferencia = fecha.compararFechas(fecha_hoy() , dia_normal );

	if ( diferencia >= 0) {
		window.opener.document.getElementById('fecha_inicio').value = dia;
		window.opener.document.getElementById('fecha_desde').value = dia_normal;
		window.opener.document.getElementById('fecha_final').value = "";
		window.opener.document.getElementById('fecha_hasta').value = "";
	}else {
		alert( "Procure escoger una fecha a partir del día de hoy");

	}

	window.close();
}

// función para poner el día del calendario.
// Adicionalmente, pone la fecha completa
function poner_dia_hasta(dia, dia_normal)
{
	var fecha = new Date();
	var diferencia;

	diferencia = fecha.compararFechas(window.opener.document.getElementById('fecha_desde').value, dia_normal );

	if(  diferencia < 0 ) {
  		alert("Procure que la fecha de finalización sea más alta que la de inicio");
		window.opener.document.getElementById('fecha_final').value = "";
		window.opener.document.getElementById('fecha_hasta').value = "";

	} else {

		diferencia = fecha.compararFechas(window.opener.document.getElementById('fecha_desde').value, la_fecha_final  );

 		diferencia2 = fecha.compararFechas(dia_normal, la_fecha_final  );

		if ( diferencia > 0  &&  diferencia2 <= 0  ) {
				alert("Imposible.\n Posible problema de solapamiento de temporadas");
				window.opener.document.getElementById('fecha_final').value = "";
				window.opener.document.getElementById('fecha_hasta').value = "";
		} else {
				window.opener.document.getElementById('fecha_final').value = dia;
				window.opener.document.getElementById('fecha_hasta').value = dia_normal;
				window.close();
		}

	}
}

// popup para abrir el calendario
function calendario_popup_desde(ruta_base)
{
	var vent_top = (screen.availHeight - 220) / 2;
	var vent_left =  (screen.availWidth - 230) / 2;
	var f = "width=230, height=220, top = "+vent_top+", left = "+vent_left;
	//var f = "width=500, height=500";

	nueva = window.open(ruta_base + "admin/temporadas/mostrar_calendario.php?desde=1", "calendario", f);
	nueva.focus();
}

function calendario_popup_hasta(ruta_base)
{
	var vent_top = (screen.availHeight - 220) / 2;
	var vent_left =  (screen.availWidth - 230) / 2;
	var f = "width=230, height=220, top="+vent_top+", left="+vent_left;
	var inicio;

	//var f = "width=500, height=500";

	inicio = window.document.getElementById('fecha_desde').value;

// 	alert(inicio);

	var nueva = window.open(ruta_base + "admin/temporadas/mostrar_calendario.php?hasta=1&desde="+inicio, "calendario", f);
	nueva.focus();
}

/** RESERVAS PARTE PUBLICA **/
// popup para abrir el calendario
var reservas;
var res_desde;
function calendario_reservas_popup_desde(ruta_base)
{
	var vent_top = (screen.availHeight - 160) / 2;
	var vent_left =  (screen.availWidth - 160) / 2;
	var f = "width=160, height=160, top="+vent_top+", left="+vent_left;
	//var f = "width=500, height=500";
	reservas = 1;
	
	window.open(ruta_base + "publicos/reservas/mostrar_calendario.php?desde=1", "calendario", f);
	nueva.focus();
}

function calendario_reservas_popup_hasta(ruta_base)
{
	var vent_top = (screen.availHeight - 160) / 2;
	var vent_left =  (screen.availWidth - 160) / 2;
	var f = "width=160, height=160, top="+vent_top+", left="+vent_left;
	var inicio;

	//var f = "width=500, height=500";

	inicio = window.document.getElementById('fecha_desde').value;

// 	alert(inicio);

	var nueva = window.open(ruta_base + "publicos/reservas/mostrar_calendario.php?hasta=1&desde="+inicio, "calendario", f);
	nueva.focus();
}


/***** cosas con las fechas *****/
function rellenaAnyos(numero_annos)
{
	cadena = "";

	var fecha		= new Date();
	var anno_actual	= fecha.getYear();

	if( anno_actual < 2000 )
		anno_actual += 1900;

	for( i = 0; i < numero_annos; i++ )
	{
		cadena += "<option value='" + (anno_actual + i) + "'>";
		cadena += (anno_actual + i);
		cadena += "</option>";
	}
	return cadena;
}
