//------------------------------------------------------------
// $Id: cma_kaMap_support.js 1531 2007-05-22 23:18:30Z samuel_igc $
// Main support package for displaying kamap map.
//------------------------------------------------------------

// IE or other browser flag
var browserIE = (null != window.ActiveXObject);

// map variable
var myKaMap = null;

// global variables for icon layer
var iconFeatures = null;
var ref = new Object();

// hvw: IE Resize event handling, memorize browser dimensions so spurious
// resize events do not cause vicious circle spiraling out into a browser crash.
var currentBrowserHeight = undefined;

/// needed for dragdrop to work...
//SET_DHTML();

// Arrays of objects backing the icons
var oCameras = null;
var oDetectors = null;
var oIncidents = null;
var oIntersections = null;
var oSOCCS = null;
var oHars = null;


//-----
// scaleChanged: handle KAMAP_SCALE_CHANGED event
//-----
function scaleChanged(eventID, mapName)
{
    if (oCameras != null) {
        scaleIcons(oCameras);
    }
    if (oDetectors != null) {
        scaleIcons(oDetectors);
    }

    if (oIncidents != null) {
	scaleIcons(oIncidents);
    }

   if ( oSOCCS != null )
   {
	   scaleIcons( oSOCCS );
   }

   if(oHars != null)
   {
	 	scaleIcons(oHars);
   }

    if (oIntersections != null) {
	scaleIcons(oIntersections);
    }
}


//-----
// scaleIcons: pushes the scale value out to all the icons in a set
//-----
function scaleIcons(icons) {
    for (var id in icons) {
        if (icons[id].setScale != null) {
            icons[id].setScale(myKaMap.getCurrentScale());
        }
    }
}


function getURLParam(strParamName)
{
    var strReturn = "";
    var strHref = window.location.href;
    if (strHref.indexOf("&") > -1)
    {
        var strQueryString = strHref.substr(strHref.indexOf("?") + 1).toLowerCase();
        var aQueryString = strQueryString.split("&");
        for (var iParam = 0; iParam < aQueryString.length; iParam++)
        {
            if (aQueryString[iParam].indexOf(strParamName + "=") > -1)
            {
                var aParam = aQueryString[iParam].split("=");
                strReturn = aParam[1];
                break;
            }
        }
    }

    return strReturn;
}

function bookMark()
{
    var currentURL = document.location.href.split("?")[0];
    var extentArray = myKaMap.getGeoExtents();
    var minx = extentArray[0];
    var miny = extentArray[1];
    var maxx = extentArray[2];
    var maxy = extentArray[3];
    var currentScale = myKaMap.getCurrentScale();

    currentURL
            += "?minx=" + minx
            + "&miny=" + miny
            + "&maxx=" + maxx
            + "&maxy=" + maxy
            + "&scale=" + currentScale;
    document.location.href = currentURL;
}

function parseDetectors(detectorXML)
{
    var detectors = new Array();
    var elements = detectorXML.getElementsByTagName('detectorSummary');
    var eLength = elements.length;

    try
    {
        for (var i = 0; i < eLength; i++)
		{
            var id = elements[i].getAttribute('id');
            var longitude = elements[i].getAttribute('long');
            var latitude = elements[i].getAttribute('lat');
            var location = elements[i].getAttribute('location');
            var directionInfo = elements[i].getElementsByTagName('direction');

            longitude = parseFloat(longitude.replace(',', '.'));
            latitude = parseFloat(latitude.replace(',', '.'));

            detectors[id] = new Radar(longitude, latitude, location, id);

            if ((directionInfo != null) && (directionInfo.length > 0))
            {
                for (var k = 0; k < directionInfo.length; k++)
                {
                    var direction = directionInfo[k];
                    var dtctDir = direction.getAttribute('dtctDir'); // 'direction'
                    var j;
                    var value;


                    var volumes = direction.getElementsByTagName('vol24');
                    if (null != volumes && volumes.length != 0)
                    {
                        for (j = 0; j < volumes.length; j++)
                        {
                            value = volumes[j].getAttribute('value');
                            detectors[id].addVolume(dtctDir, value);
                        }
                    }
                    else
                    {
                        detectors[id].addVolume(dtctDir, 'unavailable');
                    }

                    var volsTdy = direction.getElementsByTagName('volTdy');
                    if (null != volsTdy && volsTdy.length != 0)
                    {
                        for (j = 0; j < volsTdy.length; j++)
                        {
                            value = volsTdy[j].getAttribute('value');
                            detectors[id].addVolTdy(dtctDir, value);
                        }
                    }
                    else
                    {
                        detectors[id].addVolTdy(dtctDir, 'unavailable');
                    }
                }
            }

        }
    }
    catch(e)
    {
        alert("Can't parse detector \n" & e);
    }

    return detectors;
}


function getDetectors()
{
    var ajaxComponent = new Object();
    ajaxComponent.ajaxUpdate =
        function(request)
        {
            oDetectors = parseDetectors(request.responseXML);
            iconsToggleVisible( oDetectors, $('detectorIconsOn').checked );
            addIcons(oDetectors);
        };

    ajaxComponent.handleError =
        function(request)
        {
		     //alert( 'Server returned the following error: ' + request.status + ' -- ' + request.statusText );
        };

    var ajaxRequest = new AjaxHelper(ajaxComponent, '/accma/detectorSet');
    ajaxRequest.sendRequest();
}


function parseIncidents(incidentsXML)
{
    var incidents = new Array();
     var elements = incidentsXML.getElementsByTagName('incidentSummary');
    for (var i = 0 ; i < elements.length ; i++ ) {
        var id = elements[i].getAttribute('id');
        var longitude = elements[i].getAttribute('longitude');
        var latitude = elements[i].getAttribute('latitude');
        var description = elements[i].getAttribute('description');
        var type = elements[i].getAttribute('type');
        var reportedBy = elements[i].getAttribute('reportedBy');

        longitude = parseFloat(longitude.replace(',', '.'));
        latitude = parseFloat(latitude.replace(',', '.'));
        
        incidents[id] = new Incident(longitude, latitude, description, type, id, reportedBy);
    }

    return incidents;
}

function getIncidents()
{
    var ajaxComponent = new Object();
    ajaxComponent.ajaxUpdate =
        function(request)
        {
            oIncidents = parseIncidents(request.responseXML);
            incidentToggleVisible( oIncidents, "incident", $('incidentIconsOn').checked );
            incidentToggleVisible( oIncidents, "construction", $('constructionIconsOn').checked );
            incidentToggleVisible( oIncidents, "event", $('eventIconsOn').checked );
            
            addIcons(oIncidents);
        };

    ajaxComponent.handleError =
        function(request)
        {
		     //alert( 'Server returned the following error: ' + request.status + ' -- ' + request.statusText );
        };

    var ajaxRequest = new AjaxHelper(ajaxComponent, '/accma/incidentSet');
    ajaxRequest.sendRequest();
}

function parseHars (harXML) {

	var hars = new Array();
	var  index = 0;
    var  harsTag =harXML.getElementsByTagName("hars");
    var  url = harsTag[0].getAttribute("url");
	var elements  = harXML.getElementsByTagName("har");

    if(url[url.length-1] != "/")
        url+="/";

	 for( var i = 0; i < elements.length; i++) {


		 var id=elements[i].getAttribute("id");

		 var lat  = elements[i].getAttribute("lat");
		 var lon = elements[i].getAttribute("long");


		 var har = new Har(id,lat,lon);

		  var msgs = elements[i].getElementsByTagName("message");

		  for(var j = 0; msgs!=null &&j < msgs.length; j++ ) {

			  var mid=msgs[j].getAttribute("id");
			  var text=msgs[j].getAttribute("text");
              var fileName =msgs[j].getAttribute("audioFileName");

              if((fileName!=null)&& (fileName!=''))
                  fileName = url + fileName;
              
			  var  m = new HarMessage(mid,text, fileName );

			  har.addMessage(mid,m);

		  }

		  hars[index]=har;
		  index++;
	  }


		 return hars;


}
function parseSOCCS( soccsXML )
{
    var soccs = new Array();
    var elements = soccsXML.getElementsByTagName( "SOCCSRecord" );
    var tmpVar = null;
    var soccsRecordHM = null;
    var id = null;

    var messagePage1Line1;
    var messagePage1Line2;
    var messagePage1Line3;
    var messagePage2Line1;
    var messagePage2Line2;
    var messagePage2Line3;

    for ( var i = 0; i < elements.length; i++ )
    {
       soccsRecordHM = new HashMap();

       id = elements[i].getAttribute( "id" );
       soccsRecordHM.put( "id", new String( id ) );
       tmpVar = elements[i].getAttribute( "longitude" );
       soccsRecordHM.put( "longitude", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "latitude" );
       soccsRecordHM.put( "latitude", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "equipmentType" );
       soccsRecordHM.put( "equipmentType", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "locationDescription" );
       soccsRecordHM.put( "locationDescription", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "direction" );
       soccsRecordHM.put( "direction", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "county" );
       soccsRecordHM.put( "county", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "route" );
       soccsRecordHM.put( "route", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "routeSuffix" );
       soccsRecordHM.put( "routeSuffix", new String( tmpVar ) ) ;
       tmpVar = elements[i].getAttribute( "postmilePrefix" );
       soccsRecordHM.put( "postmilePrefix", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "postmile" );
       soccsRecordHM.put( "postmile", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "postmileSuffix" );
       soccsRecordHM.put( "postmileSuffix", new String( tmpVar ) );
       tmpVar = elements[i].getAttribute( "elevation" );
       soccsRecordHM.put( "elevation", new String( tmpVar ) );
       messagePage1Line1 = elements[i].getAttribute( "messagePage1Line1" );
       soccsRecordHM.put( "messagePage1Line1", new String( messagePage1Line1 ) );
       messagePage1Line2 = elements[i].getAttribute( "messagePage1Line2" );
       soccsRecordHM.put( "messagePage1Line2", new String( messagePage1Line2 ) );
       messagePage1Line3 = elements[i].getAttribute( "messagePage1Line3" );
       soccsRecordHM.put( "messagePage1Line3", new String( messagePage1Line3 ) );
       messagePage2Line1 = elements[i].getAttribute( "messagePage2Line1" );
       soccsRecordHM.put( "messagePage2Line1", new String( messagePage2Line1 ) );
       messagePage2Line2 = elements[i].getAttribute( "messagePage2Line2" );
       soccsRecordHM.put( "messagePage2Line2", new String( messagePage2Line2 ) );
       messagePage2Line3 = elements[i].getAttribute( "messagePage2Line3" );
       soccsRecordHM.put( "messagePage2Line3", new String( messagePage2Line3 ) );

       if ( messagePage1Line1 != '' ||
            messagePage1Line2 != '' ||
            messagePage1Line3 != '' ||
            messagePage2Line1 != '' ||
            messagePage2Line2 != '' ||
            messagePage2Line3 != '' )
       {
          soccs[ id ] = new CMS( soccsRecordHM );
       }
    }

    return soccs;
}

function getSOCCS( )
{
	var sendStr = "";
	var opt =
	{
		method: 'get',
      parameters: sendStr,
		requestHeaders: ['If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],

      // Handle successful response
      onSuccess: function( t )
		{
			oSOCCS = parseSOCCS( t.responseXML );
         iconsToggleVisible( oSOCCS, $('soccsIconsOn').checked );
			addIcons( oSOCCS );
      },

      // Handle 404
      on404: function( t )
		{
		   alert( 'Error 404: location "' + t.statusText + '" was not found.' );
		},

      // Handle other errors
      onFailure: function(t)
		{
		   //alert( 'Server returned the following error: ' + t.status + ' -- ' + t.statusText );
		}
	};

	new Ajax.Request( '/accma/soccsSet', opt );
}
function getHars( )
{
	var sendStr = "";
	var opt =
	{
		method: 'get',
      parameters: sendStr,
		requestHeaders: ['If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],

      // Handle successful response
      onSuccess: function( t )
		{
			oHars = parseHars( t.responseXML );
            iconsToggleVisible( oHars, $('harIconsOn').checked );
			addIcons( oHars );
      },

      // Handle 404
      on404: function( t )
		{
		   alert( 'Error 404: location "' + t.statusText + '" was not found.' );
		},

      // Handle other errors
      onFailure: function(t)
		{
		   //alert( 'Server returned the following error: ' + t.status + ' -- ' + t.statusText );
		}
	};

	new Ajax.Request( '/accma/harSet', opt );
}

function parseTravelInfo(detailsXML) {
    var infoXML = detailsXML.getElementsByTagName('travelInfo');

    for (var i=0; i<infoXML.length; i++) {
        var corridorName = infoXML[i].getAttribute('corridor');

        var displayXML = infoXML[i].getElementsByTagName( 'display' );
        for (var k = 0; k < displayXML.length; k++)
        {
           var display = travelDisplayInfo[corridorName];
           if ( display == null )
           {
              display = new Object();
              travelDisplayInfo[corridorName] = display;
           }
           display.lat = displayXML[k].getAttribute( 'lat' );
           display.lng = displayXML[k].getAttribute( 'long' );
           display.scale = displayXML[k].getAttribute( 'scale' );
           display.image = displayXML[k].getAttribute( 'image' );
        }

        var segmentXML = infoXML[i].getElementsByTagName( 'segment' );
        var segments = travelInfo[corridorName];
        if (segments == null) {
            segments = new Object();
        }
        for (var j=0; j<segmentXML.length; j++) {
            var description = segmentXML[j].getAttribute('description');
            var travelTimeXML = segmentXML[j].getElementsByTagName('travelTime');

            var segment = segments[description];
            if (segment == null) {
                segment = new Object();
                segment.travelTimes=new Object();
                segments[description] = segment;
            }
            for (var k=0; k<travelTimeXML.length; k++) {
                var direction = travelTimeXML[k].getAttribute('flowsTowards');
                var value = travelTimeXML[k].getAttribute('value');
                //if (value != "NA") {
                    value += " min";
                //}
                segment.travelTimes[direction]=value;
            }
        }
        travelInfo[corridorName] = segments;
    }
}


function displayTravelTime() {
    var selector = document.getElementById('travelTimeSelector');
    var corridor = selector.options[selector.selectedIndex].id;
    var corridorName = corridor;
    var segments = travelInfo[corridor];
    var element = document.getElementById('travelTime');
    var display = travelDisplayInfo[corridor];
    // var tt = '<img src="' + display.image + '" />' + corridorName ;
    var tt = '<img src="' + display.image + '" />' + '<br/>' ;
    for (var segmentName in segments) {
        var segment = segments[segmentName];
        tt += '<p class="segment">' + segmentName + '<br/>';
        var right = false;
        for (direction in segment.travelTimes) {
            var style = 'position: relative;';
            if (right) {
                style += 'margin-left: 10px';
            }
            tt += '<span style="' + style + '">';
            tt += direction + ': <b>' + segment.travelTimes[direction] + '</b>';
            tt += '</span>';
        right = true;
        }
        tt += '</p>';
    }

    element.innerHTML = tt;

    if ( arguments.length == 2 )
    {
       return;
    }

    var display = travelDisplayInfo[corridor];
    if ( display == null )
    {
       return;
    }

    var lat = display.lat;
    var lng = display.lng;
    var scale = display.scale;
    var image = display.image;

    if ( lat > 0 || lng > 0 )
    {
       if ( scale > 0 )
       {
          myKaMap.zoomTo( lat, lng, scale );
       }
       else
       {
          myKaMap.zoomTo( lat, lng );
       }
    }
}


function initializeTravelInfo()
{
    var element = document.getElementById('travelTimeSelector');

    var opt = document.createElement('option');
    opt.innerHTML = "Make Selection";
    element.appendChild(opt);
    for (var corridor in travelInfo) {
        opt = document.createElement('option');
        opt.innerHTML=corridor;
        opt.id = corridor;
        element.appendChild(opt);
    }
    element.onchange = displayTravelTime;
}


var travelInfo = new Object();
var travelDisplayInfo = new Object();

function getTravelInfoOld()
{
    var ajaxComponent = new Object();
    ajaxComponent.ajaxUpdate =
        function(request)
        {
            parseTravelInfo(request.responseXML);
            initializeTravelInfo();
            displayTravelTime();
        };

    ajaxComponent.handleError =
        function(request)
        {
		     // alert( 'Server returned the following error: ' + request.status + ' -- ' + request.statusText );
        };

    var ajaxRequest = new AjaxHelper(ajaxComponent, '/accma/travel');
    ajaxRequest.sendRequest();
}

function getTravelInfoFirst( )
{
	var sendStr = "";
	var opt =
	{
		method: 'get',
      parameters: sendStr,
		requestHeaders: ['If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],

      // Handle successful response
      onSuccess: function( t )
		{
			parseTravelInfo( t.responseXML );
			initializeTravelInfo();
			displayTravelTime( false, false );
      },

      // Handle 404
      on404: function( t )
		{
		   alert( 'Error 404: location "' + t.statusText + '" was not found.' );
		},

      // Handle other errors
      onFailure: function(t)
		{
		   // alert( 'Server returned the following error: ' + t.status + ' -- ' + t.statusText );
		}
	};

	new Ajax.Request( '/accma/travel', opt );
}

// Yes I this is ugly I know it but do it like this for now and revisit.
// TODO fix this ugliness by combining first and periodic into one.
// S.D.
function getTravelInfoPeriodic( )
{
	var sendStr = "";
	var opt =
	{
		method: 'get',
      parameters: sendStr,
		requestHeaders: ['If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],

      // Handle successful response
      onSuccess: function( t )
		{
			parseTravelInfo( t.responseXML );
			displayTravelTime( false, false );
      },

      // Handle 404
      on404: function( t )
		{
		   alert( 'Error 404: location "' + t.statusText + '" was not found.' );
		},

      // Handle other errors
      onFailure: function(t)
		{
		   // alert( 'Server returned the following error: ' + t.status + ' -- ' + t.statusText );
		}
	};

	new Ajax.Request( '/accma/travel', opt );
}

function kaMapOnLoad()
{
    initDHTMLAPI();
    myKaMap = new kaMap('viewport');
    // var myKaScalebar = new kaScalebar(myKaMap, 'scalebar', 122, 30);
    // myKaMap.registerForEvent(KAMAP_INITIALIZED, null, myInitialized);
    myKaMap.registerForEvent(KAMAP_MAP_INITIALIZED, null, myMapInitialized);
    myKaMap.registerForEvent(KAMAP_SCALE_CHANGED, null, scaleChanged);
    var myKaKeymap = new kaKeymap(myKaMap, 'keymap');
    resizeMainArea();

    var kaNav = new kaNavigator(myKaMap);
    kaNav.activate();

    // add a keymap -- this requires that the REFERENCE block in the .map file
    // be defined and point to a pre-created keymap image with known extents
    // N.B. the extents in the reference block should NOT be the mapfile extents
    // unless the keymap covers exactly the same area as the main map.
    //var myKaKeymap = new kaKeymap(myKaMap, 'keymap');

    // add drawing layer for overlay icons to the map object
    iconFeatures = myKaMap.createDrawingCanvas(100);

    kaZoom = new kaZoomer(myKaMap);
    kaZoom.opacity=100;

    drawPage();
    myKaMap.initialize();
}

// Used for periodic refresh of icons.
/*
function refreshIncidents()
{
	clearIcons( oIncidents );
	getIncidents();
}
*/

function refreshIcons()
{
	clearIcons( oCameras, false );
	addIcons( oCameras );
	clearIcons( oIncidents, true );
	getIncidents();
   clearIcons( oSOCCS, true );
   getSOCCS();
   clearIcons(oHars,true);
   getHars();
	clearIcons( oDetectors, false );
	addIcons( oDetectors );
}

function periodicRefresh()
{
	clearIcons( oCameras, false );
	addIcons( oCameras );
	clearIcons( oIncidents, true );
	getIncidents();
   clearIcons( oSOCCS, true );
   getSOCCS();
    clearIcons(oHars,true);
    getHars();
	getTravelInfoPeriodic();
	clearIcons( oDetectors, false );
	addIcons( oDetectors );
}

/*
 * Event handler for KAMAP_MAP_INITIALIZED
 * the scales are put into a select ... this will be used for zooming
 */
function myMapInitialized( eventID, mapName )
{
    // for static data, this could be called directly

    getCameras();
    getDetectors();
    getIncidents();
//    displayIcons();
    getTravelInfoFirst();

    // Add SOCCS support
    // S.D.
    getSOCCS();
	getHars();
	new PeriodicalExecuter( periodicRefresh, 120 );

    var minx = parseFloat( getURLParam( "minx" ) );
    var miny = parseFloat( getURLParam( "miny" ) );
    var maxx = parseFloat( getURLParam( "maxx" ) );
    var maxy = parseFloat( getURLParam( "maxy" ) );
    var scale = parseInt( getURLParam( "scale" ) );

    //alert( "minx: " + minx + " miny: " + miny + " maxx: " + maxx + " maxy: " + maxy );

    if ( !isNaN( minx ) && !isNaN( miny ) && !isNaN( maxx ) && !isNaN( maxy ) )
    {
      // All the pieces to display.
      this.myKaMap.zoomToExtents( minx, miny, maxx, maxy);
      if ( !isNaN( scale ) )
      {
        this.myKaMap.zoomToScale( scale );
      }
    }
}

///    SC: asynchronously get data from server

function myMarkersFetchData()
{
    ///    SC: create icons - make an asynchronous call to a php script
    ///    third argument is the function called when it returns
    ///    which just eval's the result string into javascript arrays
    ///    see displayIcons below for details

    call('php/datasource.php',null,myMarkersCallback);

    ///    SC: to handle updates of icon position or style from a datasource,
    ///    the following timer will refresh the data by recalling this function
    ///    Alternatively, some other event could be set to call this function if a
    ///    timer is not appropriate

    setTimeout('myMarkersFetchData()',10000);
}

function hidePopup()                                    // TODO: Make this method part of the object
{    var d = document.getElementById('radarPopup');
    d.style.visibility = "hidden";
}

function incidentToggleVisible(incidents, filter, override)
{
    var incident;
    for (var i = 0; i < incidents.length; i++)
    {
        try
        {
            incident = incidents[i];
            if (incident)
            {
                //debugger;
                if (filter == null || incident.type == filter)
                {
                    if (override != null)
                    {
                        ( override == true ) ?
                        incident.img.style.visibility = "visible" :
                        incident.img.style.visibility = "hidden";
                    } else
                    {
                        (incident.img.style.visibility == "hidden") ?
                        incident.img.style.visibility = "visible" :
                        incident.img.style.visibility = "hidden";
                    }
                }
            }
        }
        catch(e) {
        }
    }
}

function iconsToggleVisible(icons, override)
{
    for (var i = 0; i < icons.length; i++)
    {
        try
        {

            if (icons[i])
            {
            if (override != null)
            {
                ( override == true ) ?
                icons[i].img.style.visibility="visible" :
                icons[i].img.style.visibility="hidden";
            } else
            {
                (icons[i].img.style.visibility == "hidden") ?
                icons[i].img.style.visibility="visible" :
                icons[i].img.style.visibility="hidden";
            }
        }
    }
        catch(e) {
}
    }
}

// set the visibility of the local corridors group
// N.B. having a group name is mandatory for this to work, otherwise
// everything is in the base tile set and can not be toggled.
function freewayLayerToggleVisible(isOn)
{
    myKaMap.setLayerVisibility('SMART Corridors', isOn);
    myKaMap.setLayerVisibility('SMART Corridors Background', isOn);
}


function congestionLayerToggleVisible(isOn)
{
    myKaMap.setLayerVisibility('SMART Corridors Congestion',           isOn);
    myKaMap.setLayerVisibility('SMART Corridors Congestion Background',isOn);
}


// remove icons for a layer -- call before updating icons
function clearIcons( icons, destroy )
{
    if( icons != null )
    {
        for ( var i = 0; i < icons.length; i++ )
        {    // Remove and destroy the img object.

			  try
			  {
				  myKaMap.removeObject( icons[i].img );
				  if ( destroy )
				  {
					  icons[i].img.onclick=null;
					  icons[i].img.onmouseover=null;
					  icons[i].img.onmouseout=null;
					  icons[i].img = null;
				  }
			  }
			  catch ( e )
			  {
			     //alert( e );
			  }
        }
    }
}


function drawPage()
{
    if(resizeMainArea() == true)
    {
        myKaMap.resize();
    }
}


function resizeMainArea()
{
    var browserHeight = getInsideWindowHeight();
    var mainAreaHeight = browserHeight - 56;
    var resizeNeeded = true;
    if(undefined != currentBrowserHeight)
    {
        resizeNeeded = false;
        if( browserHeight != currentBrowserHeight)
        {
            resizeNeeded = true;
        }
    }

    if(resizeNeeded == true)
    {
        currentBrowserHeight = browserHeight;
        if(null != document.getElementById('viewport'))
        {
            var viewport = document.getElementById('viewport');
            viewport.style.height = (mainAreaHeight - 75) + "px";

            return true;
        }
    }
    return false;
}


// WHY DO WE NEED THIS?  Redundant!
function displayIcons()
{
    // addIcons( oCameras );
    // addIcons( oIncidents );
    // addIcons( oDetectors );
}


function addIcons( icons )
{
    /// for each overlay icon type, loop through the array and create image objects
    /// then add them to the drawing canvas at their geolocation using addObjectGeo
    /// the third argument can be an image or any div

    for (var i in icons)
    {
	if(icons[i].setScale!=null) {
	     icons[i].setScale(myKaMap.getCurrentScale());
         }
		  try
		  {
		     myKaMap.addObjectGeo( iconFeatures, icons[i].longitude, icons[i].lat, icons[i].img );
		  }
		  catch( e )
          {
              //alert (e);
          }

        // don't display new markers if the layer is disabled
        //
        //      if (document.getElementById('radarIconsOn').checked != true)
        //      {       icons[i].img.style.visibility = 'hidden';
        //      }
    }
}

function clearStoredIcons()
{
	for( var i in oIncidents )
	{
		try
		{
			myKaMap.removeObject( i.img );
		}
        catch(e) {
	    }
    }
}


//-----
// Called when user clicks on "Login" button
//-----
function clickedLogin()
{
    // grey out Login btn -- to retry, must reload page
    // (hoping this helps prevent Ajax de-syncing)
    document.getElementById('loginButton').disabled = true;

    var opt =
    {
        method: 'get',
        parameters: 'action=login'
        + '&username=' + document.authForm.username.value
        + '&password=' + document.authForm.password.value ,
        requestHeaders: ['If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],

        onComplete: function(xhr)
        {
            // The message displays under IE, but not FF :-(
            try {
                var response = xhr.responseXML.getElementsByTagName("response")[0];
                if (response != null)
                {
                    var responseStatus = response.getAttribute("status");
                    var responseMessage = response.getAttribute("message");
                    // alert("onComplete responseStatus " + responseStatus +
                    // "onComplete responseMessage " + responseMessage);

                    // Suppress "Logged in" msgbox
                    if ((responseMessage != "Logged in") &&
                    (responseMessage != "Logged out"))
                    {
                        alert(responseMessage);
                    }
                }
            }
            catch(e) {
                // alert("Exception: " + e);
            }

            window.location = window.location;  // reload
        },

        onException: function(xhr, e)
        {
            // This displays an obnoxious prototype exception under FF
            // alert("Ajax Exception: " + e);
        },
/*
        // Handle 404
        on404: function( t )
        {
            alert( 'Error 404: location "' + t.statusText + '" was not found.' );
        },
*/

        // Server error
        onFailure: function(t)
        {
            // alert( 'Error ' + t.status + ' -- ' + t.statusText );
        }
    };
    new Ajax.Request( '/accma/authenticate', opt );
}


//-----
// Called when user clicks on "Logout" button
//-----
function clickedLogout() {
    var opt =
    {
        method: 'get',
        parameters: 'action=logout',
        requestHeaders: ['If-Modified-Since', 'Sat, 1 Jan 2000 00:00:00 GMT'],

        onComplete: function(xhr)
        {
            var response = xhr.responseXML.getElementsByTagName("response")[0];

            if (response != null) {
                var responseStatus = response.getAttribute("status");
                var responseMessage = response.getAttribute("message");
                //alert(responseMessage);
            }

            // Reload
            // (redirect to main page if on an agency page)
            if ($F('agencyPage') != "true") {
                window.location = window.location;
            } else {
                window.location = "index.jsp";
            }

        },

        onException: function(xhr, e)
        {
            // alert("Ajax Exception: " + e);
        },
        /*
         // Handle successful response
         onSuccess: function( t )
         {
         // alert("*** Logout SUCCESS");

         // reload
         // window.location = window.location;
         },

         // Handle 404
         on404: function( t )
         {
         alert("*** on404");
         alert( 'Error 404: location "' + t.statusText + '" was not found.' );
         },
         */
        // Handle other errors
        onFailure: function(t)
        {
            // alert("*** onFailure");
            // alert( 'Error ' + t.status + ' -- ' + t.statusText );
        }
    };

    new Ajax.Request('/accma/authenticate', opt);
}
