// ------------------------------------------------------------ //
// All scripts copyright of iQuest (NZ) Ltd			//
// Author:	Kevin Buckle					//
// Date: 	2005						//
// ------------------------------------------------------------ //
//								//
// 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='0';
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;


function SetCustomTimeRange(extitle)
{
  var edtSDate = findDOM('sdate');
  var edtFDate = findDOM('fdate');
  var edtSTime = findDOM('stime');
  var edtFTime = findDOM('ftime');
  
  Sdt = escape(edtSDate.value + ' ' + edtSTime.value);
  Fdt = escape(edtFDate.value + ' ' + edtFTime.value);

  trType = '2';

  // Hide form fields ....
  HideCustomTimeRange();

  UpdatePlot(extitle);
}  

function ShowSummary() {
    document.getElementById("summary").style.display = "inline";
	//if (!e) e = window.event

	//var sumaryVar=findDOM('summary')
	//sumaryVar.style.top = e.clientY + 10;
	//sumaryVar.style.left = e.clientX;
	//sumaryVar.style.display = "inline";
}

function HideSummary() {document.getElementById("summary").style.display = "none";}


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";
  document.getElementById("CustomTimeRange").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 VRange = parseFloat(cookies[4]);
  var VrRange = parseFloat(cookies[5]);
  var HRange = parseFloat(cookies[6]);
  var Vmax = parseFloat(cookies[7]);
  var Vrmax = parseFloat(cookies[8]);
  var Hmin = parseFloat(cookies[9]);

			// 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;
			}
			
			Lmin = Vmax - ((y2-Y0)/Pv*VRange);
			Lmax = Vmax - ((y1-Y0)/Pv*VRange);
			Rmin = Vrmax - ((y2-Y0)/Pv*VrRange);
			Rmax = Vrmax - ((y1-Y0)/Pv*VrRange);
			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(extitle)
{
  // Get plot image element
  var imgPlot = findDOM('Plot');

  // Build new URL using current parameters
  var URL = imgPlot.src.split("?");
  var NewSrc = '' + URL[0];

  NewSrc += '?point=' + PriPoint;
  NewSrc += '&trType=' + trType;
  NewSrc += '&trParam=' + trParam;
  NewSrc += '&PriFormat=' + PriFormat;
  NewSrc += '&PriAggregate=' + PriAggregate;
  NewSrc += '&SecPoint=' + SecPoint;
  NewSrc += '&SecFormat=' + SecFormat;
  NewSrc += '&SecAggregate=' + SecAggregate;
  NewSrc += '&LockAxes=' + LockAxes;
  NewSrc += '&extitle=' + extitle;
  if (SecPoint > -1) 
    NewSrc += '&compare=on';

  if (UseZoomParams == 1)
  {
    NewSrc += '&Lmin=' + Lmin;
    NewSrc += '&Rmin=' + Rmin;
    NewSrc += '&Lmax=' + Lmax;
    NewSrc += '&Rmax=' + Rmax;
    NewSrc += '&zSdt=' + zSdt;
    NewSrc += '&zFdt=' + zFdt;
  }
  else if ((Sdt != '0') && (Fdt != '0'))
  {
    // Custom Time Range
    NewSrc += '&Sdt=' + Sdt;
    NewSrc += '&Fdt=' + Fdt;
  }    

  // 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;

  // Clear existing cookiestring in preparation for new plot
  deleteCookie('PlotParams');

  // Set new src for plot image
  imgPlot.src = NewSrc;

  // Also set new src for samples if available
  var imgSamples = findDOM('Samples');
  if (imgSamples)
  {
    // replace 'plot' with 'samples/image' in the plot URL and assign to the samples image
    var NewSamplesURL = NewSrc;
    var rExp = /plot/gi;
    NewSamplesURL = NewSamplesURL.replace(rExp,"samples");
    imgSamples.src = NewSamplesURL;
  }

  // .... And new src for sample download if available
  var imgSampleDownload = findDOM('Sampledownload');
  if (imgSampleDownload)
  {
    // replace 'plot' with 'samples/export' in the plot URL and assign to the download link
    var NewDownloadURL = NewSrc;
    var rExp = /plot/gi;
    NewDownloadURL = NewDownloadURL.replace(rExp,"samples/export");
    imgSampleDownload.href = NewDownloadURL;
  }
}

function ApplyPlotOptions(extitle)
{	
  // Get objects
  var sPriFormat = findDOM('PriFormat');
  var sPriAggregate = findDOM('PriAggregate');
  var sSecFormat = findDOM('SecFormat');
  var sSecAggregate = findDOM('SecAggregate');
  var sSecPoint = findDOM('SecPoint');
  var cLockAxes = findDOM('LockAxes');

  // Get new plot options
  PriFormat = '' + (sPriFormat.selectedIndex);
  PriAggregate = '' + (sPriAggregate.selectedIndex - 1);
  SecFormat = '' + (sSecFormat.selectedIndex);
  SecAggregate = '' + (sSecAggregate.selectedIndex - 1);
  if (sSecPoint.selectedIndex > 0)
  {
	var arr = sSecPoint.options[sSecPoint.selectedIndex].value.split(",");
    	SecPoint = '' + arr[0];
  }
  else
    SecPoint = -1;
  if (cLockAxes.checked)
    LockAxes = 'on';
  else
    LockAxes = 'off';

  // Remove zoom params
  Lmin = 0;
  Lmax = 0;
  Rmin = 0;
  Rmax = 0;
  zSdt = 0;
  zFdt = 0;
  UseZoomParams = 0;

  // Update plot
  UpdatePlot(extitle);
}

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(extitle);
}

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();
  var Start = new Date();
  Start.setDate(Start.getDate() - 1); 
  var edtSDate = findDOM('sdate');
  var edtFDate = findDOM('fdate');
  var edtSTime = findDOM('stime');
  var edtFTime = findDOM('ftime');

  edtFDate.value = PadZero(End.getDate()) + '/' + PadZero(End.getMonth() + 1) + '/' + End.getFullYear();
  edtSDate.value = PadZero(Start.getDate()) + '/' + PadZero(Start.getMonth() + 1) + '/' + Start.getFullYear();
  edtFTime.value = PadZero(End.getHours()) + ':' + PadZero(End.getMinutes());
  edtSTime.value = PadZero(Start.getHours()) + ':' + PadZero(Start.getMinutes());
}

function ToggleDataPane(T,i)
{
  var P = findDOM('Plot');
  var S = findDOM('Samples');
  var X = findDOM('XSection');

  if (T != CurTab)
  {
    var I = findDOM('Tab0');
    I.src = 'images/graph_off.gif';
    I = findDOM('Tab1');
    I.src = 'images/samples_off.gif';
    if (XSectionAvailable == 1)
    {
      I = findDOM('Tab2');
      I.src = 'images/xsection_off.gif';
    }

    P.style.display = 'none';
    X.style.display = 'none';
    S.style.display = 'none';    	
 
    if (T == 0)
    {
      i.src = 'images/graph_on.gif';
      P.style.display = 'inline';
    }
    else if (T == 1)
    {
      i.src = 'images/samples_on.gif';
      S.style.display = 'inline';
    }
    else if (T == 2)
    {
      i.src = 'images/xSection_on.gif';
      X.style.display = 'inline';
    }
    CurTab = T;
  }
}

function UpdateSecondary()
{
	var sp = findDOM("SecPoint");
	var sf = findDOM("SecFormat");
	var sa = findDOM("SecAggregate");
	sf.selectedIndex = sp.options[sp.selectedIndex].value.split(",")[1];
	sa.selectedIndex = sp.options[sp.selectedIndex].value.split(",")[2];
	if (sa.selectedIndex > 0)
		sa.selectedIndex += 1;
}
