/** Function to show/hide ad info page tab, for new vehicle show default map in dealer info. */
function hideShowInfo(divId)
{
  if(divId == 'id_adMap')
  {
    $('id_adMap').style.display='block';
    $('id_adMapClass').className='active';

    $('id_adInfo').style.display='none';
    $('id_adInfoClass').className = '';

    if($('id_adReservation'))
    {
      $('id_adReservation').style.display='none';
      $('id_adReservationClass').className='';
    }
    if($('dealer_info'))
    {
      $('dealer_info').style.display='none';
      $('id_dealer_info').className='';
    }
    if($('id_adSearchReser'))
    {
      $('id_adSearchReser').style.display='none';
      if($('id_adSearchReserClass'))
      {
        $('id_adSearchReserClass').className='';
      }
    }

    if($('id_adAvailPrice'))
    {
      $('id_adAvailPrice').style.display='none';
      if($('id_adAvailPriceClass'))
      {
        $('id_adAvailPriceClass').className='';
      }
    }
    addURLHash('adMap');
  }
  else if(divId == 'id_adInfo')
  {
    $('id_adInfo').style.display='block';
    $('id_adInfoClass').className='active';

    if($('id_adReservation'))
    {
      $('id_adReservation').style.display='none';
      $('id_adReservationClass').className='';
    }
    if($('id_adMap'))
    {
      $('id_adMap').style.display='none';
      $('id_adMapClass').className='';
    }
    if($('dealer_info'))
    {
      $('dealer_info').style.display='none';
      $('id_dealer_info').className='';
    }
    if($('id_adSearchReser'))
    {
      $('id_adSearchReser').style.display='none';
      $('id_adSearchReserClass').className='';
    }

    if($('id_adAvailPrice'))
    {
      $('id_adAvailPrice').style.display='none';
      if($('id_adAvailPriceClass'))
      {
        $('id_adAvailPriceClass').className='';
      }
    }
    addURLHash('adInfo');
  }
  else if(divId == 'dealer_info')
  {
    $('id_adInfo').style.display='none';
    $('id_adInfoClass').className='';

    if($('id_adReservation'))
    {
      $('id_adReservation').style.display='none';
      $('id_adReservationClass').className='';
    }
    if($('id_adMap'))
    {
      $('id_adMap').style.display='none';
      $('id_adMapClass').className='';
    }
    if($('dealer_info'))
    {
      $('dealer_info').style.display='block';
      $('id_dealer_info').className='active';
    }
    if($('id_adSearchReser'))
    {
      $('id_adSearchReser').style.display='none';
      $('id_adSearchReserClass').className='';
    }
    if($('id_adAvailPrice'))
    {
      $('id_adAvailPrice').style.display='none';
      if($('id_adAvailPriceClass'))
      {
        $('id_adAvailPriceClass').className='';
      }
    }
    addURLHash('DealerInfo');
  }
  else if(divId == 'id_adReservation')
  {
    $('id_adReservation').style.display='block';
    $('id_adReservationClass').className='active';

    if($('id_adInfo'))
    {
      $('id_adInfo').style.display='none';
      if($('id_adInfoClass'))
      {
        $('id_adInfoClass').className='';
      }
    }

    if($('dealer_info'))
    {
      $('dealer_info').style.display='none';
      if($('id_dealer_info'))
      {
        $('id_dealer_info').className='';
      }
    }
    if($('id_adMap'))
    {
      $('id_adMap').style.display='none';
      if($('id_adMapClass'))
      {
        $('id_adMapClass').className='';
      }
    }
    if($('id_adSearchReser'))
    {
      $('id_adSearchReser').style.display='none';
      if($('id_adSearchReserClass'))
      {
        $('id_adSearchReserClass').className='';
      }
    }
    if($('id_adAvailPrice'))
    {
      $('id_adAvailPrice').style.display='none';
      if($('id_adAvailPriceClass'))
      {
        $('id_adAvailPriceClass').className='';
      }
    }

    addURLHash('Reservation');
  }
  else if(divId == 'id_adSearchReser')
  {
    $('id_adSearchReser').style.display='block';
    $('id_adSearchReserClass').className='active';

    if($('id_adInfo'))
    {
      $('id_adInfo').style.display='none';
      $('id_adInfoClass').className='';
    }

    $('id_adReservation').style.display='none';
    $('id_adReservationClass').className='';
    $('id_adAvailPrice').style.display='none';
    $('id_adAvailPriceClass').className='';

    addURLHash('SearchReservation');
  }
  else if(divId == 'id_adAvailPrice')
  {
    $('id_adAvailPrice').style.display='block';
    $('id_adAvailPriceClass').className='active';

    if($('id_adInfo'))
    {
      $('id_adInfo').style.display='none';
      $('id_adInfoClass').className='';
    }

    $('id_adReservation').style.display='none';
    $('id_adReservationClass').className='';

    if($('id_adSearchReser'))
    {
      $('id_adSearchReser').style.display='none';
      $('id_adSearchReserClass').className='';
    }

    addURLHash('AvailPrice');
  }
}

function addURLHash(hval)
{
  document.location.hash=hval;
}

/** Function to show the map of seller and dealer ad location. */
var mapObj=null;
var geocoder=null;
var map;
var gdir;
var addressMarker;

function init_mapDirection(fromAdd,toAdd,lang)
{
  if (GBrowserIsCompatible())
  {
    map = new GMap2(document.getElementById("bubble_map"));
    gdir = new GDirections(map, document.getElementById("directions"));
    GEvent.addListener(gdir, "load", onGDirectionsLoad);
    GEvent.addListener(gdir, "error", handleErrors);

    map.setCenter(new GLatLng(0,0),0);
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
    
    document.getElementById("directions").style.display = 'inline';

    setDirections(fromAdd, toAdd, lang);
  }
}

function setDirections(fromAddress, toAddress, locale)
{
  gdir.load("from: " + fromAddress + " to: " + toAddress,
  { "locale": locale , "getSteps":true});
}

function handleErrors()
{
  if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
  alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.");
  else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
  alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.");
  else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
  alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.");
  else alert("An unknown error occurred.");
}

var newMarkers = latLngs =[];

function onGDirectionsLoad()
{
  for (var i=0; i<newMarkers.length; i++)
  map.removeOverlay(newMarkers[i]);

  for (var i=0; i<=gdir.getNumRoutes(); i++)
  {
    var originalMarker = gdir.getMarker(i);
    latLngs[i] = originalMarker.getLatLng();
    newMarkers[i] = new GMarker(latLngs[i],{draggable:true});
    map.addOverlay(newMarkers[i]);

    GEvent.addListener(newMarkers[i], "dragend", function()
    {
      var points = [];
      for (var i=0; i<newMarkers.length; i++)
      points[i]= newMarkers[i].getLatLng();
      gdir.loadFromWaypoints(points,{ "locale": "{MAP_LANG}" });
    });

    newMarkers[i].setImage(originalMarker.getIcon().image);
    originalMarker.setLatLng(new GLatLng(-90,0));
  }
}
/** Function to draw the circle on location. */
function initialize_circle(point)
{
  var lat=point.y;
  var lon=point.x;
  var latOffset=0.01;
  var lonOffset=0.01;

  with (Math)
  {
    var bounds=new GLatLngBounds();
    var circlePoints=Array();
    var lat1=(PI/180)* point.y; // radians
    var lng1=(PI/180)* point.x; // radians
    var d=1/3963.189; // radians

    for (var a=0; a < 361; a++)
    {
      var tc=(PI/180)*a;
      var y=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
      var dlng=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
      var x=((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
      var points=new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));

      circlePoints.push(points);
      bounds.extend(point);
    }
  }
  var polygon=new GPolygon(circlePoints, '0', 0, 1, '#ff0000', 0.25);
  mapObj.addOverlay(polygon);
}

function initialize_map(divId,Glat,Glng,Gzoom,W,H)
{
  if (GBrowserIsCompatible())
  {
    mapObj=new GMap2(document.getElementById(divId),{ size: new GSize(W,H) });

    mapObj.setCenter(new GLatLng(Glat, Glng), Gzoom);
    
    mapObj.addControl(new GSmallMapControl());
    mapObj.addControl(new GMapTypeControl());
    geocoder=new GClientGeocoder();
  }
}

function showAddress(address,company,display_circle,divId,Glat,Glng,Gzoom,W,H)
{
  initialize_map(divId,Glat,Glng,Gzoom,W,H);

  if (geocoder)
  {
    geocoder.getLatLng(address,

    function(point)
    {
      if (point)
      {
        mapObj.setCenter(point, 12);

        if(display_circle == 'Y')
        initialize_circle(point);
        else
        {
          var marker=new GMarker(point);
          mapObj.addOverlay(marker);
        }

        if(company != '')
        marker.openInfoWindowHtml(company);
      }
    });
  }
}
