// Author: Bill Borton 2009

var resultsTable      = false;                          // A global var to contain search results
//var resultsVisibility = false;                          // The visability status of the results table
var url               = "/cgi-bin/product_locator.cgi"; // The server-side script
var response          = false;                          // The response from the server

// Holds the header text for each of the data columns
var columnHeader = new Array();
columnHeader['ModelFam']      = "Model Family";
columnHeader['ProdType']      = "Product Type";
columnHeader['Pkg']           = "Package";
columnHeader['FreqStability'] = "Frequency Stability";
columnHeader['FreqTol']       = "Frequency Tolerance";
columnHeader['FreqCal']       = "Frequency Calibration";
columnHeader['SupplyVolt']    = "Supply Voltage";
columnHeader['LogicFam']      = "Logic Family";
columnHeader['FreqRange']     = "Frequency Range";
columnHeader['TempRange']     = "Temperature Range";
columnHeader['PullRange']     = "Pull Range";
columnHeader['MoistureLevel'] = "Moisture Level";
columnHeader['FreeRun']       = "Free Run";
columnHeader['Holdover']      = "Holdover";
columnHeader['InputRefs']     = "Input Refs";
columnHeader['Outputs']       = "Outputs";
columnHeader['Keyword']       = "Keyword";

// Holds the data variable names to display for each family type's search results
var defaultColumns    = new Array();
var defaultColumns    = ['ModelFam', 'LogicFam', 'ProdType', 'Pkg', 'FreqStability', 'FreqTol', 'FreqCal', 'SupplyVolt', 'FreqRange', 'TempRange', 'PullRange', 'MoistureLevel', 'FreeRun', 'Holdover', 'InputRefs', 'Outputs', 'Keyword'];
var icColumns         = new Array();
var icColumns         = ['ProdType', 'LogicFam', 'Pkg', 'SupplyVolt', 'FreqRange', 'TempRange', 'InputRefs', 'Outputs', 'Keyword'];
var documentColumns   = new Array();
var documentColumns   = ['LogicFam', 'Pkg', 'Keyword'];
var crystalColumns    = new Array();
var crystalColumns    = ['ProdType', 'Pkg', 'FreqStability', 'FreqTol', 'FreqRange', 'TempRange', 'Keyword'];
var oscColumns        = new Array();
var oscColumns        = ['ProdType', 'LogicFam', 'Pkg', 'FreqStability', 'FreqTol', 'FreqCal', 'SupplyVolt', 'FreqRange', 'TempRange', 'PullRange', 'Keyword'];
var timeModColumns    = new Array();
var timeModColumns    = ['ProdType', 'LogicFam', 'Pkg', 'SupplyVolt', 'FreqRange', 'TempRange', 'MoistureLevel', 'FreeRun', 'Holdover', 'Keyword'];
var timeFreqColumns   = new Array();
var timeFreqColumns   = ['ProdType', 'LogicFam', 'Pkg', 'SupplyVolt', 'FreqRange', 'TempRange', 'MoistureLevel', 'FreeRun', 'Holdover', 'Keyword'];

// Holds arrays of the above data type names for each family type
var columns = new Array();
columns['Default']                   = defaultColumns;
columns['Timing ICs']                = icColumns;
columns['Documents']                 = documentColumns;
columns['Crystals']                  = crystalColumns;
columns['Oscillators']               = oscColumns;
columns['Timing Module']             = timeModColumns;
columns['Time-Frequency References'] = timeFreqColumns;

// USE THE xmlHttpReq OBJECT ALREADY CREATED BY pnsearch.js

function setGetData()
{  var getString = window.location.search;
   if (getString)
   {  getString = getString.substr(1); // remove the "?"
      var pairs = getString.split("&");
      for (var i = 0; i < pairs.length; i++)
      {  var vals = pairs[i].split("=");
         if (document.getElementById(vals[0]) != null)
         {  clearOptions(vals[0]);
            addOption(vals[0], vals[1], vals[1]);
         }// end if
      }// end for
   }// end if
   // Change the desription if results are restricted
   if (document.getElementById('RestrictOut').value == "N")
   {  document.getElementById('description').style.display = "none";
   }// end if
}// end function setGetData


function updateForm()
{  var request =
       'Recommended='   + document.getElementById('Recommended').value   + '&' +
       'RestrictOut='   + document.getElementById('RestrictOut').value   + '&' +
       'Keyword='       + document.getElementById('Keyword').value       + '&' +
       'ModelFam='      + document.getElementById('ModelFam').value      + '&' +
       'ProdType='      + document.getElementById('ProdType').value      + '&' +
       'Pkg='           + document.getElementById('Pkg').value           + '&' +
       'FreqStability=' + document.getElementById('FreqStability').value + '&' +
       'FreqTol='       + document.getElementById('FreqTol').value       + '&' +
       'FreqCal='       + document.getElementById('FreqCal').value       + '&' +
       'SupplyVolt='    + document.getElementById('SupplyVolt').value    + '&' +
       'LogicFam='      + document.getElementById('LogicFam').value      + '&' +
       'FreqRange='     + document.getElementById('FreqRange').value     + '&' +
       'TempRange='     + document.getElementById('TempRange').value     + '&' +
       'PullRange='     + document.getElementById('PullRange').value     + '&' +
       'FreeRun='       + document.getElementById('FreeRun').value       + '&' +
       'Holdover='      + document.getElementById('Holdover').value      + '&' +
       'InputRefs='     + document.getElementById('InputRefs').value     + '&' +
       'Outputs='       + document.getElementById('Outputs').value       + '&' +
       'Keyword='       + document.getElementById('Keyword').value;

   // Remind people on slow connections to wait for the data to fully load...
   document.getElementById('matches').innerHTML = "<span class=\"red\"><blink>Loading data...  Please wait before making your next selection.</blink></span>";
   
   xmlHttpReq.open("POST", url, true);
   xmlHttpReq.onreadystatechange = handleHttpResponse;
   xmlHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
   xmlHttpReq.send(request);
   
}// end function updateForm


function addOption(elementID, text, value)
{  var newelement = document.createElement('option');
   newelement.text = text;
   newelement.value = value;
   try
   {  document.getElementById(elementID).add(newelement, null); // standards compliant; doesn't work in IE
   }
   catch(ex)
   {  document.getElementById(elementID).add(newelement);       // IE only
   }
}// end function addOption


function clearOptions(elementID)
{  var element = document.getElementById(elementID);
   for (var i = element.length - 1; i >= 0 ; i--)
   {  element.remove(i);
   }// end for
}// end function clearOptions


function handleHttpResponse()
{  if (xmlHttpReq.readyState == 4)
   {  var jsonTxt = xmlHttpReq.responseText

      try
      {  response = JSON.parse(jsonTxt);
      }
      catch(er)
      {  alert('An error occured while searching the database.  Please wait for your option choice to fully load before making your next choice.  (Your choice will become "greyed out" when fully loaded.)  Notify webmaster@conwin.com if the problem continues.');
      }// end try-catch

      for (var x = 0; x < response.selects.length; x++)
      {  var elementID = response.selects[x].name;
         if (document.getElementById(elementID) != null)
         {  clearOptions(elementID);
            for (var y = 0; y < response.selects[x].options.length; y++)
            {   addOption(elementID, response.selects[x].options[y].text, response.selects[x].options[y].value);
            }// end for
            document.getElementById(elementID).disabled = response.selects[x].disabledStatus;
         }// end if
      }// end for

      //alert(document.getElementById('RestrictOut').value); //debug
      
      if ((response.matches > 0) && ((response.matches < 51) || (document.getElementById('RestrictOut').value == "N")))
      {  resultsFamily = "Default";
         if ((document.getElementById('ModelFam') != null) && (columns[document.getElementById('ModelFam').value] != null))
         {  resultsFamily = document.getElementById('ModelFam').value;
         }// end if
      
         resultsTable =  "<table class=\"overview\">";
         resultsTable += "<tr class=\"column-names\">";
         resultsTable += "<td>Part Number</td>";
         for (var x = 0; x < columns[resultsFamily].length; x++)
         {  resultsTable += "<td>" + columnHeader[columns[resultsFamily][x]] + "</td>";
         }// end for
         resultsTable += "</tr>";
         
         for (var x = 0; x < response.results.length; x++)
         {  var DKString      = "";
            var RoHSString    = "";
            var IntViewString = "";
            //if(response.results[x].DigiKey == "Y")
            if(response.results[x].DigiKey != "N/A")
            {   DKString = "<br><a href=\"" + response.results[x].DkLink + "\"><span class=\"red\">Buy Now</span></a>"
            }// end if
            if(response.results[x].RoHSCompl == "YES")
            {   RoHSString = "<br><a href=\"rohs.html\"><span class=\"green\">RoHS</span></a>"
            }
            else if(response.results[x].RoHSCompl == "5/6 Compliant")
            {   RoHSString = "<br><a href=\"rohs.html\"><span class=\"green\">RoHS 5/6</span></a>"
            }// end if
            if(response.results[x].Restriction != "A")
            {   IntViewString = "<br><span class=\"red\">INTERNAL VIEW ONLY!</span></a>"
            }// end if
            resultsTable += "<tr>";
            resultsTable += ("<td><a href=\"" + response.results[x].Link + "\">" + response.results[x].ModelNum + "</a>" + RoHSString + DKString + IntViewString + "</td>");
            for (var y = 0; y < columns[resultsFamily].length; y++)
            {  resultsTable += "<td>" + response.results[x][columns[resultsFamily][y]] + "</td>";
            }// end for
            resultsTable += "</tr>";
         }// end for
         resultsTable += "</table>";

         showResults();
      }
      else
      {  document.getElementById('matches').innerHTML = "<span class=\"red\">" + response.matches + " datasheets match this criteria.  Please continue to narrow your search.</span>";
      }// end if-else
   }// end if
}// end function handleHttpResponse


function showResults()
{  document.getElementById('matches').innerHTML = "<span class=\"green\">" + response.matches + " matches found. You may continue to narrow your search above.</span>";
   document.getElementById('results').innerHTML = resultsTable;
   //resultsVisibility = true;
}// end function showResults


function startOver()
{  document.getElementById('results').innerHTML = "";
   clearOptions('RestrictOut');
   addOption('RestrictOut', "RestrictOut", "Y");
   //resultsVisibility = false;
   for (var x = 0; x < response.selects.length; x++)
   {  var elementID = response.selects[x].name;
      if (document.getElementById(elementID) != null)
      {  clearOptions(elementID);
         document.getElementById(elementID).disabled = false;
         addOption(elementID, "Loading...", "all");
      }// end if
   }// end for
   document.getElementById('description').style.display = "inline";
   updateForm();
}// end function startOver

