// ------------------------------------------------------------ //
// All scripts copyright of iQuest (NZ) Ltd	          //
// Author:	Kevin Buckle				//
// Date: 	2005						//
//								//
//Modifications: Malcolm Barr			//
//Date:	         2009					//
// ------------------------------------------------------------ //
//								//
// Use, modification or reproduction of these scripts		//
// is prohibited without prior permission from iQuest (NZ) Ltd.	//
//								//
// ------------------------------------------------------------ //

// Global variables

var PriPoint=-1;
var PriFormat='0';
var trType='1';
var trParam='0';
var PriAggregate='0';
var SecPoint='-1';
var SecFormat='0';
var SecAggregate='0';
var LockAxes='0';
var Lmin='0';
var Lmax='0';
var Rmin='0';
var Rmax='0';
var zSdt='0';
var zFdt='0';
var Sdt='0';
var Fdt='0';
var UseZoomParams=0;
var CurTab=0;
var XSectionAvailable = 0;
var VMins;
var VMaxs;
var Traces=1;

function AddTrace(name,point,units,format,aggregate)
{
	if(point != '')
	{	  
	  Traces++;
	  
	  var myTable = findDOM('Points');
	  var newRow = myTable.insertRow(-1);
	
  	  var newCell = newRow.insertCell(-1);
	  newCell.innerHTML = point;
	  newCell.style.display = "none";
	  
	  newCell = newRow.insertCell(-1);
	  if(PlotColours)
		newCell.style.backgroundColor = PlotColours[(Traces-1)%10];
	  newCell.innerHTML = '&nbsp;';
	  
	  newCell = newRow.insertCell(-1);
	  newCell.align = 'center';
	  newCell.innerHTML = '<Input type="radio" Name="Samples" Value="' + point + '" onClick="UpdateSamples()">';
	
	  newCell = newRow.insertCell(-1);
	  newCell.align = 'center';
	  newCell.innerHTML = '<b>' + name + '</b>';
	
	  newCell = newRow.insertCell(-1);
	  newCell.align = 'center';
	  newCell.innerHTML = '' + units;
	
	  newCell = newRow.insertCell(-1);
	  newCell.align = 'center';
	  newCell.innerHTML = '<select size="1" name="Format" id="Format'+(myTable.rows.length-1)+'" class="AdvancedPlot"><option>Default</option><option>Raw</option><option>Incrementing</option><option>Totalled</option><option>Averaged</option></select> ';
		
	  newCell = newRow.insertCell(-1);
	  newCell.align = 'center';
 	  newCell.innerHTML = '<select size="1" name="Aggregate" id="Aggregate'+(myTable.rows.length-1)+'" class="AdvancedPlot">' + findDOM('Aggregate1').innerHTML + '</select>';
	  
      findDOM('Format'+(myTable.rows.length-1)).selectedIndex = format;
      var i;
      for (i=0; i<15; i++)
      {
        if(findDOM('Aggregate'+(myTable.rows.length-1)).options[i].value == aggregate)
            findDOM('Aggregate'+(myTable.rows.length-1)).selectedIndex = i;
      }
      
	  UpdatePlot();
	}
}

function SetCustomTimeRange(extitle)
{
  var edtSDay = findDOM('sday');
  var edtSMonth = findDOM('smonth');
  var edtSYear = findDOM('syear');
  var edtFDay = findDOM('fday');
  var edtFMonth = findDOM('fmonth');
  var edtFYear = findDOM('fyear');
  var edtSHour = findDOM('shour');
  var edtSMinute = findDOM('sminute');
  var edtFHour = findDOM('fhour');
  var edtFMinute = findDOM('fminute');
  
  Sdt = edtSDay.value +'/' + edtSMonth.value +'/' + edtSYear.value +' ' + edtSHour.value +':' + edtSMinute.value;
  Fdt = edtFDay.value +'/' + edtFMonth.value +'/' + edtFYear.value +' ' + edtFHour.value +':' + edtFMinute.value;
  
  trType = '2';

  // Hide form fields ....
  //HideCustomTimeRange();

  UpdatePlot();
}  

function ShowSummary(e) 
{
	if (!e) e = window.event

	var sumaryVar=findDOM('summary')
	sumaryVar.style.top = e.clientY + 10;
	sumaryVar.style.left = e.clientX;
	sumaryVar.style.visibility = "visible";
}

function HideSummary() {document.all.summary.style.visibility = "hidden";}


function ShowCustomTimeRange(e) 
{
	if (!e) e = window.event

  var divCustomTimeRange = findDOM('CustomTimeRange');
  var scrollX = 0;
  var scrollY = 0;

  if (document.body.scrollTop)
  {
    scrollX = document.body.scrollLeft;
    scrollY = document.body.scrollTop;
  }
    else if (window.pageYOffset)
  {
    scrollX = window.pageXOffset;
    scrollY = window.pageYOffset;
  }

  divCustomTimeRange.style.top = scrollY + e.clientY + 15;
  divCustomTimeRange.style.left = scrollX + e.clientX - 25;
  divCustomTimeRange.style.visibility = "visible";
}



function HideCustomTimeRange()
{
  var divCustomTimeRange = findDOM('CustomTimeRange');

  divCustomTimeRange.style.visibility = "hidden";
}




function findDOM(objectId) {
	if (document.getElementById)
	{
		return (document.getElementById(objectId));
	}
	else if (document.all)
	{
		return (document.all[objectId]);
	}
	else
	{
		alert("Your browser does not support the necessary javascript methods to carry out this request.");
		return null;
	}	
}

function getcookie(cookiename)
{
 var cookiestring=""+document.cookie;
 var UUIDcookiename = cookiename;
 var index1=cookiestring.indexOf(UUIDcookiename);

 if (index1==-1 || UUIDcookiename=="") return ""; 
 var index2=cookiestring.indexOf(';',index1);
 if (index2==-1) index2=cookiestring.length; 
 return unescape(cookiestring.substring(index1+UUIDcookiename.length+1,index2));
}

function deleteCookie(cookiename)
{
 var today = new Date();
 var expires_date = new Date();

 expires_date.setTime(today.getTime() - 3600000*24);
 document.cookie = cookiename + "=0;expires=" + expires_date.toGMTString();
}


Zooming = 0;
x0 = 0;
y0 = 0;
xs = 0;
ys = 0;

function Zoom(imgx,e,obj)
{
	if (!e) e = window.event

	imgd = findDOM(imgx);
	imgPlot = findDOM('Plot');

	var totalOffsetLeft = obj.offsetLeft;
	var totalOffsetTop = obj.offsetTop;
	while(obj.offsetParent)
	{
		totalOffsetLeft=totalOffsetLeft+obj.offsetParent.offsetLeft;
		totalOffsetTop=totalOffsetTop+obj.offsetParent.offsetTop;
		if(obj==document.getElementsByTagName('body')[0]){break}
		else{obj=obj.offsetParent;}
	}
 
	if (Zooming == 0)
	{
		scrollX = 0;
		scrollY = 0;

		if (document.body.scrollTop)
		{
		  scrollX = document.body.scrollLeft;
		  scrollY = document.body.scrollTop;
		}
		else if (window.pageYOffset)
		{
		  scrollX = window.pageXOffset;
		  scrollY = window.pageYOffset;
		}

		imgd.height = 10;
		imgd.width = 10;
		imgd.style.top = scrollY + e.clientY - 1;
		imgd.style.left = scrollX + e.clientX - 1;
		imgd.style.visibility = "visible";
		xs = e.clientX;
		ys = e.clientY;
		if (e.offsetX && e.offsetY) {
			debugger;
			x0 = e.offsetX;
			y0 = e.offsetY;
		} else { 
			
			x0 = e.pageX - totalOffsetLeft;
			y0 = e.pageY - totalOffsetTop;
		}
		Zooming = 1;
	}
	else
	{
		imgd.style.visibility = "hidden";
		Zooming = 0;

		var x1;var y1;
		if (e.offsetX && e.offsetY) {
			x1 = e.offsetX;
			y1 = e.offsetY;
		} else {
			x1 = e.pageX - totalOffsetLeft;
			y1 = e.pageY - totalOffsetTop;
		}

		// Check zoom box constraints
		if ((x1 > x0) && (y1 > y0))
		{
  
			// Get parameters from passed cookie
			var cookieString = "" + getcookie('PlotParams');
			var cookies = cookieString.split(",");
	
			var X0 = parseFloat(cookies[0]);
			var Y0 = parseFloat(cookies[1]);
			var Pv = parseFloat(cookies[2]);
			var Ph = parseFloat(cookies[3]);
			var HRange = parseFloat(cookies[4]);
			var Hmin = parseFloat(cookies[5]);
	
			// Calculate new graph ranges and re-draw
			var x2 = parseFloat(e.offsetX);
			var y2 = parseFloat(e.offsetY);
			var x1 = parseFloat(x0);
			var y1 = parseFloat(y0);

			var x2;
			var y2;
			if (e.offsetX && e.offsetY) {
				x2 = parseFloat(e.offsetX);
				y2 = parseFloat(e.offsetY);
			} else {
				x2 = e.pageX - totalOffsetLeft;
				y2 = e.pageY - totalOffsetTop;
			}

			VMins = new Array();
			VMaxs = new Array();
			var k=1;
			var tempmax;
			var temprange;
			for (var i=6; i<cookies.length; i+=2)
			{
				temprange = parseFloat(cookies[i]);
				tempmax = parseFloat(cookies[i+1]);
				VMins[k] = tempmax - ((y2-Y0)/Pv*temprange);
				VMaxs[k] = tempmax - ((y1-Y0)/Pv*temprange);
				k++;
			}  
			
			zSdt = ((x1-X0)/Ph*HRange) + Hmin;
			zFdt = ((x2-X0)/Ph*HRange) + Hmin;		
			UseZoomParams = 1;

			// Update plot
			UpdatePlot();
		}	
	}
}

function DoZoom(imgx,e)
{
	if (!e) e = window.event
	if (Zooming == 1)
	{
		imgd = findDOM(imgx);

		imgd.height = e.clientY - ys - 1;
		imgd.width = e.clientX - xs - 1;
	}
}


function UpdatePlot() 
{
  // Get plot image element
  var imgPlot = findDOM('Plot');

  // Build new URL using current parameters
  var URL = imgPlot.src.split("?");
  var NewSrc = '' + URL[0] + '?';
  
  //Display image while graph is built
  imgPlot.src = 'img/plotwait.gif';
	
  var pointsTable = findDOM('Points');
  for (var i=1; i<pointsTable.rows.length; i++)
  {
	if(i != 1)
	  NewSrc += '&';
	NewSrc += 'point=' + pointsTable.rows[i].cells[0].innerHTML;
	var k = i;
	if(findDOM('Format'+k).selectedIndex > 0)
	  NewSrc += '&format=' + findDOM('Format'+k).selectedIndex;
	//if(findDOM('Aggregate'+k).selectedIndex > 0)
	  NewSrc += '&aggregate=' + (findDOM('Aggregate'+k).options[findDOM('Aggregate'+k).selectedIndex].value);
	if(UseZoomParams == 1)
	  NewSrc += '&min=' + VMins[i] + '&max=' + VMaxs[i];
  }   
   
  if ((findDOM('LockAxes').checked))
	NewSrc += '&Locked=true';
  else
    if(findDOM('LockAxes').checked)
		findDOM('LockAxes').checked = false;
	
  if (UseZoomParams == 1)
  {
    NewSrc += '&zSdt=' + zSdt;
    NewSrc += '&zFdt=' + zFdt;
  }
  else if ((Sdt != '0') && (Fdt != '0'))
  {
    // Custom Time Range
    NewSrc += '&Sdt=' + Sdt;
    NewSrc += '&Fdt=' + Fdt;
  }    
  
  NewSrc += '&trType=' + trType;
  NewSrc += '&trParam=' + trParam;
	
  // Replace or append UUID tag to ensure cached images are not used (cached images do not update cookies)
  var d = new Date();
  var UUID = new String(d/86400000);
  NewSrc += "&UUID=" + UUID; 

  //Add WUDMS data if needed (always at end of URL)
  if(URL[1].indexOf('consentid') != -1)
  {
	NewSrc += '&' + URL[1].substring(URL[1].indexOf('consentid'),URL[1].length);
  } 
  
  // Clear existing cookiestring in preparation for new plot
  deleteCookie('PlotParams');


  // Set new src for plot image
  imgPlot.src = NewSrc;

  URL = NewSrc.split("?");
  downloadURL = 'cgi-bin/hydwebserver.cgi/points/samples/download?' + URL[1];


  //UpdateSamples();
}

function UpdateSamples()
{
	var point;
	var k;
	var len = document.SampleSelect.Samples.length;

	for (i = 1; i <len; i++) {
		if (document.SampleSelect.Samples[i].checked){ 
			point = document.SampleSelect.Samples[i].value;
			k = i;
		}
	}

	var PlotURL = findDOM('Plot');
	var URL = PlotURL.src.split("?");
	PlotURL = '' + URL[1];

	var SamplesURL = findDOM('SamplesFrame');
	URL = SamplesURL.src.split("?");
	var NewSrc = '' + URL[0] + '?';
	
	NewSrc += 'point=' + point;
		
	if (UseZoomParams == 1)
	{
		NewSrc += '&zSdt=' + zSdt;
		NewSrc += '&zFdt=' + zFdt;
	}
	else if ((Sdt != '0') && (Fdt != '0'))
	{
		// Custom Time Range
		NewSrc += '&Sdt=' + Sdt;
		NewSrc += '&Fdt=' + Fdt;
	}  
	
	if(findDOM('Format'+k).selectedIndex > 0)
		NewSrc += '&format=' + findDOM('Format'+k).selectedIndex;
	if(findDOM('Aggregate'+k).selectedIndex > 0)
		NewSrc += '&aggregate=' + (findDOM('Aggregate'+k).options[findDOM('Aggregate'+k).selectedIndex].value);
  
	NewSrc += '&trType=' + trType;
	NewSrc += '&trParam=' + trParam;

    //Add WUDMS data if needed (always at end of URL)
    if(URL[1].indexOf('consentid') != -1)
    {
  	  NewSrc += '&' + URL[1].substring(URL[1].indexOf('consentid'),URL[1].length);
    } 
		
	SamplesURL.src = NewSrc;
}

function SelectTimeRange(Type,extitle)
{
  // Set parameter
  trType = Type

  // Remove zoom params
  Lmin = 0;
  Lmax = 0;
  Rmin = 0;
  Rmax = 0;
  zSdt = 0;
  zFdt = 0;
  UseZoomParams = 0;

  // Update plot
  UpdatePlot();
}

function PadZero(strInteger)
{
  var str = new String("" + strInteger);
  if (str.length < 2)
    str = '0' + str;
  return str;
}


function SetPlotParametersFromURL()
{
  // Get plot object and src
  var imgPlot = findDOM('Plot');
  var src = imgPlot.src;

  // Extract plot parameters from plot src
  var params = src.split("&");
  var name;
  var value;    

  for (var i=0; i<params.length; i++)
  {
    // First one needs to be split again at the ?
    if (i==0)
      param = (params[0].split("?"))[1];     
    else
      param = params[i];

    // Get name and value
    name = (param.split("="))[0];
    value = (param.split("="))[1];

    if (name=='PriPoint')
    {
      PriPoint = value;
    }
    else if (name=='PriFormat')
    {
      PriFormat = value;
      var p = findDOM('PriFormat');
      p.selectedIndex = parseInt(value);
    }
    else if (name=='PriAggregate')
    {
      PriAggregate = value;
      var p = findDOM('PriAggregate');
      p.selectedIndex = parseInt(value) + 1;
    }
    else if (name=='SecFormat')
    {
      SecFormat = value;
      var p = findDOM('SecFormat');
      p.selectedIndex = parseInt(value);
    }
    else if (name=='SecAggregate')
    {
      SecAggregate = value;
      var p = findDOM('SecAggregate');
      p.selectedIndex = parseInt(value) + 1;
    }
    else if (name=='Compare')
    {
      LockAxes = value;
      var p = findDOM('LockAxes');
      p.checked = value;
    }
    else if (name=='SecPoint')
    {
      SecPoint = value;
      
      // Try and find entry in drop down list
      var p = findDOM('SecPoint');
      var found = 0;

      for (var a=0; a<p.options.length; a++)
      {
        if (p.options[a].value.split(',')[0] == SecPoint)
        {
          found = 1;
          p.selectedIndex = a;
        }
      }

      if (found == 0)
      {
        p.selectedIndex = 0;
      }
    }
    else if (name=='trType')
    {
      trType = value;
    }    
    else if (name=='Sdt')
    {
      Sdt = unescape(value);
    }    
    else if (name=='Fdt')
    {
      Fdt = unescape(value);
    }    
  }

  // Set default date and time for custom time range fields
  var End = new Date();
  End.setMonth(End.getMonth() + 1);
  var Start = new Date();
  Start.setMonth(Start.getMonth() + 1);
  Start.setDate(Start.getDate() - 1); 
  
  var edtSDay = findDOM('sday');
  var edtSMonth = findDOM('smonth');
  var edtSYear = findDOM('syear');
  var edtFDay = findDOM('fday');
  var edtFMonth = findDOM('fmonth');
  var edtFYear = findDOM('fyear');
  var edtSHour = findDOM('shour');
  var edtSMinute = findDOM('sminute');
  var edtFHour = findDOM('fhour');
  var edtFMinute = findDOM('fminute');
  
  edtSDay.value = PadZero(Start.getDate());
  edtSMonth.value = PadZero(Start.getMonth());
  edtSYear.value = Start.getFullYear();
  edtFDay.value = PadZero(End.getDate());
  edtFMonth.value = PadZero(End.getMonth());
  edtFYear.value = End.getFullYear();
  edtSHour.value = PadZero(Start.getHours());
  edtSMinute.value = PadZero(Start.getMinutes());
  edtFHour.value = PadZero(End.getHours());
  edtFMinute.value = PadZero(End.getMinutes());
  
}

function ToggleDataPane(T,i)
{
  var P = findDOM('Plot');
  var S = findDOM('SamplesFrame');
  var X = findDOM('XSection');

  if (T != CurTab)
  {
    var I = findDOM('Tab0');
    I.src = 'img/graph_off.gif';
    I = findDOM('Tab1');
    I.src = 'img/samples_off.gif';
    if (XSectionAvailable == 1)
    {
      I = findDOM('Tab2');
      I.src = 'img/xsection_off.gif';
    }

    P.style.display = 'none';
    X.style.display = 'none';
    S.style.display = 'none';    	
 
    if (T == 0)
    {
      i.src = 'img/graph_on.gif';
      P.style.display = 'inline';
    }
    else if (T == 1)
    {
      i.src = 'img/samples_on.gif';
      S.style.display = 'inline';
    }
    else if (T == 2)
    {
      i.src = 'img/xSection_on.gif';
      X.style.display = 'inline';
    }
    CurTab = T;
  }
}

