var waterlevel = new Array();
var rainfall = new Array();
var well = new Array();
var welllastlevel = new Array();
var waterstations = new Array();
var datestart = 0;
var dateend = 9999999999999;
var wlCSVStr;
var rainCSVStr;
var sessRandom;

function getMax (arr, col) { 
	var row; 
	var maxval = 0;
	for (row = 0; row < arr.length; ++row) {
		if  (arr[row]!=undefined) {
			if  (arr[row][col]!=undefined) {
				if (parseFloat(arr[row][col]) > maxval) {
					maxval = parseFloat(arr[row][col]);
				}
			}else{
				if (parseFloat(arr[row]) > maxval) {
					maxval = parseFloat(arr[row]);
				}
			}
		}
	}
	return maxval;
} 
function getMin(arr, col){
	var row; 
	var minval = 9999999;
	for (row = 0; row < arr.length; ++row) {
		if  (arr[row]!=undefined) {
			if  (arr[row][col]!=undefined) {
				if (parseFloat(arr[row][col]) < minval) {
						minval = parseFloat(arr[row][col]);
				}
			}else{
				if (parseFloat(arr[row]) < minval) {
					minval = parseFloat(arr[row]);
				}
			}
		}
	}
	return minval;
}
	
function plotGraph_orig(idWell) {
	
	getWellArray(idWell);
	getRainfallArray(idWell);
	
    var maxWL =  getMax(waterlevel,1)  * 1.03;
    var minWL =  getMin(waterlevel,1)  * .96;
    
    var maxRF =  38;
    var minRF =  0;
          
    var plot = jQuery.plot(jQuery("#placeholder"), 
    	[ { data: waterlevel, label: "Water Level (Feet)" },
          { data: rainfall, label: "Rainfall (Inches)", yaxis: 2 }],
        {
    	series: {
	        lines: { show: true },
	        points: { show: false }
	    },
	    grid: { hoverable: true, clickable: true },  	
    	xaxis: {
            mode: "time",
            timeformat: "%y<br>%b",
            tickSize: [6, "month"]
	    },
        yaxis: { min:  minWL, max: maxWL}, 
        y2axis: { min: minRF, max: maxRF }, 
        legend: { position: 'ne' } 
        });
    
    function showTooltip(x, y, contents) {
        jQuery('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y + 5,
            left: x + 5,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#fee',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
    }
 
    var previousPoint = null;
    jQuery("#placeholder").bind("plothover", function (event, pos, item) {
        jQuery("#x").text(pos.x);
        jQuery("#y").text(pos.y.toFixed(2));
 
        if (item) {
            if (previousPoint != item.datapoint) {
                previousPoint = item.datapoint;
                
                jQuery("#tooltip").remove();
                var x = item.datapoint[0]; 
                    y = item.datapoint[1].toFixed(2);
                 
                 var theDate = new Date(x); 
                 var dateString = theDate.getMonth()+1 + "/" + theDate.getFullYear(); 
                
                showTooltip(item.pageX, item.pageY,
                            item.series.label + " for " + dateString + " = " + y);
            }
        }
        else {
            jQuery("#tooltip").remove();
            previousPoint = null;            
        }
    });
}

function plotGraph(idWell) {
	
	getWellArray(idWell);
	getRainfallArray(idWell);
	
	var countWL = waterlevel.length;
	var tickCount = 6;
	
	if (countWL < 13){
		tickCount = 1;
	}
       
    var maxWL =  getMax(waterlevel,1)  * 1.03;
    var minWL =  getMin(waterlevel,1)  * .96;
    
    var maxRF =  38;
    var minRF =  0;
          
    var plot = jQuery.plot(jQuery("#placeholder"), 
    	[ { data: waterlevel, label: "Water Level (feet above sea level)" },
          { data: rainfall, label: "Rainfall (Inches)", yaxis: 2 }],
        {
    	series: {
	        lines: { show: true },
	        points: { show: false }
	    },
	    grid: { hoverable: true, clickable: true },  	
    	xaxis: {
            mode: "time",
            timeformat: "%y<br>%b",
            tickSize: [tickCount, "month"]
	    },
        yaxis: { min:  minWL, max: maxWL}, 
        y2axis: { min: minRF, max: maxRF }, 
        legend: { position: 'ne' } 
        });
    
    function showTooltip(x, y, contents) {
        jQuery('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y + 5,
            left: x + 5,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#fee',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
    }
 
    var previousPoint = null;
    jQuery("#placeholder").bind("plothover", function (event, pos, item) {
        jQuery("#x").text(pos.x);
        jQuery("#y").text(pos.y.toFixed(2));
 
        if (item) {
            if (previousPoint != item.datapoint) {
                previousPoint = item.datapoint;
                
                jQuery("#tooltip").remove();
                var x = item.datapoint[0]; 
                    y = item.datapoint[1].toFixed(2);
                 
                 var theDate = new Date(x); 
                 var dateString = theDate.getMonth()+1 + "/" + theDate.getFullYear(); 
                
                 if (item.series.label.substring(0,5)=="Water") {
	                 showTooltip(item.pageX, item.pageY,
	                		 dateString + "<br>" + item.series.label + " = " + y + 
	                		 "<br>" + "Measured Depth (feet below ground level) = " + 
	                            waterlevel[item.dataIndex][2]);
                 }else{
                	 showTooltip(item.pageX, item.pageY,
	                		 dateString + "<br>" + item.series.label + " = " + y);
                 }
            }
        }
        else {
            jQuery("#tooltip").remove();
            previousPoint = null;            
        }
    });

}


function plotGraphSummary() {
	
	getWellSummaryArray();

    var maxWL =  getMax(waterlevel,1)  * 1.03;
    var minWL =  getMin(waterlevel,2)  * .75;
    var countWL = waterlevel.length;
              
    options = { series: { bandwidth: { 
    	active: true , 
    	lineWidth: 8,
     	drawBandwidth: function(ctx,bandwidth, x,y1,y2,color,isOverlay){
    			ctx.beginPath();
    			ctx.strokeStyle = color;
    			ctx.lineWidth = 3;
    			ctx.moveTo(x, y1);
    			ctx.lineTo(x, y2);
    			ctx.stroke();
    						
    			ctx.beginPath();
    			if (isOverlay)
    			{        ctx.strokeStyle = "rgba(255,255,255," + bandwidth.highlight.opacity + ")"; }
    			else
    			{        ctx.strokeStyle = "#3366CC"; }
    			ctx.lineWidth = bandwidth.lineWidth;
    			ctx.moveTo(x,y1);
    			ctx.lineTo(x,y1 + 4);
    			ctx.moveTo(x,y2);
    			ctx.lineTo(x,y2 + 4);
    			ctx.stroke();
				}
			} }
			,xaxis:  {min: -1, max: countWL+1, ticks: 0}
			,yaxis: {min: minWL}
			,legend: {}
            ,grid: {hoverable: true, 
            	clickable: true,
	            markings: function (axes) {
	                var markings = [];
	                for (var x = .5; x < axes.xaxis.max; x += 1)
	                  markings.push({ color: '#ccc', lineWidth: 1, xaxis: { from: x, to: x } });
	                return markings;
	              }
            }
    };
    var placeholder = jQuery("#placeholder");
    
    var plot = jQuery.plot(placeholder, 
    		[{ 	data: waterlevel,
				label: "Historic Water Level High/Low",
				color: "#6699CC",
				bandwidth: {show: true, lineWidth: 12} },
			 {	data: welllastlevel,
    			label: "Last Water Level", 
    			color: "#FF3300",
    			points: {show: true,
					fill: true,
	    		    fillColor: "#FF3300"} }
    		], options);
    
    var o;
    var browserName=navigator.appName; 
    var wellname;
 
    for (var s = 0; s < countWL; s++) {
    	
    	wellname = well[s][2];
  
	    o = plot.pointOffset({ x: s, y: minWL});
	    // we just append it to the placeholder which Flot already uses
	    // for positioning

	    if (browserName=="Microsoft Internet Explorer") {
		    placeholder.append('<div class="graphText" style="height:120px;position:absolute;left:' + (o.left-4) + 'px;top:' + (o.top-124) + 'px;color:#333;font-size:smaller">' + wellname +'</div>');	    	
	    }else{
	    	placeholder.append('<div class="graphText" style="height:12px;width:120px;position:absolute;left:' + (o.left-4) + 'px;top:' + (o.top-4) + 'px;color:#333;font-size:smaller">' + wellname +'</div>');
	    }
	 }
    function showTooltip(x, y, contents) {
        jQuery('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y,
            left: x,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#fee',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
    }
 
    var previousPoint = null;
    placeholder.bind("plothover", function (event, pos, item) {
  
        if (item) {
            if (previousPoint != item.datapoint) {
                previousPoint = item.datapoint;
                
                jQuery("#tooltip").remove();
                var x = item.datapoint[0];
                    highLevel = item.datapoint[1].toFixed(2);
                    lowLevel = item.datapoint[2].toFixed(2);
                    lastLevel = welllastlevel[x][1].toFixed(2);
                    wellName = well[x][2];
                    startDate = well[x][3].substring(4) + "/" + well[x][3].substring(0,4);
                    endDate = well[x][4].substring(4) + "/" + well[x][4].substring(0,4);
                    highDate  = well[x][5].substring(4) + "/" + well[x][5].substring(0,4);
                    lowDate  = well[x][6].substring(4) + "/" + well[x][6].substring(0,4);
                    wellid = well[x][1];
                  
                                 
                showTooltip(pos.pageX, pos.pageY,
                			'<span style="font-weight: bold;">' + 
                			'<a href="wellgraph?idWell=' + wellid + '" target="_blank">' + wellName + "</a></span>"  +
                			'<table>' +
                			'<tr><td style="text-align:left;">Last:</td><td style="text-align:right;">' + lastLevel + "</td></tr>" +
                			'<tr><td style="text-align:left;">High:</td><td style="text-align:right;">' + highLevel + '</td><td style="font-size: .7em;"> (' + highDate + ")</td></tr>" +
                			'<tr><td style="text-align:left;">Low:</td><td style="text-align:right;">' + lowLevel + '</td><td style="font-size: .7em;"> (' + lowDate + ")</td></tr>" +
                            '<tr style="font-size: .7em;"><td colspan=3 style="text-align:left">Monitor dates:&nbsp;&nbsp;' + startDate + "-" + endDate + "</td></tr>" +
                            '</table>');
                
//    			'<div style="text-align:left;padding-left:2px;margin-top:-12px;">' +
//    			"<br>Last: " + l +
//    			"<br>High: " + y1 + '<span style="font-size: .7em;"> (' + hd + ")</span>" +
//                "<br> Low: " + y2 + '<span style="font-size: .7em;"> (' + ld + ")</span>" +
//                '<br><span style="font-size: .7em;">Monitor dates: ' + d1 + "-" + d2 + "</span>" +
//                '</div>');
            }
        }
        else {
            jQuery("#tooltip").remove();
            previousPoint = null;            
        }
    });
 
}

function plotGraphGroup() {
	
	getWellGroupArray();

    var countWL = waterstations.length;
    var maxWLa = new Array();
    var minWLa = new Array();
    var i=0;
    for (var i=0;i<countWL;i++) {
	    maxWLa[i] =  getMax(waterstations[i],1);
	    minWLa[i] =  getMin(waterstations[i],1);
    }
    var maxWL =  getMax(maxWLa,0) * 1.4;
    var minWL =  getMin(minWLa,0) * 1.2;

    var plot = jQuery.plot(jQuery("#placeholder"), 
    	[ { data: waterstations[0], label: well[0][2] },
    	  { data: waterstations[1], label: well[1][2] }],
        {
	    grid: { hoverable: true, clickable: true },  	
		bars: {
	    	  show:true,
		      barWidth: .6,
		      align: "left",
		      horizontal: false
		    },
		xaxis: {min: -1, max: ((countWL*2)+1), ticks: 0},
		yaxis: {min: minWL, max: maxWL},
        legend: { position: 'ne' } 
        });
    
    function showTooltip(x, y, contents) {
        jQuery('<div id="tooltip">' + contents + '</div>').css( {
            position: 'absolute',
            display: 'none',
            top: y + 5,
            left: x + 5,
            border: '1px solid #fdd',
            padding: '2px',
            'background-color': '#fee',
            opacity: 0.80
        }).appendTo("body").fadeIn(200);
    }
 
    var previousPoint = null;
    jQuery("#placeholder").bind("plothover", function (event, pos, item) {
        jQuery("#x").text(pos.x);
        jQuery("#y").text(pos.y.toFixed(2));
 
        if (item) {
            if (previousPoint != item.datapoint) {
                previousPoint = item.datapoint;
                
                jQuery("#tooltip").remove();
                var x = item.datapoint[0]; 
                    y = item.datapoint[1].toFixed(2);
                    stationName = well[x][2];
                    dataType = well[x][3];
                                 
                showTooltip(item.pageX, item.pageY,
                            dataType + "<br> for " + stationName + ":<br>" + y);
            }
        }
        else {
            jQuery("#tooltip").remove();
            previousPoint = null;            
        }
    });
}
function getWellArray_orig(idWell) {

	var aurl = "../../includes/forms/routeHandlerXML.php?reqType=wellwaterlevel&id="+idWell;
	jQuery.ajax({
		type: 'GET',
		url: aurl,
		async: false, 
		datatype: 'xml',
		error : function (XMLHttpRequest, textStatus, errorThrown){
	    	jQuery("#processResult").html("Get failed.");
		},
		complete : function(xml){
			var rtn = jQuery(xml.responseXML).find('rtn').text();
			if (rtn == 'OK'){
				var i=0;
				jQuery("#wellName").html(jQuery(xml.responseXML).find('NAME').text());
				jQuery("#lat").html(jQuery(xml.responseXML).find('LATITUDE').text());
				jQuery("#long").html(jQuery(xml.responseXML).find('LONGITUDE').text());
				jQuery("#elevation").html("Elevation: " + jQuery(xml.responseXML).find('ELEVATION').text());
				jQuery("#depth").html("Total Well Depth: " + jQuery(xml.responseXML).find('DEPTH').text());
				
				jQuery(xml.responseXML).find('row').each(function()
				{
					if (i==0){
						datestart = jQuery(this).find('DATE').text();
					}
					waterlevel[i] = new Array(2);
					waterlevel[i][0] = jQuery(this).find('DATE').text();
					waterlevel[i][1] = jQuery(this).find('WL').text();
					i++;
				});
			} else {
				jQuery("#wellName").html(jQuery(xml.responseXML).find('rtn').text());
				jQuery("#lat").html("");
				jQuery("#long").html("");
				jQuery("#elevation").html("");
				jQuery("#depth").html("");
				waterlevel = new Array(2);
			}
		}
	});	
}
function getWellArray(idWell) {
	
	sessRandom = Math.ceil(Math.random()* 15593);

	var aurl = "../../includes/forms/routeHandlerXML.php?reqType=wellwaterlevel&id="+idWell+"&num="+sessRandom;
	jQuery.ajax({
		type: 'GET',
		url: aurl,
		async: false, 
		datatype: 'xml',
		error : function (XMLHttpRequest, textStatus, errorThrown){
	    	jQuery("#processResult").html("Get failed.");
		},
		complete : function(xml){
			var rtn = jQuery(xml.responseXML).find('rtn').text();
			if (rtn == 'OK'){
				var i=0;
				wlCSVStr = "";
				var wellName = jQuery(xml.responseXML).find('NAME').text();
				var wellLat = jQuery(xml.responseXML).find('LATITUDE').text();
				var wellLong = jQuery(xml.responseXML).find('LONGITUDE').text();
				var wellElev = jQuery(xml.responseXML).find('ELEVATION').text();
				var wellDepth = jQuery(xml.responseXML).find('DEPTH').text();
				var wellMonitorEnd = '';
				if (jQuery(xml.responseXML).find('MONITOREND').text() > ""){
					wellMonitorEnd = 'District is no longer monitoring this well.';
					dateend = jQuery(xml.responseXML).find('MONITOREND').text();
				}
				wlCSVStr += 'Well: ' + wellName + '<br>';
				jQuery("#wellName").html(wellName);
				wlCSVStr += 'Latitude: ' + wellLat + '<br>';
				jQuery("#lat").html(wellLat);
				wlCSVStr += 'Longitude: ' + wellLong + '<br>';
				jQuery("#long").html(wellLong);
				wlCSVStr += 'Elevation: ' + wellElev + '<br>';
				wlCSVStr += 'Total Well Depth: ' + wellDepth + '<br>';
				jQuery("#elevation").html("Elevation: " + wellElev);
				jQuery("#depth").html("Total Well Depth: " + wellDepth);
				jQuery("#monitorend").html(wellMonitorEnd);
				jQuery(xml.responseXML).find('row').each(function()
				{
					if (i==0){
						datestart = jQuery(this).find('DATE').text();
					}
					waterlevel[i] = new Array(2);
					waterlevel[i][0] = jQuery(this).find('DATE').text();
					waterlevel[i][1] = jQuery(this).find('WL').text();
					waterlevel[i][2] = jQuery(this).find('WD').text();
					wlCSVStr += jQuery(this).find('DT').text() + ',' + jQuery(this).find('WL').text() + '<br>';
					i++;
				});
				
			} else {
				jQuery("#waterlevelXML").html("");
				jQuery("#wellName").html(jQuery(xml.responseXML).find('rtn').text());
				jQuery("#lat").html("");
				jQuery("#long").html("");
				jQuery("#elevation").html("");
				jQuery("#depth").html("");
				jQuery("#monitorend").html("");
				waterlevel = new Array(2);
			}
		}
	});	
}
function getRainfallArray(idWell) {

	var aurl = "../../includes/forms/routeHandlerXML.php?reqType=wellrainfall&id="+idWell;
	jQuery.ajax({
		type: 'GET',
		url: aurl,
		async: false, 
		datatype: 'xml',
		error : function (XMLHttpRequest, textStatus, errorThrown){
	    	jQuery("#processResult").html("Get failed.");
		},
		complete : function(xml){
			if (xml.status == 200) {
				var i=0;
				jQuery(xml.responseXML).find('row').each(function()
				{
					if (parseInt(jQuery(this).find('DATE').text())>= parseInt(datestart) &&
						parseInt(jQuery(this).find('DATE').text())<= parseInt(dateend)){
						rainfall[i] = new Array(2);
						rainfall[i][0] = jQuery(this).find('DATE').text();
						rainfall[i][1] = jQuery(this).find('RAIN').text();
						i++;
					}
				});
			} else {
				jQuery('#placeholder').html(xml.responseText);
			}
		}
	});	
}
function getWellSummaryArray(idWell) {

	var aurl = "../../includes/forms/routeHandlerXML.php?reqType=wellwaterlevelsummary";
	jQuery.ajax({
		type: 'GET',
		url: aurl,
		async: false, 
		datatype: 'xml',
		error : function (XMLHttpRequest, textStatus, errorThrown){
	    	jQuery("#processResult").html("Get failed.");
		},
		complete : function(xml){
			var rtn = jQuery(xml.responseXML).find('rtn').text();
			if (rtn == 'OK'){
				var i=0;				
				jQuery(xml.responseXML).find('row').each(function()
				{
					waterlevel[i] = new Array(3);
					waterlevel[i][0] = i; 
					waterlevel[i][1] = parseFloat(jQuery(this).find('HIGH').text());
					waterlevel[i][2] = parseFloat(jQuery(this).find('LOW').text());
					
					well[i] = new Array(7);
					well[i][0] = i; 
					well[i][1] = jQuery(this).find('ID').text();
					well[i][2] = jQuery(this).find('NAME').text();
					well[i][3] = jQuery(this).find('FIRSTDATE').text();
					well[i][4] = jQuery(this).find('LASTDATE').text();
					well[i][5] = jQuery(this).find('HIGHDATE').text();
					well[i][6] = jQuery(this).find('LOWDATE').text();

					welllastlevel[i] = new Array(2);
					welllastlevel[i][0] = i; 
					welllastlevel[i][1] = parseFloat(jQuery(this).find('LASTLEVEL').text());
					i++;					
				});
			} else {
				waterlevel = new Array(3);
			}
		}
	});	
}
function getWellGroupArray() {

	var aurl = "../../includes/forms/routeHandlerXML.php?reqType=wellgroupsummary";
	jQuery.ajax({
		type: 'GET',
		url: aurl,
		async: false, 
		datatype: 'xml',
		error : function (XMLHttpRequest, textStatus, errorThrown){
	    	jQuery("#processResult").html("Get failed.");
		},
		complete : function(xml){
			var rtn = jQuery(xml.responseXML).find('rtn').text();
			if (rtn == 'OK'){
				var i=0;
				var k=0;
				//code works for 2 stations but would need to be adjusted if more stations used.
				
				var count = parseInt(jQuery(xml.responseXML).find('count').text());
				waterstations = new Array(count);
				jQuery(xml.responseXML).find('row').each(function()
				{
					well[i] = new Array(4);
					well[i][0] = i; 
					well[i][1] = jQuery(this).find('NCDCSTATION').text();
					well[i][2] = jQuery(this).find('NCDCSTATIONNAME').text();
					well[i][3] = 'Average Change from Previous Month';
					
					waterstations[i] = new Array(count);
					waterstations[i][0] = new Array (2);
					waterstations[i][0][0] = i;
					waterstations[i][0][1] = parseFloat(jQuery(this).find('PREVMONTHCHANGE').text());
	
					k=i+count;
					well[k] = new Array(4);
					well[k][0] = i; 
					well[k][1] = jQuery(this).find('NCDCSTATION').text();
					well[k][2] = jQuery(this).find('NCDCSTATIONNAME').text();
					well[k][3] = 'Average Change from Previous Year';
					waterstations[i][1] = new Array(2);
					waterstations[i][1][0] = k;
					waterstations[i][1][1] = parseFloat(jQuery(this).find('PREVYEARCHANGE').text());
			
					i++;
				});
			}
		}
	});	
}
function buildCSV(wlCSVStr,sessNum){
	jQuery("#processResult").html(wlCSVStr);
	jQuery("#waterlevelCSVDiv")
    .jqm({overlay: 10, height: 200, trigger: false})
	.jqDrag('.jqDrag')
	.jqResize('.jqResize')
    .jqmShow();
	
	jQuery("#reportAnchor").attr("href", "../../output/WLRPT/WL_REPT_"+sessNum+".xls");
	jQuery("#reportAnchor").html("Download Excel Report");

}
