var mapDiv;
var cloudMap;
//var overview;
var daylight;
var daylightToggle;
var refresher;

addEventHandler(window, 'load',   windowLoad);
addEventHandler(window, 'resize', windowResize);
function windowLoad()
{
  mapDiv = document.getElementById('map');
  windowResize();
  
  if (GBrowserIsCompatible())
  {
    daylightToggle = document.getElementById('show_daylight');
    addEventHandler(daylightToggle, 'click', daylightClick);

    cloudMap = new GMap2(mapDiv, {mapTypes: [G_NORMAL_MAP, G_PHYSICAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP]});
    cloudMap.enableDoubleClickZoom();

    G_HYBRID_MAP.getMinimumResolution = 
      G_SATELLITE_MAP.getMinimumResolution = 
      G_NORMAL_MAP.getMinimumResolution = 
      G_PHYSICAL_MAP.getMinimumResolution = 
      function() {return 1};
    G_SATELLITE_MAP.getMaximumResolution = 
      G_PHYSICAL_MAP.getMaximumResolution = 
      function() {return daylightMap.CloudLayer._maxZoom};
    G_HYBRID_MAP.getMaximumResolution = 
      G_NORMAL_MAP.getMaximumResolution = 
      function() {return 12};

    var initLat = parseFloat(getParm('lat'));
    var initLon = parseFloat(getParm('lng'));
    if (isNaN(initLat) ||
        isNaN(initLon))
      var initCenter = new GLatLng(5, -110);
    else
      var initCenter = new GLatLng(initLat, initLon);

    var initZoom = parseInt(getParm('z'));
    if (isNaN(initZoom))
      var initZoom = 2;

    cloudMap.checkResize();
    var initType = getParm('t');
    // The following looks wrong but it's actually OK, the real map type setting occurs a bit later
    if (initType == 'm')
      cloudMap.setCenter(initCenter, initZoom, G_HYBRID_MAP);
    else
      cloudMap.setCenter(initCenter, initZoom, G_NORMAL_MAP);

    if (getParm('n') != '')
      daylightToggle.checked = (getParm('n') == '1');
    else if (ieVersion < 7)
      daylightToggle.checked = false;

    if (daylightToggle.checked)
      refresher = window.setInterval('cloudMap.setZoom(cloudMap.getZoom())', 5 * 60 * 1000);
    else
      refresher = window.setInterval('cloudMap.setZoom(cloudMap.getZoom())', 180 * 60 * 1000);

//    overview = new GOverviewMapControl();
//    cloudMap.addControl(overview);
//    if (initZoom < 4)
//      overview.hide(true);

    daylight = new daylightLayer();
//    daylight.cityLights = false;
//    daylight.opacity = 0.6;
//    daylight.active = daylightToggle.checked;
//    cloudMap.addOverlay(new GTileLayerOverlay(daylight));

//    cloudMap.addOverlay(new GTileLayerOverlay(new cloudLayer()));
    var clouds = new daylightMap.CloudLayer();
    clouds.addToMap(cloudMap);
    daylight.addToMap(cloudMap);

    switch (initType)
    {
      case 'm': cloudMap.setMapType(G_NORMAL_MAP);   break;
      case 'p': cloudMap.setMapType(G_PHYSICAL_MAP); break;
      case 'h': cloudMap.setMapType(G_HYBRID_MAP);   break;
      default:  cloudMap.setMapType(G_SATELLITE_MAP);
    }

    cloudMap.addControl(new GScaleControl());
    cloudMap.addControl(new GMapTypeControl());
    cloudMap.addControl(new GLargeMapControl());

//    GEvent.addListener(cloudMap, 'zoomend',        mapZoom);
    GEvent.addListener(cloudMap, 'moveend',        mapMove);
    GEvent.addListener(cloudMap, 'maptypechanged', mapTypeChanged);

//    map.addOverlay(new GGroundOverlay('http://dev.keyhole.com/clouds/clouds_2048_alphaed.png', 
//      new GLatLngBounds(new GLatLng(-90, -180), new GLatLng(90, 180))));
//    map.addOverlay(new GGeoXml('http://bbs.keyhole.com/ubb/download.php?Number=123408'));
  }
};

function windowResize()
{
  mapDiv.style.width  = (windowWidth() - 402) + 'px';
  mapDiv.style.height = windowHeight() + 'px';
};

function daylightClick()
{
  daylight.active = daylightToggle.checked;
  cloudMap.setZoom(cloudMap.getZoom());

  window.clearInterval(refresher);
  if (daylightToggle.checked)
  {
    refresher = window.setInterval('cloudMap.setZoom(cloudMap.getZoom())', 5 * 60 * 1000);
    setParm('n', '1');
  }
  else
  {
    refresher = window.setInterval('cloudMap.setZoom(cloudMap.getZoom())', 180 * 60 * 1000);
    setParm('n', '0');
  }
};

function getParm(name)
{
  var result = getCookie(name);
  if (result == '')
    result = getURLParm(name);
  return result;
};

function setParm(name, value)
{
  var nextYear = cookieDate(new Date(Number(new Date()) + 365 * _mSecPerDay)) + 'path=/clouds/';
  var expired = 'Sun, 24-Apr-05 00:00:00 GMT;path=/clouds/';

  if (value == null)
    document.cookie = name + '=;expires=' + expired;
  else
    document.cookie = name + '=' + value + ';expires=' + nextYear;
};

//function mapZoom(oldLevel, newLevel)
//{
//  var threshold = 4;
//  if ((oldLevel >= threshold) &&
//      (newLevel < threshold))
//    overview.hide();
//  else if ((oldLevel < threshold) &&
//           (newLevel >= threshold))
//    overview.show();
//};

function mapTypeChanged()
{
  switch (cloudMap.getCurrentMapType()) 
  {
    case G_NORMAL_MAP:   setParm('t', 'm'); break;
    case G_PHYSICAL_MAP: setParm('t', 'p'); break;
    case G_HYBRID_MAP:   setParm('t', 'h'); break;
    default:             setParm('t', null);
  }
};

function mapMove()
{
  var center = cloudMap.getCenter();

  setParm('lat', center.lat());
  setParm('lng', center.lng());
  setParm('z',   cloudMap.getZoom());
};

