
var millis_in_6_months = 15984000000;
var millis_in_3_months =  7948800000;
var millis_in_7_days =     604800000;
var millis_in_3_days =     259200000;

var db_data = null
var begin_dateCtl = null;
var end_dateCtl = null;
var stationCtl;
var graphic_imgCtl;
var diff_imgCtl;
var begin_dateCtl;
var end_dateCtl;
var unitsCtl;
var datumCtl;
var err_msg_boxCtl = null;
var current_station = null;
var markers = new Array();
var stevens_marker;
var make_php_unique = 1;
var old_param = "";

function show(args) {
	var str;
	for (i = 0; i< arguments.length; i++) {
		str += ', ' + arguments[i];
	}
	alert(str);
}

function $(elem) {
	return document.getElementById(elem);
}


function on_load() {

	var check_db_url = "http://hudson.dl.stevens-tech.edu/cgi-bin/db_up.pl";
	ajax_request(check_db_url,"db=atlas");
	if (db_data.status != 'OK') {
		alert('The database server is currently unavailable. Please try again in 15 minutes.');
		return;
	}
	
      Zapatec.Calendar.setup({
        weekNumbers       : false,
        showOthers        : true,
        electric          : false,
        inputField        : "begin",
        button            : "begin_button",
        ifFormat          : "%Y-%m-%d",
		  daFormat          : "%Y-%m-%d" });

      Zapatec.Calendar.setup({
        weekNumbers       : false,
        showOthers        : true,
        electric          : false,
        inputField        : "end",
        button            : "end_button",
        ifFormat          : "%Y-%m-%d",
		  daFormat          : "%Y-%m/%d" });

	set_banner_hide_switch(false); //used to control sliding up over banner
	banner_load();
	
	var end_date = new Date();
	var three_days_ago = end_date.getTime() - 259200000;
	var one_day_ago = end_date.getTime() - 86400000;
	var one_day_ahead = end_date.getTime() + 86400000;
	var start_date = new Date(one_day_ago);
	var end_date = new Date(one_day_ahead);
	begin_dateCtl = $('begin');
	end_dateCtl = $('end');
	begin_dateCtl.value = formatDate(start_date,'yyyy-MM-dd');
	end_dateCtl.value = formatDate(end_date,'yyyy-MM-dd');

	graphic_imgCtl=$('graphic_img');
	diff_imgCtl=$('difference_img');
	err_msg_boxCtl = $('error_msg_box');

	stationCtl = $('station');
	unitsCtl=$('units'); 
	datumCtl=$('datum'); 
	datumCtl.selectedIndex = 2;

	var station = gup('station');
	station = station || 'STCPBY1';
	loadStations(station);
	plot_image(station);
}

function change_elem_display(elem, display) {
	var x = typeof(elem) == 'object' ? elem : $(elem);
	x.style.display = display;
	x.style.zIndex = 12;
}

function is_date_bad(input) { //meaning invalid or too early or late

	var msg = null;
	if (! isDate(input.value,'yyyy-MM-dd')) {
			bad_date = true;
			msg = 'Highlighted dates are not valid in form YYYY-MM-DD';
			input.style.color='#ffffff';
			input.style.backgroundColor = '#801143';
			return msg;
	}

	var date_in_millis = getDateFromFormat(input.value,'yyyy-MM-dd');
	if (date_in_millis > ((new Date).getTime() + millis_in_3_days)) {
			msg = 'Dates may not be more than 3 days in the future';
			input.style.color='#ffffff';
			input.style.backgroundColor = '#801143';
			return msg;
	}
	
	if (compareDates('2006-01-01','yyyy-MM-dd', input.value, 'yyyy-MM-dd')) {
			msg = 'Dates prior to the year 2006 are not valid';
			input.style.color='#ffffff';
			input.style.backgroundColor = '#801143';
			return msg;
	}
	input.style.backgroundColor = '#ffffff';
	input.style.color = '#000099';
	return null;
	
}


function check_date(input) {
	var msg = null;
	input.value = input.value.replace(/ /g,''); 

	msg = is_date_bad(input);

	if (msg) show_error(msg);
	else hide_error();

	return false;
}

function plot_button() {
	check_dates_and_act('plot');
}

function check_dates_and_act(action) {
	var time_period_exceeded = false;
	var error_msg;

	if ( is_date_bad(end_dateCtl) || is_date_bad(begin_dateCtl) ) {
		 show_error( 'There are problems with one or both of the dates');
		 return  null;
	}
	if (compareDates(begin_dateCtl.value,'yyyy-MM-dd', end_dateCtl.value, 'yyyy-MM-dd')) {
		show_error('The end date is earlier than the start date');
		return null;
	}
	
	var period_in_millis = getDateFromFormat(end_dateCtl.value,'yyyy-MM-dd') -
								getDateFromFormat(begin_dateCtl.value,'yyyy-MM-dd');
	if (action == 'plot') {
		if (period_in_millis > millis_in_3_months){
			error_msg = "Time periods for plots are limited to 3 months";
			time_period_exceeded = true;
		}
	}
	else if (period_in_millis > millis_in_6_months){
			error_msg = "Data may be downloaded for up to 6 months per request";
			time_period_exceeded = true;
	}
	if (time_period_exceeded) {
		show_error(error_msg);
		return null;
	}

	hide_error();
	change_elem_display('help_box', 'none');
	
	action == 'plot' ? plot_image() :query_data();
}
		
function clear_drop_down(ctl) {
	for (var i = ctl.options.length-1; i >= 0; i--) {
		ctl.options[i] = null;
	}
}

function loadStations(station) {
	clear_drop_down(stationCtl);
	stationCtl.selectedIndex = 0;
	for (var i = 0; i < presentSources.length; i++) {
		var s = presentSources[i];
		stationCtl.options[i] = new Option(s.title, s.did);
		stationCtl.options[i].className = 'mydrop';
		if (station == s.did) {
			stationCtl.selectedIndex = i;
		}
	}
}


function plot_image() {
	var s = presentSources[stationCtl.selectedIndex];
	var id = stationCtl.value;
	var start=begin_dateCtl.value;
	var end=end_dateCtl.value;
	var units=unitsCtl.value;
	var datum = datumCtl.value;
	var time = $('time').value;
	var pid = s.pid;
	var datum_offset = datum + '_offset';
	var offset = s[datum_offset];
	var offset_name = datumCtl.options[datumCtl.selectedIndex].text;
	var diff = s.diff - offset;
	var mid = s.mid;
	var mdiff = s.mdiff - offset;
	var did = s.did;
	var blowout_level = s.blowout_level;
	var near_flood_level = s.near_flood_level;
	var minor_flood_level = s.minor_flood_level;
	var moderate_flood_level = s.moderate_flood_level;
	var major_flood_level = s.major_flood_level;
	var location = s.title;
	var tide_diff = s.ext_tide_shift - offset;
	 

	graphic_imgCtl.src='../images/transparent.jpg';

	graphic_imgCtl.src='new_plot.php?&id='+id+'&pid='+pid+'&did='+did+'&diff='+diff+'&mid='+mid+'&mdiff='+mdiff+'&units='+units+'&start='+start+'&end='+end+'&location='+location+'&time='+time+'&blowout_level='+blowout_level+'&near_flood_level='+near_flood_level+'&minor_flood_level='+minor_flood_level+'&moderate_flood_level='+moderate_flood_level+'&major_flood_level='+major_flood_level+'&offset='+offset_name+'&off='+offset+'&tide_diff='+tide_diff;

	diff_imgCtl.src='../images/transparent.jpg';
	diff_imgCtl.src='plot_diff.php?&id='+id+'&pid='+pid+'&did='+did+'&diff='+diff+'&mid='+mid+'&mdiff='+mdiff+'&units='+units+'&start='+start+'&end='+end+'&location='+location+'&time='+time+'&off='+offset+'&tide_diff='+tide_diff;
}

function get_url_param( name ){  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if (results == null )    return "";
  else return results[1];
}

function query_data() {
	var s = presentSources[stationCtl.selectedIndex];
	var id = stationCtl.value;
	var start=begin_dateCtl.value;
	var end=end_dateCtl.value;
	var units=unitsCtl.value;
	var datum = datumCtl.value;
	var time = $('time').value;
	var pid = s.pid;
	var datum_offset = datum + '_offset';
	var offset = s[datum_offset];
	var offset_name = datumCtl.options[datumCtl.selectedIndex].text;
	var diff = s.diff - offset;
	var mid = s.mid;
	var mdiff = s.mdiff - offset;
	var location = s.title;
	var did = s.did;
	var time=$('time').value;
	var url='query.php?diff='+diff+'&type=ELEV&did='+did+'&units='+units+'&start='+start+'&end='+end+'&location='+location+'&parameter=Elevation relative to ' +'&offset='+offset_name+'&off='+offset+'&time='+time+'/data.xsl';
	var x = $('query');
	x.href=url;
}


function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}
function ajax_request(url, params) {
	var requester = new XMLHttpRequest();
	var SYNC = false;
	requester.open("POST", url, SYNC);
	requester.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	requester.setRequestHeader('Content-length', params.length);
	requester.setRequestHeader('Connection', 'close');
	requester.send(params);
	var response = requester.responseText;
//	show(url, params);
	eval(response);
}

