
           if (GBrowserIsCompatible()) {				
				var map;
				var marker;
				var markersArray=[];
				var icons=[];
				var categories=[];
				var landmarks=[];
				var markersArrayTemp=[];
				var markers_lm_ArrayTemp=[];
				var markerCluster = null;
				var MarkerClusterer;
				var categoryFlag = 0;
				var landmarkFlag = 0;
				var starFlag = 1;
				var gmarkers = [];
				var attractions = [];
				var hold_attr_array = [];
				var timeOut = 2700;
				var timeIn = 10;
				
			function assignStarFunction(box, val)
			{
				
				//document.getElementById("loadingMessage1").innerHTML = " Loading your hotel data";
				starclick(box, val); 
				//window.setTimeout(starclick(box, val), timeOut);
			}
				
			function startOverlayMessage()
			{			
				document.getElementById("loadingMessage1").innerHTML = " One sec... loading your data";
			}

			function endOverlayMessage()
			{
				
				//if (document.getElementById("loadingMessage1")) {
            	//}
				//alert('done');
				document.getElementById("loading1").style.visibility = "hidden";
			}				
				
				function aMarker(point,name,category,star,type,hotel_lm,html_mouse,price,star_img,html,image) {

					var content = {						
						el:'span',ch:[	
							{el:'dl',ch:[									  
								{el:'img',att:{src:'http://www.cityhotels.ie/hotels/image.php?name=' + image + '&w=50&h=50'}
								}]
							}, 
							{el:'dl',ch:[
								{el:'dt',ch:[
									{txt:name}
								]},
								{el:'img',att:{src:'http://www.cityhotels.ie/images/mapping/'+star_img}
								},
								{el:'span',ch:[
									{txt:'from \u20AC'+price +' per night'}
								]}]
							}]
					};		
					
					
					var marker = new GMarker(point,icons[type]);
					var tooltip = new Tooltip(marker,jsonToDom(content),5);
					marker.tooltip = tooltip;
					marker.mycategory = category;  
					marker.mylandmark = hotel_lm;
        			marker.myname = name;
					marker.mystar = star;
					GEvent.addListener(marker, "click", function() {
					  //marker.openInfoWindowHtml(html);
					  	marker.openExtInfoWindow(
							map,
						  "map_pop_up_box",
						  html,
						  {beakOffset: 3}
						);
					});
					GEvent.addListener(marker, "mouseover", function() {
					  map.addOverlay(tooltip);
					  this.tooltip.show();					  	
					});		
					GEvent.addListener(marker, "mouseout", function() {
					  this.tooltip.hide();
					  map.removeOverlay(tooltip);
					});	
					markersArray.push(marker);
					//map.addOverlay(tooltip);
					return marker;
			  }
			  

			  
			  	function attractionMarker(point,name,html_attraction,type,id) {
					var content = {
						el:'dl',ch:[
							{el:'dt',ch:[
								{txt:name}
							]}
						]
					};
					var marker = new GMarker(point,icons[type]);				
					var tooltip1 = new Tooltip(marker,jsonToDom(content),5);
					marker.tooltip1 = tooltip1;		
        			marker.myname = name;
					marker.myid = id;
					GEvent.addListener(marker, "click", function() {
					  marker.openInfoWindowHtml(html_attraction);
					});	
					GEvent.addListener(marker, "mouseover", function() {
					  map.addOverlay(tooltip1);
					  this.tooltip1.show();
					});		
					GEvent.addListener(marker, "mouseout", function() {
					  this.tooltip1.hide();
					  map.removeOverlay(tooltip1);
					});	
					return marker;
			  }
			 	
				function myclick(box,i) {
					if (box.checked)
					{
						for (var j=0; j<gmarkers.length; j++)
						{
							if (gmarkers[j].myid == i)
							{	
								GEvent.trigger(gmarkers[j],"click");
							}
						}
					}
     	 		}
				
				function close_marker()
				{
					map.closeInfoWindow();
				}
				
		      // == shows all markers of a particular category, and ensures the checkbox is checked ==
			  
      function show_star_cluster(star) {
			var StarArrayTemp=[];
			if (categories.length == 0 && landmarks.length == 0)
			{
				for (var i=0; i<markersArray.length; i++) 
				{
					if (markersArray[i].mystar >= star) 
					{
						StarArrayTemp.push(markersArray[i]);				
					}
				}
				markerCluster.clearMarkers();
				//markerCluster.addMarkers(StarArrayTemp);
				markerCluster = new MarkerClusterer(map, StarArrayTemp, { maxZoom: 18, minClusterSize: 10});
				window.setTimeout(endOverlayMessage, timeOut);
			} 
	
			else if (categories.length > 0 && landmarks.length == 0)
			{
				markersArrayTemp.length = 0;
				show_cluster(categories[0]);
			}
			else if (categories.length == 0 && landmarks.length > 0)
			{
				markers_lm_ArrayTemp.length = 0;
				show_lm_cluster(landmarks[0]);
			}	
			else if (categories.length > 0 && landmarks.length > 0)
			{
				markersArrayTemp.length = 0;
				markers_lm_ArrayTemp.length = 0;
				show_cluster(categories[0]);
			}
      }
	  
      function show_cluster(category) {
		  //alert(starFlag);
			if (landmarks.length == 0)
			{
        		for (var i=0; i<markersArray.length; i++) {	  
		  			//if (document.getElementById(markersArray[i].mycategory).checked) {
					if (categories.length > 0)
					{
						for (var j=0; j<categories.length; j++) {	 	
							if (markersArray[i].mystar >= starFlag && markersArray[i].mycategory.search(categories[j]) != -1)	{
							
								markersArrayTemp.push(markersArray[i]);	
						
							}
						}
					} else
					{
						if (markersArray[i].mycategory.search(category) != -1 && markersArray[i].mystar >= starFlag)	{
						//markersArrayTemp.push(markersArray[i]);	
							markersArrayTemp.length = 0;
						}
					}
        		}
			}
			else if (landmarks.length > 0)
			{
				for (var i=0; i<markersArray.length; i++) {	
					if (categories.length > 0)
					{
						for (var j=0; j<landmarks.length; j++) {	 	
							if (markersArray[i].mylandmark.search(landmarks[j]) != -1 && markersArray[i].mystar >= starFlag) 	{
								for (var y=0; y<categories.length; y++) {
									if (markersArray[i].mycategory.search(categories[y]) != -1 && markersArray[i].mystar >= starFlag) 	{
										markersArrayTemp.push(markersArray[i]);	
									}
								}						
							}
						}
					} else
					{
						if (markersArray[i].mylandmark.search(hotel_lm) != -1)	{
						//markersArrayTemp.push(markersArray[i]);	
							markersArrayTemp.length = 0;
						}
					}
				}
			}
		
		/*}else
		{
			alert("cat 1");
			for (var i=0; i<markersArray.length; i++) {
				if (markersArray[i].mystar >= starFlag && document.getElementById(markersArray[i].mycategory).checked) {
					markersArrayTemp.push(markersArray[i]);	
				}
			}			
		}*/
		
		var uniqueMarkerArrayTemp=[];
		uniqueMarkerArrayTemp = markersArrayTemp.unique();

		markerCluster.clearMarkers();
		//markerCluster.addMarkers(uniqueMarkerArrayTemp);
		markerCluster = new MarkerClusterer(map, uniqueMarkerArrayTemp, { maxZoom: 18, minClusterSize: 10});
		window.setTimeout(endOverlayMessage, timeOut);
		
        // == check the checkbox ==
        //document.getElementById(category).checked = true;
      }
	    

      function show_lm_cluster(hotel_lm) {
			if (categories.length == 0)
			{
        		for (var i=0; i<markersArray.length; i++) {	  
		  			//if (document.getElementById(markersArray[i].mycategory).checked) {
					if (landmarks.length > 0)
					{
						for (var j=0; j<landmarks.length; j++) {	 	
							if (markersArray[i].mylandmark.search(landmarks[j]) != -1 && markersArray[i].mystar >= starFlag)	{	
								markers_lm_ArrayTemp.push(markersArray[i]);						
							}
						}
					} else
					{
						if (markersArray[i].mylandmark.search(hotel_lm) != -1 && markersArray[i].mystar >= starFlag)	{
						//markersArrayTemp.push(markersArray[i]);	
							markers_lm_ArrayTemp.length = 0;
						}
					}
        		}
			}
			else if (categories.length > 0)
			{
				for (var i=0; i<markersArray.length; i++) {	
					if (landmarks.length > 0)
					{
						for (var j=0; j<landmarks.length; j++) {	 	
							if (markersArray[i].mylandmark.search(landmarks[j]) != -1 && markersArray[i].mystar >= starFlag) 	{
								for (var y=0; y<categories.length; y++) {
									if (markersArray[i].mycategory.search(categories[y]) != -1 && markersArray[i].mystar >= starFlag) 	{
										markers_lm_ArrayTemp.push(markersArray[i]);	
									}
								}						
							}
						}
					} else
					{
						if (markersArray[i].mylandmark.search(hotel_lm) != -1 && markersArray[i].mystar >= starFlag)	{
						//markersArrayTemp.push(markersArray[i]);	
							markers_lm_ArrayTemp.length = 0;
						}
					}
				}
			}
		/*}
		else
		{
			for (var i=0; i<markersArray.length; i++) {
				if (markersArray[i].mystar >= starFlag && document.getElementById(markersArray[i].mylandmark).checked) {
					markers_lm_ArrayTemp.push(markersArray[i]);	
				}
			}			
		}*/

		var uniqueMarker_lm_ArrayTemp=[];
		uniqueMarker_lm_ArrayTemp = markers_lm_ArrayTemp.unique();


		markerCluster.clearMarkers();
		//markerCluster.addMarkers(uniqueMarker_lm_ArrayTemp);
		markerCluster = new MarkerClusterer(map, uniqueMarker_lm_ArrayTemp, { maxZoom: 18, minClusterSize: 10});
		window.setTimeout(endOverlayMessage, timeOut);


      }
	  
		Array.prototype.unique = function () {
			var r = new Array();
			o:for(var i = 0, n = this.length; i < n; i++)
			{
				for(var x = 0, y = r.length; x < y; x++)
				{
					if(r[x]==this[i])
					{
						continue o;
					}
				}
				r[r.length] = this[i];
			}
			return r;
		}
	  
       // == hides all markers of a particular category, and ensures the checkbox is cleared ==
      function hide_cluster(category) {	
	  //alert(categories);
		for (var i=0; i<markersArray.length; i++) {
          if (markersArray[i].mycategory.search(category) != -1) {
            //markersArray[i].hide();
			//removeMarker(markersArray[i]);
			//markerCluster.removeMarker(markersArray[i]);
			for(var j=0; j<categories.length;j++ )
			{
				if(categories[j]==category)
				{
            		categories.splice(j,1);
				}
			}
         }
        }
		//alert(categories);
	  	markersArrayTemp.length = 0;
		//show_cluster(category);
		if (landmarks.length == 0 && categories.length > 0) {
			show_cluster(category);	
		}
		else if (landmarks.length > 0 && categories.length > 0) {
			show_cluster(category);	
		}
		else {
			show_lm_cluster(landmarks[0]);
		}
        // == clear the checkbox ==
        document.getElementById(category).checked = false;
        // == close the info window, in case its open on a marker that we just hid
        map.closeInfoWindow();
      }
			 
       // == hides all markers of a particular category, and ensures the checkbox is cleared ==
      function hide_lm_cluster(hotel_lm) {	
	  //alert(categories);
		for (var i=0; i<markersArray.length; i++) {
          if (markersArray[i].mylandmark.search(hotel_lm) != -1) {
            //markersArray[i].hide();
			//removeMarker(markersArray[i]);
			//markerCluster.removeMarker(markersArray[i]);
			for(var j=0; j<landmarks.length;j++ )
			{
				if(landmarks[j]==hotel_lm)
				{
            		landmarks.splice(j,1);
				}
			}
         }
        }
		//alert(categories);
	  	markers_lm_ArrayTemp.length = 0;
		if (categories.length == 0 && landmarks.length > 0) {
			show_lm_cluster(hotel_lm);	
		}
		else if (categories.length > 0 && landmarks.length > 0) {
			show_lm_cluster(hotel_lm);	
		}
		else {
			show_cluster(categories[0]);
		}
        // == clear the checkbox ==
        document.getElementById(hotel_lm).checked = false;
        // == close the info window, in case its open on a marker that we just hid
        map.closeInfoWindow();
      }

      // == Cat checkbox has been clicked ==
      function catclick(box,category) {
		categoryFlag = 1;
		document.getElementById("allcategory").checked = false;
        if (box.checked) {
		  categories.push(category);			
		  //alert(categories);
          show_cluster(category);
        } else {
          hide_cluster(category);
        }
		//categoryFlag = 1;
		//categories.push(category);
      }

      // == LM checkbox has been clicked ==
      function lmclick(box,hotel_lm) {
		landmarkFlag = 1;
		document.getElementById("alllandmarks").checked = false;
        if (box.checked) {
		  landmarks.push(hotel_lm);			
		  //alert(categories);
          show_lm_cluster(hotel_lm);
        } else {
          hide_lm_cluster(hotel_lm);
        }
		//categoryFlag = 1;


		//categories.push(category);
      }
	  
      // == LM checkbox has been clicked ==
      function starclick(box,star) {
		starFlag = star;
		//document.getElementById("alllandmarks").checked = false;
        //if (box.checked) {
		  //landmarks.push(hotel_lm);			
		  //alert(categories);
          show_star_cluster(star);
        //} else {
          //hide_lm_cluster(hotel_lm);
        //}
		//categoryFlag = 1;
		//categories.push(category);
      }
	  
	  	function select_all_cat() {
		  var selectAllArrayTemp=[];
		  if (starFlag == 0 && landmarks.length == 0)
		  {
			  selectAllArrayTemp = markersArray;
			  //alert("1"+ selectAllArrayTemp);
		  }
		  else if (starFlag > 0 && landmarks.length == 0)
		  {

			  for (var i=0; i<markersArray.length; i++) {
				  if (markersArray[i].mystar >= starFlag)
				  {
					  selectAllArrayTemp.push(markersArray[i]);
				  }
			  }
		  }
		  else if (landmarks.length > 0)
		  {
			  //alert(landmarks);
		  }
		  markerCluster.clearMarkers();
		  //markerCluster.addMarkers(selectAllArrayTemp);
		  markerCluster = new MarkerClusterer(map, selectAllArrayTemp, { maxZoom: 18, minClusterSize: 10});
		  document.getElementById("allcategory").checked = true;
		  window.setTimeout(endOverlayMessage, timeOut);
		  
		  for (var i=0; i<categories.length; i++) {
		  	
		  	document.getElementById(categories[i]).checked = false;
		  }
		  
		  if (landmarks.length > 0)
		  { 
			  show_lm_cluster(landmarks[0]);
		  }		
		  categoryFlag = 0;
		  categories.length = 0;
		  markersArrayTemp.length = 0;
		}
		
		function select_all_lm() {
		  var selectAll_lm_ArrayTemp=[];
		  if (starFlag == 0 && categories.length == 0)
		  {

			  selectAll_lm_ArrayTemp = markersArray;
		  }
		  else if (starFlag > 0 && categories.length == 0)
		  {

			  for (var i=0; i<markersArray.length; i++) {
				  if (markersArray[i].mystar >= starFlag)
				  {
					  selectAll_lm_ArrayTemp.push(markersArray[i]);
				  }
			  }
		  }
		  else if (categories.length > 0)
		  {

		  }
		  markerCluster.clearMarkers();
		  //markerCluster.addMarkers(selectAll_lm_ArrayTemp);
		  markerCluster = new MarkerClusterer(map, selectAll_lm_ArrayTemp, { maxZoom: 18, minClusterSize: 10});
		  document.getElementById("alllandmarks").checked = true;
		  window.setTimeout(endOverlayMessage, timeOut);
		  
		  for (var i=0; i<landmarks.length; i++) {
		  	
		  	document.getElementById(landmarks[i]).checked = false;
		  }
		  
		  landmarkFlag = 0;
		  landmarks.length = 0;
		  markers_lm_ArrayTemp.length = 0;	

		  if (categories.length > 0)
		  { 		  
			  show_cluster(categories[0]);
		  }		


		}
		
		function initCheckBox() {
			
			document.getElementById("alllandmarks").checked = true;
			//document.getElementById("allcategory").checked = true;
			//document.getElementById("starrating1").checked = true;
			document.getElementById("starrating2").checked = true;
			
		}
		
		
function initHomeMap() {
				// create the map
				map=new GMap2(document.getElementById('home_map'));
				map.setCenter(new GLatLng(52.52341, 13.41140),12);
				map.setUIToDefault();
				
      			var baseIcon = new GIcon(G_DEFAULT_ICON);
      			baseIcon.iconAnchor = new GPoint(9,34);
      			baseIcon.iconSize = new GSize(20,34);
      			baseIcon.infoWindowAnchor = new GPoint(9,2);	
				baseIcon.shadow = null;
				
				document.getElementById("loading1").style.visibility = "visible";
				window.setTimeout(startOverlayMessage, timeIn);
				
				icons["hotel"] = new GIcon(baseIcon,"http://www.cityhotels.ie/images/googlemaps/h.png");
      			icons["attraction"] = new GIcon(baseIcon,"http://www.cityhotels.ie/images/googlemaps/am.png");

				
				GDownloadUrl(xmlData, function(doc) {
        			var xmlDoc = GXml.parse(doc);
        			var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        			for (var i = 0; i < markers.length; i++) 
					{
						  // obtain the attribues of each marker
						var lat = parseFloat(markers[i].getAttribute("lat"));
						var lng = parseFloat(markers[i].getAttribute("lng"));
						var point = new GLatLng(lat,lng);
						var name = markers[i].getAttribute("name");
						var groupName = markers[i].getAttribute("groupName");
						var groupCode = markers[i].getAttribute("groupCode");
						var address1 = markers[i].getAttribute("address1");
  						var address2 = markers[i].getAttribute("address2");
						var address3 = markers[i].getAttribute("address3");
						var itemcode = markers[i].getAttribute("itemcode");
						var linkname = markers[i].getAttribute("linkname");
						var id = markers[i].getAttribute("id");
						var star_text = markers[i].getAttribute("star_text");
						var star = markers[i].getAttribute("star");
						var image = markers[i].getAttribute("images");
						var brief = markers[i].getAttribute("brief");
						var priceTemp = markers[i].getAttribute("priceTemp");
						var type = markers[i].getAttribute("type");
						var html = "<div style=\"padding:4px;\"><div id=\"home_map_hotel_img_pop\"><img src=\"http://www.cityhotels.ie/hotels/image.php?name=" + image + "&w=90&h=90\" border=\"0\" /></div><div id=\"map_box_hotel_info\">            <div id=\"map_box_hotel_name_pop\"><strong>" + name + "</strong></div><div id=\"map_box_add\">" + address1 + ",</div><div id=\"map_box_add\">" + address2 + ",</div><div id=\"map_box_add\">" + address3 + "</div><div id=\"map_box_star\"><strong>" + star_text + " STAR RATING</strong> <img src=\"http://www.cityhotels.ie/images/mapping/" + star + "\" border=\"0\" /></div></div><div id=\"map_box_row\"><a href=\"http://www.berlinhotels.ie/" + linkname + "\">Full description and rooms available</a><div id=\"map_box_right\"></div></div><div id=\"map_box_price\">Prices from: <span class=\"map_box_euro\">&euro;" + priceTemp + "</span></div><div id=\"map_box_button\"><a href=\"http://www.berlinhotels.ie/" + linkname + "\"><img src=\"http://www.cityhotels.ie/images/booknow.gif\" border=\"0\" style=\"margin-top:7px\"></a></div><div id=\"map_box_row_ph\">Book online now or call us for free advice on +353 1 685 4312</div></div>";
						var html_mouse = "<div style=\"height: 21px;width:100%;\"><strong>" + name + " </strong><br/><img src=\"http://www.cityhotels.ie/images/mapping/" + star + "\" border=\"0\" /><div class=\"pricefromtxt_mouseover\">From</div><div class=\"pricefrom_mouseover\"> &euro;" + priceTemp + "</div><div class=\"pricefromtxt_mouseover\"> Per Night</div></div>";
						var html_attraction = "<div style=\"height: 30px;width:220px;\"><div id=\"home_map_img_rhs_pop\"><div id=\"home_map_hotel_name_pop\"><strong>" + name + "</strong></div><div id=\"home_map_hotel_add_pop\">" + address1 + ",</b> <br/></div>";
          				var category = markers[i].getAttribute("category");
						var hotel_lm = markers[i].getAttribute("hotel_lm");
          				
						
						if (type == 'hotel') 
						{
							// create the marker
          					//marker = aMarker(point,name,html,category,star_text,type,hotel_lm,html_mouse,priceTemp,star);
							marker = aMarker(point,name,category,star_text,type,hotel_lm,html_mouse,priceTemp,star,html,image);
						} else if (type == 'attraction')
						{
          					marker = attractionMarker(point,name,html_attraction,type,id);
							gmarkers.push(marker);
							attractions.push(id);
							map.addOverlay(marker);						
						}
					}

					markerCluster = new MarkerClusterer(map, markersArray, { maxZoom: 18, minClusterSize: 10});
					window.setTimeout(endOverlayMessage, timeOut);
			});
	
	}
					

			}
			    else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }
	


			
