// maps.js 
// Created on: 18 agosto 2006
// Author: Mauro Ferratello :-� - Zero Computing S.r.l.
// Version 0.1 


// +---------------------  @DONE:   ----------------------------------------------------+
// | creato un array (in JSP) per la gestione dinamica delle chiavi                     | 
// | d Google in funzione dell'url su cui e' deployato il progetto.                     |
// +------------------------------------------------------------------------------------+

var mainMap ; // Mappa Centrale
var largeControl ;
var smallControl ;
var a_marker = new Object();
var hotelDetail = new Array();
//alert(location.host);
//alert(location.hostname);

// ######### Definizione Icona Hotel: da cambiare... ##############
/*
        var icon = new GIcon();
        icon.image = "http://www.zero.it/images/favicon.png";
        icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
        icon.iconSize = new GSize(16, 16);
        icon.shadowSize = new GSize(16, 16);
        icon.iconAnchor = new GPoint(0, 0);
        icon.infoWindowAnchor = new GPoint(0, 0);
 */
// ################################################################


// =============  MAIN MAP (Mappa principale) =================
//function loadMainMap(lon, lat)
function loadMainMap(country, city, latitude,longitude) {
  //      alert('<p>'+lon+':'+lat+'</p>');

  if (GBrowserIsCompatible()) {
    
    mainMap = new GMap2(document.getElementById("mainMap"));
    
    largeControl = new GLargeMapControl();
    smallControl = new GSmallMapControl();    
    
    //map.addControl(new GSmallMapControl());
    mainMap.addControl(largeControl);
    mainMap.addControl(new GMapTypeControl());

    //mainMap.setCenter(new GLatLng(lat,lon), 11);
    //var center = new GLatLng(lat, lon);	          
   
    setCityMarker(country, city, latitude, longitude);
    return;
  }
}
// +------------- setCityMarker() ------------------------------------------+
// |  estrae le coordinate della citta' in funzione dei parametri ricevuti, |
// |  se ho latitude e longitude uso quelli (che arrivano da DB),           |
// |  altrimenti faccio calcolare a Google le coordinate in funzione di     |
// |  country e city (pero' non sempre riesce a trovarle)                   |
// +------------------------------------------------------------------------+
function setCityMarker(country, city, latitude, longitude)
{
  
//alert(country+','+city+','+latitude+','+longitude+"MainMap:"+mainMap.isLoaded());

  var mainMapDiv = document.getElementById("mainMap");
  

  //if (mainMapDiv.style.display == 'none' )
  if (mainMapDiv == 'undefined' )
  {
    setTimeout("setCityMarker('"+country+"','"+city+"','"+latitude+"','"+longitude+"')", 250);
    return;
  }
  
  if (latitude != 'null' && latitude != undefined && longitude != 'null' && longitude != undefined) 
  {
    
//    alert('coord');
    placeCityMarker(new GLatLng(latitude,longitude));
    return;
  }
  else
  { 
//    alert('GoogleGeoodes');
    var geocoder = new GClientGeocoder();
    var address = city+","+country;
    geocoder.getLatLng(address,
    function(point) {
      placeCityMarker(point);
    });
    return;
  }  
}

// +------------- placeCityMarker() ------------------------------------------+
// |  Centra la mappa e disegna lo stoppino nella posizione indicata da point |
// |  point: GLatLng(latitude,longitude)                                      |
// +--------------------------------------------------------------------------+
function placeCityMarker(point)
{ 
  //alert(point.lat()+","+point.lng());
 
  if (point == null)
  {
    point = new GLatLng(0,0);
    mainMap.setCenter(point, 2);  
    mainMap.openInfoWindowHtml(point,"<p style='font-family:verdana; font-size:12px;color:red; '>Coordinate della citt&agrave; non disponibili</p> ");
    return;
  }
  if (!(mainMap && mainMap.isLoaded()))
  {
    mainMap.setCenter(point, 11);  
  } 
  
  //var cityIcon = new GIcon(G_DEFAULT_ICON, "imgs/mapicons/iconb_square.png");
  var cityIcon = new GIcon(G_DEFAULT_ICON, "imgs/mapicons/center.png");
  cityIcon.iconSize = new GSize(24,34);
  //cityIcon.shadowSize = new GSize(24,34);
  cityIcon.shadowSize = new GSize(0,0);
  //var cityMarker = new GMarker(new GPoint(lon.value,lat.value), cityIcon);
  var cityMarker = new GMarker(point, cityIcon);
  cityMarker.title = "Inserire il nome della citta";
  GEvent.addListener(cityMarker, "click", function() 
  {
    cityMarker.showMapBlowup(18,G_SATELLITE_MAP);
    //cityMarker.openInfoWindowHtml("<p>Citta di: "+city+"</p>");
  });
  GEvent.addListener(cityMarker, "infowindowclose", function() 
  {
    mainMap.panTo(point);
  }); 
  
  mainMap.addOverlay(cityMarker);
  
}

// +------------- setHotelMarker() ---------------------------+
// |  Disegna lo stoppino dell'hotel in funzione delle        |
// |  coordinate ricevute e setta la chiamata ajax generata   |
// |  dal click sullo stoppino.                               |
// +----------------------------------------------------------+
function setHotelMarker(latitude, longitude, idHotel, idProvider, idSearch, counter) {    
  //alert('stoppino N.'+counter+":"+latitude+":"+longitude);
  if (latitude == 0.0 && longitude == 0.0)
    return;
  var url = 'retrievedetail.do';
  var pars = 'idSearch='+idSearch+'&id_hotel='+idHotel+'&idProvider='+idProvider+'&outputFormat=JS';
  var myAjax;
  
  var iconUrl = "imgs/mapicons/iconr"+counter+".png";
  var myIcon = new GIcon(G_DEFAULT_ICON, iconUrl);
  myIcon.iconSize = new GSize(24,34);
  //myIcon.shadowSize = new GSize(24,34);
  myIcon.shadowSize = new GSize(0,0);
  myIcon.iconAnchor = new GPoint(24,34);
  
  var pinCenter = new GLatLng(latitude,longitude);
  var marker = new GMarker(pinCenter, {icon:myIcon});
  //markerobj = new Object();
  //markerobj.marker = marker;
  a_marker[counter] = marker;
  marker.title = name;
  
  GEvent.addListener(marker, "click", function ciccio() {
    mainMap.closeInfoWindow();
    var waitContent = "<div align=center class='map_div' ><img src='imgs/indicator.moz.gif'></div>";
    marker.openInfoWindowHtml(waitContent);
    myAjax = new Ajax.Request(  url, {method: 'get', parameters: pars, onFailure: function(originalRequest){getWindowContent(originalRequest,marker);}, evalScripts : false , onSuccess: function(originalRequest){getWindowContent(originalRequest,marker);} }); 
    //        getWindowContent(marker);
    //marker.openInfoWindowTabsHtml(getWindowContent(marker));
  });
  GEvent.addListener(marker, "infowindowclose", function center() {;mainMap.panTo(pinCenter); });    
  mainMap.addOverlay(marker);  
  
  //alert (url+pars);
  //myAjax = new Ajax.Request(  url, {method: 'get', parameters: pars, onFailure: reportError, evalScripts : false , onSuccess: function(originalRequest){createHotelMarker(originalRequest,counter);} }); 
  
  return;
} 
// =====  Richiesta AJAX x contenuto InfoWindow  ==========
function getWindowContent(originalRequest, marker) {
  if(originalRequest.responseText != -1) {
//alert(originalRequest.responseXML);    
/*
    var tmp = eval(originalRequest.responseText);
    var tab1 = getDecodedValue(hotelDetail['tab1']);
    var tab2 = getDecodedValue(hotelDetail['tab2']);
    var tab3 = getDecodedValue(hotelDetail['tab3']);
*/ 
    var htmlresponse = originalRequest.responseXML.getElementsByTagName("tab1");
    var tab1 = htmlresponse[0].firstChild.nodeValue;    
    var htmlresponse = originalRequest.responseXML.getElementsByTagName("tab2");
    var tab2 = htmlresponse[0].firstChild.nodeValue;    
    var htmlresponse = originalRequest.responseXML.getElementsByTagName("tab3");
    var tab3 = htmlresponse[0].firstChild.nodeValue;    

    var infoTabs = [
    new GInfoWindowTab("Generale",tab1 ),
    new GInfoWindowTab("Descrizione",tab2 ),
    new GInfoWindowTab("Servizi",tab3)
    ];
    marker.openInfoWindowTabsHtml(infoTabs);
  }
  else {
    
    marker.openInfoWindowHtml("<p style='font-family:verdana; color:#AAAAAA;'>Hotel data not Available</p>");
  }
  return;  
}

function marker_onclick(idHotel, idProvider, idSearch, counter)
{
  var url = 'retrievedetail.do';
  var pars = 'idSearch='+idSearch+'&id_hotel='+idHotel+'&idProvider='+idProvider+'&outputFormat=JS';
  var myAjax;
  //alert(counter); 
  var marker = a_marker[counter];
  if (marker == undefined)
  {
    //alert("Hotel latitude/longitude not currently available.");
    alert("Latitudine e longitudine dell'Hotel non sono attualmente disponibili.");
    return false;
  }
  myAjax = new Ajax.Request(  url, {method: 'get', parameters: pars, onFailure: function(originalRequest){getWindowContent(originalRequest,marker);}, evalScripts : false , onSuccess: function(originalRequest){getWindowContent(originalRequest,marker);} });   
  //marker.openInfoWindowHtml('<p>Ciao ciao .</p>');
  return;
}

// ===== FINE MAIN MAP ======
// ===========================================================================

//  -------- Carica Mappa del dettaglio dell'hotel ----------------
function loadMap(idHotel) {
  var lon = document.getElementById("lon"+idHotel);
  var lat = document.getElementById("lat"+idHotel);
  var descr = document.getElementById("descr"+idHotel);
//  var mapDiv = document.getElementById("map"+idHotel);
  var mapTab = document.getElementById("tab-page-"+idHotel+"_5");
//@TODO: mettere controllo x il reload della mappa, se c'e' gia' e' inutile.
  if (mapTab.style.display == 'none')
  {
    setTimeout("loadMap("+idHotel+")", 250);
    return;
  }
  
  //alert('<p>'+lon.value+':'+lat.value+'</p>');
  if (GBrowserIsCompatible()) {
    var map = new GMap2(document.getElementById("map"+idHotel));
    //map.addControl(new GSmallMapControl());
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    map.setCenter(new GLatLng(lat.value,lon.value), 13);
    map.openInfoWindowHtml(map.getCenter(),descr.innerHTML);
    
    // @TODO: gestire visualizzazione dettaglio 
    //mainMap.openInfoWindowHtml(map.getCenter(),descr.innerHTML);
    
    map.addOverlay(new GMarker(new GPoint(lon.value,lat.value)));
  }
}
// ----------  crea Marker nella mappa del Dettaglio Hotel ---------
function createMarker(point, popup, icon) {
  var marker = new GMarker(point,icon);
  // Show this markers index in the info window when it is clicked
  var html = popup;
  GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(html);});
  return marker;
};
// -----------  Apre Info window nella mappa del dettaglio Hotel  ---------
function openHotelMapInfo(lonField, latField, detailDiv) {
  var lon = document.getElementById(lonField) ;
  var lat = document.getElementById(latField) ;
  var descr = document.getElementById(detailDiv) ;
  var center = new GLatLng(lon.value,lat.value);
  //alert (lon.value+","+lat.value+":"+descr.innerHTML);
  //alert(center.lat+"-"+center.lng);
  //map.addOverlay(new GMarker(new GPoint(lon.value,lat.value)));
  //mainMap.openInfoWindowHtml(new GPoint(lon.value,lat.value),descr.innerHTML);
  mainMap.openInfoWindowHtml(center,descr.innerHTML);
  mainMap.setCenter(center);
}

/* @TODO: Eliminare, non serve...
function createEmptyHotelMarker(latitude, longitude, counter) {
    alert('stoppino N.'+counter+":"+latitude+":"+longitude);
    var iconUrl = "imgs/mapicons/iconr"+counter+".png";
    var myIcon = new GIcon(G_DEFAULT_ICON, iconUrl);
    myIcon.iconSize = new GSize(24,34);
    myIcon.shadowSize = new GSize(24,34);
 
    var marker = new GMarker(new GLatLng(latitude,longitude), {icon:myIcon});
    marker.title = name;
    GEvent.addListener(marker, "click", function ciccio() {
        mainMap.closeInfoWindow();
        var waitContent = "<div align=center style='vertical-align:middle; width:50px;height:30px;' ><img src='imgs/indicator.moz.gif'></div>";
        marker.openInfoWindowHtml(waitContent);
        getWindowContent(marker);
        //marker.openInfoWindowTabsHtml(getWindowContent(marker));
    });
    mainMap.addOverlay(marker);           
}
 */
/* @TODO: Eliminare,ora non serve.
function createHotelMarker(originalRequest, counter) {
    counter=counter+1;
    //alert (counter);
    if(originalRequest.responseText != -1) {
        //alert(originalRequest.responseText);
        //alert(unescape(originalRequest.responseText));
        //var tmp = eval(unescape(originalRequest.responseText));
        var tmp = eval(originalRequest.responseText);
        //alert(locations);
        //tmp = eval(locations);
        //alert('tmp:'+tmp+'-');
        //alert('-'+hotelDetail['name']+'-');
        //alert('-'+hotelDetail['city']+'-');
        //alert('-'+unescape(hotelDetail['description'].replace(/\+/g, " "))+'-');
        //document.write(hotelDetail['description']);
        //alert('-'+hotelDetail['tab2']+'-');
        var tab1 = getDecodedValue(hotelDetail['tab1']);
        var tab2 = getDecodedValue(hotelDetail['tab2']);
        var tab3 = getDecodedValue(hotelDetail['tab3']);
        //alert('tab2:'+tab2);
        //var description = getDecodedValue(hotelDetail['description']);
        //alert('Description'+description);
        var latitude = getDecodedValue(hotelDetail['latitude']);
        var longitude = getDecodedValue(hotelDetail['longitude']);
        //alert('Coordinates:'+latitude+' - '+longitude);
        //  ************  creating GMarker  ***********
 
        //var myIcon = new GIcon(G_DEFAULT_ICON, "http://www.zero.it/images/favicon.png");
        //myIcon.iconSize = new GSize(16,16);
        //myIcon.shadowSize = new GSize(16,16);
        //var myIcon = new GIcon(G_DEFAULT_ICON, "http://smartass-dmz.zero.it:8082/HotelAvailabilitySearch/imgs/mapicons/iconr1.png");
        var iconUrl = "imgs/mapicons/iconr"+counter+".png";
        //alert(iconUrl);
        //var myIcon = new GIcon(G_DEFAULT_ICON, "imgs/mapicons/iconr1.png");
        //var myIcon = new GIcon(G_DEFAULT_ICON, "imgs/mapicons/iconc1.gif");
        var myIcon = new GIcon(G_DEFAULT_ICON, iconUrl);
        myIcon.iconSize = new GSize(24,34);
        myIcon.shadowSize = new GSize(24,34);
 
        var marker = new GMarker(new GLatLng(latitude,longitude), {icon:myIcon});
        marker.title = name;
        GEvent.addListener(marker, "click", function ciccio() {
            mainMap.closeInfoWindow();
            //var waitContent = "<div>Loading in progress...<br>please wait...</div>";
            marker.openInfoWindowHtml(waitContent);
            alert(getAlertMessage());          
        var infoTabs = [
          new GInfoWindowTab("Main",tab1 ),
          new GInfoWindowTab("Descrizione",tab2 ),
          //new GInfoWindowTab("Servizi","<script>alert('Ciao');</script>" ),
          //new GInfoWindowTab("Images", "This is Zero Computing Logo<br><img height='40px' src='http://www.zero.it/images/logo.gif'>")
          new GInfoWindowTab("Servizi",tab3)
        ];
 
            marker.openInfoWindowTabsHtml(infoTabs);            
        });
        mainMap.addOverlay(marker);
        //  *******************************************
    }
    else
        alert('The server is temporarily busy, please try later.');
} 
 */

/* OLD VERSION
  function setHotelMarker(latitude, longitude, idHotel, idProvider, idSearch, counter)
  {  
//alert(idHotel);
    createEmptyHotelMarker(latitude,longitude,counter);
    return;  
                //var url = 'hotel_detail_js';
    var url = 'retrievedetail.do';
                //var pars = 'idSearch='+idSearch+'&idHotel='+idHotel+'&idProvider='+idProvider;
    //var pars = 'idSearch='+1+'&id_hotel='+30446+'&idProvider='+3+'&outputFormat=JS';
    var pars = 'idSearch='+idSearch+'&id_hotel='+idHotel+'&idProvider='+idProvider+'&outputFormat=JS';
 
                var myAjax;
//alert (url+pars);
                myAjax = new Ajax.Request(  url, {method: 'get', parameters: pars, onFailure: reportError, evalScripts : false , onSuccess: function(originalRequest){createHotelMarker(originalRequest,counter);} }); 
 
    return;
  } 
 */
