		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		///////////////////////////////////////////////////GLOBAL VARIABLES HERE///////////////////////////////////////////
		var map;
		var OFFSET = 268435456;
		var RADIUS = 85445659.4471;
		var PI = 3.14159;
		var Zoom;
		var MyMarkers = new Array();
		var LoadingBlock;
		var point;
		var point2;
		var Threshold=84;
		var streetviewpanorama;
		var LastClickX;
		var LastClickY;
		var MapWidth=680;
		var MapHeight=410;
		var AutoPan=false;
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		
				
		function InitMap() {
			if (GBrowserIsCompatible()) {
				map = new GMap2(document.getElementById("Map"));
				map.setMapType(G_PHYSICAL_MAP);
				map.setUIToDefault();			
				map.setCenter(new GLatLng(53.04781795911469, -1.9087890625), 7);
				map.enableContinuousZoom(map);
				GEvent.addListener(map,"zoomend",function(z_old,z_new) {
					$('#ClickContent').fadeOut(500);
					Zoom=z_new;
					if (!AutoPan){
						LaunchMarkers();
					}
				})
				GEvent.addListener(map, "dragend", function() {
					$('#ClickContent').fadeOut(500);
					LaunchMarkers();
				});
				GEvent.addListener(map, "click", function() {
					$('#ClickContent').fadeOut(500);
				});
				Zoom=map.getZoom();
				//INTERCEPT AT THIS POINT TO CONFIGURE OUR DROP DOWN OPTIONS ON THE SIDE!
				var PostData2='Region='+Region+'&SubRegion='+SubRegion+'&SubSubRegion='+SubSubRegion;
				AjaxPost2('/Includes/AJAX-Calls/AJAX-GetSubRegions.asp',PostData2,'HandleSetRegion','');
				//LaunchMarkers(); function will be called once the map has loaded in the currently selected features and not before....Daisy chained....
			  }
		}
		
		function LaunchMarkers(){
			//GET THE MAP BOUNDS - WERE ONLY GOING TO PULL IN MARKERS LOCATED IN THE VIEW ZONE
			map.width='200px';
			var bounds = map.getBounds();
			var southWest = bounds.getSouthWest();
			var northEast = bounds.getNorthEast();
			var East=northEast.lat();
			var West=southWest.lat();
			var North=northEast.lng();
			var South=southWest.lng();
			var PostData='East='+East+'&West='+West+'&North='+North+'&South='+South+'&Zoom='+Zoom; //Zoom isnt a requirement but at zoomed out levels you may have massive recursion in the loops. server side handling. - CB.
			var myDate=new Date();
			var m=myDate.getMinutes();
			var s=myDate.getSeconds();
			AjaxPost('/Includes/AJAX-Calls/AJAX-GetMarkers.asp?t='+m+''+s,PostData,'HandleLaunchMarkers','');
			map.clearOverlays();
			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		
		function LaunchPOI(DataType){
			var bounds = map.getBounds();
			var southWest = bounds.getSouthWest();
			var northEast = bounds.getNorthEast();
			var East=northEast.lat();
			var West=southWest.lat();
			var North=northEast.lng();
			var South=southWest.lng();
			var PostData='East='+East+'&West='+West+'&North='+North+'&South='+South+'&Zoom='+Zoom+'&DataType='+DataType;
			var myDate=new Date();
			var m=myDate.getMinutes();
			var s=myDate.getSeconds();
			AjaxPost('/Includes/AJAX-Calls/AJAX-GetPOI.asp?t='+m+''+s,PostData,'HandleLaunchPOI','');
		}
		
		function HandleLaunchPOI(){
			var CData=CheckStatus();
			if (CData){
				var IncomingLength=Cdata.incoming.markers.length;
				if (IncomingLength>0) {
					var i=IncomingLength;
					var MyMarkers = new Array();
					while(i--){
						MyMarkers[i] = new Array(7);
						MyMarkers[i][0]=Cdata.incoming.markers[i].lon;
						MyMarkers[i][1]=Cdata.incoming.markers[i].lat;
						MyMarkers[i][2]=0;
						MyMarkers[i][3]=Cdata.incoming.markers[i].mid;
						MyMarkers[i][4]=Cdata.incoming.markers[i].POI;
						MyMarkers[i][5]='';
						MyMarkers[i][6]='';
					}					
					if (i==-1){
						var clustered = Getcluster(MyMarkers, Threshold, Zoom);
						for (i=0;i<clustered.length;i++){		
							if(clustered[i]){
								var Str=clustered[i].toString();
								var marker  = Str.split(',');
								//alert(marker);
								if (marker[0]){
									point = new GLatLng(marker[0],marker[1]);
									if(marker[2]>6){
										var markerIcon=6;
									}else{
										var markerIcon=marker[2];
									}
									temp=marker[4];
									if (marker[5]!=''){
										var poitypes=marker[5];
										switch (poitypes){
											case '1-':
												var markerPin = new GMarker(point,POI1);
												break;
											case '2-':
												var markerPin = new GMarker(point,POI2);
												break;
											case '3-':
												var markerPin = new GMarker(point,POI3);
												break;
											case '4-':
												var markerPin = new GMarker(point,POI4);
												break;
											case '5-':
												var markerPin = new GMarker(point,POI5);
												break;
												
											case '1-2-':
												var markerPin = new GMarker(point,POI12);
												break;
											case '2-1-':
												var markerPin = new GMarker(point,POI21);
												break;
											case '1-3-':
												var markerPin = new GMarker(point,POI13);
												break;
											case '3-1-':
												var markerPin = new GMarker(point,POI31);
												break;
											case '1-4-':
												var markerPin = new GMarker(point,POI14);
												break;
											case '4-1-':
												var markerPin = new GMarker(point,POI41);
												break;
											case '1-5-':
												var markerPin = new GMarker(point,POI15);
												break;
											case '5-1-':
												var markerPin = new GMarker(point,POI51);
												break;
												
											case '2-3-':
												var markerPin = new GMarker(point,POI23);
												break;
											case '3-2-':
												var markerPin = new GMarker(point,POI32);
												break;
											case '2-4-':
												var markerPin = new GMarker(point,POI24);
												break;
											case '4-2-':
												var markerPin = new GMarker(point,POI42);
												break;
											case '2-5-':
												var markerPin = new GMarker(point,POI25);
												break;
											case '5-2-':
												var markerPin = new GMarker(point,POI52);
												break;
											
											case '3-4-':
												var markerPin = new GMarker(point,POI34);
												break;
											case '4-3-':
												var markerPin = new GMarker(point,POI43);
												break;
											case '3-5-':
												var markerPin = new GMarker(point,POI35);
												break;
											case '5-3-':
												var markerPin = new GMarker(point,POI53);
												break;
												
											
											case '4-5-':
												var markerPin = new GMarker(point,POI45);
												break;
											case '5-4-':
												var markerPin = new GMarker(point,POI54);
												break;
												
										}																			
									}
									else{
										var markerPin = new GMarker(point,eval('POI'+marker[4]));									
									}
									markerPin.title=i;
									markerPin.id=TotalProperties+i+1;
									markerPin.size=marker[2];
									markerPin.mid=marker[3];
									map.addOverlay(markerPin);
									

									GEvent.addListener(markerPin, "click", function(point,title,size) {
										if (this.size>1){
											point2=point;
											//map.setCenter(point, Zoom);
											map.openInfoWindowHtml(point2,"<span style='font-size:12px;font-family:arial;color:#565656;width:300px;float:left;'><b>Too many results</b><br/><br/>Please zoom in for more details about individual points of interest.</span>");										
										}
										else {
											//map.setCenter(point, Zoom);
											point2=point;
											var PostData='mid='+this.mid;
											AjaxPost('/Includes/AJAX-Calls/AJAX-GetClickedPOI.asp',PostData,'HandleClickedPOI','');	
										}										
									});
									
									$('#mtgt_'+(TotalProperties+i+1)).mouseover(
										function(){
											if(!$(this).hasClass('Over')){
												$(this).addClass('Over');
												$(this).animate({ top: "-=10px"},300,"easeOutQuint",function(){
													$(this).animate({ top: "+=10px"},300,"easeOutBounce",function(){
													$(this).removeClass('Over');
													})
												})
											}
										}
									);	
								}
							}
						}
					}
				}
			}			
		}
		function HandleLaunchMarkers(){
			var CData=CheckStatus();			
			if (CData){
				var IncomingLength=Cdata.incoming.markers.length;
				if (IncomingLength>0) {					
					var i=IncomingLength;
					TotalProperties=i;
					var MyMarkers = new Array();
					while(i--){
						MyMarkers[i] = new Array(7); //Hacking this up to 7 as we need the last 2 for POIs. 4=the type of POI it is, whilst 5 will hold the POI Type list, 6 holds the cluster ID list.
						MyMarkers[i][0]=Cdata.incoming.markers[i].lon;
						MyMarkers[i][1]=Cdata.incoming.markers[i].lat;
						MyMarkers[i][2]=0;
						MyMarkers[i][3]=Cdata.incoming.markers[i].mid;
					}					
					if (i==-1){
						var clustered = Getcluster(MyMarkers, Threshold, Zoom);
						for (i=0;i<clustered.length;i++){		
							if(clustered[i]){
								var Str=clustered[i].toString();
								var marker  = Str.split(',');
								if (marker[0]){
									point = new GLatLng(marker[0],marker[1]);
									if(marker[2]>10){
										var markerIcon=10;
									}else{
										var markerIcon=marker[2];
									}
									var markerPin = new GMarker(point,eval('icon'+markerIcon));
									markerPin.title=i;
									markerPin.id=i+1;
									markerPin.size=marker[2];
									markerPin.mid=marker[3];
									markerPin.list=marker[6];
									map.addOverlay(markerPin);
									GEvent.addListener(markerPin, "click", function(point,title,size) {
										if (this.size>1 && this.size<=10){
											point2=point;
											var PostData='mid='+this.list;
											AjaxPost('/Includes/AJAX-Calls/AJAX-GetClickedMarker.asp',PostData,'HandleClickedMarker','');
										}
										else if (this.size>10){
											Zoom++;
											map.setCenter(point, Zoom);											
										}
										else {											
											point2=point;
											var PostData='mid='+this.mid;
											AjaxPost('/Includes/AJAX-Calls/AJAX-GetClickedMarker.asp',PostData,'HandleClickedMarker','');	
										}										
									});
									$('#mtgt_'+(i+1)).mouseover(
										function(){
											if(!$(this).hasClass('Over')){
												$(this).addClass('Over');
												$(this).animate({ top: "-=10px"},300,"easeOutQuint",function(){
													$(this).animate({ top: "+=10px"},300,"easeOutBounce",function(){
													$(this).removeClass('Over');
													})
												})
											}
										}
									).click(
										function(e){
											LastClickX=e.pageX;
											LastClickY=e.pageY;
										}
									)
									;	
								}
							}
						}
					}
				}
			}
			if(POIBeaches==true || POIHomes==true || POIHeritage==true || POILocal==true || POINooks==true){
				CallPOIs();
			}
			//Daisy chained the recently viewed items to the end of this function on first call....
			if (FirstRun){
				InitRecentlyViewed();
			}
		}
		
		function HandleClickedMarker(){
			var CData=CheckStatus();
			if (CData){			
				var Data=new Array();
				var IncomingLength=Cdata.incoming.marker.length;
				var x=0;
				if (IncomingLength>0) {
					do{					
						var State=Cdata.incoming.marker[x].State;
						Data.push(Cdata.incoming.marker[x].Data);
						x++;
					}
					while(--IncomingLength);
					if(State=='True'){
						if(x==1){
							$('#ClickContent').html('<div id="ClickHeader"></div><div class="Close" title="Close me!"></div><div id="ClickContentPaddedSingle">'+Data.join('')+'</div>');
						}
						else{
							$('#ClickContent').html('<div id="ClickHeader"></div><div class="Close"></div><div id="ClickContentPadded"><div id="ClickContentScroller">'+Data.join('')+'</div></div>');
						}
						$('#ClickContent').css({
							left:(MapWidth/2)-(parseInt($('#ClickContent').css('width'))/2)+'px', 			
							top:(MapHeight/2)-(parseInt($('#ClickContent').css('height'))/2)+30+'px'
						})
						.fadeIn(300,function(){InitRecentlyViewed()});	
						$('#ClickContentScroller').jScrollPane(
								{showArrows:true, scrollbarWidth: 16, arrowSize: 16}
						);
						$('#ClickContent .Close').click(
							function(){
							$('#ClickContent').fadeOut(500);
							}
						)
						$('#ClickContent .Favourites').click(
							function(){
								AddFavourite(PropertyCode=$(this).attr('rel'));								
							}
						)
						$('#ClickContent .ViewInfo').click(
							function(){
								document.location='/uk-holiday-cottages/'+$(this).attr('Region')+'/'+$(this).attr('CottageTitle')+'/'+$(this).attr('ID')+'/';
							}
						)
					}
					else{
						alert('errors occured whilst retreiving this markers data.');
					}
				}
				
			}
		}		
		
		function HandleClickedPOI(){
			var CData=CheckStatus();
			if (CData){			
				var Data=new Array();
				var IncomingLength=Cdata.incoming.marker.length;
				var x=0;
				if (IncomingLength>0) {
					do{					
						var State=Cdata.incoming.marker[x].State;
						var Location=Cdata.incoming.marker[x].Location;
						var Postcode=Cdata.incoming.marker[x].Postcode;
						var Description=Cdata.incoming.marker[x].Description;
						var Address=Cdata.incoming.marker[x].Address;
						var Lng=Cdata.incoming.marker[x].Lng;
						var Lat=Cdata.incoming.marker[x].Lat;
						x++;
					}
					while(--IncomingLength);
					if(State=='True'){
						//map.setCenter(point, Zoom);
						map.openInfoWindowHtml(point2,"<span style='font-size:12px;font-family:arial;color:#565656;width:300px;float:left;'><b>"+Location+"</b><br/><br/>"+Description+"</span>");
					}
					else{
						alert('errors occured whilst retreiving this markers data.');
					}
				}
				
			}
		}		