//  hotdogs.js
//
//  JavaScript functions used by the main HOT-DOGS forms to help do
//  error checking


// Create function group bounds array (for time-series modules)
funcrng = new Array(3);
funcrng[0] = new Array(0, 5000);
funcrng[1] = new Array(0, 30);
funcrng[2] = new Array(22, 28);


//  Function to make sure the given value is within a valid range 
function CheckVal(value, sval, eval, str) {

  var val = parseInt(value);
    
  // check for missing or invalid value  
  if (!val && val != 0) {
    alert("missing or invalid " + str);
    return false;
  }
  
  // do range checking
  else if (val < sval || val > eval) {
    alert(str + " must be between " + sval + " & " + eval);
    return false;
  }
  return true;
}


//  Function to make sure the given value(s) is/are within a valid range
function CheckRng(value, sval, eval, str) {

  if (value.length != 0) {
    var idx = value.indexOf("-");
   
    // single value
    if (idx == -1) {
      var val = parseInt(value);
    
      // check for invalid value
      if (!val) {
        alert("invalid " + str);
        return false;
      }
      
      // do range checking
      else if (val < sval || val > eval) {
        alert(str + " must be between " + sval + " & " + eval);
        return false;
      }
    }
    
    // range of values
    else {
      var srng = parseInt(value.substr(0,idx));
      var erng = parseInt(value.substr(idx+1));
      
      // check for invalid value(s)
      if (!srng || !erng) {
        alert("invalid " + str + "(s)");
        return false;
      }
      
      // do range checking
      else if ((srng < sval || srng > eval) || (erng < sval || erng > eval)) {
        alert(str + "(s) must be between " + sval + " & " + eval);
        return false;
      }
    }
  }
  return true;
}


//  Function to make sure the given cruise(s)/year(s) is/are within a valid range
function CheckCrsYr(value, scrs, ecrs, syr, eyr, str) {

  if (value.length != 0) {
    var idx = value.indexOf("-");
    
    // single value
    if (idx == -1) {
      var val = parseInt(value);
      
      // check for invalid value
      if (!val) {
        alert("invalid " + str);
        return false;
      }
      
      // do range checking
      else if (val < scrs || (val > ecrs && val < syr) || val > eyr) {
        alert(str + " must be between " + scrs + " & " + ecrs + "; year must be between " + syr + " & " + eyr);
        return false;
      }
    }
    
    // range of values
    else {
      var sval = parseInt(value.substr(0,idx));
      var eval = parseInt(value.substr(idx+1));
      
      // check for invalid value(s)
      if (!sval || !eval) {
        alert("invalid cruise #(s)");
        return false;
      }
      
      // do range checking
      else if ((sval < scrs || (sval > ecrs && sval < syr) || sval > eyr) ||
               (eval < scrs || (eval > ecrs && eval < syr) || eval > eyr)) {
        alert(str + "(s) must be between " + scrs + " & " + ecrs + "; year(s) must be between " + syr + " & " + eyr);
        return false;
      }
      
      // check for mix of cruise & year ranges
      else if ((sval >= scrs && sval <= ecrs && eval >= syr && eval <= eyr) ||
               (sval >= syr && sval <= eyr && eval >= scrs && eval <= ecrs)) {
        alert("you appear to be mixing cruise & year #s");
        return false;
      
      }
    }
  }
  return true;
}


// Function to make sure the given value/range is valid
// (used only in time-series modules)

function CheckValRng(value, funcgrp, funcval) {

  // ignore value/range if using MLD
  if (funcgrp.selectedIndex == 3) {
    return true;
  }

  // check for missing value
  if (value.length == 0) {
    alert("missing value/range");
    return false;
  }
  else {  
    var idx = value.indexOf("-");
    
    // single value
    if (idx == -1) {
      var val = parseFloat(value);
      
      // check for invalid value
      if (isNaN(val)) {
        alert("invalid value/range");
        return false;
      }
      
      // if not "Horizon", make sure range given
      if (funcval == 0 || funcval == 1) {
        alert("integral and mean must have a range of values")
        return false;
      }
      
      // make sure value within valid range
      var funcidx = funcgrp.selectedIndex;
      if (value < funcrng[funcidx][0] || value > funcrng[funcidx][1]) {
        alert(funcgrp.value + " must be between " + funcrng[funcidx][0] + " & " + funcrng[funcidx][1]);
        return false;
      }
      
    }
    
    // range of values
    else {
      var sval = parseFloat(value.substr(0,idx));
      var eval = parseFloat(value.substr(idx+1));
      
      // check for invalid value(s)
      if (isNaN(sval) || isNaN(eval)) {
        alert("invalid value(s)/range(s)");
        return false;
      }
      
      // if "Horizon", make sure single value given
      if (funcval == 2) {
        alert("horizon must be a single value")
        return false;
      }
      
      // make sure values within valid range
      var funcidx = funcgrp.selectedIndex;
      if (sval < funcrng[funcidx][0] || sval > funcrng[funcidx][1] ||
          eval < funcrng[funcidx][0] || eval > funcrng[funcidx][1]) {
        alert(funcgrp.value + " must be between " + funcrng[funcidx][0] + " & " + funcrng[funcidx][1]);
        return false;
      }

    }
  }
  return true;
}


// Function to make sure the given range is valid
// (used only in contour modules)

function CheckValRng2(value, yaxis) {

  // check for missing value
  if (value.length == 0) {
    alert("missing range");
    return false;
  }
  else {  
    var idx = value.indexOf("-");
    
    // single value
    if (idx == -1) {
      alert("invalid range")
      return false;
    }
          
    // range of values
    else {
      var sval = parseFloat(value.substr(0,idx));
      var eval = parseFloat(value.substr(idx+1));
      
      // check for invalid value(s)
      if (isNaN(sval) || isNaN(eval)) {
        alert("invalid range(s)");
        return false;
      }
      
      // make sure values within valid range
      var yidx = yaxis.selectedIndex;
      if (sval < funcrng[yidx][0] || sval > funcrng[yidx][1] ||
          eval < funcrng[yidx][0] || eval > funcrng[yidx][1]) {
        alert(yaxis.value + " must be between " + funcrng[yidx][0] + " & " + funcrng[yidx][1]);
        return false;
      }

    }
  }
  return true;
}


// Function to make sure the given value/range is valid
// (used only in PRR time-series module)

function CheckValRng3(value, funcval) {

  // check for missing value
  if (value.length == 0) {
    alert("missing value/range");
    return false;
  }
  else {  
    var idx = value.indexOf("-");
    
    // single value
    if (idx == -1) {
      var val = parseFloat(value);
      
      // check for invalid value
      if (isNaN(val)) {
        alert("invalid value/range");
        return false;
      }
      
      // if not "Horizon", make sure range given
      if (funcval == 0) {
        alert("mean must have a range of values")
        return false;
      }
            
    }
    
    // range of values
    else {
      var sval = parseFloat(value.substr(0,idx));
      var eval = parseFloat(value.substr(idx+1));
      
      // check for invalid value(s)
      if (isNaN(sval) || isNaN(eval)) {
        alert("invalid value(s)/range(s)");
        return false;
      }
      
      // if "Horizon", make sure single value given
      if (funcval == 1 || funcval == 2) {
        alert("horizon must be a single value")
        return false;
      }
     
    }
  }
  return true;
}

