function MapState()
{
		var zoom = 10;
		var center = new GLatLng(0, 0);		
		var that = this;

 	this.setFrom = function (d3r_map)
 	{
 		gmap = d3r_map.getMap();
 		
 		try
 		{
			zoom = gmap.getZoom();
			center = gmap.getCenter();
		}
 		catch(err)
 		{
// 			console.log(err);
 		}
	}

	this.setTo = function (d3r_map) {
//		console.log('setTo func');
//		console.log(zoom);
		d3r_map.zoom = zoom;
		d3r_map.lat = center.lat();
		d3r_map.lng = center.lng();
	}
	
	this.getZoom = function() {
		return zoom;
	}
	this.getCenter = function() {
		return center;
	}
}

var selfCatering = false;
var map_visible = false;
var currentPage = 1;
var newBooking = false;
var sort = false;
var addFilter = false;
var remFilter = false;
var timer = false;
var mapStatus = new MapState();
var loadingMessage = 0;


function late_page(pageNum)
{
	currentPage = pageNum;
	search_update();
	return false;
}

function loading() 
{
	hide_map();
	$('new-search-little-loader').show();
	timer = setTimeout('big_loading()', 600);
	var small = $($('search_indicator'));
	
}

function big_loading() 
{
	$('new-search-little-loader').hide();
	$('new-search-results').hide();
	$('new-search-loader').show();
	showNextLoadingMessage();
}


function showNextLoadingMessage()
{
	var messages = $$('#new-search-loader p[id^=lm]'); 
	var next = (loadingMessage + 1) % (messages.size() +1) ;
	var id = "#lm_" + next;
	
	$(messages).each(function(e){
		if($(e).match(id))
		{
			$(e).show();
			loadtimeout = setTimeout(function() {showTravelTeamLoadingMessage(e);}, 4000);
		}
		else {
			if((e).visible())
			{
				$(e).hide();
			}
		}
	});
	loadingMessage = next;
}

function showTravelTeamLoadingMessage(e) 
{
	$(e).hide();
	$('lm_tt').show();
}



function loaded() 
{
	
	$('new-search-little-loader').hide();
	if (false != timer) {
		clearTimeout(timer);
		timer = false;
		$('new-search-loader').hide();
		$('new-search-results').show();
	}
	else {
		
	}
	convert_currencies(currentCurrency);
	add_rollovers();
	if (map_visible) 
	{
		show_map();
		
	}
}


function add_rollovers() {
	$$(".popup").each(function(s) {
		s.observe('click', function() {
			this.down("span").show();
		});
		s.observe('mouseover', function() {
			this.setStyle({
				cursor:'pointer'
			});
		});
		s.down("span").observe('mouseout', function() {
			this.hide();
		});
	});
}

function hotels_tab() {
	selfCatering = false;
	map_visible = false;
	$('hotels_tab').addClassName('active');
	$('self_catering_tab').removeClassName('active');
	hide_map_tab();
	currentPage = 1;
	search_update();
	return false;
}


function map_tab() {
	
	selfCatering = false;
	map_visible = true;
	$('map_tab').addClassName('active');
	$('self_catering_tab').removeClassName('active');
	$('hotels_tab').removeClassName('active');
	currentPage = 1;
	show_map();
	return false;
}

function self_catering_tab() {
	selfCatering = true;
	map_visible = false;
	$('self_catering_tab').addClassName('active');
	$('hotels_tab').removeClassName('active');
	hide_map_tab();
	currentPage = 1;
	search_update();
	return false;
}

function update_booking() {
	newBooking = true;
	currentPage = 1;
	search_update();
	return false;
}

function search_update()
{
	loading();
		
	var pars = 'ajax=true&page=' + currentPage;
	if (selfCatering) pars += '&self-catering=true';
	if (newBooking) pars += '&date=' + $('date_from').value + '&nights=' + $('nights_select').value + '&adults=' + $('adults').value + '&country=' + $('country_hidden').value + '&location=' + $('location_select').value;
	if (sort) pars += '&sort=' + sort;
	if (addFilter) pars += '&addFilter=' + addFilter;
	if (remFilter) pars += '&remFilter=' + remFilter;
	
	
	
	myAjax = new Ajax.Updater(
		'new-search-results', 
		hotel_search_url, 
		{
			method: 'get', 
			parameters: pars,
			onComplete: loaded
		});
	
	if (!selfCatering)
	{
		checkSelfCatering();
	}
	
}

function checkSelfCatering()
{
	
	var pars = 'ajax=true&page=' + currentPage + '&self-catering=true';
	if (newBooking) pars += '&date=' + $('date_from').value + '&nights=' + $('nights_select').value + '&adults=' + $('adults').value + '&country=' + $('country_hidden').value + '&location=' + $('location_select').value;
	if (sort) pars += '&sort=' + sort;
	if (addFilter) pars += '&addFilter=' + addFilter;
	if (remFilter) pars += '&remFilter=' + remFilter;
	
	scAjax = new Ajax.Request(
		hotel_search_url, 
		{
			method: 'get', 
			parameters: pars,
			onComplete: function(transport)
				{
					var response = transport.responseText || 'Sorry, we don\'t have any';
					if(-1 == response.indexOf('Sorry, we don\'t have any'))
					{
						$('self_catering_tab').show();
					}
					else
					{
						$('self_catering_tab').hide();
					}
				}
		});
	
}


function show_map()
{		
//	console.log('show-map');
	$('new-search-results').hide();
	$('map-wrapper').show();
	$('map').show();
	
//	console.log('Map zoom: ');
//	console.log(mapStatus.getZoom());
	
	mapStatus.setTo(searchMap);
	
	searchMap.load(searchMap.resetMarkers);
	
	searchMap.getMap().addControl(new GSmallZoomControl()); 
//	populate_quick_links();
	GEvent.addListener(searchMap.getMap(), "zoomend", closeOverlay);
	
	
//	searchMap.getMap().checkResize();
}

function hide_map_tab() 
{
	$('map_tab').removeClassName('active');
	hide_map();
}

function hide_map()
{
	mapStatus.setFrom(searchMap);
//	console.log('Map zoom: ');
//	console.log(mapStatus.getZoom());
//	$('map').hide();
	$('map-wrapper').hide();	
}

function convert_currencies(currency) 
{
	$$("span.currency-to-convert").each(function(s) {
		var converted = (s.readAttribute('rate') / currencies[s.readAttribute('currency')]) * currencies[currency];
		converted = converted.round();
		s.up().previous('dd').update(currency + ' ' + converted);
	});
}

window.onload = function() 
{
	$('country_select').focus();	
	search_update();
	$('hotels_tab').observe('click', function() {
		hotels_tab();
		return false;
	});
	$('map_tab').observe('click', function() {
		map_tab();
		return false;
	});
	$('self_catering_tab').observe('click', function() {
		self_catering_tab();
		return false;
	});
	$('left_menu_update').observe('click', function() {
		update_booking();
		// alert('hello');
		return false;
	});
	$$('#new-search-sort-by select')[0].observe('change', function() {
		sort = this.value;
		currentPage = 1;
		search_update();
	});
	$$('#new-search-currency span.currency').each(function(el) {
		el.observe('click', function(e) {
			$$('#new-search-currency span.currency').each(function(el) {
				el.removeClassName("active");
			});
			e.target.addClassName("active");
			convert_currencies(e.target.readAttribute("title"));
		});
	});
	$$('#new-search-facilities input').each(function(s) {
		s.observe('click', function() {
			if (false == this.checked) {
				remFilter = this.name;
			}
			else {
				addFilter = this.name;
			}
			currentPage = 1;
			search_update();
			remFilter = false;
			addFilter = false;
			
		})
	})


}

window.onunload = function() {
	GUnload()
}



