// Global Variables
var groupName;


function showFindDevices( refresh )
{
   // Local Variables
   groupName = getQueryString( "function" );

   // Start the device data request
   getGroupData( refresh );
}


function getGroupData( refresh )
{
   var request = buildRequest( );

   var callback = function( )
   {
      if ( request.readyState == 4 )
      {
         if( request.status == 200 )
         { 
            var response = parseDocument( request.responseText );
            var items = response.getElementsByTagName( "group" );
            var groupid = -1;

            if( items.length > 0 )
            {                    
               for ( var i = 0; i < items.length; i++ )
               {
                   var item = items[i];
                 
                   // Get the details of this map element
                   var id = nodeValue( item, "id" );
                   var name = nodeValue( item, "name" );

                   if ( name.equalsIgnoreCase( groupName ) )
                   {
                      groupid = id;
                   }

                   // Mark the device for display
                   markGroupDevices( id );
               }

               findDevices( groupid, refresh );
            }
            else
            {
                errorHandler( response );
            }
         }
      }
   }

   // Initialise the parameter list
   var param = new Parameter( "SessionID", getSessionID( ) );

   ajaxCall( request, "GetDeviceGroups", param, callback );
}


function findDevices( groupid, refresh )
{
   var request = buildRequest( );
   var elRefresh = document.getElementById( "Find_Refresh" );
   var select = document.getElementById( "GroupSelect" );

   var callback = function( )
   {
      if ( request.readyState != 4 )
      {
          document.getElementById("Loading").style.visibility = "visible";
      }
      else
      {
          document.getElementById("Loading").style.visibility = "hidden";

          if( request.status == 200 )
          { 
             var response = parseDocument( request.responseText );
             var warning = document.getElementById( "DeviceWarning" );
             var items = response.getElementsByTagName( "device" );

             // Clear the map
             devices.clear( );
             warning.style.visibility = "hidden";
              
             if ( items.length > 0 )
             {                    
                for ( var i = 0; i < items.length; i++ )
                {
                   var item = items[i];
                 
                   // Get the details of this map element
                   var name = nodeValue( item, "name" );
                   var suburb = nodeValue( item, "suburb" );
                   var date = nodeValue( item, "date" );
                   var latitude = nodeValue( item, "latitude" );
                   var longitude = nodeValue( item, "longitude" );
                   var comment = nodeValue( item, "comment" );

                   // Add a push-pin to the map
                   var device = new Device( name, suburb, date, name + ".gif", latitude, longitude, comment );
                   devices.add( device );

                   if ( ( latitude == "" ) || ( longitude == "" ) )
                   {
                      warning.style.visibility = "visible";
                   }
                }

                if ( devices.count <= 0 )
                {
                   // Inform the user that we were unable to locate the devices
                   alert( "Unable to locate devices!" );
                }
                else
                {
                   // Display the device collection and center the map
                   devices.display( );
                   showBestMap( );
                }
             }
             else
             {
                errorHandler( response );
             }
          } 
          else 
          { 
             alert( "Error: returned status code " + request.status + " " + request.statusText ); 
             alert( request.responseText ); 
          } 
      }
   }

   // Build up the parameter list
   var params = new Array( 3 );
   params[0] = new Parameter( "SessionID", getSessionID( ) );
   params[1] = new Parameter( "GroupID", groupid );
   params[2] = new Parameter( "Refresh", refresh );

   ajaxCall( request, "GetDeviceData", params, callback );   
}


function setShowDevice( id )
{
   // Create a request object
   var request = buildRequest( );

   var callback = function( ) { }

   // Create the parameter objects
   var params = new Array(3);
   params[0] = new Parameter( "SessionID", getSessionID( ) );
   params[1] = new Parameter( "DeviceID", id );
   params[2] = new Parameter( "Selected", "True" );

   ajaxCall( request, "SetShowDevice", params, callback );
}


function markGroupDevices( id )
{
   var request = buildRequest( );

   var callback = function( )
   {
      if ( request.readyState == 4 )
      {
          if( request.status == 200 )
          { 
             var response = parseDocument( request.responseText );
             var items = response.getElementsByTagName( "groupmember" );

             if ( items.length > 0 ) 
             {
                // Append the new collection of child nodes
                for ( var i = 0; i < items.length; i++ )
                {
                   // Get a reference to this group member
                   var item = items[i];

                   // Create and initialise the new html elements
                   var id = nodeValue( item, "id" );
                   setShowDevice( id );
                }
             }
             else
             {
                errorHandler( response );
             }
          }
      }
   }
  
   var params = new Array(2);
   params[0] = new Parameter( "SessionID", getSessionID( ) );
   params[1] = new Parameter( "GroupID", id );
  
   ajaxCall( request, "GetDeviceGroupMembers", params, callback );
}