You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cmda.apache.org by xi...@apache.org on 2015/09/09 00:49:55 UTC

[46/51] [partial] incubator-cmda git commit: Add frontend and backend

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/.target/views/climate/regridAndDownload.scala.html
----------------------------------------------------------------------
diff --git a/.target/views/climate/regridAndDownload.scala.html b/.target/views/climate/regridAndDownload.scala.html
new file mode 100644
index 0000000..0da46d4
--- /dev/null
+++ b/.target/views/climate/regridAndDownload.scala.html
@@ -0,0 +1,459 @@
+@*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more		   *
+ * contributor license agreements.  See the NOTICE file distributed with	   *
+ * this work for additional information regarding copyright ownership.         *
+ * The ASF licenses this file to You under the Apache License, Version 2.0     *
+ * (the "License"); you may not use this file except in compliance with        *
+ * the License.  You may obtain a copy of the License at                       *
+ *                                                                             *
+ *    http://www.apache.org/licenses/LICENSE-2.0                               *
+ *																			   *
+ * Unless required by applicable law or agreed to in writing, software         *
+ * distributed under the License is distributed on an "AS IS" BASIS,           *
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.    *
+ * See the License for the specific language governing permissions and         *
+ * limitations under the License.											   *
+ *******************************************************************************@ 
+
+@(parameters: metadata.RegridAndDownload) @import helper._
+<link rel="stylesheet"
+	href='@routes.Assets.at("stylesheets/livefitler.css")'>
+@scripts = {
+<script src='@routes.Assets.at("javascripts/edit_button.js")'></script>
+<script src='@routes.Assets.at("javascripts/livefilter.js")'></script>
+<script type="text/javascript"
+	src='@routes.Assets.at("javascripts/jquery-1.9.0.min.js")'></script>
+<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.min.js"></script>
+<script type="
+	text/javascript"
+	src='@routes.Assets.at("javascripts/json2.js")'></script>
+<script type="text/javascript"
+	src='@routes.Assets.at("jhtml/js/xmisc.js")'></script>
+<script type="text/javascript"
+	src='@routes.Assets.at("html/js2/varList.js")'></script>
+<script type="text/javascript"
+	src='@routes.Assets.at("html/js2/dataList2.js")'></script>
+<script type="text/javascript"
+	src='@routes.Assets.at("html/js2/common.js")'></script>
+<script type="text/javascript">
+    var Response = null;
+    var variable = "";
+    window.onload = function() {
+    	put_data(1);
+    	changeDataSource();
+        put_var(1);
+        changeVariableName();
+      enable_download_button();
+      $('#t0').val($('#startYearMonth').text());
+      $('#t1').val($('#endYearMonth').text());
+      if($('#pressureLevel').text() == "-999999"){
+      	disable_pres1(1);
+      }else{
+      	$('#pres1').val($('#pressureLevel').text());
+      }
+      $('#lat0').val($('#startLat').text());
+      $('#lat1').val($('#endLat').text());
+      $('#dlat').val($('#deltaLat').text());
+      $('#lon0').val($('#startLon').text());
+      $('#lon1').val($('#endLon').text());
+      $('#dlon').val($('#deltaLon').text());
+      $('#purpose').html($('#executionPurpose').text());
+      $('#data_url').html($('#dataURL').text());
+      $('#Response').html($('#serviceResponseText').text());
+    }
+ function changeDataSource() {
+	    var dataSource = $('#dataSource').text();
+	    var x = document.getElementById("data1");
+	    if(dataSource == "gfdl_esm2g" ){
+     		x.options[0].selected=true;
+     	}
+     	else if(dataSource == "giss_e2-h" ){
+     		x.options[1].selected=true;
+     	}
+     	else if(dataSource == "giss_e2-r" ){
+     		x.options[2].selected=true;
+     	}
+     	else if(dataSource == "ncar_cam5" ){
+     		x.options[3].selected=true;
+     	}
+     	else if(dataSource == "ncc_noresm" ){
+     		x.options[4].selected=true;
+     	}
+     	else if(dataSource == "ukmo_hadgem2-es" ){
+     		x.options[5].selected=true;
+     	}
+     	else if(dataSource == "cccma_canam4" ){
+     		x.options[6].selected=true;
+     	}
+     	else if(dataSource == "csiro_mk3.6" ){
+     		x.options[7].selected=true;
+     	}
+     	else if(dataSource == "gfdl_cm3" ){
+     		x.options[8].selected=true;
+     	}
+     	else if(dataSource == "ipsl_cm5a-lr" ){
+     		x.options[9].selected=true;
+     	}
+     	else if(dataSource == "miroc_miroc5" ){
+     		x.options[10].selected=true;
+     	}
+     	else if(dataSource == "ukmo_hadgem2-a" ){
+     		x.options[11].selected=true;
+     	}
+     	else if(dataSource == "nasa_modis" ){
+     		x.options[12].selected=true;
+     	}
+     	else if(dataSource == "nasa_amsre" ){
+     		x.options[13].selected=true;
+     	}
+     	else if(dataSource == "nasa_trmm" ){
+     		x.options[14].selected=true;
+     	}
+     	else if(dataSource == "nasa_gpcp" ){
+     		x.options[15].selected=true;
+     	}
+     	else if(dataSource == "nasa_quikscat" ){
+     		x.options[16].selected=true;
+     	}
+     	else if(dataSource == "nasa_aviso" ){
+     		x.options[17].selected=true;
+     	}
+     	else if(dataSource == "nasa_grace" ){
+     		x.options[18].selected=true;
+     	}
+     	else if(dataSource == "noaa_nodc" ){
+     		x.options[19].selected=true;
+     	}
+     	else if(dataSource == "nasa_ceres" ){
+     		x.options[20].selected=true;
+     	}
+     	else if(dataSource == "nasa_airs" ){
+     		x.options[21].selected=true;
+     	}
+     	else if(dataSource == "nasa_mls" ){
+     		x.options[22].selected=true;
+     	}
+     	else if(dataSource == "nasa_argo" ){
+     		x.options[23].selected=true;
+     	}
+     	else if(dataSource == "ecmwf_interim" ){
+     		x.options[24].selected=true;
+     	}
+      }
+function changeVariableName(){
+      var var_string = $('#variableName').text();
+      var data_string = $('#dataSource').text();
+      data_string = data_string.replace("_", "/").toUpperCase();
+      var varList2 = dataList[data_string][1];  
+      var x = document.getElementById("var1");
+      for (var i=0; i<varList2.length; i++) {
+    	  var k = varList2[i];
+          if (k == var_string) {
+          	x.options[i].selected=true;
+          	break;
+          }
+      }
+    }
+function disable_download_button()
+    {
+      var x=document.getElementById("download_data");
+      x.disabled=true;
+    }
+    function enable_download_button()
+    {
+      var x=document.getElementById("download_data");
+      x.disabled=false;
+    }
+    function disable_pres1(ID)
+    {
+      var x;
+      x=document.getElementById("pres"+ID);
+      x.value = "N/A";
+      x.disabled=true;
+    }
+    function enable_pres1(ID)
+    {
+      var x;
+      x=document.getElementById("pres"+ID);
+      x.disabled=false;
+    }
+    function put_data(ID){
+      var list1=document.getElementById("data"+ID);
+      for(var key in dataList) {
+        if (key.slice(0,5)==="group") {
+          var og = document.createElement("OPTGROUP");
+          og.setAttribute('label', dataList[key][0]);
+          list1.add(og);
+        } else {
+          og.appendChild(new Option(key,key));
+        }
+      }
+    }
+    function put_var(ID) {
+      var list1=document.getElementById("var"+ID);
+      for (var i=list1.length-1; i>=0; i--) {
+      list1.remove(i);
+      }
+      data_string =  document.getElementById("data"+ID).value;
+      var varList2 = dataList[data_string][1];  
+      for (var i=0; i<varList2.length; i++) {
+        var k = varList2[i];
+        list1.add(new Option(varList[k][0],k));
+      }
+    }
+    function select_var1(ID)
+    {
+      var var_string;
+      var_string = $("#var"+ID).val();
+      variable = var_string;
+      if (varList[var_string][2]==3) {
+        enable_pres1(ID);
+      } else {
+        disable_pres1(ID);
+      }
+    }
+    $(document).ready(function(){
+      $("#download_data").click(function(event) {
+        var durl = $("#data_url").val();
+        window.location.assign(durl);
+      });
+      $("#action1").click(function(event) {
+        Response = null;
+        disable_download_button();
+        $("#Response").html("Calculating ...");
+        $("#data_url").html("Calculating ...");
+        var url = "http://" + window.location.hostname + ":9002/svc/regridAndDownload?";
+        var d1 = $("#data1").val();
+        var model1 = d1.replace("/", "_");
+        model1 = model1.toLowerCase();
+        var arglist = "";
+        arglist = arglist.concat("model=");
+        arglist = arglist.concat(model1);
+        var v1 = $("#var1").val();
+        arglist = arglist.concat("&var=");
+        arglist = arglist.concat(v1);
+        var pres1 = $("#pres1").val();
+        arglist = arglist.concat("&plev=");
+        arglist = arglist.concat(pres1);
+        var t0 = $("#t0").val();
+        var t1 = $("#t1").val();
+        t0 = t0.replace("-", "");
+        t1 = t1.replace("-", "");
+        arglist = arglist.concat("&start_time=");
+        arglist = arglist.concat(t0);
+        arglist = arglist.concat("&end_time=");
+        arglist = arglist.concat(t1);
+        var lon0 = $("#lon0").val();
+        var lon1 = $("#lon1").val();
+        var dlon = $("#dlon").val();
+        var lat0 = $("#lat0").val();
+        var lat1 = $("#lat1").val();
+        var dlat = $("#dlat").val();
+        var purpose = $("#purpose").val();
+        arglist = arglist.concat("&lon1=");
+        arglist = arglist.concat(lon0);
+        arglist = arglist.concat("&lon2=");
+        arglist = arglist.concat(lon1);
+        arglist = arglist.concat("&dlon=");
+        arglist = arglist.concat(dlon);
+        arglist = arglist.concat("&lat1=");
+        arglist = arglist.concat(lat0);
+        arglist = arglist.concat("&lat2=");
+        arglist = arglist.concat(lat1);
+        arglist = arglist.concat("&dlat=");
+        arglist = arglist.concat(dlat);
+        arglist = arglist.concat("&purpose=");
+        arglist = arglist.concat(purpose);
+        url = url + encodeURI(arglist);
+        var urlTimeBounds = "http://" + window.location.hostname + ":9002/svc/time_bounds?"; 
+        var arglistTB = "";
+        arglistTB = arglistTB.concat("serviceType=");
+        arglistTB = arglistTB.concat("1");
+        arglistTB = arglistTB.concat("&source=");
+        arglistTB = arglistTB.concat(d1);
+        arglistTB = arglistTB.concat("&var=");
+        arglistTB = arglistTB.concat(variable);
+        urlTimeBounds = urlTimeBounds + encodeURI(arglistTB);
+        $.ajax({
+            type: "GET",
+            url: urlTimeBounds,
+            dataType: "json",
+            data: null,
+            success: function(data, textStatus, xhr) {
+                Response = data;
+                if (data.success == false) {
+                    Response = null;
+                    var text = JSON.stringify(data, null, 4);
+                    text = "Error in backend: <br>" + text; 
+                    $("#Response").html(text);
+                    $("#data_url").html(text);
+                    return;
+                }
+                var text = JSON.stringify(data, null, 4);
+                var tb = data.time_bounds;
+                var bds = String(tb).split(",");
+                var lowerT = parseInt(bds[0]);
+                var upperT = parseInt(bds[1]);
+                var t0I = parseInt(t0);
+                var t1I = parseInt(t1);
+                if ( lowerT == 0 && upperT ==0 ) {
+                  alert("We do not have data for this source and variable configuration.");
+                  return;
+                }
+                if (t0I < lowerT && t1I < lowerT ||
+                    t0I > upperT && t1I > upperT) {
+                  alert("We do not have data that span your time range. Try the range inside ["+lowerT+", "+upperT+"].");
+                  return;
+                }
+                if (t0I < lowerT && t1I <= upperT) {
+                  alert("Your start year-month is out of bound. It has to be in or later than " + lowerT +
+                        ". We will use the range ["+lowerT+", "+t1I+"] for you.");
+                }
+                if (t1I > upperT && t0I >= lowerT) {
+                  alert("Your end year-month is out of bound. It has to be in or earlier than " + upperT +
+                        ". We will use the range ["+t0I+", "+upperT+"] for you.");
+                }
+                if (t0I < lowerT && t1I > upperT ) {
+                  alert("Both of your start and end year-months are out of bounds. They have to be in or earlier than " + upperT +
+                        ", and in or later than " + lowerT + ". We will use the range ["+lowerT+", "+upperT+"] for you.");
+                }
+            },
+            error: function(xhr, textStatus, errorThrown) {
+		$("#Response").html("error!");
+		$("#data_url").html("error!");
+            },
+            complete: function(xhr, textStatus) {
+            }
+        });
+        $.ajax({
+            type: "GET",
+            url: url,
+            dataType: "json",
+            data: null,
+            success: function(data, textStatus, xhr) {
+                Response = data;
+                if (data.success == false) {
+                    Response = null;
+                    var text = JSON.stringify(data, null, 4);
+                    if (text.indexOf("No Data") != -1) {
+                      $("#Response").html("No Data");
+                      $("#data_url").html("No Data");
+                      return;
+                    }
+                    text = "Error in backend: <br>" + text; 
+                    $("#Response").html(text);
+                    $("#data_url").html(text);
+                    return;
+                }
+                var text = JSON.stringify(data, null, 4);
+                $("#Response").html(text);
+                $("#data_url").html(data.dataUrl);
+                enable_download_button();
+            },
+            error: function(xhr, textStatus, errorThrown) {
+                $("#Response").html("error!");
+                $("#data_url").html("error!");
+            },
+            complete: function(xhr, textStatus) {
+            }
+        });
+      });
+    });
+  </script>
+} @main("Parameters of ConfId", scripts){ @flash_message()
+<p>
+<div id="dataSource" style="display: none;">@parameters.getDataSource()</div>
+<div id="variableName" style="display: none;">@parameters.getVariableName()</div>
+<div id="startYearMonth" style="display: none;">@parameters.getStartYearMonth()</div>
+<div id="endYearMonth" style="display: none;">@parameters.getEndYearMonth()</div>
+<div id="pressureLevel" style="display: none;">@parameters.getPressureLevel()</div>
+<div id="startLat" style="display: none;">@parameters.getStartLat()</div>
+<div id="endLat" style="display: none;">@parameters.getEndLat()</div>
+<div id="deltaLat" style="display: none;">@parameters.getDeltaLat()</div>
+<div id="startLon" style="display: none;">@parameters.getStartLon()</div>
+<div id="endLon" style="display: none;">@parameters.getEndLon()</div>
+<div id="deltaLon" style="display: none;">@parameters.getDeltaLon()</div>
+<div id="executionPurpose" style="display: none;">@parameters.getExecutionPurpose()</div>
+<div id="dataURL" style="display: none;">@parameters.getDataURL()</div>
+<div id="serviceResponseText" style="display: none;">@parameters.getServiceResponseText()</div>
+<table border="1" width="800" align="center">
+	<tr>
+		<td colspan="4">
+			<center>
+				<b>Service: Regrid and Download</b><br> <br> This service
+				regrids a variable from a dataset according to the lat/lon/plev
+				specified by the user, and mades the regridded data downloadable by
+				the user. <br> <br>
+			</center>
+		</td>
+	</tr>
+	<tr>
+		<td>data source:</td>
+		<td><select name="data1" id="data1" onchange="put_var(1)">
+		</select></td>
+		<td>variable name:</td>
+		<td><select name="var1" id="var1" onchange="select_var1(1)">
+		</select></td>
+	</tr>
+	<tr>
+		<td colspan=4>atmosphere pressure level (hPa), or ocean pressure
+			level (dbar) <input list="plev1" id="pres1" size="50"
+			value="@parameters.getPressureLevel()"> <datalist id="plev1">
+				<option value="100000,80000,50000,30000,20000,10000"></option>
+				<option value="100000,30000,10000"></option>
+				<option value="100000,10000"></option>
+				<option value="50000,20000"></option>
+			</datalist>
+		</td>
+	</tr>
+	<tr>
+		<td>start year-month: <input id="t0"
+			value="@parameters.getStartYearMonth()" alt="start" size="10" /></td>
+		<td>end year-month: <input id="t1"
+			value="@parameters.getEndYearMonth()" alt="end" size="10" /></td>
+		<td colspan=2></td>
+	</tr>
+	<tr>
+		<td width="25%">start lat (deg): <input size=5 id="lat0"
+			value="@parameters.getStartLat()" /></td>
+		<td width="25%">end lat (deg): <input size=5 id="lat1"
+			value="@parameters.getEndLat()" /></td>
+		<td width="25%">grid size (deg): <input size=5 id="dlat"
+			value="@parameters.getDeltaLat()" /></td>
+		<td></td>
+	</tr>
+	<tr>
+		<td width="25%">start lon (deg): <input size=5 id="lon0"
+			value="@parameters.getStartLon()" /></td>
+		<td width="25%">end lon (deg): <input size=5 id="lon1"
+			value="@parameters.getEndLon()" /></td>
+		<td width="25%">grid size (deg): <input size=5 id="dlon"
+			value="@parameters.getDeltaLon()" /></td>
+		<td></td>
+	</tr>
+	<tr>
+		<td colspan="1">Execution purpose</td>
+		<td colspan="3">
+			<form>
+				<textarea name="purpose" id="purpose" rows="4" cols="50">@parameters.getExecutionPurpose()</textarea>
+			</form>
+		</td>
+	</tr>
+	<tr>
+		<td colspan="2" align="center"><input id="action1" type="submit"
+			value="            Run Again            " style="height: 28px" /></td>
+		<form>
+			<td colspan="2" align="center"><input id="download_data"
+				type="button" value="Download Data" style="height: 28px" /></td>
+		</form>
+	</tr>
+	<tr>
+		<td colspan="4" align="center"><textarea readonly id="data_url"
+				cols="130" rows="2">@parameters.getDataURL()</textarea></td>
+	</tr>
+	<tr>
+		<td colspan="4" align="center"><textarea id="Response" cols="130"
+				rows="6">@parameters.getServiceResponseText()</textarea></td>
+	</tr>
+</table>
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/.target/views/climate/scatterAndHistogramTwoVariable.scala.html
----------------------------------------------------------------------
diff --git a/.target/views/climate/scatterAndHistogramTwoVariable.scala.html b/.target/views/climate/scatterAndHistogramTwoVariable.scala.html
new file mode 100644
index 0000000..edb1fc1
--- /dev/null
+++ b/.target/views/climate/scatterAndHistogramTwoVariable.scala.html
@@ -0,0 +1,1402 @@
+@*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more		   *
+ * contributor license agreements.  See the NOTICE file distributed with	   *
+ * this work for additional information regarding copyright ownership.         *
+ * The ASF licenses this file to You under the Apache License, Version 2.0     *
+ * (the "License"); you may not use this file except in compliance with        *
+ * the License.  You may obtain a copy of the License at                       *
+ *                                                                             *
+ *    http://www.apache.org/licenses/LICENSE-2.0                               *
+ *																			   *
+ * Unless required by applicable law or agreed to in writing, software         *
+ * distributed under the License is distributed on an "AS IS" BASIS,           *
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.    *
+ * See the License for the specific language governing permissions and         *
+ * limitations under the License.											   *
+ *******************************************************************************@ 
+
+@(parameters: metadata.ScatterHistogramTwoVar) @import helper._
+<link rel="stylesheet"
+	href='@routes.Assets.at("stylesheets/livefitler.css")'>
+@scripts = {
+<script src='@routes.Assets.at("javascripts/edit_button.js")'></script>
+<script src='@routes.Assets.at("javascripts/livefilter.js")'></script>
+<script type="text/javascript"
+	src='@routes.Assets.at("javascripts/jquery-1.9.0.min.js")'></script>
+<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.min.js"></script>
+	<script type="
+	text/javascript" src='@routes.Assets.at("javascripts/json2.js")'></script>
+<script type="text/javascript" src="@routes.Assets.at("javascripts/xmisc.js")"></script>
+<script type="text/javascript">
+	var Response = null;
+    var variable1 = "";
+    var variable2 = "";
+    window.onload = function() {
+      changeDataSource();
+      select_data1(1);
+      changeDataSource2();
+      select_data1(2);
+      changeVariableName();
+      select_var1(1);
+      changeVariableName2();
+      select_var1(2); 
+      disable_pres1(1);
+      disable_pres1(2);
+      $('#t0').val($('#startYearMonth').text());
+      $('#t1').val($('#endYearMonth').text());
+      $('#lat0').val($('#startLat').text());
+      $('#lat1').val($('#endLat').text());
+      $('#lon0').val($('#startLon').text());
+      $('#lon1').val($('#endLon').text());
+      $('#nSample').val($('#samples').text());
+      $('#purpose').html($('#executionPurpose').text());
+      var imageUrl = $('#image').text();
+      $('#Image').html('<img src="'+imageUrl+'" width=680 />');
+      $('#data_url').html($('#dataURL').text());
+      $('#Response').html($('serviceResponseText').text());
+    }
+    function changeDataSource(){
+    	var dataSource = $('#source1').text();
+     	var x = document.getElementById("data1");
+     	if(dataSource == "cccma_canesm2" ){
+     		x.options[0].selected=true;
+     	}
+     	else if(dataSource == "gfdl_esm2g" ){
+     		x.options[1].selected=true;
+     	}
+     	else if(dataSource == "giss_e2-h" ){
+     		x.options[2].selected=true;
+     	}
+     	else if(dataSource == "giss_e2-r" ){
+     		x.options[3].selected=true;
+     	}
+     	else if(dataSource == "ncar_cam5" ){
+     		x.options[4].selected=true;
+     	}
+     	else if(dataSource == "ncc_noresm" ){
+     		x.options[5].selected=true;
+     	}
+     	else if(dataSource == "ukmo_hadgem2-es" ){
+     		x.options[6].selected=true;
+     	}
+     	else if(dataSource == "cccma_canam4" ){
+     		x.options[7].selected=true;
+     	}
+     	else if(dataSource == "csiro_mk3.6" ){
+     		x.options[8].selected=true;
+     	}
+     	else if(dataSource == "gfdl_cm3" ){
+     		x.options[9].selected=true;
+     	}
+     	else if(dataSource == "ipsl_cm5a-lr" ){
+     		x.options[10].selected=true;
+     	}
+     	else if(dataSource == "miroc_miroc5" ){
+     		x.options[11].selected=true;
+     	}
+     	else if(dataSource == "ukmo_hadgem2-a" ){
+     		x.options[12].selected=true;
+     	}
+     	else if(dataSource == "nasa_modis" ){
+     		x.options[13].selected=true;
+     	}
+     	else if(dataSource == "nasa_amsre" ){
+     		x.options[14].selected=true;
+     	}
+     	else if(dataSource == "nasa_trmm" ){
+     		x.options[15].selected=true;
+     	}
+     	else if(dataSource == "nasa_gpcp" ){
+     		x.options[16].selected=true;
+     	}
+     	else if(dataSource == "nasa_quikscat" ){
+     		x.options[17].selected=true;
+     	}
+     	else if(dataSource == "nasa_aviso" ){
+     		x.options[18].selected=true;
+     	}
+     	else if(dataSource == "nasa_grace" ){
+     		x.options[19].selected=true;
+     	}
+     	else if(dataSource == "noaa_nodc" ){
+     		x.options[20].selected=true;
+     	}
+     	else if(dataSource == "nasa_ceres" ){
+     		x.options[21].selected=true;
+     	}
+     	else if(dataSource == "nasa_airs" ){
+     		x.options[22].selected=true;
+     	}
+     	else if(dataSource == "nasa_mls" ){
+     		x.options[23].selected=true;
+     	}
+     	else if(dataSource == "argo_agro" ){
+     		x.options[24].selected=true;
+     	}
+     	else if(dataSource == "ecmwf_interim" ){
+     		x.options[25].selected=true;
+     	}
+    }
+    function changeDataSource2(){
+    	var dataSource = $('#source2').text();
+     	var x = document.getElementById("data2");
+     	if(dataSource == "cccma_canesm2" ){
+        x.options[0].selected=true;
+      }
+      else if(dataSource == "gfdl_esm2g" ){
+        x.options[1].selected=true;
+      }
+      else if(dataSource == "giss_e2-h" ){
+        x.options[2].selected=true;
+      }
+      else if(dataSource == "giss_e2-r" ){
+        x.options[3].selected=true;
+      }
+      else if(dataSource == "ncar_cam5" ){
+        x.options[4].selected=true;
+      }
+      else if(dataSource == "ncc_noresm" ){
+        x.options[5].selected=true;
+      }
+      else if(dataSource == "ukmo_hadgem2-es" ){
+        x.options[6].selected=true;
+      }
+      else if(dataSource == "cccma_canam4" ){
+        x.options[7].selected=true;
+      }
+      else if(dataSource == "csiro_mk3.6" ){
+        x.options[8].selected=true;
+      }
+      else if(dataSource == "gfdl_cm3" ){
+        x.options[9].selected=true;
+      }
+      else if(dataSource == "ipsl_cm5a-lr" ){
+        x.options[10].selected=true;
+      }
+      else if(dataSource == "miroc_miroc5" ){
+        x.options[11].selected=true;
+      }
+      else if(dataSource == "ukmo_hadgem2-a" ){
+        x.options[12].selected=true;
+      }
+      else if(dataSource == "nasa_modis" ){
+        x.options[13].selected=true;
+      }
+      else if(dataSource == "nasa_amsre" ){
+        x.options[14].selected=true;
+      }
+      else if(dataSource == "nasa_trmm" ){
+        x.options[15].selected=true;
+      }
+      else if(dataSource == "nasa_gpcp" ){
+        x.options[16].selected=true;
+      }
+      else if(dataSource == "nasa_quikscat" ){
+        x.options[17].selected=true;
+      }
+      else if(dataSource == "nasa_aviso" ){
+        x.options[18].selected=true;
+      }
+      else if(dataSource == "nasa_grace" ){
+        x.options[19].selected=true;
+      }
+      else if(dataSource == "noaa_nodc" ){
+        x.options[20].selected=true;
+      }
+      else if(dataSource == "nasa_ceres" ){
+        x.options[21].selected=true;
+      }
+      else if(dataSource == "nasa_airs" ){
+        x.options[22].selected=true;
+      }
+      else if(dataSource == "nasa_mls" ){
+        x.options[23].selected=true;
+      }
+      else if(dataSource == "argo_agro" ){
+        x.options[24].selected=true;
+      }
+      else if(dataSource == "ecmwf_interim" ){
+        x.options[25].selected=true;
+      }
+    }
+    function changeVariableName(){
+    	var var_string = $('#variableName1').text();
+     	var x = document.getElementById("var1");
+     	if (var_string == "clt")
+     		x.options[1].selected=true;
+        else if (var_string == "ts")
+        	x.options[2].selected=true;
+        else if (var_string == "tos")
+        	x.options[3].selected=true;
+        else if (var_string == "pr")
+        	x.options[0].selected=true;
+        else if (var_string == "uas")
+        	x.options[4].selected=true;
+        else if (var_string == "vas")
+        	x.options[5].selected=true;
+        else if (var_string == "sfcWind")
+        	x.options[6].selected=true;
+        else if (var_string == "zos")
+        	x.options[7].selected=true;
+        else if (var_string == "lai")
+        	x.options[8].selected=true;
+        else if (var_string == "zl")
+        	x.options[9].selected=true;
+        else if (var_string == "zo")
+        	x.options[10].selected=true;
+        else if (var_string == "ohc700")
+        	x.options[11].selected=true;
+        else if (var_string == "ohc2000")
+        	x.options[12].selected=true;
+        else if (var_string == "rlds")
+        	x.options[13].selected=true;
+        else if (var_string == "rsds")
+        	x.options[14].selected=true;
+        else if (var_string == "rlus")
+        	x.options[15].selected=true;
+        else if (var_string == "rsus")
+        	x.options[16].selected=true;
+        else if (var_string == "rldscs")
+        	x.options[17].selected=true;
+        else if (var_string == "rsdscs")
+        	x.options[18].selected=true;
+        else if (var_string == "rsuscs")
+        	x.options[19].selected=true;
+        else if (var_string == "rsdt")
+        	x.options[20].selected=true;
+        else if (var_string == "rlutcs")
+        	x.options[21].selected=true;
+        else if (var_string == "rlut")
+        	x.options[22].selected=true;
+        else if (var_string == "rsutcs")
+        	x.options[23].selected=true;
+        else if (var_string == "rsut")
+        	x.options[24].selected=true;
+    }
+    function changeVariableName2(){
+    	var var_string = $('#variableName2').text();
+     	var x = document.getElementById("var2");
+     	if (var_string == "clt")
+     		x.options[1].selected=true;
+        else if (var_string == "ts")
+        	x.options[2].selected=true;
+        else if (var_string == "tos")
+        	x.options[3].selected=true;
+        else if (var_string == "pr")
+        	x.options[0].selected=true;
+        else if (var_string == "uas")
+        	x.options[4].selected=true;
+        else if (var_string == "vas")
+        	x.options[5].selected=true;
+        else if (var_string == "sfcWind")
+        	x.options[6].selected=true;
+        else if (var_string == "zos")
+        	x.options[7].selected=true;
+        else if (var_string == "lai")
+        	x.options[8].selected=true;
+        else if (var_string == "zl")
+        	x.options[9].selected=true;
+        else if (var_string == "zo")
+        	x.options[10].selected=true;
+        else if (var_string == "ohc700")
+        	x.options[11].selected=true;
+        else if (var_string == "ohc2000")
+        	x.options[12].selected=true;
+        else if (var_string == "rlds")
+        	x.options[13].selected=true;
+        else if (var_string == "rsds")
+        	x.options[14].selected=true;
+        else if (var_string == "rlus")
+        	x.options[15].selected=true;
+        else if (var_string == "rsus")
+        	x.options[16].selected=true;
+        else if (var_string == "rldscs")
+        	x.options[17].selected=true;
+        else if (var_string == "rsdscs")
+        	x.options[18].selected=true;
+        else if (var_string == "rsuscs")
+        	x.options[19].selected=true;
+        else if (var_string == "rsdt")
+        	x.options[20].selected=true;
+        else if (var_string == "rlutcs")
+        	x.options[21].selected=true;
+        else if (var_string == "rlut")
+        	x.options[22].selected=true;
+        else if (var_string == "rsutcs")
+        	x.options[23].selected=true;
+        else if (var_string == "rsut")
+        	x.options[24].selected=true;
+    }
+    function disable_download_button()
+    {
+      var x=document.getElementById("download_data");
+      x.disabled=false;
+    }
+    function enable_download_button()
+    {
+      var x=document.getElementById("download_data");
+      x.disabled=false;
+    }
+    function unset_vars1(ID)
+    {
+      var x;
+      if (ID == 1) {
+        x=document.getElementById("var1");
+      }
+      else if (ID == 2) {
+        x=document.getElementById("var2");
+      }
+      x.options[0].disabled=true;
+      x.options[1].disabled=true;
+      x.options[2].disabled=true;
+      x.options[3].disabled=true;
+      x.options[4].disabled=true;
+      x.options[5].disabled=true;
+      x.options[6].disabled=true;
+      x.options[7].disabled=true;
+      x.options[8].disabled=true;
+      x.options[9].disabled=true;
+      x.options[10].disabled=true;
+      x.options[11].disabled=true;
+      x.options[12].disabled=true;
+      x.options[13].disabled=true;
+      x.options[14].disabled=true;
+      x.options[15].disabled=true;
+      x.options[16].disabled=true;
+      x.options[17].disabled=true;
+      x.options[18].disabled=true;
+      x.options[19].disabled=true;
+      x.options[20].disabled=true;
+      x.options[21].disabled=true;
+      x.options[22].disabled=true;
+      x.options[23].disabled=true;
+      x.options[24].disabled=true;
+      x.options[25].disabled=true;
+      x.options[26].disabled=true;
+      x.options[27].disabled=true;
+      x.options[28].disabled=true;
+      x.options[29].disabled=true;
+      x.options[30].disabled=true;
+      x.options[31].disabled=true;
+      x.options[32].disabled=true;
+    }
+    function disable_pres1(ID)
+    {
+      var x;
+      if (ID == 1) {
+        x=document.getElementById("pres1");
+      }
+      else if (ID == 2) {
+        x=document.getElementById("pres2");
+      }
+      x.value = "N/A";
+      x.disabled=true;
+    }
+    function enable_pres1(ID)
+    {
+      var x;
+      if (ID == 1) {
+        x=document.getElementById("pres1");
+      }
+      else if (ID == 2) {
+        x=document.getElementById("pres2");
+      }
+      x.disabled=false;
+    }
+    function select_var1(ID)
+    {
+      var var_string;
+      if (ID == 1) {
+        var_string = $("#var1").val();
+      }
+      else if (ID == 2) {
+        var_string = $("#var2").val();
+      }
+      disable_download_button();  
+      if (var_string == "Total Cloud Fraction") { 
+        if (ID == 1) {
+          variable1 = "clt";  
+        }
+        else if (ID == 2) {
+          variable2 = "clt";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Surface Temperature") {
+        if (ID == 1) {
+          variable1 = "ts";  
+        }
+        else if (ID == 2) {
+          variable2 = "ts";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Sea Surface Temperature") { 
+        if (ID == 1) {
+          variable1 = "tos";  
+        }
+        else if (ID == 2) {
+          variable2 = "tos";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Precipitation Flux") { 
+        if (ID == 1) {
+          variable1 = "pr";  
+        }
+        else if (ID == 2) {
+          variable2 = "pr";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Eastward Near-Surface Wind") { 
+        if (ID == 1) {
+          variable1 = "uas";  
+        }
+        else if (ID == 2) {
+          variable2 = "uas";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Northward Near-Surface Wind") {  
+        if (ID == 1) {
+          variable1 = "vas";  
+        }
+        else if (ID == 2) {
+          variable2 = "vas";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Near-Surface Wind Speed") { 
+        if (ID == 1) {
+          variable1 = "sfcWind";  
+        }
+        else if (ID == 2) {
+          variable2 = "sfcWind";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Sea Surface Height") { 
+        if (ID == 1) {
+          variable1 = "zos";  
+        }
+        else if (ID == 2) {
+          variable2 = "zos";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Leaf Area Index") { 
+        if (ID == 1) {
+          variable1 = "lai";  
+        }
+        else if (ID == 2) {
+          variable2 = "lai";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Equivalent Water Height Over Land") {
+        if (ID == 1) {
+          variable1 = "zl";  
+        }
+        else if (ID == 2) {
+          variable2 = "zl";  
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Equivalent Water Height Over Ocean") {
+        if (ID == 1) {
+          variable1 = "zo";
+        }
+        else if (ID == 2) {
+          variable2 = "zo";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Ocean Heat Content Anomaly within 700 m Depth") {
+        if (ID == 1) {
+          variable1 = "ohc700";
+        }
+        else if (ID == 2) {
+          variable2 = "ohc700";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Ocean Heat Content Anomaly within 2000 m Depth") {
+        if (ID == 1) {
+          variable1 = "ohc2000";
+        }
+        else if (ID == 2) {
+          variable2 = "ohc2000";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Surface Downwelling Longwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rlds";
+        }
+        else if (ID == 2) {
+          variable2 = "rlds";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Surface Downwelling Shortwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rsds";
+        }
+        else if (ID == 2) {
+          variable2 = "rsds";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Surface Upwelling Longwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rlus";
+        }
+        else if (ID == 2) {
+          variable2 = "rlus";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Surface Upwelling Shortwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rsus";
+        }
+        else if (ID == 2) {
+          variable2 = "rsus";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Surface Downwelling Clear-Sky Longwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rldscs";
+        }
+        else if (ID == 2) {
+          variable2 = "rldscs";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Surface Downwelling Clear-Sky Shortwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rsdscs";
+        }
+        else if (ID == 2) {
+          variable2 = "rsdscs";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Surface Upwelling Clear-Sky Shortwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rsuscs";
+        }
+        else if (ID == 2) {
+          variable2 = "rsuscs";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "TOA Incident Shortwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rsdt";
+        }
+        else if (ID == 2) {
+          variable2 = "rsdt";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "TOA Outgoing Clear-Sky Longwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rlutcs";
+        }
+        else if (ID == 2) {
+          variable2 = "rlutcs";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "TOA Outgoing Longwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rlut";
+        }
+        else if (ID == 2) {
+          variable2 = "rlut";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "TOA Outgoing Clear-Sky Shortwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rsutcs";
+        }
+        else if (ID == 2) {
+          variable2 = "rsutcs";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "TOA Outgoing Shortwave Radiation") {
+        if (ID == 1) {
+          variable1 = "rsut";
+        }
+        else if (ID == 2) {
+          variable2 = "rsut";
+        }
+        disable_pres1(ID);
+      }
+      else if (var_string == "Air Temperature") {
+        if (ID == 1) {
+          variable1 = "ta";
+        }
+        else if (ID == 2) {
+          variable2 = "ta";
+        }
+        enable_pres1(ID);
+      }
+      else if (var_string == "Specific Humidity") {
+        if (ID == 1) {
+          variable1 = "hus";
+        }
+        else if (ID == 2) {
+          variable2 = "hus";
+        }
+        enable_pres1(ID);
+      }
+      else if (var_string == "Cloud Ice Water Content") {
+        if (ID == 1) {
+          variable1 = "cli";
+        }
+        else if (ID == 2) {
+          variable2 = "cli";
+        }
+        enable_pres1(ID);
+      }
+      else if (var_string == "Cloud Liquid Water Content") {
+        if (ID == 1) {
+          variable1 = "clw";
+        }
+        else if (ID == 2) {
+          variable2 = "clw";
+        }
+        enable_pres1(ID);
+      }
+      else if (var_string == "Ocean Temperature") {
+        if (ID == 1) {
+          variable1 = "ot";
+        }
+        else if (ID == 2) {
+          variable2 = "ot";
+        }
+        enable_pres1(ID);
+      }
+      else if (var_string == "Ocean Salinity") {
+        if (ID == 1) {
+          variable1 = "os";
+        }
+        else if (ID == 2) {
+          variable2 = "os";
+        }
+        enable_pres1(ID);
+      }
+      else if (var_string == "Vertical Wind Velocity") {
+        if (ID == 1) {
+          variable1 = "wap";
+        }
+        else if (ID == 2) {
+          variable2 = "wap";
+        }
+        enable_pres1(ID);
+      }
+      else if (var_string == "Relative Humidity") {
+        if (ID == 1) {
+          variable1 = "hur";
+        }
+        else if (ID == 2) {
+          variable2 = "hur";
+        }
+        enable_pres1(ID);
+      }
+    }
+    function select_data1(ID)
+    {
+      var data_string;
+      var x;
+      if (ID == 1) {
+        data_string = $("#data1").val();
+        x = document.getElementById("var1");
+      }
+      else if (ID == 2) {
+        data_string = $("#data2").val();
+        x = document.getElementById("var2");
+      }
+      disable_download_button();
+      if (data_string == "NASA/AMSRE") {
+        unset_vars1(ID); 
+        x.options[3].selected=true;
+        disable_pres1(ID); 
+        x.options[3].disabled=false;
+      }
+      else if (data_string == "NASA/MODIS") {
+        unset_vars1(ID);
+        x.options[1].selected=true;
+        disable_pres1(ID); 
+        x.options[1].disabled=false;
+        x.options[8].disabled=false;
+      }
+      else if (data_string == "NASA/TRMM") {
+        unset_vars1(ID);
+        x.options[0].selected=true;
+        disable_pres1(ID); 
+        x.options[0].disabled=false;
+      }
+      else if (data_string == "NASA/GPCP") {
+        unset_vars1(ID);
+        x.options[0].selected=true;
+        disable_pres1(ID); 
+        x.options[0].disabled=false;
+      }
+      else if (data_string == "NASA/QuikSCAT") {
+        unset_vars1(ID);
+        x.options[4].selected=true;
+        disable_pres1(ID); 
+        x.options[4].disabled=false;
+        x.options[5].disabled=false;
+        x.options[6].disabled=false;
+      }
+      else if (data_string == "NASA/AVISO") {
+        unset_vars1(ID);
+        x.options[7].selected=true;
+        disable_pres1(ID); 
+        x.options[7].disabled=false;
+      }
+      else if (data_string == "NASA/GRACE") {
+        unset_vars1(ID);
+        x.options[9].selected=true;
+        disable_pres1(ID); 
+        x.options[9].disabled=false;
+        x.options[10].disabled=false;
+      }
+      else if (data_string == "NOAA/NODC") {
+        unset_vars1(ID);
+        x.options[11].selected=true;
+        disable_pres1(ID); 
+        x.options[11].disabled=false;
+        x.options[12].disabled=false;
+      }
+      else if (data_string == "NASA/CERES") {
+        unset_vars1(ID);
+        x.options[13].selected=true;
+        disable_pres1(ID); 
+        x.options[13].disabled=false;
+        x.options[14].disabled=false;
+        x.options[15].disabled=false;
+        x.options[16].disabled=false;
+        x.options[17].disabled=false;
+        x.options[18].disabled=false;
+        x.options[19].disabled=false;
+        x.options[20].disabled=false;
+        x.options[21].disabled=false;
+        x.options[22].disabled=false;
+        x.options[23].disabled=false;
+        x.options[24].disabled=false;
+      }
+      else if (data_string == "NASA/AIRS") {
+        unset_vars1(ID);
+        x.options[25].selected=true;
+        enable_pres1(ID); 
+        x.options[25].disabled=false;
+        x.options[26].disabled=false;
+      }
+      else if (data_string == "NASA/MLS") {
+        unset_vars1(ID);
+        x.options[25].selected=true;
+        enable_pres1(ID); 
+        x.options[25].disabled=false;
+        x.options[26].disabled=false;
+      }
+      else if (data_string == "ARGO/ARGO") {
+        unset_vars1(ID);
+        x.options[29].selected=true;
+        enable_pres1(ID); 
+        x.options[29].disabled=false;
+        x.options[30].disabled=false;
+      }
+      else if (data_string == "CCCMA/CANAM4") {
+        unset_vars1(ID);
+        x.options[0].selected=true;
+        disable_pres1(ID); 
+        x.options[0].disabled=false;
+        x.options[1].disabled=false;
+        x.options[2].disabled=false;
+        x.options[4].disabled=false;
+        x.options[5].disabled=false;
+        x.options[6].disabled=false;
+        x.options[13].disabled=false;
+        x.options[14].disabled=false;
+        x.options[15].disabled=false;
+        x.options[16].disabled=false;
+        x.options[17].disabled=false;
+        x.options[18].disabled=false;
+        x.options[19].disabled=false;
+        x.options[20].disabled=false;
+        x.options[21].disabled=false;
+        x.options[22].disabled=false;
+        x.options[23].disabled=false;
+        x.options[24].disabled=false;
+        x.options[25].disabled=false;
+        x.options[26].disabled=false;
+        x.options[27].disabled=false;
+        x.options[28].disabled=false;
+      }
+      else if (data_string == "CSIRO/MK3.6") {
+        unset_vars1(ID);
+        x.options[0].selected=true;
+        disable_pres1(ID); 
+        x.options[0].disabled=false;
+        x.options[1].disabled=false;
+        x.options[2].disabled=false;
+        x.options[4].disabled=false;
+        x.options[5].disabled=false;
+        x.options[6].disabled=false;
+        x.options[13].disabled=false;
+        x.options[14].disabled=false;
+        x.options[15].disabled=false;
+        x.options[16].disabled=false;
+        x.options[17].disabled=false;
+        x.options[18].disabled=false;
+        x.options[19].disabled=false;
+        x.options[20].disabled=false;
+        x.options[21].disabled=false;
+        x.options[22].disabled=false;
+        x.options[23].disabled=false;
+        x.options[24].disabled=false;
+        x.options[25].disabled=false;
+        x.options[26].disabled=false;
+        x.options[27].disabled=false;
+        x.options[28].disabled=false;
+        x.options[31].disabled=false;
+        x.options[32].disabled=false;
+      }
+      else if (data_string == "NCAR/CAM5") {
+        unset_vars1(ID);
+        x.options[0].selected=true;
+        disable_pres1(ID); 
+        x.options[0].disabled=false;
+        x.options[1].disabled=false;
+        x.options[2].disabled=false;
+        x.options[3].disabled=false;
+        x.options[4].disabled=false;
+        x.options[5].disabled=false;
+        x.options[6].disabled=false;
+        x.options[7].disabled=false;
+        x.options[8].disabled=false;
+        x.options[14].disabled=false;
+        x.options[15].disabled=false;
+        x.options[16].disabled=false;
+        x.options[17].disabled=false;
+        x.options[18].disabled=false;
+        x.options[19].disabled=false;
+        x.options[20].disabled=false;
+        x.options[21].disabled=false;
+        x.options[22].disabled=false;
+        x.options[23].disabled=false;
+        x.options[24].disabled=false;
+        x.options[25].disabled=false;
+        x.options[26].disabled=false;
+        x.options[27].disabled=false;
+        x.options[28].disabled=false;
+        x.options[31].disabled=false;
+        x.options[32].disabled=false;
+      }
+      else if (data_string == "CCCMA/CANESM2" || data_string == "GFDL/ESM2G" ||
+               data_string == "GISS/E2-H" || data_string == "GISS/E2-R" ||
+               data_string == "NCC/NORESM" ||
+               data_string == "UKMO/HadGEM2-ES" ||
+               data_string == "GFDL/CM3" || data_string == "IPSL/CM5A-LR" ||
+               data_string == "MIROC/MIROC5" || data_string == "UKMO/HadGEM2-A"
+              ) {
+        unset_vars1(ID);
+        x.options[0].selected=true;
+        disable_pres1(ID); 
+        x.options[0].disabled=false;
+        x.options[1].disabled=false;
+        x.options[2].disabled=false;
+        x.options[3].disabled=false;
+        x.options[4].disabled=false;
+        x.options[5].disabled=false;
+        x.options[6].disabled=false;
+        x.options[7].disabled=false;
+        x.options[8].disabled=false;
+        x.options[13].disabled=false;
+        x.options[14].disabled=false;
+        x.options[15].disabled=false;
+        x.options[16].disabled=false;
+        x.options[17].disabled=false;
+        x.options[18].disabled=false;
+        x.options[19].disabled=false;
+        x.options[20].disabled=false;
+        x.options[21].disabled=false;
+        x.options[22].disabled=false;
+        x.options[23].disabled=false;
+        x.options[24].disabled=false;
+        x.options[25].disabled=false;
+        x.options[26].disabled=false;
+        x.options[27].disabled=false;
+        x.options[28].disabled=false;
+        x.options[31].disabled=false;
+        x.options[32].disabled=false;
+      }
+      else if (data_string == "ECMWF/interim") {
+        unset_vars1(ID);
+        x.options[3].selected=true;
+        disable_pres1(ID); 
+        x.options[3].disabled=false;
+        x.options[31].disabled=false;
+        x.options[32].disabled=false;
+      }
+      select_var1(ID);
+    }
+    $(document).ready(function(){
+      $("#download_data").click(function(event) {
+        var durl = $("#data_url").val();
+        window.location.assign(durl);
+      });
+      $("#scatterPlot2V").click(function(event) {
+        Response = null;
+        disable_download_button();
+        $("#Response").html("Calculating ...");
+        $("#data_url").html("Calculating ...");
+        $("#Image").html("");
+        var url = "http://" + window.location.hostname + ":9002/svc/scatterPlot2V?";
+        var d1 = $("#data1").val();
+        var model1 = d1.replace("/", "_");
+        model1 = model1.toLowerCase();
+        var arglist = "";
+        arglist = arglist.concat("model1=");
+        arglist = arglist.concat(model1);
+        var v1 = $("#var1").val();
+        arglist = arglist.concat("&var1=");
+        arglist = arglist.concat(variable1);
+        var pres1 = $("#pres1").val();
+        arglist = arglist.concat("&pres1=");
+        arglist = arglist.concat(pres1);
+        var d2 = $("#data2").val();
+        var model2 = d2.replace("/", "_");
+        model2 = model2.toLowerCase();
+        arglist = arglist.concat("&model2=");
+        arglist = arglist.concat(model2);
+        var v2 = $("#var2").val();
+        arglist = arglist.concat("&var2=");
+        arglist = arglist.concat(variable2);
+        var pres2 = $("#pres2").val();
+        arglist = arglist.concat("&pres2=");
+        arglist = arglist.concat(pres2);
+        var t0 = $("#t0").val();
+        var t1 = $("#t1").val();
+        t0 = t0.replace("-", "");
+        t1 = t1.replace("-", "");
+        arglist = arglist.concat("&start_time=");
+        arglist = arglist.concat(t0);
+        arglist = arglist.concat("&end_time=");
+        arglist = arglist.concat(t1);
+        var lon0 = $("#lon0").val();
+        var lon1 = $("#lon1").val();
+        var lat0 = $("#lat0").val();
+        var lat1 = $("#lat1").val();
+        arglist = arglist.concat("&lon1=");
+        arglist = arglist.concat(lon0);
+        arglist = arglist.concat("&lon2=");
+        arglist = arglist.concat(lon1);
+        arglist = arglist.concat("&lat1=");
+        arglist = arglist.concat(lat0);
+        arglist = arglist.concat("&lat2=");
+        arglist = arglist.concat(lat1);
+        var nSample = $("#nSample").val();
+        arglist = arglist.concat("&nSample=");
+        arglist = arglist.concat(nSample);
+        var purpose = $("#purpose").val();
+        arglist = arglist.concat("&purpose=");
+        arglist = arglist.concat(purpose);
+        url = url + encodeURI(arglist);
+        var urlTimeBounds = "http://" + window.location.hostname + ":9002/svc/two_time_bounds?";
+        var arglistTB = "";
+        arglistTB = arglistTB.concat("serviceType=");
+        arglistTB = arglistTB.concat("2");
+        arglistTB = arglistTB.concat("&source1=");
+        arglistTB = arglistTB.concat(d1);
+        arglistTB = arglistTB.concat("&var1=");
+        arglistTB = arglistTB.concat(variable1);
+        arglistTB = arglistTB.concat("&source2=");
+        arglistTB = arglistTB.concat(d2);
+        arglistTB = arglistTB.concat("&var2=");
+        arglistTB = arglistTB.concat(variable2);
+        urlTimeBounds = urlTimeBounds + encodeURI(arglistTB);
+        $.ajax({
+            type: "GET",
+            url: urlTimeBounds,
+            dataType: "json",
+            data: null,
+            success: function(data, textStatus, xhr) {
+                Response = data;
+                if (data.success == false) {
+                    Response = null;
+                    var text = JSON.stringify(data, null, 4);
+                    text = "Error in backend: <br>" + text; 
+                    $("#Response").html(text);
+                    $("#data_url").html(text);
+                    return;
+                }
+                var text = JSON.stringify(data, null, 4);
+                var tb1 = data.time_bounds1;
+                var bds1 = String(tb1).split(",");
+                var lowerT1 = parseInt(bds1[0]);
+                var upperT1 = parseInt(bds1[1]);
+                var tb2 = data.time_bounds2;
+                var bds2 = String(tb2).split(",");
+                var lowerT2 = parseInt(bds2[0]);
+                var upperT2 = parseInt(bds2[1]);
+                var t0I = parseInt(t0);
+                var t1I = parseInt(t1);
+                var lowerT, upperT;
+                if (lowerT1 == 0  || upperT1 == 0){ 
+                  alert("We do not have data for the data-1 source and variable configuration.");
+                  return;
+                }
+                else if (lowerT2 == 0  || upperT2 == 0){ 
+                  alert("We do not have data for the data-2 source and variable configuration.");
+                  return;
+                }
+                else if (lowerT2 > upperT1 || lowerT1 > upperT2) { 
+                  alert("The two data sets/vars do not have a common time range.");
+                  return;
+                }
+                else { 
+                  if (lowerT1 > lowerT2) { 
+                    lowerT = lowerT1;
+                  }
+                  else {
+                    lowerT = lowerT2;
+                  }
+                  if (upperT1 > upperT2) { 
+                    upperT = upperT2;
+                  }
+                  else {
+                    upperT = upperT1;
+                  }
+                }
+                if (t0I < lowerT && t1I < lowerT ||
+                    t0I > upperT && t1I > upperT) {
+                  alert("We do not have data that span your time range. Try the range inside ["+lowerT+", "+upperT+"].");
+                  return;
+                }
+                if (t0I < lowerT && t1I <= upperT) {
+                  alert("Your start year-month is out of bound. It has to be in or later than " + lowerT +
+                        ". We will use the range ["+lowerT+", "+t1I+"] for you.");
+                }
+                if (t1I > upperT && t0I >= lowerT) {
+                  alert("Your end year-month is out of bound. It has to be in or earlier than " + upperT +
+                        ". We will use the range ["+t0I+", "+upperT+"] for you.");
+                }
+                if (t0I < lowerT && t1I > upperT ) {
+                  alert("Both of your start and end year-months are out of bounds. They have to be in or earlier than " + upperT +
+                        ", and in or later than " + lowerT + ". We will use the range ["+lowerT+", "+upperT+"] for you.");
+                }
+            },
+            error: function(xhr, textStatus, errorThrown) {
+		$("#Response").html("error!");
+		$("#data_url").html("error!");
+            },
+            complete: function(xhr, textStatus) {
+            }
+        });
+        $.ajax({
+            type: "GET",
+            url: url,
+            dataType: "json",
+            data: null,
+            success: function(data, textStatus, xhr) {
+                Response = data;
+                if (data.success == false) {
+                    Response = null;
+                    var text = JSON.stringify(data, null, 4);
+                    if (text.indexOf("No Data") != -1) {
+                      $("#Image").html("No Data");
+                      $("#Response").html("No Data");
+                      $("#data_url").html("No Data");
+                      return;
+                    }
+                    text = "Error in backend: <br>" + text; 
+                    $("#Response").html(text);
+                    $("#data_url").html(text);
+                    return;
+                }
+                var text = JSON.stringify(data, null, 4);
+                $("#Response").html(text);
+                var html = "<img src='"+data.url+"' width='820'/>";
+                $("#Image").html(html);
+                $("#data_url").html(data.dataUrl);
+                enable_download_button();
+            },
+            error: function(xhr, textStatus, errorThrown) {
+                $("#Response").html("error!");
+                $("#data_url").html("error!");
+            },
+            complete: function(xhr, textStatus) {
+            }
+        });
+      });
+    });
+    </script>
+} @main("Service 19", scripts){ @flash_message()
+<p>
+<div id="source1" style="display: none;">@parameters.getSource1()</div>
+<div id="variableName1" style="display: none;">@parameters.getVaribaleName1()</div>
+<div id="pressureLevel1" style="display: none;">@parameters.getPressureLevel1()</div>
+<div id="startYearMonth" style="display: none;">@parameters.getStartYear()</div>
+<div id="startLat" style="display: none;">@parameters.getStartLat()</div>
+<div id="startLon" style="display: none;">@parameters.getStartLon()</div>
+<div id="source2" style="display: none;">@parameters.getSource2()</div>
+<div id="variableName2" style="display: none;">@parameters.getVaribaleName2()</div>
+<div id="pressureLevel2" style="display: none;">@parameters.getPressureLevel2()</div>
+<div id="endYearMonth" style="display: none;">@parameters.getEndYear()</div>
+<div id="endLat" style="display: none;">@parameters.getEndLat()</div>
+<div id="endLon" style="display: none;">@parameters.getEndLon()</div>
+<div id="samples" style="display: none;">@parameters.getSamples()</div>
+<div id="executionPurpose" style="display: none;">@parameters.getExecutionPurpose()</div>
+<div id="image" style="display: none;">@parameters.getImage()</div>
+<div id="dataURL" style="display: none;">@parameters.getDataUrl()</div>
+<div id="serviceResponseText" style="display: none;">@parameters.getServiceResponse()</div>
+<table border="1" align="center">
+	<tr>
+		<td colspan="4">
+			<center>
+				<b>Service: Scatter and Histogram Plot of Two Variables</b><br>
+				<br> This service generates a scatter plot between two
+				specified variables and the histograms of the two variables, and
+				calculates the correlation of the two variables. The two variables
+				can be either a two-dimensional variable or a slice of a
+				three-dimensional variable at a specific pressure level. The number
+				of samples used for this analysis should be specified. <br>
+				<br>
+			</center>
+		</td>
+	</tr>
+	<tr>
+		<td colspan="2">
+			<center>data 1</center>
+		</td>
+		<td colspan="2">
+			<center>data 2</center>
+		</td>
+	</tr>
+	<tr>
+		<td>source:</td>
+		<td><select name="data1" , id="data1" onchange="select_data1(1)">
+				<optgroup label="Model: Historical">
+					<option selected="CCCMA/CANESM2">CCCMA/CANESM2</option>
+					<option>GFDL/ESM2G</option>
+					<option>GISS/E2-H</option>
+					<option>GISS/E2-R</option>
+					<option>NCAR/CAM5</option>
+					<option>NCC/NORESM</option>
+					<option>UKMO/HadGEM2-ES</option>
+				</optgroup>
+				<optgroup label="Model: AMIP">
+					<option>CCCMA/CANAM4</option>
+					<option>CSIRO/MK3.6</option>
+					<option>GFDL/CM3</option>
+					<option>IPSL/CM5A-LR</option>
+					<option>MIROC/MIROC5</option>
+					<option>UKMO/HadGEM2-A</option>
+				</optgroup>
+				<optgroup label="Observation">
+					<option>NASA/MODIS</option>
+					<option>NASA/AMSRE</option>
+					<option>NASA/TRMM</option>
+					<option>NASA/GPCP</option>
+					<option>NASA/QuikSCAT</option>
+					<option>NASA/AVISO</option>
+					<option>NASA/GRACE</option>
+					<option>NOAA/NODC</option>
+					<option>NASA/CERES</option>
+					<option>NASA/AIRS</option>
+					<option>NASA/MLS</option>
+					<option>ARGO/ARGO</option>
+				</optgroup>
+				<optgroup label="Reanalysis">
+					<option>ECMWF/interim</option>
+				</optgroup>
+		</select></td>
+		<td>source:</td>
+		<td><select name="data2" , id="data2" onchange="select_data1(2)">
+				<optgroup label="Model: Historical">
+					<option selected="CCCMA/CANESM2">CCCMA/CANESM2</option>
+					<option>GFDL/ESM2G</option>
+					<option>GISS/E2-H</option>
+					<option>GISS/E2-R</option>
+					<option>NCAR/CAM5</option>
+					<option>NCC/NORESM</option>
+					<option>UKMO/HadGEM2-ES</option>
+				</optgroup>
+				<optgroup label="Model: AMIP">
+					<option>CCCMA/CANAM4</option>
+					<option>CSIRO/MK3.6</option>
+					<option>GFDL/CM3</option>
+					<option>IPSL/CM5A-LR</option>
+					<option>MIROC/MIROC5</option>
+					<option>UKMO/HadGEM2-A</option>
+				</optgroup>
+				<optgroup label="Observation">
+					<option>NASA/MODIS</option>
+					<option>NASA/AMSRE</option>
+					<option>NASA/TRMM</option>
+					<option>NASA/GPCP</option>
+					<option>NASA/QuikSCAT</option>
+					<option>NASA/AVISO</option>
+					<option>NASA/GRACE</option>
+					<option>NOAA/NODC</option>
+					<option>NASA/CERES</option>
+					<option>NASA/AIRS</option>
+					<option>NASA/MLS</option>
+					<option>ARGO/ARGO</option>
+				</optgroup>
+				<optgroup label="Reanalysis">
+					<option>ECMWF/interim</option>
+				</optgroup>
+		</select></td>
+	</tr>
+	<tr>
+		<td>variable name:</td>
+		<td><select name="var1" , id="var1" onchange="select_var1(1)">
+				<option>Precipitation Flux</option>
+				<option>Total Cloud Fraction</option>
+				<option>Surface Temperature</option>
+				<option>Sea Surface Temperature</option>
+				<option>Eastward Near-Surface Wind</option>
+				<option>Northward Near-Surface Wind</option>
+				<option>Near-Surface Wind Speed</option>
+				<option>Sea Surface Height</option>
+				<option>Leaf Area Index</option>
+				<option>Equivalent Water Height Over Land</option>
+				<option>Equivalent Water Height Over Ocean</option>
+				<option>Ocean Heat Content Anomaly within 700 m Depth</option>
+				<option>Ocean Heat Content Anomaly within 2000 m Depth</option>
+				<option>Surface Downwelling Longwave Radiation</option>
+				<option>Surface Downwelling Shortwave Radiation</option>
+				<option>Surface Upwelling Longwave Radiation</option>
+				<option>Surface Upwelling Shortwave Radiation</option>
+				<option>Surface Downwelling Clear-Sky Longwave Radiation</option>
+				<option>Surface Downwelling Clear-Sky Shortwave Radiation</option>
+				<option>Surface Upwelling Clear-Sky Shortwave Radiation</option>
+				<option>TOA Incident Shortwave Radiation</option>
+				<option>TOA Outgoing Longwave Radiation</option>
+				<option>TOA Outgoing Shortwave Radiation</option>
+				<option>TOA Outgoing Clear-Sky Longwave Radiation</option>
+				<option>TOA Outgoing Clear-Sky Shortwave Radiation</option>
+				<option>Air Temperature</option>
+				<option>Specific Humidity</option>
+				<option>Cloud Ice Water Content</option>
+				<option>Cloud Liquid Water Content</option>
+				<option>Ocean Temperature</option>
+				<option>Ocean Salinity</option>
+				<option>Vertical Wind Velocity</option>
+				<option>Relative Humidity</option>
+		</select></td>
+		<td>variable name:</td>
+		<td><select name="var2" , id="var2" onchange="select_var1(2)">
+				<option>Precipitation Flux</option>
+				<option>Total Cloud Fraction</option>
+				<option>Surface Temperature</option>
+				<option>Sea Surface Temperature</option>
+				<option>Eastward Near-Surface Wind</option>
+				<option>Northward Near-Surface Wind</option>
+				<option>Near-Surface Wind Speed</option>
+				<option>Sea Surface Height</option>
+				<option>Leaf Area Index</option>
+				<option>Equivalent Water Height Over Land</option>
+				<option>Equivalent Water Height Over Ocean</option>
+				<option>Ocean Heat Content Anomaly within 700 m Depth</option>
+				<option>Ocean Heat Content Anomaly within 2000 m Depth</option>
+				<option>Surface Downwelling Longwave Radiation</option>
+				<option>Surface Downwelling Shortwave Radiation</option>
+				<option>Surface Upwelling Longwave Radiation</option>
+				<option>Surface Upwelling Shortwave Radiation</option>
+				<option>Surface Downwelling Clear-Sky Longwave Radiation</option>
+				<option>Surface Downwelling Clear-Sky Shortwave Radiation</option>
+				<option>Surface Upwelling Clear-Sky Shortwave Radiation</option>
+				<option>TOA Incident Shortwave Radiation</option>
+				<option>TOA Outgoing Longwave Radiation</option>
+				<option>TOA Outgoing Shortwave Radiation</option>
+				<option>TOA Outgoing Clear-Sky Longwave Radiation</option>
+				<option>TOA Outgoing Clear-Sky Shortwave Radiation</option>
+				<option>Air Temperature</option>
+				<option>Specific Humidity</option>
+				<option>Cloud Ice Water Content</option>
+				<option>Cloud Liquid Water Content</option>
+				<option>Ocean Temperature</option>
+				<option>Ocean Salinity</option>
+				<option>Vertical Wind Velocity</option>
+				<option>Relative Humidity</option>
+		</select></td>
+	</tr>
+	<tr>
+		<td>atmosphere pressure level (hPa) <br> or ocean pressure
+			level (dbar)
+		</td>
+		<td><input id="pres1" value="500" alt="pressure" /></td>
+		<td>atmosphere pressure level (hPa) <br> or ocean pressure
+			level (dbar)
+		</td>
+		<td><input id="pres2" value="500" alt="pressure" /></td>
+	</tr>
+	<tr>
+	</tr>
+	<tr>
+		<td>start year-month:</td>
+		<td><input id="t0" value="2004-01" alt="start" /></td>
+		<td>end year-month:</td>
+		<td><input id="t1" value="2004-12" alt="end" /></td>
+	</tr>
+	<tr>
+		<td>start lat (deg):</td>
+		<td><input id="lat0" value="-90" /></td>
+		<td>end lat (deg):</td>
+		<td><input id="lat1" value="90" /></td>
+	</tr>
+	<tr>
+		<td>start lon (deg):</td>
+		<td><input id="lon0" value="0" /></td>
+		<td>end lon (deg):</td>
+		<td><input id="lon1" value="360" /></td>
+	</tr>
+	<tr>
+		<td>number of samples:</td>
+		<td><input id="nSample" value="500" /></td>
+	</tr>
+	</tr>
+	<tr>
+		<td colspan="1">Execution purpose</td>
+		<td colspan="3">
+			<form>
+				<textarea name="purpose" id="purpose" rows="4" cols="50"> </textarea>
+			</form>
+		</td>
+	</tr>
+	<tr>
+		<td colspan="2" align="center"><input id="scatterPlot2V"
+			type="submit" value="            Run Again            "
+			style="height: 28px" /></td>
+		<form>
+			<td colspan="2" align="center"><input id="download_data"
+				type="button" value="Download Data" style="height: 28px" /></td>
+		</form>
+	</tr>
+	<tr>
+		<td colspan="4">
+			<div id="Image">Image Here</div>
+		</td>
+	</tr>
+	<tr>
+		<td colspan="4" align="center"><textarea readonly id="data_url"
+				cols="130" rows="2">Data URL Here</textarea></td>
+	</tr>
+	<tr>
+		<td colspan="4" align="center"><textarea id="Response" cols="130"
+				rows="6">Service Response Text Here</textarea></td>
+	</tr>
+</table>
+}