
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;
}
var http = "";
var http_ll = "";
var lc_http = "";
var del_http = "";
/*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') {
  getPositionPlot();
 }
}

function getPositionPlot() {
 var db_ll = document.getElementById("db_ll").value;
 var db_ul = document.getElementById("db_ul").value;
 var threshold = document.getElementById("db_threshold").value;
// var include_xsec = document.getElementById("include_xsec").checked;
 var db_table = document.getElementById("use_table").value;
 var db_units = document.getElementById("db_units").value;
 var max_minus_min = parseFloat(db_ul) - parseFloat(db_ll);
 var error_string = "";
 var error_value = "false";
 var temp_ll = db_ll;
 var temp_ul = db_ul;
 if(db_units == "microns") {
  if(parseFloat(db_ll) == 0) {
   db_ll = 0.16;
  }
  if(parseFloat(db_ul) == 0) {
   db_ul = 0.16;
  }
  if((parseFloat(temp_ll) < 0) || (isNaN(parseFloat(temp_ll)))) {
   error_string+= "Lower Limit must be greater than 0 &nbsp;&#181;m&nbsp;<br>";
   error_value = "true";
  }
  if((parseFloat(temp_ul) < 0) || (isNaN(parseFloat(temp_ul)))) {
   error_string+= "Upper Limit must be greater than 0 &nbsp;&#181;m&nbsp;<br>";
   error_value = "true";
  }
 } //end db_units = microns
 else {
  if(db_table == "hitemp_2008") {
   var up_min_low = parseFloat(temp_ul) - parseFloat(temp_ll);
   if(up_min_low > 100) {
    error_string+= "Waveband intervals wider than 100 cm<sup>-1</sup> are not available for the HITEMP 2008 database.<br>";
    error_value = "true";
   }
  }
  if((parseFloat(temp_ll) < 0) || (isNaN(parseFloat(temp_ll))) || (parseFloat(temp_ll) > 60000)) {
  error_string = error_string + "Min. Wavenumber must be between 0 and 60000 cm<sup>-1</sup><br>";
  error_value = "true";
  }
  if((parseFloat(temp_ul) < 0) || (isNaN(parseFloat(temp_ul))) || (parseFloat(temp_ul) > 60000)) {
  error_string = error_string + "Max. Wavenumber must be between 0 and 60000 cm<sup>-1</sup><br>";
  error_value = "true";
  }
  if((parseFloat(temp_ul) < parseFloat(temp_ll)) || (parseFloat(temp_ul) == parseFloat(temp_ll))) {
   error_string = error_string + "Min. Wavenumber must be less than the Max. Wavenumber.<br>";
   error_value = "true"; 
  }
 }//end else (units = wavenumber)
 if(isNaN(parseFloat(threshold))) {
  threshold = 0;
 }
 if(parseFloat(threshold) < 0) {
  error_string = error_string + "Threshold value must be greater than 0.<br>";
  error_value = "true";
 }
 if(error_value == "false") {
  var error_div = document.getElementById("error_div");
  error_div.innerHTML = "";
  error_div.style.visibility = "hidden";
  var remote_addr = document.getElementById("calc_remote_addr").value;
  var remote_host = document.getElementById("calc_remote_host").value;
  var user_agent = document.getElementById("calc_user_agent").value;
  var out = "<db_info><type>position</type><LL>" + db_ll + "</LL>";
  out+= "<UL>" + db_ul + "</UL><threshold>" + threshold + "</threshold>"; //<incl_xsec>" + include_xsec + "</incl_xsec>";
  out+="<r_addr>" + remote_addr + "</r_addr><r_host>" + remote_host + "</r_host><user_agent>" + user_agent  + "</user_agent>";
  out+="<db_table>" + db_table + "</db_table><units>" + db_units + "</units>";
  var div1 = document.getElementById("progress_div");
  var div_string = "<center><img src='../images/loading.gif'><br><font color='#004D8F' size='+1'><b>Calculating</b></font></center>";
  document.body.style.cursor = 'wait';
  document.getElementById("db_pos_submit").disabled = true;
  div1.innerHTML = "";
  div1.innerHTML = div_string;
  out = "db_xml=" + out + "</db_info>";
  http = getHTTPObject();
  http.open("POST", "exec_grace.php", true);
  http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http.setRequestHeader("Content-length", out.length);
  http.setRequestHeader("Connection", "close");
  http.onreadystatechange = show_position_plot;
  http.send(out);
 }
 else {
  var error_div = document.getElementById("error_div");
  error_div.style.visibility = "visible";
  var error_str2 = "<br><font color='red'><strong><u>ERRORS</u></strong><br>";
  error_div.innerHTML = error_str2 + error_string + "</font>";
 }
}

function show_position_plot() {
 if(http.readyState == 4) {
  document.body.style.cursor = 'default';
  document.getElementById("db_pos_submit").disabled = false;
  var div1= document.getElementById("progress_div");
  div1.innerHTML = "";
  var plot_div = document.getElementById("plot_div");
  var res1 = http.responseText;
  var pos_res = res1.split(":");
  var file_name = pos_res[0];
  var rnum = pos_res[1];
  var remind = pos_res[2]; 
  var png_file = file_name + ".png";
  var pdf_file = file_name + ".pdf";
  var ps_file = file_name + ".ps";
  if(rnum >= 50) {
   document.getElementById("db_pos_submit").disabled = true;
   popUp2("daily_max", "db_brw");
  }  //end if rnum >=50
  else {
   var img_string ="<table><TR><TD align='center'><center><a href='plots/" + ps_file + "'>Postscript File</a>";
   img_string+= "</center><br><img src='plots/" + png_file + "'><br></td></tr></table>";
   plot_div.innerHTML = img_string;
   if(remind == "yes") {
    popUp2("remind", "db_brw");
    document.getElementById("db_pos_submit").disabled = true;
   } //end remind = yes 
  }
 } //end readystate = 4
} //end show_position_plot function

//this function changes the units displayed beside the lower & upper limit bandpass based upon what unit the user chooses.
function change_db_units() {
 var span_txt = "";
 var calc_unit1 = document.getElementById("db_units");
 var calc_unit = calc_unit1.value;
 var ll = document.getElementById("db_ll");
 var ul = document.getElementById("db_ul");
 var ll_val = ll.value;
 var ul_val = ul.value;
 ll.value = "";
 ul.value = "";
 var db_range_limits = document.getElementById("db_range_limits");
 if(calc_unit == "microns") {
   //span_txt = "<a onClick='popUp(event,\"micron\")' class='info_divs'>&#181;m*</a>";
   span_txt = "&nbsp;&#181;m&nbsp;";
  db_range_limits.innerHTML = "( > 0.16&nbsp;&#181;m&nbsp;)";
 }
  else {
 //  span_txt = "<a onClick='popUp(event,\"wavenumber\")' class='info_divs'>cm<sup><font size='-2'>-1</font></sup>*</a>";
   span_txt = "&nbsp;cm<sup>-1</sup>&nbsp;";
   db_range_limits.innerHTML = "(0-60,000 cm<sup>-1</sup>)";
  }
 document.getElementById("db_ll_div").innerHTML = span_txt;
 document.getElementById("db_ul_div").innerHTML = span_txt; 

} //end calc_unit_chg function

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

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


function check_ll_name() {
 var ll_name = document.getElementById("ll_name").value;
 var re = /\$|@|#|~|`|\%|\*|\^|\&|\?|\'|\"|\<|\>|\?|\||\\|\$/g;
 ll_name = ll_name.replace(re, ""); 
 ll_name = trim(ll_name);
 document.getElementById("ll_name").value = ll_name;
 if((ll_name.toLowerCase() == "hitran2004") || (ll_name.toLowerCase() == "geisa2003")  || (ll_name.toLowerCase() == "hitran2008") || (ll_name.toLowerCase() == "hitemp") || (ll_name.toLowerCase() == "hitemp_supplemental") || (ll_name.toLowerCase() == "hitemp_2008") || (ll_name.toLowerCase() == "cross_sections") || (ll_name.toLowerCase() == "cross_sections04") || (ll_name.toLowerCase() == "cross_sections08")) {
   var err = "<font color='red'>Please choose another name for your linelist. We do not allow any custom linelists to be named " + ll_name + "</font>";
   document.getElementById("ll_err").innerHTML = err;
 }
 else if(parseInt(ll_name.length) < 1) {
  var err_str = "<font color='red'><strong>Error:</strong> Linelist name can not be blank or contain invalid characters, please enter a name.<br>";
     err_str+="please click <font color='blue'><a onmouseover=\"popUp(event,'valid_char')\" onmouseout=\"popUp(event,'valid_char')\"'>here</a></font> for a list of valid characters.</font>";
   document.getElementById("ll_err").innerHTML = err_str;
 }
 else {
 document.getElementById("ll_err").innerHTML = "";
 var out = "ll_name=" + ll_name
 http_ll = getHTTPObject();
 http_ll.open("POST", "check_ll.php", true);
 http_ll.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 http_ll.setRequestHeader("Content-length", out.length);
 http_ll.setRequestHeader("Connection", "close");
 http_ll.onreadystatechange = ll_name_res;
 http_ll.send(out);
 }
}

function ll_name_res() {
 if(http_ll.readyState == 4) {
  var ext = http_ll.responseText;
  if(parseInt(ext) > 0) {
   var err = "<font color='red'>A linelist with that name already exists in our records, please choose another name.</font>";
   document.getElementById("ll_err").innerHTML = err;
  }
  else
  {
   document.forms.ll_form.submit();  
  }

 } 
}


//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=dbp&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 ll = xmlDocument.getElementsByTagName("LL").item(0).firstChild.data;
   document.getElementById("db_ll").value = ll;
   var ul = xmlDocument.getElementsByTagName("UL").item(0).firstChild.data;
   document.getElementById("db_ul").value = ul;
   var db_table = xmlDocument.getElementsByTagName("db_table").item(0).firstChild.data;
   var db_list = document.getElementById("use_table");
   for(var d=0; d < db_list.length; d++) {
    if(db_list[d].value == db_table) {
     db_list.selectedIndex = d;
     break
    }
   }
   var threshold = xmlDocument.getElementsByTagName("threshold").item(0).firstChild.data;
   document.getElementById("db_threshold").value = threshold;
   var units = xmlDocument.getElementsByTagName("units").item(0).firstChild.data; 
   if(units == "wavenumber") { 
    document.getElementById("db_units").selectedIndex = 0;
   }
   else {
    document.getElementById("db_units").selectedIndex = 1;
   }
   /*var incl_xsec = xmlDocument.getElementsByTagName("incl_xsec").item(0).firstChild.data;
   var xsecBox = document.getElementById("include_xsec");
   if(incl_xsec == "true") {
    xsecBox.checked = true;
   }
   else {
    xsecBox.checked = false;
   }
  if(db_table != "hitran2004") {
   xsecBox.disabled = true;
  }*/
  } //end if ext != None
 }  //end lc_http.readyState = 4
} //end function load_calc

function delete_ll(numLL) {
 var delConf = false;
 var l2 = "";
 for(var i=0; i < numLL; i++) {
  l2 = document.getElementById("ll_list" + i);
  if(l2.checked == true)  {
   delConf = window.confirm('Are you sure you want to delete this linelist?');
   if(delConf == true)  {
    //http request to delete_ll.php to delete l2.value 
    var del_param = "ll_name=" + l2.value;
    del_http = getHTTPObject();
    del_http.open("POST", "delete_ll.php", true);
    del_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    del_http.setRequestHeader("Content-length", del_param.length);
    del_http.setRequestHeader("Connection", "close");
    del_http.onreadystatechange = handle_ll_del;
    del_http.send(del_param);
   }
  } //end l2.checked is true.
 } //end for
} //end function delete_ll

function handle_ll_del() {
 if(del_http.readyState == 4) {
//   window.alert("Linelist deleted. refresh page " + del_http.responseText);
 window.location='db_linelist.php';
}
}


function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}
