var xmlUrl;
var map;
var geocoder;
var ignoreNextLoad = true;
var priceMin;
var priceMax;
var beds;
var baths;
var propType;
var markersLen = 0;
var mapMarkers;
var mapPoints;
var infoHtmls;
var loggedIn = false;
var propAddress;
var propCity;
var propState;
var propZip;
var partnerOrMember = false;
var startLat ;
var startLong;
var startZoom;


var imageviewer='image_hotel';
var icon_hotel = new GIcon();
icon_hotel.image = "http://booking.hotelsinbrussels.be/images/mapicons/hotel.png";
icon_hotel.shadow = "http://booking.hotelsinbrussels.be/images/mapicons/shadow.png";
icon_hotel.iconSize=new GSize(21,31); 
icon_hotel.shadowSize=new GSize(21,31); 
icon_hotel.iconAnchor=new GPoint(16,32); 
icon_hotel.infoWindowAnchor=new GPoint(16,0); 

var icon_restaurant = new GIcon();
icon_restaurant.image = "http://booking.hotelsinbrussels.be/images/mapicons/food.png";
icon_restaurant.shadow = "http://booking.hotelsinbrussels.be/images/mapicons/shadow.png";
icon_restaurant.iconSize=new GSize(21,31); 
icon_restaurant.shadowSize=new GSize(21,31); 
icon_restaurant.iconAnchor=new GPoint(16,32); 
icon_restaurant.infoWindowAnchor=new GPoint(16,0); 

var icon_landmark = new GIcon();
icon_landmark.image = "http://booking.hotelsinbrussels.be/images/mapicons/scenic.png";
icon_landmark.shadow = "http://booking.hotelsinbrussels.be/images/mapicons/shadow.png";
icon_landmark.iconSize=new GSize(21,31); 
icon_landmark.shadowSize=new GSize(21,31); 
icon_landmark.iconAnchor=new GPoint(16,32); 
icon_landmark.infoWindowAnchor=new GPoint(16,0); 

var icon_museum = new GIcon();
icon_museum.image = "http://booking.hotelsinbrussels.be/images/mapicons/house.png";
icon_museum.shadow = "http://booking.hotelsinbrussels.be/images/mapicons/shadow.png";
icon_museum.iconSize=new GSize(21,31); 
icon_museum.shadowSize=new GSize(21,31); 
icon_museum.iconAnchor=new GPoint(16,32); 
icon_museum.infoWindowAnchor=new GPoint(16,0); 

var icon_shopping = new GIcon();
icon_shopping.image = "http://booking.hotelsinbrussels.be/images/mapicons/entertain.png";
icon_shopping.shadow = "http://booking.hotelsinbrussels.be/images/mapicons/shadow.png";
icon_shopping.iconSize=new GSize(21,31); 
icon_shopping.shadowSize=new GSize(21,31); 
icon_shopping.iconAnchor=new GPoint(16,32); 
icon_shopping.infoWindowAnchor=new GPoint(16,0); 

var icon_theatre = new GIcon();
icon_theatre.image = "http://booking.hotelsinbrussels.be/images/mapicons/entertain.png";
icon_theatre.shadow = "http://booking.hotelsinbrussels.be/images/mapicons/shadow.png";
icon_theatre.iconSize=new GSize(21,31); 
icon_theatre.shadowSize=new GSize(21,31); 
icon_theatre.iconAnchor=new GPoint(16,32); 
icon_theatre.infoWindowAnchor=new GPoint(16,0); 


/*
Settings for default small markers
icon.iconSize = new GSize(12, 20);
icon.shadowSize = new GSize(22, 20);
icon.iconAnchor = new GPoint(6, 20);
icon.infoWindowAnchor = new GPoint(5, 1);
*/

/*Settings for hotel markers*/


function smapload() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		GEvent.addListener(map, "moveend", function() { newDownload() });

		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl(2));
		map.addControl(new GOverviewMapControl());

	    startLat = lat;
		startLong = lng;
		startZoom = zoom;
		
		/*if (newLat && newLat.value > ""){startLat=parseFloat(newLat.value)};
		if (newLong && newLong.value > ""){startLong=parseFloat(newLong.value)};
		if (newZoom && newZoom.value > ""){startZoom=parseInt(newZoom.value)};
    */
    	
		map.setCenter(new GLatLng(startLat, startLong), startZoom,G_HYBRID_MAP);
		map.zoomIn();
	}
}

function loadAddress() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($("GoogleMap"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GOverviewMapControl());
		if (propAddress || propCity || propState || propZip){
			var address = propAddress + ", " + propCity + ", " + propState + " " + propZip
			geocoder = new GClientGeocoder();
			geocoder.getLocations(address, showAddressOnMap);
		}
	}
}

function loadPoint() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($("GoogleMap"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GOverviewMapControl());
		if (propLatitude > ""){startLat=parseFloat(propLatitude);};
		if (propLongitude > ""){startLong=parseFloat(propLongitude);};
		startZoom=parseInt(17);
		var point = new GLatLng(startLat, startLong);
		map.setCenter(point, startZoom);
		//var marker = new GMarker(point);
		//map.addOverlay(marker);
	}
}

function switchToHybrid(){
	var mapCenter = map.getCenter();
	try{
		map.setCenter(new GLatLng(mapCenter.lat(),mapCenter.lng()), map.getZoom(), G_HYBRID_MAP);
	} catch(e) {
		//Silent
	};
};


function createMarker(point, number, bid, mls, addr, prc, bdr, bth) {
  var marker = new GMarker(point, icon_hotel);
  GEvent.addListener(marker, "click", function() {
    var winHtml = "<table ><tr><td>more info</td></tr></table>";
    marker.openInfoWindowHtml(winHtml);
  });
  return marker;
}

function popupHtml(marker,link,bBlank){
	winHtml = "<table cellspacing=\"0\" cellpadding=\"0\" class=\"mappopup\"><tr><td><table class=\"mappopup\" width=\"180\"><tr><td><img width=\"110\" height=\"80\" src=\""+imageviewer+".php?id=" + marker.getAttribute("id") + "\"></td><td style=\"font-family: Arial; font-size: 11px;\">"   
  winHtml += "</td><td>&nbsp;</td><td>" + marker.getAttribute("name") + "<br/>";
	winHtml += "<br/><a href=\""+link+"\"";
	if(bBlank){
	winHtml += " target=\"_blank\"";
	
  }
  winHtml +=">More Info</a>";
	winHtml += "</td></tr></table></td></tr></table>";
	return winHtml;
};

function tooltipHtml(marker){
	tipHtml = "<table class=\"mappopup\"><tr><td nowrap style=\"font-family: Arial; font-size: 11px;\">"
	tipHtml += "<br />" + marker.getAttribute("name") + "<br />" + marker.getAttribute("price");
	tipHtml += "<br />" + marker.getAttribute("bdr") + "<br />Baths: " + marker.getAttribute("bth");
	tipHtml += "</td></tr></table>";
	return tipHtml;
};

function gridRowHtml(marker, rowNum){
	rowHtml = "<tr  class=\"normal\" onmouseover=\"this.className='highlight';\" onmouseout=\"this.className='normal';\" onclick=\"parent.mapOpener(" + rowNum + ")\">";
	rowHtml += "<td>" + marker.getAttribute("id") + "</td><td>" + marker.getAttribute("address");
	rowHtml += "</td><td>" + marker.getAttribute("name") + "</td><td>" + marker.getAttribute("price") + "</td>";
	rowHtml += "</tr>";
	return rowHtml;
};

function newDownload(){
    //alert('NewDownload');
    if (map && !ignoreNextLoad){
        showLoading();
        setTimeout("doDownload()",100);
    } else {
		  ignoreNextLoad = false; 
	 };
};


function doDownload(){
    //alert('doDownload');
    if (map){
        var bounds = map.getBounds();
        var southWest = bounds.getSouthWest();
        var northEast = bounds.getNorthEast();
        xmlUrl = "xml_hotels.php";
        var mapCenter = map.getCenter();
       
        xmlUrl += "?latmin=" + southWest.lat();
        xmlUrl += "&latmax=" + northEast.lat();
        xmlUrl += "&lngmin=" + southWest.lng();
        xmlUrl += "&lngmax=" + northEast.lng();
        
        //window.open(xmlUrl);
        //alert('Downloading Through HTTP POST'+ xmlUrl);
        //document.write('Downloading Through HTTP POST'+ xmlUrl);
        GDownloadUrl(xmlUrl, function(data) {
          map.clearOverlays();
          if (map.getZoom() > 5) {
							
              var xml = GXml.parse(data);
              var markers = xml.getElementsByTagName("marker");
              
              markersLen = markers.length;
              //alert('parsing marker'+markersLen);
              if (markersLen){
              
                  mapPoints = new Array(markersLen); 
                  mapMarkers = new Array(markersLen); 
                  infoHtmls = new Array(markersLen); 
                  var propTable = "<table align=\"left\" width=\"660px\" bgcolor=\"#ffffff\"><tr class=\"Resultsheading\"><td>ID #</td><td>Address</td><td>Price</td><td>Name</td></tr>";
 	                                  
                   for (var i = 0; i < markersLen; i++) {
                  
                    if (parseFloat(markers[i].getAttribute("lat")) && parseFloat(markers[i].getAttribute("lng"))){
  					                  
                    mapPoints[i] = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                               parseFloat(markers[i].getAttribute("lng")));

//alert('getting type');
					var type=parseFloat(markers[i].getAttribute("type"));
					var link=markers[i].getAttribute("link");
					//alert('adding marker'+type);
					if(type==1){
					  imageviewer='image_hotel';
						mapMarkers[i] = new PdMarker(mapPoints[i],icon_hotel);
                    	mapMarkers[i].setHoverImage("http://booking.hotelsinbrussels.be/images/mapicons/hotel.png");
                    	infoHtmls[i] = popupHtml(markers[i],link,false);
                    	GEvent.addListener(mapMarkers[i],'click',makeOpenerCaller(i)); 
                    	map.addOverlay(mapMarkers[i]);
                       
					} else if(type==2){
						imageviewer='image_poi';
						var category=parseFloat(markers[i].getAttribute("category"));
						if(category==1){
							mapMarkers[i] = new PdMarker(mapPoints[i],icon_restaurant); 
						} else 
						if(category==2){
							mapMarkers[i] = new PdMarker(mapPoints[i],icon_landmark); 
						} else 
						if(category==3){
							mapMarkers[i] = new PdMarker(mapPoints[i],icon_museum); 
						} else 
						if(category==4){
							mapMarkers[i] = new PdMarker(mapPoints[i],icon_shopping); 
						} else 
						if(category==5){
							mapMarkers[i] = new PdMarker(mapPoints[i],icon_theatre); 
						} 
                    	infoHtmls[i] = popupHtml(markers[i],link,true);
                    	GEvent.addListener(mapMarkers[i],'click',makeOpenerCaller(i)); 
                    	map.addOverlay(mapMarkers[i]);
					}
					
                    
                    // Create a new point to indicate the map location for the marker
					/* var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
					                         parseFloat(markers[i].getAttribute("lng")));
					
					 // Create a new marker with the point, and overlay it on the map
					mapMarkers[i] = new GMarker(point);
					 map.addOverlay(mapMarkers[i]);*/
                    
                    propTable += gridRowHtml(markers[i], i);
                  
                    }
                  }
                  propTable +="</table>";
                  
                  
                 // alert('writing results');
                  //resultsFrame=document.getElementById("ResultsDiv");
                  //resultsFrame.contentWindow.document.body.innerHTML=propTable;
                  /*resultsFrame.innerHTML=propTable;
                  
                  if (markersLen == 50) {
							showStatus("Over 50 matches found.  Displaying top 50.  Please zoom in to see additional matches.");
                  } else {
							if (markersLen == 1){
								showStatus(markersLen + " property matched your criteria.  Displaying all matches.");
							} else {
								showStatus(markersLen + " properties matched your criteria.  Displaying all matches.");
							};
                  };
                  showResults();*/
              } else {
                  /*resultsFrame=document.getElementById("ResultsFrame");
                  resultsFrame.contentWindow.document.body.innerHTML=""; 
                  hideResults();
                  showStatus("No properties matched.  Please change your criteria or try a different location.");
                  */      
              };
          } else {
            /*hideResults();
           showStatus("You are zoomed out too far.  Please zoom in to see properties");
           */ 
          };
        });
    };
    document.getElementById('loaddiv').style.display = 'none';
};

function makeOpenerCaller(i) { 
        return function() { mapOpener(i); }; 
};


function mapOpener(i) { 
        ignoreNextLoad = true;
        mapMarkers[i].openInfoWindowHtml(infoHtmls[i]);
        mapMarkers[i].showTooltip();
} ;

function showLoading(){
    if (document.all){
        divLeft = (document.body.clientWidth / 2) - 100;
    } else {
        divLeft = (window.innerWidth / 2) - 100;
    };
    document.getElementById('loaddiv').style.left = divLeft + "px";
    document.getElementById('loaddiv').style.display = '';
    
};


//Centers map on address (no marker added).
//Used by map search.
function showAddress(response){
	addAddressToMap(response, false, false, true);
};

//Centers map on address and displays marker.
//Used by property detail (ignore autosearch).
function showAddressOnMap(response, considerAutosearch){
	addAddressToMap(response, true, true, false);
};


function startSearch()
{
  //alert('startsearch');
/*
	if ($F('autosearch') == 'True')
	{
		findLocation();
	} else {
	*/
		newDownload();
	//};
};

function getZoomByAccuracy(acc){
	//Accuracy Reference:
	//0 Unknown location.
	//1 Country level accuracy.
	//2 Region (state, province, prefecture, etc.) level accuracy.
	//3 Sub-region (county, municipality, etc.) level accuracy.
	//4 Town (city, village) level accuracy.
	//5 Post code (zip code) level accuracy.
	//6 Street level accuracy.
	//7 Intersection level accuracy.
	//8 Address level accuracy.
	switch (acc){
		case 1: 
			return 3;
			break;
		case 2: 
			return 6;
			break;
		case 3: 
			return 7;
			break;
		case 4: 
			return 10;
			break;
		case 5: 
			return 13;
			break;
		case 6: 
			return 14;
			break;
		case 7: 
			return 15;
			break;
		case 8: 
			return 16;
			break;
		default :
			return 5;
	}
};

function trim (str) {
	str = str.replace(/^\s+/, '');
	for (var i = str.length - 1; i > 0; i--) {
		if (/\S/.test(str.charAt(i))) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return str;
}

