var map;

//functions for saving markers array
google.maps.Marker.prototype._setMap = google.maps.Marker.prototype.setMap;
google.maps.Marker.prototype.setMap = function(map, type) {
	if (map) {
		if (type=="hotel") map.markers[map.markers.length] = this;
		if (type=="search") map.search_marker = this;
	}
	this._setMap(map);
}

//adding variables to prototype
google.maps.Map.prototype.ky_mapcanvas = "";//mapcanvas name
google.maps.Map.prototype.ky_lockresults = 0;//lock results while moving on map
google.maps.Map.prototype.ky_hotel_number = 0;//defines hotel number
google.maps.Map.prototype.marker_status = 0;//flag for map status about markers: 0 clear, 1 fixed popup, 2 mouse_over popup
google.maps.Map.prototype.search_marker = new google.maps.Marker(); //search marker, which should not get cleared along with the others
google.maps.Map.prototype.markers = new Array(); //array for storing, retriving and clearing markers on map
google.maps.Map.prototype.ky_show_hotel_id = 0;//flag for checking hotel to show
google.maps.Map.prototype.block_auto_del=0;
google.maps.Map.prototype.ky_shown_hotel_id=0; // only for hotel module, avoid to show current displayed hotel in minimap
google.maps.Map.prototype.ky_mapbig_paging=1; // keeping track of the current page shown
google.maps.Map.prototype.ky_mapbig_maxpages=0; // keeping track of the current page shown
google.maps.Map.prototype.ky_city_id=0; // only for city page, stores city id for showing first its hotels
google.maps.Map.prototype.ky_attraction_id=0; // only for attraction hash system
// filters for city and attraction map
google.maps.Map.prototype.hotel_filter_category=0;
google.maps.Map.prototype.hotel_filter_price=0;
google.maps.Map.prototype.hotel_filter_stars=0;
google.maps.Map.prototype.hotel_filter_services=0;
// sort types
google.maps.Map.prototype.hotel_sort_type="1d";


google.maps.Marker.prototype.ky_hotel_id = 0;

google.maps.Map.prototype.getMarkers = function() {
	return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {
	for(var i=0; i<this.markers.length; i++){
		this.markers[i].setMap(null);
	}
	this.markers = new Array();
};

google.maps.Map.prototype.getSearchMarker = function() {
	return this.search_marker
};

google.maps.Map.prototype.clearSearchMarker = function() {
	this.search_marker.setMap(null);
	this.search_marker = new google.maps.Marker();
};

function TypesControl(controlDiv, map) {

	// box style
	controlDiv.style.width ='163px';
	controlDiv.style.height ='24px';
	controlDiv.style.backgroundImage ="url('http://www.keyou.it/img/mapcontrols/type_bg.png')";
	controlDiv.style.backgroundRepeat ='no-repeat';
	controlDiv.style.backgroundPosition ='top left';
	controlDiv.style.margin = "4px 4px 0 0";

	//road map button
	var controlUI = document.createElement('DIV');
	controlUI.id = "mapcontrol_type_roadmap";
	controlUI.style.backgroundImage ="url('http://www.keyou.it/img/mapcontrols/type_road_over.gif')";
	controlUI.innerHTML=MAP_ROADMAP_CAPTION;
	controlDiv.appendChild(controlUI);

    google.maps.event.addDomListener(controlUI, 'click', function() {
		$("#mapcontrol_type_satellite").css("background-image","");
		$("#mapcontrol_type_hybrid").css("background-image","");
		$("#mapcontrol_type_satellite").css("color","#525252");
		$("#mapcontrol_type_hybrid").css("color","#525252");
		this.style.backgroundImage ="url('http://www.keyou.it/img/mapcontrols/type_road_over.gif')";
		this.style.color = "#FFFFFF";
		map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
	});
	
	//satellite map button
	var controlUI = document.createElement('DIV');
	controlUI.id = "mapcontrol_type_satellite";
	controlUI.innerHTML=MAP_SATELLITE_CAPTION;
	controlDiv.appendChild(controlUI);

    google.maps.event.addDomListener(controlUI, 'click', function() {
		$("#mapcontrol_type_roadmap").css("background-image","");
		$("#mapcontrol_type_hybrid").css("background-image","");
		$("#mapcontrol_type_hybrid").css("color","#525252");
		$("#mapcontrol_type_roadmap").css("color","#525252");
		this.style.backgroundImage ="url('http://www.keyou.it/img/mapcontrols/type_satellite_over.gif')";
		this.style.color = "#FFFFFF";
		map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
	});
	
	//hybrid map button
	var controlUI = document.createElement('DIV');
	controlUI.id = "mapcontrol_type_hybrid";
	controlUI.innerHTML=MAP_HYBRID_CAPTION;
	controlDiv.appendChild(controlUI);

    google.maps.event.addDomListener(controlUI, 'click', function() {
		$("#mapcontrol_type_satellite").css("background-image","");
		$("#mapcontrol_type_roadmap").css("background-image","");
		$("#mapcontrol_type_satellite").css("color","#525252");
		$("#mapcontrol_type_roadmap").css("color","#525252");
		this.style.backgroundImage ="url('http://www.keyou.it/img/mapcontrols/type_hybrid_over.gif')";
		this.style.color = "#FFFFFF";
		map.setMapTypeId(google.maps.MapTypeId.HYBRID);
	});
}

function ZoomBar(controlDiv,map) {
	// box style
	controlDiv.style.width ='25px';
	controlDiv.style.height ='97px';
	controlDiv.style.backgroundImage ="url('http://www.keyou.it/img/mapcontrols/zoom_bg.png')";
	controlDiv.style.backgroundRepeat ='no-repeat';
	controlDiv.style.backgroundPosition ='top left';
	controlDiv.style.margin = "4px 0 0 4px";

	//plus button
	var controlUI = document.createElement('DIV');
	controlUI.id = "mapcontrol_zoom_more";
	controlDiv.appendChild(controlUI);

    google.maps.event.addDomListener(controlUI, 'click', function() {
		var current_zoom=map.getZoom();
		if(current_zoom<19) map.setZoom(current_zoom+1);
	});
	
	//zoom levels buttons
	for (i=8;i>0;i--) {
		var current_zoom=map.getZoom();
		var new_zoomid=i-1;
		
		var controlUI = document.createElement('DIV');
		controlUI.id = "mapcontrol_zoom_"+i;
		controlUI.className = "mapcontrol_zoom_button";
		var marginvalue=24 + ((8-i)*6);
		var margin = new String(marginvalue+"px 0 0 6px");
		controlUI.style.margin=margin;
		//alert(current_zoom+","+MAP_ZOOM_BARLEVEL[new_zoomid]);
		if (current_zoom<MAP_ZOOM_BARLEVEL[new_zoomid]) controlUI.style.backgroundImage="url('http://www.keyou.it/img/mapcontrols/zoom_"+i+".gif')";
		else controlUI.style.backgroundImage="url('http://www.keyou.it/img/mapcontrols/zoom_"+i+"_over.gif')";
		controlDiv.appendChild(controlUI);

		google.maps.event.addDomListener(controlUI, 'click', function() {
			var current_zoom=map.getZoom();
			var id=new String(this.id);
			var bar_number= id.substring(id.length - 1,id.length);
			var new_zoomid=bar_number-1;
			map.setZoom(MAP_ZOOM_BARLEVEL[new_zoomid]);
		});
		
		google.maps.event.addDomListener(controlUI, 'mouseover', function() {
			var id=new String(this.id);
			var bar_number= id.substring(id.length - 1,id.length);
			for (i=1;i<=bar_number;i++) {
				if ($("#mapcontrol_zoom_"+i).css("background-image")!="url('http://www.keyou.it/img/mapcontrols/zoom_"+i+"_over.gif')")
					$("#mapcontrol_zoom_"+i).css("background-image","url('http://www.keyou.it/img/mapcontrols/zoom_"+i+"_over.gif')");
			}
		});
		
		google.maps.event.addDomListener(controlUI, 'mouseout', function() {
			var current_zoom=map.getZoom();
			for (i=1;i<=8;i++) {
				var new_zoomid=i-1;
				if (current_zoom<MAP_ZOOM_BARLEVEL[new_zoomid])
					$("#mapcontrol_zoom_"+i).css("background-image","url('http://www.keyou.it/img/mapcontrols/zoom_"+i+".gif')");
			}
		});
	}
	
	//minus button
	var controlUI = document.createElement('DIV');
	controlUI.id = "mapcontrol_zoom_less";
	controlDiv.appendChild(controlUI);

    google.maps.event.addDomListener(controlUI, 'click', function() {
		var current_zoom=map.getZoom();
		if(current_zoom>5) map.setZoom(current_zoom-1);
	});
}

function PagingBar(controlDiv, map){
	// box style
	controlDiv.style.width ='208px';
	controlDiv.style.height ='32px';
	controlDiv.style.backgroundImage ="url('http://www.keyou.it/img/mapcontrols/paging_bg.png')";
	controlDiv.style.backgroundRepeat ='no-repeat';
	controlDiv.style.backgroundPosition ='top left';
	controlDiv.style.margin = "3px 0 0 0";
	
	//prev button
	var controlUI = document.createElement('DIV');
	controlUI.id = "mapcontrol_paging_prev";
	controlUI.innerHTML = MAP_PAGING_PREV;
	controlDiv.appendChild(controlUI);

    google.maps.event.addDomListener(controlUI, 'click', function() {
		if (map.ky_mapbig_paging>1) {
			map.ky_mapbig_paging=map.ky_mapbig_paging-1;
			map.clearMarkers();
			switch(map.ky_mapcanvas){
				case "homepage_map_canvas": markers_map(map.getCenter().lat(),map.getCenter().lng(),map.ky_mapbig_paging,0);break;
				case "city_mapbig_canvas": city_markers_map(map.getCenter().lat(),map.getCenter().lng(),map.ky_mapbig_paging,0);break;
			}
		}
	});
	
	//next button
	var controlUI = document.createElement('DIV');
	controlUI.id = "mapcontrol_paging_next";
	controlUI.innerHTML = MAP_PAGING_NEXT;
	controlDiv.appendChild(controlUI);

    google.maps.event.addDomListener(controlUI, 'click', function() {
		if (map.ky_mapbig_paging+1 <= map.ky_mapbig_maxpages){
			map.ky_mapbig_paging=map.ky_mapbig_paging+1;
			map.clearMarkers();
			switch(map.ky_mapcanvas){
				case "homepage_map_canvas": markers_map(map.getCenter().lat(),map.getCenter().lng(),map.ky_mapbig_paging,0);break;
				case "city_mapbig_canvas": city_markers_map(map.getCenter().lat(),map.getCenter().lng(),map.ky_mapbig_paging,0);break;
			}
		}
	});
}

function ini_map(page,latitude,longitude,zoom_p,hotel_number,shown_hotel_id) {
	//creates the map
	var latlng = new google.maps.LatLng(latitude, longitude);

	var myOptions = {
		zoom: zoom_p,
		center: latlng,
		disableDefaultUI: true,
		scrollwheel: false,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		streetViewControl: true
	};
	
	if (page=="homepage"){
		var mapcanvas="homepage_map_canvas";
	}
	
	if (page=="city_small"){		
		var mapcanvas="city_map_canvas";
	}
	
	if (page=="city_big"){		
		var mapcanvas="city_mapbig_canvas";
	}
	
	if (page=="hotel_small"){		
		var mapcanvas="hotel_map_canvas";
	}
	
	if (page=="hotel_big"){		
		var mapcanvas="hotel_mapbig_canvas";
	}
	
	//stores filters and sort configuration
	if (map){
		var filter_category=map.hotel_filter_category;
		var filter_price=map.hotel_filter_price;
		var filter_stars=map.hotel_filter_stars;
		var filter_services=map.hotel_filter_services;
		var sort_type=map.hotel_sort_type;
	} else {
		var filter_category=0;
		var filter_price=0;
		var filter_stars=0;
		var filter_services=0;
		var sort_type="1d";
		var lockresults = 0;
	}
	
    map = new google.maps.Map(document.getElementById(mapcanvas), myOptions);
	
	//retriving filters
	map.hotel_filter_category=filter_category;
	map.hotel_filter_price=filter_price;
	map.hotel_filter_stars=filter_stars;
	map.hotel_filter_services=filter_services;
	map.hotel_sort_type=sort_type;
	
	map.ky_mapcanvas=mapcanvas;
	
	map.ky_hotel_number=hotel_number;
	
	if (page=="hotel_small" || page=="hotel_big") {
		map.ky_shown_hotel_id=shown_hotel_id;
	}
	
	//creating custom controls
		
	var TypeControlDiv = document.createElement('DIV');
	var TypeControl = new TypesControl(TypeControlDiv, map);

	TypeControlDiv.index = 1;
	map.controls[google.maps.ControlPosition.TOP_RIGHT].push(TypeControlDiv);
	
	var ZoomControlDiv = document.createElement('DIV');
	var ZoomControl = new ZoomBar(ZoomControlDiv, map);

	ZoomControlDiv.index = 2;
	map.controls[google.maps.ControlPosition.TOP_LEFT].push(ZoomControlDiv);
	
	if (page=="homepage" || page=="city_big") {
		var PagingControlDiv = document.createElement('DIV');
		var PagingControl = new PagingBar(PagingControlDiv, map);

		PagingControlDiv.index = 3;
		map.controls[google.maps.ControlPosition.TOP].push(PagingControlDiv);
	}

	//function for zoom changing
	google.maps.event.addListener(map, 'zoom_changed', function() {
		map.clearMarkers();
		var newcenter=map.getCenter();
		var newlatitude=newcenter.lat();
		var newlongitude=newcenter.lng();
		if (map.ky_mapcanvas=="homepage_map_canvas"){
			setTimeout("markers_map("+newlatitude+","+newlongitude+",1,0)", 100);
		}
		
		if (map.ky_mapcanvas=="city_map_canvas" || map.ky_mapcanvas =="city_mapbig_canvas"){		
			//setTimeout("city_markers_map("+newlatitude+","+newlongitude+",1,0)", 100);
			if (set_hash_executing==0) update_map_hash();
		}
		
		if (map.ky_mapcanvas=="hotel_map_canvas" || map.ky_mapcanvas =="hotel_mapbig_canvas"){		
			setTimeout("hotel_markers_map("+newlatitude+","+newlongitude+",0)", 100);
		}
		var current_zoom=map.getZoom();
		for (i=1;i<=8;i++) {
			var new_zoomid=i-1;
			if (current_zoom<MAP_ZOOM_BARLEVEL[new_zoomid])
				$("#mapcontrol_zoom_"+i).css("background-image","url('http://www.keyou.it/img/mapcontrols/zoom_"+i+".gif')");
			else
				$("#mapcontrol_zoom_"+i).css("background-image","url('http://www.keyou.it/img/mapcontrols/zoom_"+i+"_over.gif')");
		}
	});
	
	//function for manual dragging of the map
	google.maps.event.addListener(map, 'dragend', function() {
		if (map.ky_lockresults==0) {
			
			map.clearMarkers();
			var newcenter=map.getCenter();
			var newlatitude=newcenter.lat();
			var newlongitude=newcenter.lng();
			
			//removes existing popup div
			remove_popup_div("homepage_map_popupdiv");
			remove_popup_div("homepage_map_popupdiv_mouseclick");
			
			if (map.ky_mapcanvas=="homepage_map_canvas"){
				setTimeout("markers_map("+newlatitude+","+newlongitude+",1,0)", 100);
			}
			
			if (map.ky_mapcanvas=="city_map_canvas" || map.ky_mapcanvas =="city_mapbig_canvas"){		
				//setTimeout("city_markers_map("+newlatitude+","+newlongitude+",1,0)", 100);
				update_map_hash();
			}
			
			if (map.ky_mapcanvas=="hotel_map_canvas" || map.ky_mapcanvas =="hotel_mapbig_canvas"){		
				setTimeout("hotel_markers_map("+newlatitude+","+newlongitude+",0)", 100);
			}
		}
	});
	
	google.maps.event.addListener(map,'click',function() {
		//removes existing popup div
		remove_popup_div("homepage_map_popupdiv");
		remove_popup_div("homepage_map_popupdiv_mouseclick");
	});
}

function markers_map(latitude,longitude,page,first_time){
	var bounds = map.getBounds();
	
	if (typeof(bounds)=="undefined") {
		setTimeout('markers_map(' + latitude + ',' + longitude + ',' + page + ',' + first_time + ')', 100);
	} else {
		
		var ajaxRequest=GetXMLHttpRequest();
		var ajaxHotelbox=GetXMLHttpRequest();
		var ajaxPageCheck=GetXMLHttpRequest();
		
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		var lngSpan = (northEast.lng() - southWest.lng())/2;
		var latSpan = (northEast.lat() - southWest.lat())/2;
		
		map.ky_mapbig_paging=page;
		//checks if the paging is not over the max allowed
		var queryString = "?latitude=" + latitude + "&longitude=" + longitude + "&number=" + map.ky_hotel_number + "&latspan=" + latSpan + "&lngspan=" + lngSpan;
		//alert(queryString);
		ajaxPageCheck.open("GET", HTTP_URL_SITE + "inc/ajax_homepage_maxpage.php" + queryString, true);
		
		ajaxPageCheck.onreadystatechange = function(){
			if(ajaxPageCheck.readyState == 4){	
				var pagecheck = ajaxPageCheck.responseText;
				//alert(pagecheck);
				if (pagecheck==0) pagecheck==1;
				map.ky_mapbig_maxpages=pagecheck;
			}
		};
			
		ajaxPageCheck.send(null);
		
		//retrivies nearest hotels
		var queryString = "?latitude=" + latitude + "&longitude=" + longitude + "&number=" + map.ky_hotel_number + "&latspan=" + latSpan + "&lngspan=" + lngSpan + "&page=" + page;
		//alert(queryString);
		ajaxRequest.open("GET", HTTP_URL_SITE + "inc/ajax_hotels_on_map.php" + queryString, true);
		//alert(HTTP_URL_SITE + "inc/ajax_hotels_on_map.php" + queryString);
		ajaxRequest.onreadystatechange = function(){
			if(ajaxRequest.readyState == 4){		
				/* show sql for debugging 
				var xmlDoc = ajaxRequest.responseText;
				alert(xmlDoc);*/
				
				var xmlDoc = ajaxRequest.responseXML;
				var hoteldata = xmlDoc.getElementsByTagName("hotel");
				for (var i=0 ; i<hoteldata.length ; i++){
					var hotel = hoteldata[i];
					var hotel_id = hotel.getElementsByTagName("id")[0].firstChild.nodeValue;
					var hotel_name = hotel.getElementsByTagName("name")[0].firstChild.nodeValue;
					var hotel_latitude = hotel.getElementsByTagName("latitude")[0].firstChild.nodeValue;
					var hotel_longitude = hotel.getElementsByTagName("longitude")[0].firstChild.nodeValue;
					
					var hotel_latlng = new google.maps.LatLng(hotel_latitude, hotel_longitude);

					var marker = new google.maps.Marker({
						position: hotel_latlng, 
						map: map, 
						icon: "http://www.keyou.it/img/mapicon_default.png",
						shadow: "http://www.keyou.it/img/mapicon_shadowsmall.png",
						clickable: true
					});
					
					marker.ky_hotel_id = hotel_id;
					
					marker.setMap(map,"hotel");
					
					google.maps.event.addListener(marker, 'click', function() {					
						map.marker_status=1;
						if (this.ky_hotel_id!=map.ky_show_hotel_id || $("#homepage_map_popupdiv").length <= 0) {
							$("#homepage_map_popupdiv").removeShadow();
							$("#homepage_map_popupdiv").remove();
							x_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['x'];
							y_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['y'];	
							create_popup_div("homepage_map_popupdiv",this.ky_hotel_id,"ajax_map_popupdiv",x_pos,y_pos);
							map.block_auto_del=1;
						}
					});
					
					google.maps.event.addListener(marker, 'mouseover', function() {						
						if (map.marker_status!=1) {
							map.ky_show_hotel_id=this.ky_hotel_id;
							x_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['x'];
							y_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['y'];
							setTimeout("marker_over_check(" + this.ky_hotel_id + ","+ x_pos + ", "+ y_pos +")",600);
						}					
						//this.setIcon('http://www.keyou.it/img/mapicon_default_over.png');
					});
					
					google.maps.event.addListener(marker, 'mouseout', function() {
						map.ky_show_hotel_id=0;
						map.block_auto_del=0;
						if (map.marker_status!=1) {							
							setTimeout('remove_popup_div("homepage_map_popupdiv")',800);
						}	
						//this.setIcon('http://www.keyou.it/img/mapicon_default.png');
					});
				} //END of [for (var i=0 ; i<hoteldata.length ; i++)]
			
			} // END of [if(ajaxRequest.readyState == 4)]			
		};

		ajaxRequest.send(null);	
	}
}

function change_map_center(latitude,longitude,zoom) {
	var latlng = new google.maps.LatLng(latitude, longitude);
	map.clearMarkers();
	if (zoom!=map.getZoom()) {
		var myOptions = {
			zoom: zoom,
			center: latlng
		}
	} else {
		var myOptions = {
			center: latlng
		}
	}
	map.setOptions(myOptions);
}

function add_map_searchmarker(latitude,longitude,name) {
	var latlng = new google.maps.LatLng(latitude, longitude);
	
	var marker = new google.maps.Marker({
		position: latlng, 
		map: map,
		icon: 'http://www.keyou.it/img/mapicon_search_result.png',
		shadow: "http://www.keyou.it/img/mapicon_shadowsmall.png",
		title: name
	});
	
	marker.setMap(map,"search");
}

function add_map_selhotelmarker(latitude,longitude,name) {
	var latlng = new google.maps.LatLng(latitude, longitude);
	
	var marker = new google.maps.Marker({
		position: latlng, 
		map: map,
		icon: 'http://www.keyou.it/img/mapicon_hotel_selected.png',
		shadow: "http://www.keyou.it/img/mapicon_shadowbig.png",
		title: name
	});
	
	marker.setMap(map,"search");
}

function create_popup_div(id,hotel_id,ajax_call,x_pos,y_pos){
	var ajaxRequest=GetXMLHttpRequest();
	var queryString = "?hotel_id=" + hotel_id;
	//alert(queryString);
	ajaxRequest.open("GET", HTTP_URL_SITE + "inc/" + ajax_call + ".php" + queryString, true);
	ajaxRequest.onreadystatechange = function(){
		if(ajaxRequest.readyState == 4){
			var box_text = ajaxRequest.responseText;
			if (map.ky_mapcanvas=="homepage_map_canvas") var mapcanvas = document.getElementById(map.ky_mapcanvas);
			if (map.ky_mapcanvas=="city_map_canvas") var mapcanvas = document.getElementById("city_map_mapbox");
			if (map.ky_mapcanvas=="city_mapbig_canvas") var mapcanvas = document.getElementById(map.ky_mapcanvas);
			if (map.ky_mapcanvas=="hotel_map_canvas") var mapcanvas = document.getElementById("hotel_map_mapbox");
			if (map.ky_mapcanvas=="hotel_mapbig_canvas") var mapcanvas = document.getElementById(map.ky_mapcanvas);
			var popupbox = document.createElement('div');
			popupbox.setAttribute('id', id);
			mapcanvas.appendChild(popupbox);
			document.getElementById(id).innerHTML=box_text;
			x=get_popup_position(x_pos,y_pos)['x'];
			y=get_popup_position(x_pos,y_pos)['y'];			
			x=x + "px";			
			y=y + "px";
			popupbox.style.marginTop = y;
			popupbox.style.marginLeft = x;
			$("#"+id).dropShadow();		
			//generates events for blocking the popup if user bring the mouse pointer on it
			$("#"+id).bind('mouseenter',function(){map.block_auto_del=1;});
			$("#"+id).bind('mouseleave',function(){map.block_auto_del=0;setTimeout('remove_popup_div("homepage_map_popupdiv")',400);});
			$("#"+id+"_dropShadow").bind('mouseenter',function(){map.block_auto_del=1;});
			$("#"+id+"_dropShadow").bind('mouseleave',function(){map.block_auto_del=0;setTimeout('remove_popup_div("homepage_map_popupdiv")',400);});
		}
	};	
	ajaxRequest.send(null);
}

//called from mouseout of a marker
function remove_popup_div(id){
	if (map.block_auto_del==0) {
		$("#"+id).removeShadow();
		$("#"+id).remove();
		map.marker_status=0;
	}
}

//called from the x button on the popup
function delete_popup_div(id){
	$("#"+id).removeShadow();
	$("#"+id).remove();
	map.marker_status=0;
}

function marker_over_check(hotel_id_show,x_pos,y_pos){
	if (map.marker_status==0) {
		if (map.ky_show_hotel_id==hotel_id_show) {
			$("#homepage_map_popupdiv").removeShadow();
			$("#homepage_map_popupdiv").remove();			
			create_popup_div("homepage_map_popupdiv",hotel_id_show,"ajax_map_popupdiv",x_pos,y_pos);
			map.marker_status=2;
			map.block_auto_del=1;
		}
	} else if (map.marker_status==2) {
		//another timed popup div active, retry the launch of the function after a delay
		setTimeout("marker_over_check(" + hotel_id_show + "," + x_pos + "," + y_pos + ")",200);
	}
}

function get_popup_position(x_orig,y_orig){
	if (map.ky_mapcanvas=="homepage_map_canvas") {
		x=(276 + x_orig) - 180;
		y=(239 + y_orig) - 180;	
		if (x<0) x=15;
		if (y<0) y=(239 + y_orig)+10;
		if (x>=269) x=259;
		if (y>=308) y=298;
	}
	
	if (map.ky_mapcanvas=="city_mapbig_canvas") {
		x=(388 + x_orig) - 180;
		y=(239 + y_orig) - 180;	
		if (x<0) x=15;
		if (y<0) y=(215 + y_orig)+10;
		if (x>=480) x=460;
		if (y>=308) y=298;
	}
	
	if (map.ky_mapcanvas=="city_map_canvas") {
		x=(195 + x_orig) - 280;
		y=(150 + y_orig) - 180;	
	}
	
	if (map.ky_mapcanvas=="hotel_mapbig_canvas") {
		x=(438 + x_orig) - 180;
		y=(217 + y_orig) - 180;	
		if (x<0) x=15;
		if (y<0) y=(217 + y_orig)+10;
		if (x>=670) x=660;
		if (y>=308) y=298;
	}
	
	if (map.ky_mapcanvas=="hotel_map_canvas") {
		x=(195 + x_orig) - 280;
		y=(150 + y_orig) - 180;	
	}
	
	return {x:x,y:y}
}

function city_markers_map(latitude,longitude,page,first_time){
	var bounds = map.getBounds();
	if (first_time!=1) {
		$('#city_loading_div_2').height($('#threecols_center').height());
		$('#city_loading_div_2').css('filter', 'alpha(opacity=60)'); //sets opacity for internet explorer bug
		$('#city_loading_div_2').fadeIn("fast");
		$('#city_loading_div_3').fadeIn("fast");
	}
	
	if (typeof(bounds)=="undefined") {
		setTimeout('city_markers_map(' + latitude + ',' + longitude + ',' + page +',' + first_time +')', 100);
	} else {
	
		var ajaxRequest=GetXMLHttpRequest();
		var ajaxHotelbox=GetXMLHttpRequest();
		var ajaxHotelNumber=GetXMLHttpRequest();
		var ajaxHotelCount=GetXMLHttpRequest();
		
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		var lngSpan = (northEast.lng() - southWest.lng())/2;
		var latSpan = (northEast.lat() - southWest.lat())/2;
		
		//alert (map.getZoom()+ " - "+ latSpan+ " - "+ lngSpan);
		map.ky_mapbig_paging=page;
		
		//updates hotel counters in the head block
		if (first_time!=1){
			var queryString = "?latitude=" + latitude + "&longitude=" + longitude + "&latspan=" + latSpan + "&lngspan=" + lngSpan + "&category_id=" + map.hotel_filter_category + "&filter_price=" + map.hotel_filter_price+ "&filter_stars=" + map.hotel_filter_stars+ "&filter_services=" + map.hotel_filter_services+ "&sort_type=" + map.hotel_sort_type+"&city_id="+map.ky_city_id;
			ajaxHotelCount.open("GET", HTTP_URL_SITE + "inc/ajax_city_hotels_count.php" + queryString, true);
			//alert (HTTP_URL_SITE + "inc/ajax_city_hotels_count.php" + queryString);
			ajaxHotelCount.onreadystatechange = function(){
				if(ajaxHotelCount.readyState == 4){
					var textdata = ajaxHotelCount.responseText;
					var hotelcount = textdata.split('#');
					document.getElementById("city_head_hotelcount").innerHTML='<span id="city_number_of_hotels">' + hotelcount[0] + "</span> " + CITY_HEAD_STRUCTURETYPES[map.hotel_filter_category]+ CITY_HEAD_HOTELFOUND;
					document.getElementById("city_filterbox_category").innerHTML=hotelcount[1];
				}
			};
			
			ajaxHotelCount.send(null);
		} 
		
		
		//adding paging block to the html page
		var queryString = "?latitude=" + latitude + "&longitude=" + longitude + "&latspan=" + latSpan + "&lngspan=" + lngSpan + "&page=" + page +  "&category_id=" + map.hotel_filter_category + "&filter_price=" + map.hotel_filter_price+ "&filter_stars=" + map.hotel_filter_stars+ "&filter_services=" + map.hotel_filter_services+ "&sort_type=" + map.hotel_sort_type+"&city_id="+map.ky_city_id;
		//alert(queryString);
		ajaxHotelNumber.open("GET", HTTP_URL_SITE + "inc/ajax_city_hotels_paging.php" + queryString, true);
		
		//alert(HTTP_URL_SITE + "inc/ajax_city_hotels_paging.php" + queryString);
		
		ajaxHotelNumber.onreadystatechange = function(){
			if(ajaxHotelNumber.readyState == 4){	
			//alert(hotel_counter);
			$("#city_hotel_pagingbox").remove();
			var retrived_data = ajaxHotelNumber.responseText;
			retrived_data=retrived_data.split("#");
			var max_pages=retrived_data[0];
			map.ky_mapbig_maxpages=max_pages;
			
			if(max_pages!=1 && max_pages!="") {
				$("#city_hotel_head_paging").show();
				document.getElementById("city_hotel_paging_startpage").innerHTML=page;
				document.getElementById("city_hotel_paging_endpage").innerHTML=max_pages;
			} else {
				$("#city_hotel_head_paging").hide();
			}	
				
			var box_text = retrived_data[1];
			var parentdiv = document.getElementById("city_hotel_body");
			var pagingbox = document.createElement('div');
			pagingbox.setAttribute('id', 'city_hotel_pagingbox');
			parentdiv.appendChild(pagingbox);
			document.getElementById("city_hotel_pagingbox").innerHTML=box_text;
			}
		};
		ajaxHotelNumber.send(null);
		
		var start = page * map.ky_hotel_number;
		//retrivies nearest hotels
		if (map.ky_city_id!=0 && map.hotel_sort_type=="1d") {
			var queryString = "?latitude=" + latitude + "&longitude=" + longitude + "&start=" + start + "&latspan=" + latSpan + "&lngspan=" + lngSpan + "&category_id=" + map.hotel_filter_category+ "&filter_price=" + map.hotel_filter_price+ "&filter_stars=" + map.hotel_filter_stars+ "&filter_services=" + map.hotel_filter_services+ "&sort_type=" + map.hotel_sort_type+"&city_id="+map.ky_city_id+"&first_time="+first_time;
		
			ajaxRequest.open("GET", HTTP_URL_SITE + "inc/ajax_city_hotels_on_map.php" + queryString, true);
		} else {
			var queryString = "?latitude=" + latitude + "&longitude=" + longitude + "&start=" + start + "&latspan=" + latSpan + "&lngspan=" + lngSpan + "&category_id=" + map.hotel_filter_category+ "&filter_price=" + map.hotel_filter_price+ "&filter_stars=" + map.hotel_filter_stars+ "&filter_services=" + map.hotel_filter_services+ "&sort_type=" + map.hotel_sort_type;
		
			ajaxRequest.open("GET", HTTP_URL_SITE + "inc/ajax_attraction_hotels_on_map.php" + queryString, true);
		}
		//alert (map.getZoom()+ " - "+latSpan + " " + lngSpan);
		//alert (HTTP_URL_SITE + "inc/ajax_city_hotels_on_map.php" + queryString);
		ajaxRequest.onreadystatechange = function(){
			if(ajaxRequest.readyState == 4){		

				var xmlDoc = ajaxRequest.responseXML;
				var hoteldata = xmlDoc.getElementsByTagName("hotel");
				var counter=0;
				for (var i=0 ; i<hoteldata.length ; i++){
					var hotel = hoteldata[i];

					var hotel_id = hotel.getElementsByTagName("id")[0].firstChild.nodeValue;
					var hotel_name = hotel.getElementsByTagName("name")[0].firstChild.nodeValue;
					var hotel_latitude = hotel.getElementsByTagName("latitude")[0].firstChild.nodeValue;
					var hotel_longitude = hotel.getElementsByTagName("longitude")[0].firstChild.nodeValue;
					var hotel_pagename = hotel.getElementsByTagName("pagename")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("bookinglink")[0].hasChildNodes()) var hotel_bookinglink = hotel.getElementsByTagName("bookinglink")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("pricemin")[0].hasChildNodes()) var hotel_pricemin = hotel.getElementsByTagName("pricemin")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("thumb")[0].hasChildNodes()) var hotel_thumb = hotel.getElementsByTagName("thumb")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("stars")[0].hasChildNodes()) var hotel_stars = hotel.getElementsByTagName("stars")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("address")[0].hasChildNodes()) var hotel_address = hotel.getElementsByTagName("address")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("description")[0].hasChildNodes()) var hotel_text = hotel.getElementsByTagName("description")[0].firstChild.nodeValue;
					var hotel_usersrating = hotel.getElementsByTagName("usersrating")[0].firstChild.nodeValue;
					var hotel_usersratingimg = hotel.getElementsByTagName("usersratingimg")[0].firstChild.nodeValue;
					var hotel_detailslink = hotel.getElementsByTagName("detailslink")[0].firstChild.nodeValue;
					var hotel_relevance = hotel.getElementsByTagName("relevance")[0].firstChild.nodeValue;
					var hotel_website = hotel.getElementsByTagName("website")[0].firstChild.nodeValue;
					
					var hotel_latlng = new google.maps.LatLng(hotel_latitude, hotel_longitude);
			
					var marker = new google.maps.Marker({
						position: hotel_latlng, 
						map: map, 
						icon: "http://www.keyou.it/img/mapicon_default.png",
						shadow: "http://www.keyou.it/img/mapicon_shadowsmall.png",
						clickable: true
					});
					
					marker.ky_hotel_id = hotel_id;
					
					marker.setMap(map,"hotel");
	
					
					google.maps.event.addListener(marker, 'click', function() {					
						map.marker_status=1;
						if (this.ky_hotel_id!=map.ky_show_hotel_id || $("#homepage_map_popupdiv").length <= 0) {
							$("#homepage_map_popupdiv").removeShadow();
							$("#homepage_map_popupdiv").remove();
							x_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['x'];
							y_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['y'];	
							create_popup_div("homepage_map_popupdiv",this.ky_hotel_id,"ajax_map_popupdiv",x_pos,y_pos);
							map.block_auto_del=1;
						}
					});
					
					google.maps.event.addListener(marker, 'mouseover', function() {						
						if (map.marker_status!=1) {
							map.ky_show_hotel_id=this.ky_hotel_id;
							x_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['x'];
							y_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['y'];
							setTimeout("marker_over_check(" + this.ky_hotel_id + ","+ x_pos + ", "+ y_pos +")",600);
						}
						//this.setIcon("http://www.keyou.it/img/mapicon_default_over.png");
					});
					
					google.maps.event.addListener(marker, 'mouseout', function() {
						map.ky_show_hotel_id=0;
						map.block_auto_del=0;
						if (map.marker_status!=1) {							
							setTimeout('remove_popup_div("homepage_map_popupdiv")',800);
						}	
						//this.setIcon("http://www.keyou.it/img/mapicon_default.png");
					});
					
					if (first_time!=1){
						//updating the list
						$("#city_hotel_container_"+i).show();
						$("#city_hotel_image_"+i).show();
						$("#city_hotel_links_"+i).show();
							
						if (hotel_relevance>50) $("#city_hotel_booking_linkcont_"+i).show();
						else $("#city_hotel_booking_linkcont_"+i).hide();
						
						$("#city_hotel_description_link_"+i).show();
						$("#city_hotel_text_"+i).width("242px");
						document.getElementById("city_hotel_title_"+i).innerHTML=hotel_name;
						$("#city_hotel_booking_link_"+i).attr("href", hotel_bookinglink);
						if (hotel_pricemin>0) {
							document.getElementById("city_hotel_price_"+i).innerHTML="&euro; " + hotel_pricemin;
							document.getElementById("city_hotel_pricefrom_"+i).innerHTML=CITY_HOTEL_PRICEFROM;
						} else {
							document.getElementById("city_hotel_price_"+i).innerHTML="";
							document.getElementById("city_hotel_pricefrom_"+i).innerHTML="";
						}
						//$("#hotel_image_"+i).attr("src", hotel_thumb);
						document.getElementById("city_hotel_image_link_"+i).innerHTML='<img id="hotel_image_'+ i +'" src="'+hotel_thumb+'" width="64" height="64">';
						
						$("#city_hotel_stars_"+i).removeClass();
						$("#city_hotel_stars_"+i).addClass("stars_"+hotel_stars);
						document.getElementById("city_hotel_address_"+i).innerHTML=hotel_address;

						document.getElementById("city_hotel_ratingtext_"+i).innerHTML=hotel_usersrating;
						$("#city_hotel_ratingimg_"+i).attr("src", hotel_usersratingimg);
						$("#city_hotel_image_link_"+i).attr("href", hotel_detailslink);
						$("#city_hotel_title_link_"+i).attr("href", hotel_detailslink);
						$("#city_hotel_description_link_"+i).attr("href", hotel_detailslink);
						$("#city_hotel_mapbutton_link_"+i).attr("href", hotel_detailslink);
						
						if (trim(hotel_website)=="#NULL#") {
							$("#city_hotel_website_"+i).hide();
						} else {
							$("#city_hotel_website_"+i).show();
							$("#city_hotel_website_link_"+i).attr("href", hotel_website);
						}
						counter=counter+1;
					} // END of [if (first_time!=1)]
					if ( hotel_text!="#NULL#")
						document.getElementById("city_hotel_description_body_"+i).innerHTML=hotel_text;
					else
						document.getElementById("city_hotel_description_body_"+i).innerHTML="";
					
				} //END of [for (var i=0 ; i<hoteldata.length ; i++)]
				
				//hiding empty boxes
				if (first_time!=1){
					//alert (counter + " - " + map.ky_hotel_number);
					for (var i=counter;i<map.ky_hotel_number;i++) {
						$("#city_hotel_container_"+i).hide();
					} // END of [for (var i=counter;i<map.ky_hotel_number;i++)]
				}// END of[if (first_time!=1)]
				if (first_time!=1) {
					$('#city_loading_div_2').fadeOut("fast");
					$('#city_loading_div_2').height($('#threecols_center').height());
					$('#city_loading_div_3').fadeOut("fast");
				}
			} else { // END of [if(ajaxRequest.readyState == 4)]
				if (first_time!=1 && !$("#city_loading_div_2").is(":visible")) {
					$('#city_loading_div_2').css('height',$('#city_loading_div_2').css('height'));
					$('#city_loading_div_2').css('filter', 'alpha(opacity=90)'); //sets opacity for internet explorer bug
					$('#city_loading_div_2').fadeIn("fast");
					$('#city_loading_div_3').fadeIn("fast");
				}
			}
		};
	
		ajaxRequest.send(null);
	}
}

function hotel_markers_map(latitude,longitude,first_time){
	var bounds = map.getBounds();
	
	if (typeof(bounds)=="undefined") {
		setTimeout('hotel_markers_map(' + latitude + ',' + longitude + ','	+ first_time +')', 100);
	} else {
	
		var ajaxRequest=GetXMLHttpRequest();
		var ajaxHotelbox=GetXMLHttpRequest();
		
		var southWest = bounds.getSouthWest();
		var northEast = bounds.getNorthEast();
		//var corner_top_left= map.ky_mapcanvas.fromDivPixelToLatLng(new google.maps.Point(0,0)).lat();
		
		var lngSpan = (northEast.lng() - southWest.lng())/2;
		var latSpan = (northEast.lat() - southWest.lat())/2;

		//retrivies nearest hotels
		var queryString = "?latitude=" + latitude + "&longitude=" + longitude + "&latspan=" + latSpan + "&lngspan=" + lngSpan + "&hotel_id=" + map.ky_shown_hotel_id;
		//alert (latSpan + " - " + lngSpan);
		

		ajaxRequest.open("GET", HTTP_URL_SITE + "inc/ajax_hotel_hotels_on_map.php" + queryString, true);
		
		//alert (HTTP_URL_SITE + "inc/ajax_hotel_hotels_on_map.php" + queryString);
		ajaxRequest.onreadystatechange = function(){
			if(ajaxRequest.readyState == 4){		

				var xmlDoc = ajaxRequest.responseXML;
				var hoteldata = xmlDoc.getElementsByTagName("hotel");
				var counter=0;
				for (var i=0 ; i<hoteldata.length ; i++){
					var hotel = hoteldata[i];

					var hotel_id = hotel.getElementsByTagName("id")[0].firstChild.nodeValue;
					var hotel_name = hotel.getElementsByTagName("name")[0].firstChild.nodeValue;
					var hotel_latitude = hotel.getElementsByTagName("latitude")[0].firstChild.nodeValue;
					var hotel_longitude = hotel.getElementsByTagName("longitude")[0].firstChild.nodeValue;
					var hotel_pagename = hotel.getElementsByTagName("pagename")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("bookinglink")[0].hasChildNodes()) var hotel_bookinglink = hotel.getElementsByTagName("bookinglink")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("pricemin")[0].hasChildNodes()) var hotel_pricemin = hotel.getElementsByTagName("pricemin")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("thumb")[0].hasChildNodes()) var hotel_thumb = hotel.getElementsByTagName("thumb")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("stars")[0].hasChildNodes()) var hotel_stars = hotel.getElementsByTagName("stars")[0].firstChild.nodeValue;
					if (hotel.getElementsByTagName("address")[0].hasChildNodes()) var hotel_address = hotel.getElementsByTagName("address")[0].firstChild.nodeValue;
					var hotel_detailslink = hotel.getElementsByTagName("detailslink")[0].firstChild.nodeValue;
					var hotel_relevance = hotel.getElementsByTagName("relevance")[0].firstChild.nodeValue;
					
					var hotel_latlng = new google.maps.LatLng(hotel_latitude, hotel_longitude);
			
					var marker = new google.maps.Marker({
						position: hotel_latlng, 
						map: map, 
						icon: "http://www.keyou.it/img/mapicon_default.png",
						shadow: "http://www.keyou.it/img/mapicon_shadowsmall.png",
						clickable: true
					});
					
					marker.ky_hotel_id = hotel_id;
					
					marker.setMap(map,"hotel");
	
					
					google.maps.event.addListener(marker, 'click', function() {					
						map.marker_status=1;
						if (this.ky_hotel_id!=map.ky_show_hotel_id || $("#homepage_map_popupdiv").length <= 0) {
							$("#homepage_map_popupdiv").removeShadow();
							$("#homepage_map_popupdiv").remove();
							x_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['x'];
							y_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['y'];	
							create_popup_div("homepage_map_popupdiv",this.ky_hotel_id,"ajax_map_popupdiv",x_pos,y_pos);
							map.block_auto_del=1;
						}
					});
					
					google.maps.event.addListener(marker, 'mouseover', function() {						
						if (map.marker_status!=1) {
							map.ky_show_hotel_id=this.ky_hotel_id;
							x_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['x'];
							y_pos=LLToXY(this.getPosition().lng(),this.getPosition().lat(),map.getCenter().lng(),map.getCenter().lat(),map.getZoom())['y'];
							setTimeout("marker_over_check(" + this.ky_hotel_id + ","+ x_pos + ", "+ y_pos +")",600);
						}
						//this.setIcon("http://www.keyou.it/img/mapicon_default_over.png");
					});
					
					google.maps.event.addListener(marker, 'mouseout', function() {
						map.ky_show_hotel_id=0;
						map.block_auto_del=0;
						if (map.marker_status!=1) {							
							setTimeout('remove_popup_div("homepage_map_popupdiv")',800);
						}	
						//this.setIcon("http://www.keyou.it/img/mapicon_default.png");
					});
					if (first_time!=1){
						//updating the list
						$("#hotel_rightbar_hotellist").show();
						$("#hotel_hotellist_box_"+i).show();

						document.getElementById("hotel_hotellist_name_"+i).innerHTML=hotel_name;
						if (hotel_pricemin>0) {
							document.getElementById("hotel_hotellist_pricefrom_"+i).innerHTML=HOTEL_HOTELLIST_PRICEFROM + hotel_pricemin+ " &euro;";
						} else {
							document.getElementById("hotel_hotellist_pricefrom_"+i).innerHTML="";
						}
						//$("#hotel_hotellist_imagefile_"+i).attr("src", hotel_thumb);
						//$("#hotel_hotellist_imagefile_"+i).attr("alt", hotel_name);
						
						$("#hotel_hotellist_stars_"+i).removeClass();
						$("#hotel_hotellist_stars_"+i).addClass("stars_small_"+hotel_stars);

						$("#hotel_hotellist_imagelink_"+i).attr("href", hotel_detailslink);
						document.getElementById("hotel_hotellist_imagelink_"+i).innerHTML='<img id="hotel_hotellist_imagefile_'+ i +'" src="'+hotel_thumb+'" >';
						$("#hotel_hotellist_titlelink_"+i).attr("href", hotel_detailslink);
						
						counter=counter+1;
					} // END of [if (first_time!=1)]
					
				} //END of [for (var i=0 ; i<hoteldata.length ; i++)]
				
				//hiding empty boxes
				if (first_time!=1){
					for (var i=counter;i<map.ky_hotel_number;i++) {
						$("#hotel_hotellist_box_"+i).hide();
					} // END of [for (var i=counter;i<map.ky_hotel_number;i++)]
				}// END of[if (first_time!=1)]
				
			}  // END of [if(ajaxRequest.readyState == 4)]
			
		};
	
		ajaxRequest.send(null);
	}
}
