function NewWindow(URL, width,height,toolbar) {
  var ItsTheWindow;
  TheWindow = window.open(URL,"plot","status,height="+height+",width="+width+",scrollbars=yes,resizable=yes,toolbar="+toolbar);
}

function disableIt(field,units){
  var is_checked = field.checked;
  if (is_checked == true){
    units.disabled = false;
  } else {
    units.disabled = true;
  }
}

// Only script specific to this form goes here.
// General-purpose routines are in a separate file.
function validateOnSubmit() {
  var elem;
  var errs=0;
  // execute all element validations in reverse order, so focus gets
  // set to the first one in error.
  if (!validateDate       (document.forms.demo.sdate, 'inf_sdate', true)) errs += 1; 
  if (!validateDate       (document.forms.demo.edate, 'inf_edate', true)) errs += 1; 
  if (!validatePresent    (document.forms.demo.id,  'inf_id'))        errs += 1; 
  if (!validateCheckBox   (document.forms.demo.elements['parameter[]'],  'inf_parameter'))        errs += 1; 
  if (!validateSDateEDate (document.forms.demo.sdate,document.forms.demo.edate, 'inf_edate', true)) errs += 1; 

  if (errs>1)  alert('There are fields which need correction before sending');
  if (errs==1) alert('There is a field which needs correction before sending');

  return (errs==0);
};

// ----------------------------------------------------------------------
// Javascript form validation routines.
// Author: Stephen Poley
//
// Simple routines to quickly pick up obvious typos.
// All validation routines return true if executed by an older browser:
// in this case validation must be left to the server.
//
// Update Aug 2004: have tested that IE 5.0 and IE 5.5 both support DOM model
// sufficiently well, so innerHTML option removed (redundant).
// ----------------------------------------------------------------------

var nbsp = 160;    // non-breaking space char
var node_text = 3; // DOM text node-type
emptyString = /^\s*$/

// -----------------------------------------
//                  trim
// Trim leading/trailing whitespace off string
// -----------------------------------------

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '')
};

// -----------------------------------------
//                  msg
// Display warn/error message in HTML element
// commonCheck routine must have previously been called
// -----------------------------------------

function msg(fld,     // id of element to display message in
             msgtype, // class to give element ("warn" or "error")
             message) // string to display
{
  // setting an empty string can give problems if later set to a 
  // non-empty string, so ensure a space present. (For Mozilla and Opera one could 
  // simply use a space, but IE demands something more, like a non-breaking space.)
  var dispmessage;
  if (emptyString.test(message)) 
    dispmessage = String.fromCharCode(nbsp);    
  else  
    dispmessage = message;

  var elem = document.getElementById(fld);
  elem.firstChild.nodeValue = dispmessage;  
  
  elem.className = msgtype;
};

// -----------------------------------------
//            commonCheck
// Common code for all validation routines to:
// (a) check for older / less-equipped browsers
// (b) check if empty fields are required
// Returns true (validation passed), 
//         false (validation failed) or 
//         proceed (don't know yet)
// -----------------------------------------

var proceed = 2;  

function commonCheck    (vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         reqd)   // true if required
{
  if (!document.getElementById) 
    return true;  // not available on this browser - leave validation to the server
  var elem = document.getElementById(ifld);
  if (!elem.firstChild)
    return true;  // not available on this browser 
  if (elem.firstChild.nodeType != node_text)
    return true;  // ifld is wrong type of node  

  if (emptyString.test(vfld.value)) {
    if (reqd) {
      msg (ifld, "error", "ERROR: required");  
      vfld.focus();
      return false;
    }
    else {
      msg (ifld, "ok", "Accpeted");   // OK
      return true;  
    }
  }
  return proceed;
}




// -----------------------------------------
//            validatePresent
// Validate if something has been entered
// Returns true if so 
// -----------------------------------------

function validatePresent(vfld,   // element to be validated
                         ifld )  // id of element to receive info/error msg
{
  var stat = commonCheck (vfld, ifld, true);
  if (stat != proceed) return stat;

  msg (ifld, "warn", "");  
  return true;
};

function validateCheckBox(vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         reqd)   // true if required
{
//  var stat = commonCheck (vfld, ifld, reqd);
//  if (stat != proceed) return stat;

var objCheckGroup=vfld; //pointer to group of checkboxes
var counter=0; //how many checkboxes checked?

//iterate through the checkboxes in the group, count how many are checked:
for (var i=0; i<objCheckGroup.length; i++)
counter += (objCheckGroup[i].checked)?1:0;

//verify at least one was checked:
if (counter == 0)
{
   msg (ifld, "error", "ERROR: Select a parameter(s)");
    return false;
}
return true;
}
// -----------------------------------------
//             validateDate
// Validate Date
// Returns true if OK 
// -----------------------------------------

function validateDate   (vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         reqd)   // true if required
{
  var stat = commonCheck (vfld, ifld, reqd);
  if (stat != proceed) return stat;

  var tfld = trim(vfld.value);
  var dateRE = /^(\d{4}?-\d\d-\d\d)|(\d{8})|(\d{4}?\/\d\d\/\d\d)$/
  if (!dateRE.test(tfld)) {
    msg (ifld, "error", "ERROR: not a valid date (YYYY-MM-DD)");
    vfld.focus();
    return false;
  } 
  tfld=tfld.replace(/-|\//g, "");
  if (tfld < 20050831){
    msg (ifld, "error", "ERROR: Check Period of Record");
    return false;
  }
    if (tfld > 20051002){
    msg (ifld, "error", "ERROR: Check Period of Record");
    return false;
  }

    msg (ifld, "ok", "Date Accepted");
  return true;
}

function validateSDateEDate   (vfldsdate,
                               vfldedate,  // element to be validated
                               ifld,   // id of element to receive info/error msg
                                reqd)   // true if required
{
  var tfldsdate = trim(vfldsdate.value);
  var tfldedate = trim(vfldedate.value);
  if (tfldsdate>tfldedate){
    msg (ifld, "error", "ERROR: Start Date > then End Date");
    return false;
  }
  return true;
}
