// global vars
var _map;
var _mapContainer;
var _directions;
var _directionsContainer;
var _companyAddress;
var _markerImages; // images for markers
var SIDEBAR_ELEMENT_ID_PREFIX = "sbe_";
// QUARTIERE GENERALE
var _quartiereGeneraleLat = 45.585732;
var _quartiereGeneraleLong = 9.166344;
var _quartiereGeneraleName = "DSF Tecnologia s.r.l. Headquarters e Sede Operativa";
var _quartiereGeneraleAddress  = "Via Ruffini, 3 Paderno Dugnano 20030 Milano Italy";
var _quartiereGeneraleInfo = "<b>DSF Tecnologia s.r.l. <br /> Headquarters e Sede Operativa</b><br /><br />Via Ruffini, 3<br />20030 Paderno Dugnano (MI)<br />&nbsp;<br />";

// SEDE OPERATIVA
var _sedeOperativaLat = 45.852507;
var _sedeOperativaLong = 11.897511;
var _sedeOperativaName  = "DSF Tecnologia s.r.l. Sede Operativa";
var _sedeOperativaAddress  = "Via Del Ponticello 30 31034 Cavaso del Tomba (TV)";
var _sedeOperativaInfo = "<b>DSF Tecnologia s.r.l. <br /> Sede Operativa</b><br /><br />Via Del Ponticello, 30<br />Cavaso del Tomba (TV)<br />&nbsp;<br />";

// UFFICIO COMMERCIALE
var _ufficioCommercialeLat   = 44.478068;
var _ufficioCommercialeLong  = 11.007976;
var _ufficioCommercialeName  = "DSF Tecnologia s.r.l. Ufficio Commerciale";
var _ufficioCommercialeAddress  = "41058 Vignola (MO) Italy";
var _ufficioCommercialeInfo  = "<b>DSF Tecnologia s.r.l. <br /> Ufficio Commerciale</b><br /><br />41058 Vignola (MO)<br />&nbsp;<br />";

// SEDE FRANCIA
var _sedeFranciaLat   = 43.71950494269109;
var _sedeFranciaLong  = 7.0916748046875;
var _sedeFranciaName  = "DSF Tecnologia s.r.l. Sede Francia";
var _sedeFranciaAddress  = "06410 Biot France";
var _sedeFranciaInfo  = "<b>DSF Tecnologia s.r.l. <br /> Sede Francia</b><br /><br />06410 Biot France<br />&nbsp;<br />";

// SEDE SPAGNA
var _sedeSpagnaLat   = 40.18018485291529;
var _sedeSpagnaLong  = -3.668060302734375;
var _sedeSpagnaName  = "DSF Tecnologia s.r.l. Sede Spagna";
var _sedeSpagnaAddress  = "C/Gaspar B. Sobremonte, s/n ";
var _sedeSpagnaInfo  = "<b>DSF Tecnologia s.r.l. <br /> Sede Spagna</b><br /><br />C/Gaspar B. Sobremonte, s/n <br />28340 VALDEMORO Madrid Espana<br />&nbsp;<br />";


var _zoomLevel    = 13;
var _latCenterOffset = 0.01;
var _markers = new Array();

// load map reading data from suppied xml (url)
function loadMap( idOfContainerElement, idOfDirectionsContainerElement, urlOfImages, mapType )
{
  _mapContainer = document.getElementById( idOfContainerElement );
  _directionsContainer = document.getElementById( idOfDirectionsContainerElement );

  if ( mapType == null )
    mapType = G_NORMAL_MAP;
    
  // init images array
  _markerImages = [
    G_DEFAULT_ICON.image,
    urlOfImages + "/gMapMarkerHL.png"
  ];
  
  // create bounds
  var bounds = new GLatLngBounds();
  
  // create map and set properties
  _map = new GMap2( _mapContainer );
  _map.setCenter(new GLatLng(0,0), _zoomLevel); 
  _map.addControl(new GLargeMapControl());                               // controls (zoom, scroll)
  _map.addControl(new GMapTypeControl());                                // _map type control
  _map.addControl(new GScaleControl());                                  // display scale
  new GKeyboardHandler(_map);                                            // bind keys (up, down...pup, pdown...+ -)
  _map.enableContinuousZoom();
  _map.enableDoubleClickZoom();
  _map.setMapType( mapType );
  
  
  //_map.clearOverlays();
  _markers[0] = createCustomMarker( _quartiereGeneraleName,_quartiereGeneraleInfo, _quartiereGeneraleLat, _quartiereGeneraleLong, bounds, 0, _quartiereGeneraleAddress );
  _map.addOverlay( _markers[0] );
  
  _markers[1] = createCustomMarker( _sedeOperativaName,_sedeOperativaInfo, _sedeOperativaLat, _sedeOperativaLong, bounds, 1, _sedeOperativaAddress );
  
  _map.addOverlay( _markers[1] );
  
  _markers[2] = createCustomMarker( _ufficioCommercialeName,_ufficioCommercialeInfo, _ufficioCommercialeLat, _ufficioCommercialeLong, bounds, 2, _ufficioCommercialeAddress );
  _map.addOverlay( _markers[2] );
  
  _markers[3] = createCustomMarker( _sedeFranciaName,_sedeFranciaInfo, _sedeFranciaLat, _sedeFranciaLong, bounds, 3, _sedeFranciaAddress );
  _map.addOverlay( _markers[3] );
  
  _markers[4] = createCustomMarker( _sedeSpagnaName,_sedeSpagnaInfo, _sedeSpagnaLat, _sedeSpagnaLong, bounds, 4, _sedeSpagnaAddress);
  _map.addOverlay( _markers[4] );
  
  //_map.setCenter(new GLatLng(_companyLat + _latCenterOffset, _companyLong), _zoomLevel); 
  //_map.addOverlay( _markers[0] );
  
  
  _map.setCenter(bounds.getCenter(), _map.getBoundsZoomLevel(bounds) );
  _map.savePosition(); // this makes the center button useful

  if (GBrowserIsCompatible()) {      
    _directions = new GDirections( _map, _directionsContainer );
    GEvent.addListener(_directions, "load", onGDirectionsLoad);
    GEvent.addListener(_directions, "error", handleErrors);
  }
  
  
}


function createCustomMarker( companyName, companyInfo, companyLat, companyLong, bounds, markerIndex, companyAddress )
{
  var is_ie6 = ( window.external && typeof window.XMLHttpRequest == "undefined" ); 
  var newIcon = new GIcon();
  
  newIcon.image = is_ie6 ? "../img/red-pushpin.gif" : "../img/red-pushpin.png";
  newIcon.shadow = "../img/pushpin_shadow.png";
  newIcon.iconSize = new GSize(32, 32);
  newIcon.shadowSize = new GSize(59, 32);
  newIcon.iconAnchor = new GPoint(10, 10);
  newIcon.infoWindowAnchor = new GPoint(15, 5);
  
  var point = new GLatLng(parseFloat( companyLat), parseFloat( companyLong) );
  var marker = new GMarker(point, {icon:newIcon,title:companyName} );
  var infoWin = "";
  
  GEvent.addListener(marker,'mouseover', function()
    {
      marker.visited = true;
      marker.setImage( is_ie6 ? "../img/ylw-pushpin.gif" : "../img/ylw-pushpin.png" );
      //marker.openInfoWindowHtml(companyInfo,{maxWidth:400});
//      hlSideBarElement( markerIndex, true );
    }
  );
  
  GEvent.addListener(marker,'mouseout', function()
    {
      
      marker.setImage(is_ie6 ? "../img/red-pushpin.gif" : "../img/red-pushpin.png");
//      hlSideBarElement( markerIndex, false );
    }
  );
  
   GEvent.addListener(marker,'click', function()
    {
      _map.setCenter( marker.getLatLng(), _zoomLevel );
      marker.openInfoWindowHtml(companyInfo,{maxWidth:400});
      _companyAddress = companyAddress;
    }
  );
  
  bounds.extend( point );
  
  return marker;
}

function setDirections(fromAddress, toAddress, locale) {
  _directions.load("from: " + fromAddress + " to: " + toAddress, { "locale": locale });
}

function handleErrors(){

 addCompanyMarker();
  _directionsContainer.style.display = 'none';

 if (_directions.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
   alert( "L'indirizzo inserito non e' stato riconosciuto\ncome un indirizzo corretto." );
 else if (_directions.getStatus().code == G_GEO_SERVER_ERROR)
   alert("Si č verificato un errore interrogando il servizio di Google Maps.\nSiamo spiacenti, riprova pių tardi.");
 else if (_directions.getStatus().code == G_GEO_MISSING_QUERY)
   alert("Nessun indirizzo specificato.");
 else if (_directions.getStatus().code == G_GEO_BAD_KEY)
   alert("SYSTEM ERROR: invalid key!");
 else if (_directions.getStatus().code == G_GEO_BAD_REQUEST)
   alert("Si č verificato un errore interrogando il servizio di Google Maps.\nSiamo spiacenti, riprova pių tardi.");
//   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
 else
  alert("Si č verificato un errore interrogando il servizio di Google Maps.\nSiamo spiacenti, riprova pių tardi.");
}

function onGDirectionsLoad(){ 
  _map.clearOverlays();
  _directionsContainer.style.display = 'block';
  window.location.href = window.location.pathname + "#map";
  // Use this function to access information about the latest load()
  // results.
  
        // e.g.
  // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
  // and yada yada yada...
}

function generateDirections()
{
  var txtSaddr = document.getElementById( 'txtSaddr' );
  if ( txtSaddr.value == '' )
  {
    alert( "Inserisci un indirizzo di partenza" );
    return;
  }
  
  if( _companyAddress == null )
  {
    alert( "Seleziona prima una sede" );
    return;
  }
  setDirections( txtSaddr.value, _companyAddress, 'it' );
}

// highlight a sidebar element
function hlSideBarElement( markerIndex, hl )
{
  var hlElement = document.getElementById( SIDEBAR_ELEMENT_ID_PREFIX + markerIndex );
  if ( hlElement == null )
    return;
  
  hlElement.className = hl ? 'hl' : '';
}

function resetMap()
{
	document.getElementById( 'txtSaddr' ).value = '';
  _map.clearOverlays();
  _directionsContainer.style.display = 'none';
  _companyAddress = null;
  loadMap( 'divMap', 'divDirections', '<%= BaseHref %>../img/', null)
}