var settings = null;
var map = null;
var layerMgr = null;
var refreshInterval = 600000;
var sourceFilter = null;
var vcnlinfoCookies = new hbCookies ("vcnlinfo");
/*var language = null;

  if (!language)
  {
    var lastLanguage = vcnlinfoCookies.get ("language");

    if (lastLanguage)
    {
      language = lastLanguage;
    }
    else
    {
      language = 'english';
    }
  }*/
  
var mapFeedback = undefined;
//var cursorCounter = 0;

/*
function debug (myDocument, arg)
{
  var div = myDocument.createElement ('div');
  div.innerHTML = arg;
  myDocument.getElementsByTagName ('body') [0].appendChild (div);
}

function showBusyCursor ()
{
  ++cursorCounter;
  debug (cursorCounter);
  document.getElementsByTagName ('body') [0].style.cursor = 'wait';
  document.getElementById ("map").style.cursor = 'wait';
}

function hideBusyCursor ()
{
  --cursorCounter;
  debug (cursorCounter);

  if (0 == window.cursorCounter)
  {
    document.getElementsByTagName ('body') [0].style.cursor = 'auto';
    document.getElementById ("map").style.cursor = 'auto';
  }
}*/

function unload ()
{
  if (sourceFilter)
  {
    sourceFilter.cancel ();
  }

  if (GUnload)
  {
    GUnload ();
  }
}

function load (settingsURL, noCookies)
{
//  if (false == isDomainInitialized)
//  {
//    return;
//  }

//  settings = new hbSettings (settingsURL);

  if (noCookies)
  {
    vcnlinfoCookies.disable ();
  }

  initSourceFilter ();
  initMap ();
  initLayerMgr ();

  draw ();

//  this.storedReportGuid = 'traffic info:0';
//  showReport ();
}

function initSourceFilter ()
{
  sourceFilter = new hbSourceFilter (settings, window);
}

function initMap ()
{
  map = new hbMap (settings, sourceFilter);
}

function initLayerMgr ()
{
  if (    (null == sourceFilter) || (false == sourceFilter.isInitialized ())
       || (null == map) || (false == map.isInitialized ()))
  {
    setTimeout ('initLayerMgr ()', 1000);
  }
  else
  {
    layerMgr = new hbLayerMgr (settings, map);
  }
}

function draw ()
{
  if (    (null == sourceFilter) || (false == sourceFilter.isInitialized ())
       || (null == map) || (false == map.isInitialized ())
       || (null == layerMgr) || (false == layerMgr.isInitialized ()))
  {
    setTimeout ('draw ()', 1000);
    return;
  }

  map.addLayer (layerMgr);

  if (0 < window.location.search.length)
  {
    vcnlinfoCookies.disable ();
    showReport ();
  }
  else
  {
    map.redraw (sourceFilter.getActiveLayer ());
  }
  
 // initAutoRefresh ();
}

function reset ()
{
  map.resetView ();
  refresh ();
}

function refresh ()
{
  map.clearOverlays ();
  layerMgr.reload ();
  map.redraw (sourceFilter.getActiveLayer ());
}

function switchLanguage (newLanguage)
{
  if (newLanguage != settings.dictionary.activeLanguage)
  {
    settings.dictionary.setActiveLanguage (newLanguage);
    layerMgr.setLanguage (newLanguage);
    map.redraw (sourceFilter.getActiveLayer ());
  }
}

function initAutoRefresh ()
{
  if (    (null == settings) || (false == settings.isInitialized ())
       || (null == sourceFilter) || (false == sourceFilter.isInitialized ())
       || (null == map) || (false == map.isInitialized ())
       || (null == layerMgr) || (false == layerMgr.isInitialized ()))
  {
    setTimeout ('initAutoRefresh ()', 1000);
    return;
  }

  var interval = settings.get ("refreshInterval");

  if (null != interval)
  {
    this.refreshInterval = interval;
  }

  setTimeout ('autoRefresh ()',
              this.refreshInterval);
}

function autoRefresh ()
{
  refresh ();
  setTimeout ('autoRefresh ()',
              this.refreshInterval);
}

function openSourceFilterWindow ()
{
  sourceFilter.openWindow ();
}

function showReport ()
{
  if (    (null == settings) || (false == settings.isInitialized ())
       || (null == sourceFilter) || (false == sourceFilter.isInitialized ())
       || (null == map) || (false == map.isInitialized ())
       || (null == layerMgr) || (false == layerMgr.isInitialized ()))
  {
    setTimeout ('showReport ()', 1000);
    return;
  }

  var reportGuid = decodeURIComponent (window.location.search.substr (1));
  var splitted = reportGuid.split (':');

  if (2 > splitted.length)
  {
    return;
  }

  var layer = splitted [0];
  sourceFilter.activateOnly (layer);
  map.redraw (sourceFilter.getActiveLayer ());

  if (false == layerMgr.isInitialized (layer))
  {
    setTimeout ('gotoReport ()', 1000);
  }
  else
  {
    gotoReport ();
  }
}

function gotoReport ()
{
  var reportGuid = decodeURIComponent (window.location.search.substr (1));
  var splitted = reportGuid.split (':');
  var layer = splitted [0];

  if (false == layerMgr.isInitialized (layer))
  {
    setTimeout ('gotoReport ()', 1000);
    return;
  }

  var report = layerMgr.getReport (layer, reportGuid);

  if (null == report)
  {
    return;
  }

  map.setView (report.getPrimaryLocation (), parseInt (settings.get ("defaultRSSZoom")));
  setTimeout ('openReport ()', 1000);
}

function openReport ()
{
  var reportGuid = decodeURIComponent (window.location.search.substr (1));
  var splitted = reportGuid.split (':');
  var layer = splitted [0];
  var report = layerMgr.getReport (layer, reportGuid);
  report.openInfoWindow ();
}
