﻿var maxZoom = 15;
var minZoom = 2;
var useExtInfoWindow = 1;

var map;
var mgr;
var uhotwIcon;
var mode;
var focusedlatlng;
var focusedhotelid;
var bounds;
var batch = [];
var keyword = "test";
function drawAJAXMap(container)
{
 if (GBrowserIsCompatible()) {
    mode = document.getElementById("ctl00_ContentPlaceHolder2_hdnPage").value;
     if (map&&(mode=="Home"))
     {
        //alert("Map already initialized");
     }
     else
     {
         //Initialize global variables
        
        bounds = new GLatLngBounds();            
       
        uhotwIcon = new GIcon(G_DEFAULT_ICON);
        map = new GMap2(document.getElementById(container));
                
        map.disableScrollWheelZoom();
                
        //Set Map Center
        u_setCenter();
        
        //Set Map Controls
        u_addMapControls();    
        
        mgr = new MarkerManager(map);
        getMapData(mode);
     }    
   }
}
function getMapData(mode)
{
    if (mode == "HotelListing")
    {
        keyword = document.getElementById("ctl00_ContentPlaceHolder2_hdnAllHotels").value;
        if(keyword == "all")
        {
            minZoom = 1;
            var queryStringRegion =  "Countries" + '#' + document.getElementById("ctl00_ContentPlaceHolder2_hdnKeyword").value;        
            SiteRedesign.SiteRedesign.GetMapData.GetMapXML(queryStringRegion,successRegion,failure);
        }
        else
        {
            minZoom = 2;
            u_extendMapData(mode);
        }
    }
    else
    {
        var queryStringRegion =  "Countries" + '#' + document.getElementById("ctl00_ContentPlaceHolder2_hdnKeyword").value;        
        SiteRedesign.SiteRedesign.GetMapData.GetMapXML(queryStringRegion,successRegion,failure);
    }
}
function successRegion(data, context, methodName)
{
    var uhotwIconCluster = new GIcon(G_DEFAULT_ICON);
    var xml = GXml.parse(data);
    var markers = xml.documentElement.getElementsByTagName("marker");
            
    uhotwIconCluster.iconSize = new GSize(15, 23);
    uhotwIconCluster.shadowSize = new GSize(0, 0);
    uhotwIconCluster.iconAnchor = new GPoint(1, 30);
    uhotwIconCluster.image = document.getElementById("hdnSiteURL").value + "Images/GreenFlag.gif";
    
    /*var markerOptionsFocus = { icon:uhotwIconCluster };
            
    var markerFocus = new GMarker(focusedlatlng, markerOptionsFocus);
    map.addOverlay(markerFocus);*/
    
    //Now add Country markers
    u_addCountryMarkers(markers,uhotwIconCluster);
    mgr.addMarkers(batch , 1, 5);
    //Call method to add markers for properties
    u_extendMapData(mode);
}
function u_extendMapData(mode)
{
    var queryString =  mode + '#' + document.getElementById("ctl00_ContentPlaceHolder2_hdnKeyword").value;
    SiteRedesign.SiteRedesign.GetMapData.GetMapXML(queryString,success,failure);
}
function failure(error, context, methodName)
{
    $("#divLoading").fadeOut("slow");
    alert('Error in AJAX Call - Properties Info: ' + error.get_message());
}
function success(data, context, methodName)
{
  var xml = GXml.parse(data);  
  var markers = xml.documentElement.getElementsByTagName("marker");    
    if (mode == "HotelListing")
    {
        //map.panTo(new GLatLng(parseFloat(markers[0].getAttribute("lat")),parseFloat(markers[0].getAttribute("lng"))), minZoom);
        //map.setZoom(map.getBoundsZoomLevel(bounds));
        //map.setCenter(bounds.getCenter());
    }
    else if (mode == "HotelDetail")
    {
        map.setCenter(new GLatLng(parseFloat(EXP_mapHotelsFocus[0][1]),parseFloat(EXP_mapHotelsFocus[0][2])), 13);
        focusedhotelid = EXP_mapHotelsFocus[0][4];
    }
    else
    {
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(new GLatLng(31.1136293,-7.87216), minZoom);
    }  
  //Set Icon
  u_setMarkerIcon(uhotwIcon);
  
  //Now add all markers
  u_addMarkers(markers,uhotwIcon);
  if (mode == "HotelListing")
  {
    
    mgr.addMarkers(batch , 2, 15);
    map.setZoom(map.getBoundsZoomLevel(bounds));
    map.setCenter(bounds.getCenter());
  }
  else
  {
    mgr.addMarkers(batch , 5, 15);
  }
  mgr.refresh();
  
  //Adding icon in the Details Page.
  if (mode == "HotelDetail")
    u_addFocusedMarker();
  //After everything is loaded, fade out the Loading icon.
  $("#divLoading").fadeOut("slow");
}

function createMarker(point,hotelId,uhotwIcon)
{     
    
    markerOptions = { icon:uhotwIcon };
    var mapMarker = new GMarker(point, markerOptions); 

    GEvent.addListener(mapMarker, "mouseover", function() {       
        var zoomlevel = map.getZoom();
        SiteRedesign.SiteRedesign.GetMapData.GetMarkerInfo(hotelId,zoomlevel,infoSuccess,infoFailure);
        
        function infoFailure(error, context, methodName)
        {
            alert('Error in AJAX Call - Marker Info: ' + error.get_message());
        }
        function infoSuccess(data, context, methodName)
        {
            if (useExtInfoWindow == 1)
                mapMarker.openInfoWindowHtml(data);    
                //mapMarker.openExtInfoWindow(map,"simple_example_window",data,{beakOffset: 3});
            else
                mapMarker.openInfoWindowHtml(data);
        }
    }); 
    GEvent.addListener(mapMarker, "click", function() {
        SiteRedesign.SiteRedesign.GetMapData.GetHotelName(hotelId,infoSuccess,infoFailure);
        
        function infoFailure(error, context, methodName)
        {
            alert('Error in AJAX Call - Marker Info: ' + error.get_message());
        }
        function infoSuccess(data, context, methodName)
        {
            var url = document.getElementById("hdnSiteURL").value + data;
            window.location.href(url);
        }
    });
    return mapMarker;
}
function createCountryMarker(point,data,uhotwIcon)
{     
    markerOptions = { icon:uhotwIcon };
    var mapMarker = new GMarker(point, markerOptions); 

    GEvent.addListener(mapMarker, "mouseover", function() {   
         mapMarker.openInfoWindowHtml(data);    
        //mapMarker.openExtInfoWindow(map,"small_window",data,{beakOffset: 3});            
    });  
    /*GEvent.addListener(mapMarker, "mouseout", function() {   
        mapMarker.closeInfoWindow();
    }); */
    GEvent.addListener(mapMarker, "click", function() {   
        map.setCenter(point, 5);     
    });    
    return mapMarker;
}

function u_addFocusedMarker()
{
    var uhotwIconFocus = new GIcon(G_DEFAULT_ICON);
    uhotwIconFocus.iconSize = new GSize(19, 23);
    uhotwIconFocus.shadowSize = new GSize(0, 0);
    uhotwIconFocus.image =document.getElementById("hdnSiteURL").value + "Images/Hotel-Icon-04-Red.gif";
    // Set up our GMarkerOptions object
    var markerOptionsFocus = { icon:uhotwIconFocus };
            
    var markerFocus = new GMarker(focusedlatlng, markerOptionsFocus);
    map.addOverlay(markerFocus);

    var focusedhotelinfo = '<div class="mapContent">' + EXP_mapHotelsFocus[0][3] + '</div>';
    GEvent.addListener(markerFocus, "mouseover", function() {
        if (useExtInfoWindow == 1)
            markerFocus.openExtInfoWindow(map,"simple_example_window",focusedhotelinfo,{beakOffset: 3});
        else
            markerFocus.openInfoWindowHtml(focusedhotelinfo);
    });
}

function u_addMarkers(markers,uhotwIcon)
{    
    if (mode == 'HotelListing')
    {        
      for (var i = 0; i < markers.length; i++) 
      {
        var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng"))); 

        var hotelId = markers[i].getAttribute("hid");
        var mapMarker = createMarker(latlng,hotelId,uhotwIcon);
        batch.push(mapMarker);
        bounds.extend(mapMarker.getPoint());
      }    
    }
    else
    {      
      for (var i = 0; i < markers.length; i++) 
      {
        var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
       
        if (mode == "HotelDetail") // For hotel details, show focussed hotel in different icon 
        {       
            var hotelId = markers[i].getAttribute("hid");   
            if (hotelId != focusedhotelid)
            {
                var mapMarker = createMarker(latlng,hotelId,uhotwIcon);            
                batch.push(mapMarker);
            }
        }
        else // for search and home page, show all hotels found as result
        {
            var hotelId = markers[i].getAttribute("hid");
            var mapMarker = createMarker(latlng,hotelId,uhotwIcon);
            batch.push(mapMarker);
            bounds.extend(mapMarker.getPoint());
        }        
      }
    }
}

function u_addCountryMarkers(markers,uhotwIcon)
{
  for (var i = 0; i < markers.length; i++) 
  {
    var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng"))); 
    var countryName = '<b><div class="title">' + markers[i].getAttribute("cname") + '</div></b><div class="mapContent">' + markers[i].getAttribute("count") + ' propertie(s)<br /><a href="#" style="cursor:pointer;text-decoration:underline;line-height:24px;" onclick="javascript:zoomHereCountry' + latlng + ';">Zoom here</a></div>';  
    var mapMarker = createCountryMarker(latlng,countryName,uhotwIcon);            
    batch.push(mapMarker);
  }
}

function zoomHere(lat,lng)
{
    map.setCenter(new GLatLng(lat,lng), 13);     
    mgr.refresh();
}

function zoomHereCountry(lat,lng)
{
    map.setCenter(new GLatLng(lat,lng), 5);   
    mgr.refresh();  
}

function u_setCenter()
{
    //Set center to the focussed Hotel
    if (mode == "HotelDetail")
    {
        focusedlatlng = new GLatLng(parseFloat(EXP_mapHotelsFocus[0][1]), parseFloat(EXP_mapHotelsFocus[0][2]));
        map.setCenter(focusedlatlng, 13);
    }
    //Set center to the center of the globle. In case of search listing, we pan the center after plotting the markers
    else
    {
      map.setCenter(new GLatLng(31.1136293,-7.87216), minZoom);
    }
}
function u_addMapControls()
{
    map.addControl(new GLargeMapControl3D());
    //map.addControl(new GOverviewMapControl());
    map.addControl(new GScaleControl());
    map.addControl(new GMapTypeControl());   
    var mt = map.getMapTypes();
    for (var i=0; i<mt.length; i++)
     {
       mt[i].getMinimumResolution = function() {return minZoom;};
       mt[i].getMaximumResolution = function() {return maxZoom;};
     }
     map.enableContinuousZoom();
}
function u_setMarkerIcon(uhotwIcon)
{
    if (mode == "HotelDetail")
    {
        uhotwIcon.iconSize = new GSize(19, 23);
        uhotwIcon.shadowSize = new GSize(0, 0);
        uhotwIcon.image = document.getElementById("hdnSiteURL").value + "Images/Hotel-Icon-04-Big.gif";  
    }
    else
    {
        uhotwIcon.iconSize = new GSize(13, 16);
        uhotwIcon.shadowSize = new GSize(0, 0);
        uhotwIcon.iconAnchor = new GPoint(0, 12);
        uhotwIcon.infoWindowAnchor = new GPoint(5, 6);
        uhotwIcon.image = document.getElementById("hdnSiteURL").value + "Images/Hotel-Icon-04.gif";
    }
    return uhotwIcon;
}
