// 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;

   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 notify webmaster@conwin.com.');
      }// 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")
            {   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

