﻿// Global Variables
var adminFindCompany = "";
var adminFindDevice = "";


function showAdminWindow( )
{
   // Local Variables
   var id = "AdminWindow";
   var admin = document.getElementById( id );
   var left = parseInt( admin.style.left ) ;
 
    if ( admin != null )
   {
      // Center the reports window on first open
      if ( left == 0 )
      {
         centerWindow( id );
      }

      document.getElementById( id ).style.visibility = "visible";

      // Show the maintain companies pane
      showAdminCompanies( );

      // Grab Focus
      setWindowFocus( id );
   }
}


function closeAdminWindow( )
{
   // Local Variables
   var id = "AdminWindow";
   var AdminCompanies = document.getElementById( "Admin_MaintainCompanies" );
   var AdminDevices   = document.getElementById( "Admin_MaintainDevices" );
   
   if ( document.getElementById( id ) != null )
   {
      document.getElementById( id ).style.visibility = "hidden";
      
      // Surpress the display of the panels once the window has been closed
      AdminCompanies.style.visibility = "hidden";
      AdminDevices.style.visibility = "hidden";
   }
}


function showAdminCompanies( )
{
   // Local Variables
   var AdminCompanies = document.getElementById( "Admin_MaintainCompanies" );
   var AdminDevices   = document.getElementById( "Admin_MaintainDevices" );

   // Update the style elements
   AdminCompanies.style.display = "block";
   AdminCompanies.style.visibility = "visible";
   AdminDevices.style.display = "none";
   AdminDevices.style.visibility = "hidden";
   
   // Populate the drop down boxes
   getStateNamesMC( );
   getCompanyNamesMC( );
}


function showAdminDevices( )
{
   // Local Variables
   var AdminCompanies = document.getElementById( "Admin_MaintainCompanies" );
   var AdminDevices   = document.getElementById( "Admin_MaintainDevices" );

   // Update the style elements
   AdminDevices.style.display = "block";
   AdminDevices.style.visibility = "visible";
   AdminCompanies.style.display = "none";
   AdminCompanies.style.visibility = "hidden";
   
   // Populate the drop down boxes
   getDeviceTypesMD( );
   getCompanyNamesMD( );
}


function isAdmin( )
{
   var request = buildRequest( );

   var callback = function( )
   {
      if ( request.readyState == 4 )
      {
         if( request.status == 200 )
         { 
            var response = parseDocument( request.responseText );
            var NavWindow = document.getElementById("Nav");
            var cmdAdmin = document.getElementById("NavAdmin");
            var items = response.getElementsByTagName( "true" );

            // Verify the success of the operation
            if( items.length > 0 )
            {
                NavWindow.style.height = "190px";
                cmdAdmin.style.display = "block";
            }
            else
            {
                NavWindow.style.height = "180px";
                cmdAdmin.style.display = "none";

                errorHandler( response );
            }
         }
      }
   }

   // Initialise the parameter list
   var param = new Parameter( "SessionID", getSessionID( ) );

   ajaxCall( request, "IsAdmin", param, callback );
}


function getCompanyNamesMC( )
{
   var request = buildRequest( );

   var callback = function( )
   {
      if ( request.readyState == 4 )
      {
         if( request.status == 200 )
         { 
            var response = parseDocument( request.responseText );
            var list = document.getElementById( "AdminCompanies_SelectCompany" );
            var items = response.getElementsByTagName( "company" );

            // Clear the list of all existing options
            list.options.length = 0;

            if ( items.length > 0 )
            {    
               // Create an initial option that allows the user to create
               // a new company
               list.options[0] = new Option( "Create New Company", -1 );
            
               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" );

                   list.options[i+1] = new Option( name, id );
                   
                   if ( name == adminFindCompany )
                   {
                      list.selectedIndex = i + 1;
                   }
               }
               
               // Load the default company details
               loadCompanyDetails( );
            }
            else
            {
                errorHandler( response );
            }
         }
      }
   }

   // Initialise the parameter list
   var param = new Parameter( "SessionID", getSessionID( ) );

   ajaxCall( request, "GetCompanies", param, callback );
}


function getStateNamesMC( )
{
   var request = buildRequest( );

   var callback = function( )
   {
      if ( request.readyState == 4 )
      {
         if( request.status == 200 )
         { 
            var response = parseDocument( request.responseText );
            var list = document.getElementById( "AdminCompanies_State" );
            var items = response.getElementsByTagName( "state" );

            // Clear the list of all existing options
            list.options.length = 0;

            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" );

                   list.options[i] = new Option( name, id );
               }
            }
            else
            {
                errorHandler( response );
            }
         }
      }
   }

   // Initialise the parameter list
   var param = new Parameter( "SessionID", getSessionID( ) );

   ajaxCall( request, "GetStates", param, callback );
}


function loadCompanyDetails( )
{
   // Local Variables
   var select = document.getElementById( "AdminCompanies_SelectCompany" );
   
   if ( select != null )
   {
      var value = select.options[ select.selectedIndex ].value;

      // Store the current selection
      adminFindCompany = select.options[ select.selectedIndex ].innerText;
      
      if ( value != -1 )
      {
         var request = buildRequest( );

         var callback = function( )
         {
            if ( request.readyState == 4 )
            {
               if( request.status == 200 )
               { 
                  var response = parseDocument( request.responseText );
                  var items = response.getElementsByTagName( "company" );

                  // Get references to all of the screen elements 
                  var companyName = document.getElementById( "AdminCompanies_CompanyName" );
                  var companyABN  = document.getElementById( "AdminCompanies_ABN" );
                  var companyAdr1 = document.getElementById( "AdminCompanies_Address1" );
                  var companyAdr2 = document.getElementById( "AdminCompanies_Address2" );
                  var suburb      = document.getElementById( "AdminCompanies_Suburb" );
                  var state       = document.getElementById( "AdminCompanies_State" );
                  var postcode    = document.getElementById( "AdminCompanies_Postcode" );
                  var noMapCalls  = document.getElementById( "AdminCompanies_NumberOfMapCalls" );
                  var noDevLookup = document.getElementById( "AdminCompanies_NumberOfDeviceLookups" );
                  var showSuburbs = document.getElementById( "AdminCompanies_ShowSuburbs" );

                  if ( items.length > 0 )
                  {
                     var item = items[0];
                  
                     // Read off the values and place them into the text fields
                     companyName.value = nodeValue( item, "name" );
                     companyABN.value  = nodeValue( item, "abn" );
                     companyAdr1.value = nodeValue( item, "addressLine1" );
                     companyAdr2.value = nodeValue( item, "addressLine2" );
                     suburb.value      = nodeValue( item, "suburb" );
                     state.value       = nodeValue( item, "state" );
                     postcode.value    = nodeValue( item, "postcode" );
                     noMapCalls.value  = nodeValue( item, "numberOfMapCalls" );
                     noDevLookup.value = nodeValue( item, "numberOfDeviceLookups" );

                     if ( nodeValue( item, "showSuburbs" ) == "True" )
                     {
                        showSuburbs.checked = "checked";
                     }
                     else
                     {
                        showSuburbs.checked = "";                     
                     }
                  }
                  else
                  {
                      errorHandler( response );
                  }
               }
            }
         }

         // Build up the parameter list and execute the remote method
         var params = new Array(2);
         params[0] = new Parameter( "SessionID", getSessionID( ) );
         params[1] = new Parameter( "CompanyID", value );

         ajaxCall( request, "GetCompanyDetails", params, callback );
      }
      else
      {
         // Get references to all of the screen elements 
         var companyName = document.getElementById( "AdminCompanies_CompanyName" );
         var companyABN  = document.getElementById( "AdminCompanies_ABN" );
         var companyAdr1 = document.getElementById( "AdminCompanies_Address1" );
         var companyAdr2 = document.getElementById( "AdminCompanies_Address2" );
         var suburb      = document.getElementById( "AdminCompanies_Suburb" );
         var state       = document.getElementById( "AdminCompanies_State" );
         var postcode    = document.getElementById( "AdminCompanies_Postcode" );
         var noMapCalls  = document.getElementById( "AdminCompanies_NumberOfMapCalls" );
         var noDevLookup = document.getElementById( "AdminCompanies_NumberOfDeviceLookups" );
         var showSuburbs = document.getElementById( "AdminCompanies_ShowSuburbs" );
         
         // Clear the cells
         companyName.value   = "";
         companyABN.value    = "";
         companyAdr1.value   = "";
         companyAdr2.value   = "";
         suburb.value        = "";
         state.selectedIndex = 0;
         postcode.value      = "";
         noMapCalls.value    = "0";
         noDevLookup.value   = "0";
         showSuburbs.checked = "";
      }
   }
}


function saveCompanyDetails( )
{
   var companyID   = document.getElementById( "AdminCompanies_SelectCompany" );
   var companyName = document.getElementById( "AdminCompanies_CompanyName" );
   var companyABN  = document.getElementById( "AdminCompanies_ABN" );
   var companyAdr1 = document.getElementById( "AdminCompanies_Address1" );
   var companyAdr2 = document.getElementById( "AdminCompanies_Address2" );
   var suburb      = document.getElementById( "AdminCompanies_Suburb" );
   var state       = document.getElementById( "AdminCompanies_State" );
   var postcode    = document.getElementById( "AdminCompanies_Postcode" );
   var noMapCalls  = document.getElementById( "AdminCompanies_NumberOfMapCalls" );
   var noDevLookup = document.getElementById( "AdminCompanies_NumberOfDeviceLookups" );
   var showSuburbs = document.getElementById( "AdminCompanies_ShowSuburbs" );

   var request = buildRequest( );   

   var callback = function( )
   {
      if ( request.readyState == 4 )
      {
          if( request.status == 200 )
          { 
             var company = document.getElementById( "AdminCompanies_SelectCompany" );
             var index = company.selectedIndex;   

             // Only process the following code when we are creating a new group
             if ( index == 0 )
             {             
                // Get the name of the current group
                adminFindCompany = document.getElementById( "AdminCompanies_CompanyName" ).value;

                // Reload the drop down
                getCompanyNamesMC( );   
             }
             
             // Inform the user
             alert( "Save Successful." );
          }
      }
   }
   
   var params = new Array(11);
   params[0]  = new Parameter( "SessionID", getSessionID( ) );
   params[1]  = new Parameter( "CompanyID",   companyID.options[ companyID.selectedIndex ].value );
   params[2]  = new Parameter( "CompanyName",  companyName.value );
   params[3]  = new Parameter( "ABN",  companyABN.value );
   params[4]  = new Parameter( "AddressLine1",  companyAdr1.value );
   params[5]  = new Parameter( "AddressLine2",  companyAdr2.value );
   params[6]  = new Parameter( "Suburb",  suburb.value );
   params[7]  = new Parameter( "State",  state.options[ state.selectedIndex ].value );
   params[8]  = new Parameter( "PostCode",  postcode.value );
   params[9]  = new Parameter( "NumberOfMapCalls",  noMapCalls.value );
   params[10] = new Parameter( "NumberOfDeviceLookups",  noDevLookup.value );
   params[11] = new Parameter( "ShowSuburbs",  showSuburbs.checked );
   
   ajaxCall( request, "SetCompanyDetails", params, callback );
}


function getCompanyNamesMD( )
{
   var request = buildRequest( );

   var callback = function( )
   {
      if ( request.readyState == 4 )
      {
         if( request.status == 200 )
         { 
            var response = parseDocument( request.responseText );
            var list = document.getElementById( "AdminDevices_SelectCompany" );
            var items = response.getElementsByTagName( "company" );

            // Clear the list of all existing options
            list.options.length = 0;

            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" );

                   list.options[i] = new Option( name, id );
               }

                // Load the company devices
                getCompanyDevicesMD( );          
            }
            else
            {
                errorHandler( response );
            }
         }
      }
   }

   // Initialise the parameter list
   var param = new Parameter( "SessionID", getSessionID( ) );

   ajaxCall( request, "GetCompanies", param, callback );
}


function getCompanyDevicesMD( )
{
   // Local Variables
   var select = document.getElementById( "AdminDevices_SelectCompany" );
   
   if ( select != null )
   {
      var value = select.options[ select.selectedIndex ].value;
      var request = buildRequest( );

      var callback = function( )
      {
         if ( request.readyState == 4 )
         {
            if( request.status == 200 )
            { 
               var response = parseDocument( request.responseText );
               var list = document.getElementById( "AdminDevices_SelectDevice" );
               var items = response.getElementsByTagName( "device" );

               // Clear the list of all existing options
               list.options.length = 0;

               if ( items.length > 0 )
               {    
                  // Create an initial option that allows the user to create
                  // a new company device
                  list.options[0] = new Option( "Create New Device", -1 );
               
                  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" );

                     list.options[i+1] = new Option( name, id );
                    
                     if ( name == adminFindDevice )
                     {
                        list.selectedIndex = i + 1;
                     }
                  }
                  
                  // Load the device details
                  loadDeviceDetails( );
               }
               else
               {
                  errorHandler( response );
               }
            }
         }
      }

      // Build up the parameter list and execute the remote method
      var params = new Array(2);
      params[0] = new Parameter( "SessionID", getSessionID( ) );
      params[1] = new Parameter( "CompanyID", value );

      ajaxCall( request, "GetCompanyDevices", params, callback );
   }
}


function loadDeviceDetails( )
{
   // Local Variables
   var select = document.getElementById( "AdminDevices_SelectDevice" );
   
   if ( select != null )
   {
      var value = select.options[ select.selectedIndex ].value;

      // Store the current selection
      adminFindDevice = select.options[ select.selectedIndex ].innerText;
      
      if ( value != -1 )
      {
         var request = buildRequest( );

         var callback = function( )
         {
            if ( request.readyState == 4 )
            {
               if( request.status == 200 )
               { 
                  var response = parseDocument( request.responseText );
                  var items = response.getElementsByTagName( "device" );

                  // Get references to all of the screen elements 
                  var deviceName  = document.getElementById( "AdminDevices_DeviceName" );
                  var deviceType  = document.getElementById( "AdminDevices_SelectType" );
                  var phoneNumber = document.getElementById( "AdminDevices_PhoneNumber" );
                  var comment     = document.getElementById( "AdminDevices_Comment" );

                  if ( items.length > 0 )
                  {
                     var item = items[0];
                  
                     // Read off the values and place them into the text fields
                     deviceName.value  = nodeValue( item, "name" );
                     deviceType.value  = nodeValue( item, "type" );
                     phoneNumber.value = nodeValue( item, "phone" );
                     comment.value     = nodeValue( item, "comment" );
                  }
                  else
                  {
                      errorHandler( response );
                  }
               }
            }
         }

         // Build up the parameter list and execute the remote method
         var params = new Array(2);
         params[0] = new Parameter( "SessionID", getSessionID( ) );
         params[1] = new Parameter( "DeviceID", value );

         ajaxCall( request, "GetDeviceDetails", params, callback );
      }
      else
      {
         // Get references to all of the screen elements 
         var deviceName  = document.getElementById( "AdminDevices_DeviceName" );
         var deviceType  = document.getElementById( "AdminDevices_SelectType" );
         var phoneNumber = document.getElementById( "AdminDevices_PhoneNumber" );
         var comment     = document.getElementById( "AdminDevices_Comment" );
         
         // Clear the cells
         deviceName.value  = "";
         deviceType.selectedIndex = 0;
         phoneNumber.value = "";
         comment.value     = "";
      }
   }
}


function getDeviceTypesMD( )
{
   var request = buildRequest( );

   var callback = function( )
   {
      if ( request.readyState == 4 )
      {
         if( request.status == 200 )
         { 
            var response = parseDocument( request.responseText );
            var list = document.getElementById( "AdminDevices_SelectType" );
            var items = response.getElementsByTagName( "devicetype" );

            // Clear the list of all existing options
            list.options.length = 0;

            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" );

                   list.options[i] = new Option( name, id );
               }
            }
            else
            {
                errorHandler( response );
            }
         }
      }
   }

   // Initialise the parameter list
   var param = new Parameter( "SessionID", getSessionID( ) );

   ajaxCall( request, "GetDeviceTypes", param, callback );
}


