//fixme: Cuidado con las constantes que estan definidas en buscador.php y se utilizan aqui,

var gFinder = new Finder();
var gOAVisible = false;

function Finder() {
	var z = this;
	z.user = 'anonymous';
	z.country = 0;
	z.city = '';
	
	var d1 = new Date();
	d1.setDate(d1.getDate()+2);
	z.checkin = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate());
	d1.setDate(d1.getDate()+1);
	z.checkout = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate());
	
	z.rooms = 1;
	z.hotel = '';
	z.category = 0;
	z.room = new Object();
	for (var i = 1; i <= MAX_ROOMS; ++i) {
		z.room[i] =  new Object();
		z.room[i].adults = MIN_ADULTS;
		z.room[i].children = 0;
		z.room[i].child = new Object();
		for (var j = 1; j <= MAX_CHILDREN; ++j) {
			z.room[i].child[j] = 0;
		}
	}
}

Finder.prototype.load = function(user) {
	var z = this;
	var data = getCookie(user);
	var room, info, tmp, valid, stamp;
	
	z.user = escape(user);
	
	if ((null != data) && ('' != data)) {
		info = data.split('|');
		
		if (7 > info.length) {
			return false;
		}
		
		z.country = info[0];
		z.city = info[1];
		
		valid = new Date();
		valid = new Date(valid.getFullYear(), valid.getMonth(), valid.getDate()+2);
		stamp = parseInt(info[2]);
		if (!isNaN(stamp) && (0 < stamp)) {
			tmp = new Date(stamp);
			if (valid > tmp) {
				tmp = new Date(valid.getTime());
			}
			z.checkin = tmp;
		}
		
		valid.setDate(valid.getDate()+1);
		stamp = parseInt(info[3]);
		if (!isNaN(stamp) && (0 < stamp)) {
			tmp = new Date(parseInt(info[3]));
			if (valid > tmp) {
				tmp = new Date(valid.getTime());
			}
			z.checkout = tmp;
		}
		
		if (!isNaN(parseInt(info[4]))) {
			z.rooms = parseInt(info[4]);
		}
		
		z.hotel = info[5];
		
		if (isNaN(parseInt(info[6]))) {
			z.category = 0;
		} else {
			z.category = info[6];
		}
		
		for (var i = 1; i <= MAX_ROOMS; ++i) {
			if ('undefined' != typeof(info[i+6])) {
				room = info[i+6].split('*');
				
				if ('undefined' != typeof(room[0])) {
					if (isNaN(parseInt(room[0]))) {
						z.room[i].adults = MIN_ADULTS;
					} else {
						z.room[i].adults = parseInt(room[0]);
					}
				}
				
				if ('undefined' != typeof(room[1])) {
					if (isNaN(parseInt(room[1]))) {
						z.room[i].children = 0;
					} else {
						z.room[i].children = parseInt(room[1]);
					}
				}
				
				if ('undefined' != typeof(room[2])) {
					tmp = room[2].split('-');
					for (var j = 1; j <= MAX_CHILDREN; ++j) {
						if ('undefined' != typeof(tmp[j-1])) {
							if (isNaN(parseInt(tmp[j-1]))) {
								z.room[i].child[j] = 0;
							} else {
								z.room[i].child[j] = parseInt(tmp[j-1]);
							}
						}
					}
				}
			}
		}
		return true;
	}
	return false;
}

Finder.prototype.save = function() {
	var z = this;
	var data = '';
	var room;
	var child;
	var tmp1 = '';
	var tmp2 = '';
	
	data = z.country + '|';
	data += z.city + '|';
	data += z.checkin.getTime() + '|';
	data += z.checkout.getTime() + '|';
	data += z.rooms + '|';
	data += z.hotel + '|';
	data += z.category + '|';
	
	for (var i = 1; i <= MAX_ROOMS; ++i) {
		tmp1 = '';
		tmp2 = '';
		room = z.room[i];
		tmp1 = room.adults + '*' + room.children + '*';
		for (var j = 1; j <= MAX_CHILDREN; ++j) {
			tmp2 += room.child[j];
			if (j < MAX_CHILDREN) {
				tmp2 += '-';
			}
		}
		tmp1 += tmp2;
		data += tmp1;
		if (i < MAX_ROOMS) {
			data += '|';
		}
	}
	
	deleteCookie(z.user);
	setCookie(z.user, data, 24*60*60*1000);  // duracion de la cookie: 1 dia
}

Finder.prototype.setForm = function(pfix) {
	var z = this;
	var node;
	
	node = document.getElementById('pais'+pfix);
	if (node) {
		node.value = z.country;
	}
	
	node = document.getElementById('ciudad'+pfix);
	if (node) {
		node.value = z.city;
	}
	
	node = document.getElementById('checkin'+pfix);
	if (node) {
		var d = z.checkin;
		node.value = d.getFullYear() + '-';
		node.value += (9 > d.getMonth()) ? '0'+(d.getMonth()+1) : d.getMonth()+1;
		node.value += '-';
		node.value += (10 > d.getDate()) ? '0'+(d.getDate()) : d.getDate();
	}
	
	node = document.getElementById('checkout'+pfix);
	if (node) {
		var d = z.checkout;
		node.value = d.getFullYear() + '-';
		node.value += (9 > d.getMonth()) ? '0'+(d.getMonth()+1) : d.getMonth()+1;
		node.value += '-';
		node.value += (10 > d.getDate()) ? '0'+(d.getDate()) : d.getDate();
	}
	
	node = document.getElementById('rooms'+pfix);
	if (node) {
		node.value = z.rooms;
	}
	
	node = document.getElementById('hotel'+pfix);
	if (node) {
		node.value = z.hotel;
	}
	
	node = document.getElementById('categoria'+pfix);
	if (node) {
		node.value = z.category;
	}
	
	for (var i = 1; i <= MAX_ROOMS; ++i) {
		node = document.getElementById('rooms'+pfix+'[' + i + '][adults]');
		node.value = z.room[i].adults;
		node = document.getElementById('rooms'+pfix+'[' + i + '][children]');
		node.value = z.room[i].children;
		for (var j = 1; j <= MAX_CHILDREN; ++j) {
			node = document.getElementById('rooms'+pfix+'[' + i + '][child][' + j + ']');
			node.value = z.room[i].child[j];
		}
	}
}

Finder.prototype.toGETString = function() {
	var z = this;
	var str = '';
	
	str  = '&country=' + z.country;
	str += '&city=' + z.city;
	str += '&checkin=' + z.checkin.getFullYear() + '-' + (z.checkin.getMonth()+1) + '-' + z.checkin.getDate();
	str += '&checkout=' + z.checkout.getFullYear() + '-' + (z.checkout.getMonth()+1) + '-' + z.checkout.getDate();
	
	if (isNaN(parseInt(z.rooms))) {
		z.rooms = 1;
	}
	str += '&rooms=' + z.rooms;
	
	// adultos y niņos ...
	for (var i = 1; i <= z.rooms; ++i) {
		str += '&r['+i+'][a]=' + z.room[i].adults;
		str += '&r['+i+'][n]=' + z.room[i].children;
		
		for (var j = 1; j <= z.room[i].children; ++j) {
			str += '&r['+i+'][c]['+j+']=' + z.room[i].child[j];
		}
	}
	
	str += '&category=' + z.category;
	str += '&hotel=' + z.hotel;
	
	return str;
}

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

function actRooms(node, varObj, msg, pfix) {
	//var rooms = document.getElementById("rooms").value;
	var rooms = node.value;
	var i;
	var room;
	
	if (!isNaN(parseInt(rooms))) {
		varObj.rooms = parseInt(rooms);
	}
	
	if (rooms == (MAX_ROOMS+1)) {
		alert(msg);
	} else {
		for (i = 1; i <= rooms; ++i) {
			room = document.getElementById('room_'+i+pfix);
			var nombre = 'rooms'+pfix+'['+i+'][children]';
			var selector = document.getElementById(nombre);
			actChildren(varObj, i, selector.value, pfix);
			show(room);
		}
		
		for (; i <= MAX_ROOMS; ++i) {
			room = document.getElementById('room_'+i+pfix);
			hide(room);
		}
	}
}

function actAdults(varObj, room, adults) {
	varObj.room[room].adults = adults;
}

function actChildren(varObj, room, children, pfix) {
	var i;
	var child;
	
	varObj.room[room].children = children;
	
	if (0 == children) {
		for (i = 1; i <= MAX_CHILDREN; ++i) {
			child = document.getElementById('room_'+room+'_child_'+i+pfix);
			hide(child);
		}
	} else {
		for (i = 1; i <= children; ++i) {
			child = document.getElementById('room_'+room+'_child_'+i+pfix);
			show(child);
		}
		
		for (; i <= MAX_CHILDREN; ++i) {
			child = document.getElementById('room_'+room+'_child_'+i+pfix);
			hide(child);
		}
	}
}

function actAgeChild(varObj, room, child, age) {
	varObj.room[room].child[child] = age;
}

function actCategory(varObj, categoria) {
	varObj.category = categoria;
}

function actPais(varObj, pais) {
	varObj.pais = pais;
}

function search(varObj, msgErrorDates, msgErrorCity, saveFinder, pfix) {
	var ciudad = document.getElementById('ciudad'+pfix);
	var hotel = document.getElementById('hotel'+pfix);
	
	if (ciudad) {
		varObj.city = ciudad.value;
	}
	
	if (hotel) {
		varObj.hotel = hotel.value;
	}
	
	if (0 >= (varObj.checkout - varObj.checkin)) {
		alert(msgErrorDates);
	} else if ('' == varObj.city) {
		if (ciudad) {
			ciudad.focus();
		}
		alert(msgErrorCity);
	} else {
		if (saveFinder) {
			varObj.save();
		}
		window.location.href = 'index.php?action=hoteles' + varObj.toGETString();
	}
}

//*******************************************************************************************
// Estas funciones se encargan de mostrar/ocultar la parte de las opciones adicionales

function display_oa() {
	var oa;
	oa = document.getElementById('oat');
	if (gOAVisible) {
		hide(oa);
	} else {
		show(oa);
	}
	gOAVisible = !gOAVisible;
}

function show(element) {
	if (element) {
		element.style.display = 'block';
		element.style.visibility = 'visible';
	}
}

function hide(element) {
	if (element) {
		element.style.display = 'none';
		element.style.visibility = 'hidden';
	}
}

//*******************************************************************************************
// estas funciones son utilizadas por el calendario, y se encargan de que se seleccione una fecha valida

function verificar(node, varObj, validDateMsg)
{
	//var checkin = document.getElementById('checkin').value;
	var checkin = node.value;
	var fecha = checkin.split("-");
	
	var seleccionado = new Date(Date.parse(fecha[1]+'/'+fecha[2]+'/'+fecha[0]));
	var valido = new Date();
	valido = new Date(valido.getFullYear(), valido.getMonth(), valido.getDate()+2);
	//alert('date: ' + fecha + '\nanio: ' + parseInt(fecha[0]) + '\nmes: ' + (parseInt(fecha[1])-1) + '\nday: ' + parseInt(fecha[2]) + '\nseleccionado:' + seleccionado + '\nvalido: ' + valido + '\ndiff: ' + (valido - seleccionado));
	
	if (0 < (valido - seleccionado)) {
		var y = valido.getFullYear();
		var m = valido.getMonth()+1;
		m = (10 > m) ? '0'+m : m;
		var d = valido.getDate();
		d = (10 > d) ? '0'+d : d;
		var msg = validDateMsg + ' ' + y + '-' + m + '-' + d;
		alert(msg);
	} else {
		varObj.checkin = seleccionado;
		calendar.hide();
	}
}

function verificar2(node, varObj, validDateMsg)
{
	//var checkout = document.getElementById('checkout').value;
	var checkout = node.value;
	var fecha = checkout.split("-");
	
	var seleccionado = new Date(Date.parse(fecha[1]+'/'+fecha[2]+'/'+fecha[0]));
	var valido = new Date();
	valido = new Date(valido.getFullYear(), valido.getMonth(), valido.getDate()+3);
	//alert('date: ' + fecha + '\nanio: ' + parseInt(fecha[0]) + '\nmes: ' + (parseInt(fecha[1])-1) + '\nday: ' + parseInt(fecha[2]) + '\nseleccionado:' + seleccionado + '\nvalido: ' + valido + '\ndiff: ' + (valido - seleccionado));
	
	if (0 < (valido - seleccionado)) {
		var y = valido.getFullYear();
		var m = valido.getMonth()+1;
		m = (10 > m) ? '0'+m : m;
		var d = valido.getDate();
		d = (10 > d) ? '0'+d : d;
		var msg = validDateMsg + ' ' + y + '-' + m + '-' + d;
		alert(msg);
	} else {
		varObj.checkout = seleccionado;
		calendar.hide();
	}
}
