// ------------------------------------------------------------ //
// 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;


function getQueryVariable(variable) { 
  var query = window.location.search.substring(1); 
  var vars = query.split("&"); 
  for (var i=0;i<vars.length;i++) { 
    var pair = vars[i].split("="); 
    if (pair[0] == variable) { 
      return pair[1]; 
    } 
  } 
} 


var point = getQueryVariable("catchment")  ;
if (point != "17") 
{
var PriFormat='2';;
}
else
{
var PriFormat='0';;
}


//document.write(point);


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()
{
  var edtSYear = findDOM('syear');
  var edtSMonth = findDOM('smonth');
  var edtSDay = findDOM('sday');
  var edtSHour = findDOM('shour'); 
  var edtSMinute = findDOM('sminute');
  var edtFYear = findDOM('fyear');
  var edtFMonth = findDOM('fmonth');
  var edtFDay = findDOM('fday');
  var edtFHour = findDOM('fhour');
  var edtFMinute = findDOM('fminute');
  
  Sdt = escape(edtSDay.value + '/' + edtSMonth.value + '/' + edtSYear.value + ' ' + edtSHour.value + ':' + edtSMinute.value);
  Fdt = escape(edtFDay.value + '/' + edtFMonth.value + '/' + edtFYear.value + ' ' + edtFHour.value + ':' + edtFMinute.value);

  trType = '2';

  // Hide form fields ....
  HideCustomTimeRange();

  UpdatePlot();
}  

function ShowSummary() {
	document.getElementById(objectId).style.top = event.y + 10;
	document.getElementById(objectId).style.left = event.x;
	document.getElementById(objectId).style.visibility = "visible";
}

function HideSummary() {document.getElementById('summary').style.visibility = "hidden";}


function ShowCustomTimeRange() 
{
  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 + event.clientY + 15;
  divCustomTimeRange.style.left = scrollX + event.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));
	}
	if (document.all)
	{
		return (document.getElementById(objectId));
	}




}

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)
{
	imgd = findDOM(imgx);
	imgPlot = findDOM('Plot');

	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 + event.clientY - 1;
		imgd.style.left = scrollX + event.clientX - 1;
		imgd.style.visibility = "visible";
		xs = event.x;
		ys = event.y;
		x0 = event.offsetX;
		y0 = event.offsetY;
		Zooming = 1;
	}
	else
	{
		imgd.style.visibility = "hidden";
		Zooming = 0;

		var x1 = event.offsetX;
		var y1 = event.offsetY;

		// 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 x1 = parseFloat(x0);
			var x2 = parseFloat(event.offsetX);
			var y1 = parseFloat(y0);
			var y2 = parseFloat(event.offsetY);
			
			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)
{
	if (Zooming == 1)
	{
		imgd = findDOM(imgx);

		imgd.height = event.y - ys - 1;
		imgd.width = event.x - 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];

  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;
  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/download' in the plot URL and assign to the download link
    var NewDownloadURL = NewSrc;
    var rExp = /plot/gi;
    NewDownloadURL = NewDownloadURL.replace(rExp,"samples/download");
    imgSampleDownload.href = NewDownloadURL;
  }
}

function ApplyPlotOptions()
{	
  // 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)
    SecPoint = '' + sSecPoint.options(sSecPoint.selectedIndex).value;
  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();
}

function SelectTimeRange(Type)
{
  // Set parameter
  trType = Type

  // Remove zoom params
  Lmin = 0;
  Lmax = 0;
  Rmin = 0;
  Rmax = 0;
  zSdt = 0;
  zFdt = 0;
  UseZoomParams = 0;

  // Update plot
  UpdatePlot();
  // update custom range selectors
  UpdateDateCombos(Type); 
}

function UpdateDateCombos(Type)
{
  var currentDate = new Date();
  var startday;
  var startmonth;
  var startyear;
  var starthour;
  var startminute;
  var endday;
  var endmonth;
  var endyear;
  var endhour;
  var endminute;
  if (Type == 3)
  {
     startday = currentDate.getDate() - 1;
     startmonth = currentDate.getMonth();
     startyear = currentDate.getFullYear();
     starthour = 0;
     startminute = 0;
     endday = currentDate.getDate() - 1;
     endmonth = currentDate.getMonth();
     endyear = currentDate.getFullYear();
     endHour = currentDate.getHours();
     endMinute = currentDate.getMinutes();

  }
  else if (Type == 4)
  {
     var difference = currentDate.getDay();
     var startDate = new Date();
     startDate.setDate(currentDate.getDate() - difference);
     startday = startDate.getDate();
     startmonth = startDate.getMonth();
     startyear = startDate.getFullYear();
     starthour = 0;
     startminute = 0;
     endday = currentDate.getDate() - 1;
     endmonth = currentDate.getMonth();
     endyear = currentDate.getFullYear();
     endHour = currentDate.getHours();
     endMinute = currentDate.getMinutes();
  }
  else if (Type == 5)
  {
     var startDate= new Date(); 
     startDate.setDate(1);
     startday = startDate.getDate() - 1;
     startmonth = startDate.getMonth();
     startyear = startDate.getFullYear();
     starthour = 0;
     startminute = 0;
     endday = currentDate.getDate() - 1;
     endmonth = currentDate.getMonth();
     endyear = currentDate.getFullYear();
     endHour = currentDate.getHours();
     endMinute = currentDate.getMinutes();
  }
  else if (Type == 7)
  {
     prevDate = new Date();
     prevDate.setDate(currentDate.getDate() - 1);
     startday = prevDate.getDate() - 1;
     startmonth = prevDate.getMonth();
     startyear = prevDate.getFullYear();
     starthour = 0;
     startminute = 0;
     endday = currentDate.getDate() - 1;
     endmonth = prevDate.getMonth();
     endyear = prevDate.getFullYear();
     endHour = 0;
     endMinute = 0;
  }
  else if (Type == 8)
  {
     var difference = currentDate.getDay();
     var endDate = new Date();
     endDate.setDate(currentDate.getDate() - difference);
     var startDate = new Date();
     startDate.setDate(endDate.getDate() - 7);
     startday = startDate.getDate();
     startmonth = startDate.getMonth();
     startyear = startDate.getFullYear();
     starthour = 0;
     startminute = 0;
     endday = endDate.getDate();
     endmonth = endDate.getMonth();
     endyear = endDate.getFullYear();
     endHour = 0;
     endMinute = 0;
  }
  else if (Type == 9)
  { 
     var endDate = new Date();
     endDate.setDate(1); //the first
     var startDate = new Date();
     startDate.setDate(-2); //go to previous month
     startDate.setDate(1); // the first 
     startday = startDate.getDate() - 1;
     startmonth = startDate.getMonth();
     startyear = startDate.getFullYear();
     starthour = 0;
     startminute = 0;
     endday = endDate.getDate() - 1;
     endmonth = endDate.getMonth();
     endyear = endDate.getFullYear();
     endHour = 0;
     endMinute = 0;
  }
  var sDay = findDOM("sday");
  var sMonth = findDOM("smonth");
  var sYear = findDOM("syear");
  var sHour = findDOM("shour");
  var sMinute = findDOM("sminute");
  var fDay = findDOM("fday");
  var fMonth = findDOM("fmonth");
  var fYear = findDOM("fyear");
  var fHour = findDOM("fhour");
  var fMinute = findDOM("fminute");
  sDay.selectedIndex = startday;
  sMonth.selectedIndex = startmonth;
  sYear.selectedIndex = startyear - sYear.options[0].value;
  sHour.selectedIndex = starthour;
  sMinute.selectedIndex = startminute;
  fDay.selectedIndex =endday;
  fMonth.selectedIndex = endmonth;
  fYear.selectedIndex = endyear - fYear.options[0].value;
  fHour.selectedIndex = endHour;
  fMinute.selectedIndex = endMinute;     
}

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 == SecPoint)
	//  if (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 edtSDate = findDOM('sdate');
  var edtFDate = findDOM('fdate');
  var edtSTime = findDOM('stime');
  var edtFTime = findDOM('ftime');

  edtFDate.value = PadZero(End.getDate()) + '/' + PadZero(End.getMonth()) + '/' + End.getFullYear();
  edtSDate.value = PadZero(Start.getDate()) + '/' + PadZero(Start.getMonth()) + '/' + 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 DownloadSamples(point)
{
  var dlurl = '/riverlevelsandrainfall/cgi-bin/hydwebserver.cgi/points/samples/download?trType=' + trType + '&trParam=' + trParam + '&point=' + point + '&sdt=' + Sdt + '&fdt=' + Fdt;
   window.location = dlurl;
}

function ApplyPlotOptionsEW()

{           

  // Get objects

  var sPriFormat = findDOM('PriFormat');

  var sPriAggregate = findDOM('PriAggregate');

 

  // Get new plot options

   

 // PriFormat = '' + (sPriFormat.selectedIndex);

 // PriAggregate = '' + (sPriAggregate.selectedIndex - 1);

  PriFormat = '' + sPriFormat[sPriFormat.selectedIndex].value;

  PriAggregate = '' + sPriAggregate[sPriAggregate.selectedIndex].value;


  // Remove zoom params

  Lmin = 0;

  Lmax = 0;

  Rmin = 0;

  Rmax = 0;

  zSdt = 0;

  zFdt = 0;

  UseZoomParams = 0;

 

  // Update plot

  UpdatePlot();

}


