var plot_http = "";
var lc_http = "";
function getHTTPObject()
{
 var xmlhttp;
 /*@cc_on
 @if (@_jscript_version >= 5)
  try {
   xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     } catch (E) {
       xmlhttp = false;
      }
    }
 @else
 xmlhttp = false;
 @end @*/
 if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
  try {
   xmlhttp = new XMLHttpRequest();
  } catch (e) {
    xmlhttp = false;
    }
 }
return xmlhttp;
} //end getHTTPObject

/*used to determine if user presses return key.
 *if so call calculate button on tool they are using.
 * from http://www.java-scripts.net/javascripts/Secret-Alert-Popup.phtml
  */
var nav=navigator.appName;
var ns=(nav.indexOf("Netscape")!=-1);

//determine action if user hits return/enter key
if(ns){
 if(document.layers){
  document.captureEvents(Event.KEYPRESS);
  document.onkeypress = getkey;
 }
/* if(document.getElementById)
 {
  document.onkeypress = getkey;
 }*/
}
else {
document.onkeypress = getkey;
}

function getkey(keyStroke){
 var eventChooser = (ns)?keyStroke.which: event.keyCode;
 if(eventChooser == '13') {
  calculate();
 }
}

function calculate() {
 var units1 = document.getElementById("bb_units").value;
 var units2 =document.getElementById("bb_frequency").value;
 var temperature = document.getElementById("bb_temperature").value;
 var emissivity = document.getElementById("bb_emissivity").value;
 var rec_vel = document.getElementById("bb_rec_vel").value;
 var spec_rad = document.getElementById("bb_spec_rad").value;
 var band1 = document.getElementById("bb_band1").value;
 var band2 = document.getElementById("bb_band2").value; 
 var temp_units1 = document.getElementById("bb_temp_units").value;
 var temp_array = new Array("K", "F", "C");
 var temp_units = temp_array[temp_units1];
 var error = false;
 var param_file = "";
 var err_str = "";
 var temp_upper = 100000;
 var temp_lower = 0;
 if(temp_units == "C") {
  temp_upper = 99726.85;
  temp_lower = -273.15;
 }
 else if(temp_units == "F") {
  if(temperature == -459.67)
  {
   temperature = -459.669999;
  }
  temp_upper = 179540.33;
  temp_lower = -459.67;
 }
 if((parseFloat(temperature)  > parseFloat(temp_upper)) || (parseFloat(temperature) < parseFloat(temp_lower)) || (isNaN(parseFloat(temperature)))) {
  err_str+= "Temperature must be between " + temp_lower + " and " + temp_upper + " " + temp_units +"<br>";
  error = true;
 }
 if((emissivity > 1) || (emissivity < 0) || (isNaN(parseFloat(emissivity)))) {
  err_str+= "Emissivity must be between 0 and 1.<br>";
  error = true;
 }
 var c = 299792.458; 
 if((rec_vel > (0.99*c)) || (rec_vel < (-0.99*c)) || (isNaN(parseFloat(rec_vel)))) {
  err_str+= "Recession Velocity must be between -0.99<i>c</i> and  0.99<i>c</i>.<br>";
  error = true;
 }
 var convertedBand1 = band1;
 var convertedBand2 = band2;
 if(units2 == "microns") {
  if((parseFloat(band1) < 0) || (parseFloat(band1) > 1e5) || (isNaN(parseFloat(band1))))  {
   error = true;
   err_str+= "Lower limit wavelength must be between 0 and 1e5.<br>";
  }
  if((parseFloat(band2) < 0) || (parseFloat(band2) > 1e5) || (isNaN(parseFloat(band2))))  {
   error = true;
   err_str+= "Upper limit wavelength must be between 0 and 1e5.<br>";
  }
  if((parseFloat(spec_rad) < 0) || (spec_rad > 1e5) || (isNaN(parseFloat(spec_rad))))  {
   error = true;
   err_str+= "Wavelength must be between 0 and 1e5<br>";
  }
  //convert units to wavenumber 
  convertedBand1 = 10000/parseFloat(band2);
  convertedBand2 = 10000/parseFloat(band1);
 }
 else if (units2 == "wavenumbers") {
  if((parseFloat(band1) < 0) || (parseFloat(band1) > 1e6) || (isNaN(parseFloat(band1))))  {
   error = true;
   err_str+= "Lower limit wavenumber must be between 0 and 1e6.<br>";
  }
  if((parseFloat(band2) < 0) || (parseFloat(band2) > 1e6) || (isNaN(parseFloat(band2))))  {
   error = true;
   err_str+= "Upper limit wavenumber must be between 0 and 1e6.<br>";
  }
  if((parseFloat(spec_rad) < 0) || (parseFloat(spec_rad) > 1e6) || (isNaN(parseFloat(spec_rad))))   {
   error = true;
   err_str+= "Wavenumber must be between 0 and 1e6<br>";
  }
 }
 else if (units2 == "Thz") {
  if((parseFloat(band1) < 0) || (parseFloat(band1) > 29900) || (isNaN(parseFloat(band1))))  {
   error = true;
   err_str+= "Lower limit frequency must be between 0 and 29900 THz.<br>";
  }
  if((parseFloat(band2) < 1e-6) || (parseFloat(band2) > 29900) || (isNaN(parseFloat(band2))))  {
   error = true;
   err_str+= "Upper limit frequency must be between 1e-6 and 29900 THz.<br>";
  }
  if((parseFloat(spec_rad) < 0) || (parseFloat(spec_rad) > 29900) || (isNaN(parseFloat(spec_rad))))  {
   error = true;
   err_str+= "Frequency must be between than 0 and 29900<br>";
  }
   convertedBand1 = parseFloat(band1)/(0.029979246);
   convertedBand2 = parseFloat(band2)/(0.029979246);
 }
 var ul_minus_ll = parseFloat(convertedBand2) - parseFloat(convertedBand1);
  if(ul_minus_ll < 0.0999999)  {
   error = true;
   err_str+= "Upper Limit - Lower Limit must be greater than or equal to 0.1cm<sup>-1</sup><br>";
  }

 if(error == true) {
  document.getElementById("bb_err_div").innerHTML = "<font color='red'><strong><u>Errors</u></strong><br>" + err_str + "</font>";
 }
 else {
  document.getElementById("bb_err_div").innerHTML = "";
  var user_id = document.getElementById("user_id").value;
  var user_name = document.getElementById("user_name").value;
  var user_status = document.getElementById("user_status").value;
  var remote_addr = document.getElementById("calc_remote_addr").value;
  var remote_host = document.getElementById("calc_remote_host").value;
  var user_agent = navigator.appName;
  var out= "bb_xml=<bb_info><temperature>" + temperature + "</temperature><emiss>" + emissivity+ "</emiss>";
  out+= "<units1>" + units1 + "</units1><units2>" + units2 + "</units2><spec_rad>" + spec_rad + "</spec_rad><band1>";
  out+= band1 + "</band1><band2>" + band2 + "</band2><temp_units>" + temp_units;
  out+= "</temp_units><r_addr>" + remote_addr + "</r_addr><r_host>" + remote_host + "</r_host>";
  out+= "<usr_agt>" + user_agent + "</usr_agt><rec_vel>" + rec_vel + "</rec_vel></bb_info>";
  plot_http = getHTTPObject();
  plot_http.open("POST", "bb_get_plot.php", true);
  plot_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  plot_http.setRequestHeader("Content-length", out.length);
  plot_http.setRequestHeader("Connection", "close");
  plot_http.onreadystatechange = show_plot;
  plot_http.send(out);
 } //end error = false
} //end function calculate

function show_plot(){
 if(plot_http.readyState==4) {
  var xmlDocument = plot_http.responseXML;
  var png_file = xmlDocument.getElementsByTagName('file_name').item(0).firstChild.data;
  var txt_file = png_file + ".txt";
  var power_units1 = xmlDocument.getElementsByTagName('units1').item(0).firstChild.data;
  var power_units2 = xmlDocument.getElementsByTagName('units2').item(0).firstChild.data;
  var main_temperature = xmlDocument.getElementsByTagName('temperature').item(0).firstChild.data;
  var main_emissivity = xmlDocument.getElementsByTagName('emiss').item(0).firstChild.data;
  var rad_emt = xmlDocument.getElementsByTagName('rad_emt').item(0).firstChild.data;
  var rad = xmlDocument.getElementsByTagName('rad').item(0).firstChild.data;
  var pkr = xmlDocument.getElementsByTagName('pkr').item(0).firstChild.data;
  var wlp = xmlDocument.getElementsByTagName('wlp').item(0).firstChild.data;
  var sr = xmlDocument.getElementsByTagName('sr').item(0).firstChild.data;
  var bdr = xmlDocument.getElementsByTagName('bdr').item(0).firstChild.data;
  var remind = xmlDocument.getElementsByTagName('remind').item(0).firstChild.data;
  var rnum =  xmlDocument.getElementsByTagName('rnum').item(0).firstChild.data;
  var output_units = "";
  var rad_emt_units = "";
  var band_rad_units = "";
  var rad_units = "";
  var pk_sp_units = "";
  var wl_pk_units = "";
  var spec_rad_units = "";
  if(power_units1 == "watts")  {
   rad_emt_units = " W/m<sup>2</sup>";
   rad_units = " W/m<sup>2</sup>/sr";
   band_rad_units = " W/m<sup>2</sup>/sr";
   if(power_units2 == "wavenumbers")   {
    pk_sp_units = " W/m<sup>2</sup>/sr/cm<sup>-1</sup>";
    wl_pk_units = " cm<sup>-1</sup>";
    spec_rad_units = " W/m<sup>2</sup>/sr/cm<sup>-1</sup>";
   }
   if(power_units2 == "microns")   {
    pk_sp_units = " W/m<sup>2</sup>/sr/&#181;m";
    wl_pk_units = " &#181;m";
    spec_rad_units = " W/m<sup>2</sup>/sr/&#181;m";
   }
   if(power_units2 == "Thz")   {
    pk_sp_units = " W/m<sup>2</sup>/sr/THz";
    wl_pk_units = " THz";
    spec_rad_units = " W/m<sup>2</sup>/sr/THz";
   }
  } //end power_units1 = watts
  if(power_units1 == "photons")  {
   rad_emt_units = "phot/s/m<sup>2</sup>";
   rad_units = " phot/s/m<sup>2</sup>/sr";
   band_rad_units = " phot/s/m<sup>2</sup>/sr";
   if(power_units2 == "wavenumbers")   {
    pk_sp_units = " phot/s/m<sup>2</sup>/sr/cm<sup>-1</sup>";
    wl_pk_units = " cm<sup>-1</sup>";
    spec_rad_units = " phot/s/m<sup>2</sup>/sr/cm<sup>-1</sup>";
   }
   if(power_units2 == "microns")   {
    pk_sp_units = " phot/s/m<sup>2</sup>/sr/&#181;m";
    wl_pk_units = " &#181;m";
    spec_rad_units = " phot/s/m<sup>2</sup>/sr/&#181;m";
   }
   if(power_units2 == "Thz")   {
    pk_sp_units = " phot/s/m<sup>2</sup>/sr/THz";
    wl_pk_units = " THz";
    spec_rad_units = " phot/s/m<sup>2</sup>/sr/THz";
   }
  } //end power_units1 = photons
 var max_calcs = false;
 var par_status = document.getElementById("user_status").value;
  var pd = document.getElementById("mybbplot");
  pd.innerHTML = "";
   if((rnum >= 50) && (par_status != "on"))   {
    max_calcs = true;
    document.getElementById("submit_recalc").disabled = true;
    popUp2("daily_max", "bb_calc");
   }
   else    {
    if(power_units2 == "microns")    { 
     document.getElementById("peakspn").innerHTML = "Wavelength";
    }
    else if(power_units2 == "Thz")    {
     document.getElementById("peakspn").innerHTML = "Frequency";
    }
    else    {
     document.getElementById("peakspn").innerHTML = "Wavenumber";
    }
    png_file = png_file + ".png";
    var ascii_string = "";
    var output_string = "<img src='plots/" + png_file + "' alt='plot'><br>";
    if(par_status != "on")    {

     ascii_string = "<font color='blue'><u><a onClick='ps_acsii_err(\"" + par_status + "\" , \"ASCII data\");'>Text File</a></u></font><br><div id='ps_ascii_div'></div>";
     ascii_string+= "<span class='gryclr'><input type='button' value='Subscribe' onClick='window.open(\"../info/plans.php\");'> to get <strong>logo free graphs</strong>, in addition to full access to the spectral calculator!</span>";
     if(remind == "yes"){
      document.getElementById("submit_recalc").disabled = true; 
      popUp2("remind","bb_calc");
     }
    }
     else     {
      var txt_size = xmlDocument.getElementsByTagName('fsz').item(0).firstChild.data;
      ascii_string = "<a href=\"plots/" + txt_file + "\" target=\"_blank\">Text File (" + txt_size + ")</a><br>";
     }
  pd.innerHTML = output_string + ascii_string;
  document.getElementById("bb_rad_emmt").innerHTML = rad_emt + rad_emt_units;
  document.getElementById("bb_rad").innerHTML = rad + rad_units;
  document.getElementById("bb_psr").innerHTML = pkr + pk_sp_units;
  document.getElementById("bb_wop").innerHTML = wlp + wl_pk_units;
  document.getElementById("bb_spec_radiance").innerHTML = sr + spec_rad_units;
  document.getElementById("bb_band_radiance").innerHTML = bdr + band_rad_units;
  } //end else
 } //end http ready state = 4
} //end function show_plot


function ps_acsii_err(u_stat, which_link ){
 var user_id = document.getElementById("user_id").value;
 var user_name = document.getElementById("user_name").value;
 document.getElementById("ps_ascii_div").innerHTML = "<font color='red'>" +
 which_link + " are only available to active subscribers. Please login above, or <a href='../info/plans.php' target='_blank'>Subscribe</a><br>";

}

function change_units() {
 var prev_units = document.getElementById("bb_prev_units");
 var prev_units_val = prev_units.value;
 var bb_units = document.getElementById("bb_frequency").value;
 prev_units.value = bb_units;
 var span_txt = "";
 var span_txt2 = "";
 var curr_rad = document.getElementById("bb_spec_rad"); 
 var new_rad = 0;
 var curr_b1 = document.getElementById("bb_band1"); 
 var new_b1 = 0;
 var curr_b2 =  document.getElementById("bb_band2");
 var new_b2 = 0;
 if(bb_units == "microns") {
  span_txt = "&#181;m";
  span_txt2 = "Wavelength&nbsp;&nbsp;&nbsp;";
  if(prev_units_val == "Thz")  {
   new_rad = (299.792458)/parseFloat(curr_rad.value);
   new_b1 = (299.792458)/parseFloat(curr_b2.value);
   new_b2 = (299.792458)/parseFloat(curr_b1.value);
  }
  else if (prev_units_val == "wavenumbers")  {
   new_rad = 10000/parseFloat(curr_rad.value);
   new_b1 = 10000/parseFloat(curr_b2.value); 
   new_b2 = 10000/parseFloat(curr_b1.value);
  }
 }
 else if(bb_units == "wavenumbers") {
  span_txt = "cm<sup>-1</sup>"; 
  span_txt2 = "Wavenumber";
  if(prev_units_val == "Thz")
  {
   new_rad = parseFloat(curr_rad.value)/(0.029979246);
   new_b1 = parseFloat(curr_b1.value)/(0.029979246);
   new_b2 = parseFloat(curr_b2.value)/(0.029979246);
  }
  else if(prev_units_val == "microns")  {
   new_rad = 10000/parseFloat(curr_rad.value);
   new_b1 = 10000/parseFloat(curr_b2.value); 
   new_b2 = 10000/parseFloat(curr_b1.value);
  }
 }
 else  {
  span_txt = "THz";
  span_txt2 = "Frequency&nbsp;&nbsp;&nbsp;&nbsp;";
  if(prev_units_val == "microns")  {
   new_rad = (299.792458)/parseFloat(curr_rad.value);
   new_b1 = (299.792458)/parseFloat(curr_b2.value);
   new_b2 = (299.792458)/parseFloat(curr_b1.value);
  }
  else if (prev_units_val == "wavenumbers")  {
   new_rad = 0.029979246*parseFloat(curr_rad.value);
   new_b1 = 0.029979246*parseFloat(curr_b1.value);
   new_b2 = 0.029979246*parseFloat(curr_b2.value);
  }
 }
 curr_rad.value = new_rad;
 curr_b1.value = new_b1;
 curr_b2.value = new_b2;
 document.getElementById("bb_rad_label2").innerHTML = span_txt;
 document.getElementById("bb_band1_label").innerHTML = span_txt;
 document.getElementById("bb_band2_label").innerHTML = span_txt;
 document.getElementById("bb_spec_rad_label").innerHTML = span_txt2;
}

function convert_temp(){
 var prev_temp = document.getElementById("bb_prev_temp");
 var prev_temp_units = prev_temp.value;
 var new_temp_units = document.getElementById("bb_temp_units").value;
 var temp_input = document.getElementById("bb_temperature");
 var curr_temp_val = temp_input.value;
 var new_temp_val = curr_temp_val;
 var convert = 0;
 var a = 5/9;
 var b = 273.15 - (160/9);
 var a_array = new Array(1, a, 1);
 var b_array = new Array(0, b, 273.15);
 var left_ans = (a_array[prev_temp_units]/a_array[new_temp_units])*curr_temp_val;
 var right_ans = (b_array[prev_temp_units] - b_array[new_temp_units])/a_array[new_temp_units];
 convert = left_ans + right_ans;
 temp_input.value = Math.round(convert*100000)/100000;
 prev_temp.value = new_temp_units;
 if(new_temp_units == 0) {
  document.getElementById("temp_span").innerHTML = "&nbsp;K&nbsp";
 }
 else if(new_temp_units == 2) {
  document.getElementById("temp_span").innerHTML = "&nbsp;&#176;C&nbsp";
 }
 else { 
  document.getElementById("temp_span").innerHTML = "&nbsp;&#176;F&nbsp";
 } 
} //end function convert_temp

function close_popup(){
   document.getElementById("submit_recalc").disabled = false;
   popUp2("remind", "bb_calc");
} //end close popup

function close_popup_go_home(){
  popUp2("daily_max", "bb_calc");
  window.location = "../info/about.php";
} //end close popup go home

//this function will get the last calculation done during this session and load it on the page.
function load_last_calc() {
 var remote_addr = document.getElementById("calc_remote_addr").value; 
 var out = "tool=bb&r_addr=" + remote_addr;
 lc_http = getHTTPObject();
 lc_http.open("POST", "../last_calc.php", true);
 lc_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 lc_http.setRequestHeader("Content-length", out.length);
 lc_http.setRequestHeader("Connection", "close");
 lc_http.onreadystatechange = load_calc;
 lc_http.send(out);
}

function load_calc() {
 if(lc_http.readyState == 4) {
  var xmlDocument = lc_http.responseXML;
  var ext = xmlDocument.getElementsByTagName('calc').item(0).firstChild.data;
  if(ext != "None") {
   var bbt = xmlDocument.getElementsByTagName('temperature').item(0).firstChild.data;
   document.getElementById("bb_temperature").value = bbt;
   var emiss = xmlDocument.getElementsByTagName('emiss').item(0).firstChild.data;
   document.getElementById("bb_emissivity").value = emiss;
   var u1 = xmlDocument.getElementsByTagName('units1').item(0).firstChild.data;
   if(u1 == "watts") {
    document.getElementById("bb_units").selectedIndex = 0;
   }
   else {
    document.getElementById("bb_units").selectedIndex = 1;   
   }
   var u2 = xmlDocument.getElementsByTagName('units2').item(0).firstChild.data;   
   if(u2 == "microns") {
    document.getElementById("bb_frequency").selectedIndex = 0;   
   }
   else if(u2 == "wavenumbers") {
    document.getElementById("bb_frequency").selectedIndex = 1;      
   }
   else if(u2 == "Thz") {
    document.getElementById("bb_frequency").selectedIndex = 2;      
   }   
   var srad = xmlDocument.getElementsByTagName('spec_rad').item(0).firstChild.data;
   document.getElementById("bb_spec_rad").value = srad;
   var band1 = xmlDocument.getElementsByTagName('band1').item(0).firstChild.data;
   document.getElementById("bb_band1").value = band1;
   var band2 = xmlDocument.getElementsByTagName('band2').item(0).firstChild.data;
   document.getElementById("bb_band2").value = band2;
   var tempU = xmlDocument.getElementsByTagName('temp_units').item(0).firstChild.data;
   if(tempU == "K") {
    document.getElementById("bb_temp_units").selectedIndex = 0;    
   }
   else if(tempU == "C") {
    document.getElementById("bb_temp_units").selectedIndex = 1;    
   }
   else if(tempU == "F") {
    document.getElementById("bb_temp_units").selectedIndex = 2;    
   }  
   
   var recVel = xmlDocument.getElementsByTagName('rec_vel').item(0).firstChild.data;
   document.getElementById("bb_spec_rad").value =  recVel;              
  } //end if ext != None
 }  //end lc_http.readyState = 4
} //end function load_calc
