//
// EXTERNAL:: var debugmode
// EXTERNAL:: var debug_2
// EXTERNAL:: var debug_3
//
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//
var ajaxResult;                                                                                    // Result array
//IDX_SCRIPT = 0;                                                                                    // Result array id constants, Script code idx
//IDX_OP = 1;                                                                                        //   Op code idx
//IDX_ROW = 2;                                                                                       //   Row idx
//IDX_MSG = 3;                                                                                       //   Message idx
//IDX_MSGEX = 4;                                                                                     //   Extended Message idx

var frm_Data;                                                                                      // Form Data array


/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Name:         initDebugMode
 * Description:  Initialize our Debug modes
 *
 *
 */
function initDebugMode()
{
  if (debugmode) {                                                                                           // If we're in debugmode
    elemAppendInnerHTML('dout', '[initDebugMode]::debug status<br />');                                      // Check and output status of our debug vars
    elemAppendInnerHTML('dout', '   debugmode = ' + debugmode + '<br />');
    elemAppendInnerHTML('dout', '   debug_2 = ' + debug_2 + '<br />');
    elemAppendInnerHTML('dout', '   debug_3 = ' + debug_3 + '<br />');
  }
}

/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Name:         ShowWaitBar
 * Description:  Shows or Hides the WaitBar
 *
 *
 */
function ShowWaitBar(show)
{
  if (debug_3) elemAppendInnerHTML('dout', '[ShowWaitBars]::' + show +'<br />');

  var wb1 = document.getElementById('fleet_waitBar1');
  var wb2 = document.getElementById('fleet_waitBar2');

  if (show) {
    wb1.style.display = 'block';
    wb2.style.display = 'block';
  }
  else {
    wb1.style.display = "none";
    wb2.style.display = "none";
  }
  //return wb;
}

/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Name:         ShowFleetDetail
 * Description:  Shows or Hides the Fleet Detail Pane
 *
 *
 */
function ShowFleetDetail(show)
{
  if (debug_3) elemAppendInnerHTML('dout', '[ShowFleetDetail]::' + show +'<br />');

  var fi = document.getElementById('fleet_intro');
  var fd = document.getElementById('fleet_detail');

  if (show) {
    fi.style.display = 'none';
    fd.style.display = 'block';
  }
  else {
    fd.style.display = "none";
    fi.style.display = 'block';
  }
}

//
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//

/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Name:         frm_PreProcessRequest
 * Description:  Process the form data, pull from form elements and assemble in common data structure for further processing
 *
 *
 */
function frm_PreProcessRequest(ofrm)
{
  if (debugmode) elemAppendInnerHTML('dout', '[PROCESSDATA]::Started for ' + ofrm.id + '<br />');
  //alert(ofrm.id);
  var eInputs = new Array();                                                                       // Clear/Initialize the input elements array
  var rexp = /pf_/;                                                                                // FIX: reg ex to match start of string,  CAN WE USE PROC_FIELD????
  var match_pos;

  // FIX - no need to search, pick up form element directly....
                                                                                                   //
  eInputs = ofrm.getElementsByTagName('INPUT');                                                    // Pickup PROC_FIELD marked INPUTs
  // Assert eInputs is not empty, if (eInputs.length < 1) alert('eInputs is empty!!');
  for (var i = 0; i < eInputs.length; i++) {                                                       // Loop thru current input array
    match_pos = eInputs[i].id.search(rexp);
    if(match_pos != -1) {
      if (debug_2) elemAppendInnerHTML('dout', '[PROCESSDATA]::Creating frm_Data[' + eInputs[i].id + ']<br />');
      if (debug_2) elemAppendInnerHTML('dout', '[PROCESSDATA]::Encoding.... ' + eInputs[i].value + '<br />');
      frm_Data[eInputs[i].id] = eInputs[i].value;
    }
  }                                                                                                //
  //alert(frm_Data['pf_pid']);

  // Build our SQL statement to pull aircraft data from db, on pf_pid, eInputs[i].value
  var sql  = 'SELECT tbl_fleet.*, tbl_models.sid_make, tbl_models.designation, tbl_models.common, tbl_models.notes as model_notes, tbl_makes.make FROM tbl_fleet, tbl_models, tbl_makes';
      sql += ' WHERE tbl_fleet.pid=\'' + frm_Data['pf_pid'] + '\'';
      sql += ' AND tbl_fleet.sid_model=tbl_models.pid';
      sql += ' AND tbl_models.sid_make=tbl_makes.pid';

  frm_Data['pf_pid'] = sql;
}

/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Name:         BuildDetailPane
 * Description:  x
 *
 *
 */
function BuildDetailPane() {
  elemSetSrc('fd_rep_image', 'images/fleet/' + ajaxResult['rep_image']);
  //elemSetSrc('fd_image', 'images/fleet/' + ajaxResult['image']);
  var im = document.getElementById('fd_image');
  im.href = 'images/fleet/' + ajaxResult['image'];

  elemSetInnerHTML('fd_model_notes', ajaxResult['model_notes']);

  var kstrings  = '<div class="fleetdetail_kstrings"><ul>';
      kstrings += '<li>HP</li>';
      kstrings += '<li>Cruise</li>';
      kstrings += '<li>IFR</li>';
      kstrings += '<li>Complex</li>';
      kstrings += '<li>Usable Fuel</li>';
      kstrings += '<li>GPH</li>';
      kstrings += '<li>Range</li>';
      kstrings += '<li>Max Load</li>';
      kstrings += '<li>Useful Load</li>';
      kstrings += '</ul></div>';
  var nstrings  = '<div class="fleetdetail_nstrings"><ul>';
      nstrings += '<li>' +ajaxResult['hp']+ '</li>';
      nstrings += '<li>' +ajaxResult['cruise_speed']+ ' knots</li>';
      nstrings += '<li>' +ajaxResult['ifr']+ '</li>';
      nstrings += '<li>' +ajaxResult['complex']+ '</li>';
      nstrings += '<li>' +ajaxResult['usablefuel']+ ' gal</li>';
      nstrings += '<li>' +ajaxResult['gph']+ '</li>';
      nstrings += '<li>' +ajaxResult['range']+ ' nm</li>';
      nstrings += '<li>' +ajaxResult['maxload']+ ' lbs</li>';
      nstrings += '<li>' +ajaxResult['usefulload']+ ' lbs</li>';
      nstrings += '</ul></div>';

  elemSetInnerHTML('fd_kstrings', kstrings);
  elemSetInnerHTML('fd_nstrings', nstrings);

  elemSetInnerHTML('fd_notes', ajaxResult['notes']);

  ShowFleetDetail(true);

}

/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Name:         ProcessXMLResponse
 * Description:  x
 *
 *
 */
function ProcessXMLResponse(xmldata) {
  try {                                                           //Internet Explorer
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = "false";
    xmlDoc.loadXML(xmldata);
  }
  catch(e) {
    try {                                                         //Firefox, Mozilla, Opera, etc.
      parser = new DOMParser();
      xmlDoc = parser.parseFromString(xmldata, "text/xml");
    }
    catch(e) {alert(e.message)}
  }


  try {
    //document.write("xmlDoc is loaded, ready for use");
    //alert("xmlDoc is loaded, ready for use");
    var cn = xmlDoc.documentElement.childNodes;
    var k, n = '';
    for (var i = 0; i < cn.length; i++) {
      if (debug_3) elemAppendInnerHTML('dout', '[ProcessXMLResponse]::['+cn[i].nodeName+'] is ' + cn[i].nodeType + '<br />');
      k = cn[i].nodeName;
      if (cn[i].childNodes[0]) {
        n = cn[i].childNodes[0].nodeValue;
        if(n == '1') n = 'Yes';
        if(n == '0') n = 'No';
        if (debug_3) elemAppendInnerHTML('dout', '[ProcessXMLResponse]::['+cn[i].nodeName+'] = ' + cn[i].childNodes[0].nodeValue + '<br />');
      } else n = '';
      // check for yes/no conversion

      ajaxResult[k] = n;
    }
    BuildDetailPane();
  }
  catch(e) {alert(e.message)}
}

/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Name:         xhrCallback
 * Description:  x
 *
 *
 */
function xhrCallback(data, status)
{
  if (debug_3) elemAppendInnerHTML('dout', '[xhrCallback]<br />');
  if (data) {
    if (debugmode) elemAppendInnerHTML('dout', '[xhrCallback]::[HAVE DATA, Processing...]<br />');
    ProcessXMLResponse(data);

    if (debug_2) {                                                                                 // if we're at DEBUG2, traverse the ajaxResult array
      elemAppendInnerHTML('dout', '[xhrCallback]::ajaxResult::<br />');                               //

      for (var i in ajaxResult) {
        elemAppendInnerHTML('dout', '[' + i + '] = ' + ajaxResult[i] + '<br />');
      }
    }
    //frm_CheckResult();
    ShowWaitBar(false);                                                                              // Remove wait bar
  }
}

/*-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 * Name:         frm_ProcFleetRequest
 * Description:
 *
 *               #20090512 - BUG: We're not setting up in this event correctly for Firefox/Mozilla, db updates fail because we're not posting data correctly, undoubtably
 *                           because we're not handling evt right.
 *
 */
function frm_ProcFleetRequest(evt)
{
  ShowWaitBar(true);                                                                               // Show the waitBar
  var target;
  if (!evt) var evt = window.event;
  if (evt.target) target = evt.target;
  else if (evt.srcElement) target = evt.srcElement;
  //alert(target.id);

  frm_Data = new Array();                                                                          // Clear/Initialize the form data array
  ajaxResult = new Array();                                                                        // Clear/Initialize the result array

  frm_PreProcessRequest(target);                                                                   // Preprocess the from data
  var allsystemsgo = true;  //frm_Validate();

  //alert('here?');

  if (allsystemsgo) {
    var postAjaxData = '';
    if (debugmode) postAjaxData += '&debug=true';                                                  // Add the debugmode switch if set
                                                                                                   //
                                                                                                   //
    for (var i in frm_Data) {                                                                      // Traverse data array/(object) and add to post data string
      postAjaxData += '&'+ i + '=' + frm_Data[i];                                                  //
    }                                                                                              //
    if (debug_2) elemAppendInnerHTML('dout', 'postAjaxData = ' + postAjaxData + '<br />');         //
                                                                                                   //
                                                                                                   // Prepare for Ajax Submission
    reqH = CreateBasicRequestHeaders();                                                            // Create basic headers for Ajax submission
    reqH["Content-length"] = postAjaxData.length;                                                  //
    reqH["asyncRequest"] = 'true';                                                                 // Set secondary submission flag in header data
    if (debugmode) elemAppendInnerHTML('dout', 'Placing Ajax Call....<br />');                     //
    if (debugmode) elemAppendInnerHTML('dout', 'url = ' + processscript_url + '<br />');           //

    var xhrResult = asyncRequest('POST', processscript_url,                                        // Place our Ajax call
                    function(o) { xhrCallback(o.responseText, o.status); }, postAjaxData, reqH);   //
                                                                                                   //
    //sentTimer = setTimeout("frm_ValidateFields()",3500);                                         //
    //__CancelEvent(evt);                                                                          //
    //__StopEventPropagation(evt);                                                                 //
                                                                                                   //
    if (xhrResult) {                                                                               // Once the call returns, see what the object status indicates
      if (debugmode) elemAppendInnerHTML('dout', '[AJAX OBJECT SUCCESS]<br />');                   //
      return false;                                                                                // prevents standard form submit, but if we bomb before this, undefined will cause a standard submit
    } //else {                                                                                       //
    //  if (debugmode) elemAppendInnerHTML('dout', '[AJAX OBJECT ERROR]... Trying standard submit...<br />');
    //  return true;                                                                                 // allows standard form submit
    //}                                                                                              //
    //alert('in go');

  } else {                                                                                         // A Precondition is wrong, bail on entire package, reset UI
    //__CancelEvent(evt);
    //__StopEventPropagation(evt);
    ShowWaitBar(false);
    return false;
  }
}