function numericValue(element)
{
    element.value = getNumericValue(element.value, false, false);
}

function doubleValue(element)
{
    element.value = getNumericValue(element.value, true, false);
}

function currencyValue(element)
{
    doubleValue(element);
}

function setCurrencyValue(element)
{
    element.value = getCurrencyValue(element.value, false);
}

function signedCurrencyValue(element)
{
    element.value = getCurrencyValue(element.value, true);
}

function getCurrencyValue(original, negOk)
{
    var newvalue = getNumericValue(original, true, negOk);
    var dotIndex = newvalue.indexOf(".");
    if (dotIndex >= 0) { newvalue = newvalue.substring(0, dotIndex + 3); }

    return newvalue;
}

function getNumericValue(original, fpOk, negOk)
{
    var newvalue = "";

    var letter;
    var i;
    var dotFound = false;

    for (i = 0; i < original.length; i++)
    {
        letter = original.charAt(i);
        if (letter.match(/[0-9]/)) { newvalue += letter; }
        else if (letter == "." && !dotFound && fpOk) { newvalue += letter; dotFound = true; }
        else if (i == 0 && letter == "-" && negOk) { newvalue += letter; }
    }

    if (newvalue == "." || newvalue == "-") { newvalue = ""; }

    return newvalue;
}

function isSeparator(value)
{
  return (value == " " || value == "/" || value == "." || value == "-");
}

function dateValue(element)
{
  var original = element.value;

  if (original.length == 0 || original == "0") return;

  var newvalue = "";
  var day = "";
  var month = "";
  var year = "";

  var letter;
  var sepIdx = 0;
  var i;
  for (i = 0; i < original.length; i++)
  {
    letter = original.charAt(i);
    if (isSeparator(letter))
    {
      sepIdx++;
    }
    else
    {
      if (letter >= 0)
      {
        if (sepIdx == 0) { month += letter; } else if (sepIdx == 1) { day += letter; } else if (sepIdx == 2) { year += letter; }
      }
    }
  }

  var d = new Date();
  if (month.length == 0 || month == "0" || month > 12) { month = d.getMonth() + 1; }
  if (year.length == 0 || year == "0" || (year.length != 4 && year.length != 2) || year < 1900 || year > 2100)
  {
    if (year.length == 0 || year == "0")
    { 
      year = d.getYear() + "";
    }
    // netscape/mozilla report getYear for 2001 as 101, this breaks in year 2100
    if (year.length == 3)
      year = "20" + year.substring(1,3);
  }

  // make 4 digit year, this breaks in year 2100
  if (year.length == 2)
    year = "20" + year;

  var today = d.getDate();
  if (day.length == 0 || day == "0" || day > 31) { day = today; }

  if(day == 31)
  {
        if(month == 4 || month == 6 || month ==  9 || month == 11)
        {
            if(today < 31)
                day = today;
            else
                day = 30;
        }
  }

  if(day > 28 && month == 2)
  {
        var changeDate = true;
        //The Gregorian Leap Year Rules: every year divisible by 4 is leap, except if it is divisible by 100 but not divisible by 400
        if (day == 29 &&  (year % 4 == 0)) // will not work in 2100
        {
            changeDate = false;
        }

        if(changeDate)
        {
            if(year % 4 == 0)
            {
                if(today < 30)
                    day = today;
                else
                    day = 29;
            }
            else
            {
                if(today < 29)
                    day = today;
                else
                    day = 28;
            }
        }
  }

  element.value = month + "/" + day + "/" + year;
}

function checkDate(element)
{
    dateValue(element);
    var oneDay = 1000*60*60*24;
    var futureLimit = oneDay*50;
    var pastLimit = oneDay*30;
    var today = new Date();
    var checkDate = new Date(element.value);
    var difference = checkDate - today;

    if (difference > 0)
    {
        if (difference > futureLimit)
            alert (checkDate+"\nLooks like an incorrect date.\nMore than 50 days from now.")
    }
    else
    {
        if (difference < pastLimit*-1)
            alert (checkDate+"\nLooks like an incorrect date.\nMore than 30 days ago.")
    }
}

function validateZipCode(element)
{
    var original = element.value;
    var newvalue = "";

    var letter;
    var i;
    for (i = 0; i < original.length; i++)
    {
        letter = original.charAt(i);
        if (letter >= 0)
        {
            newvalue += letter;
        }
    }

    if(newvalue.length != 5)
    {
        alert("Does not appear to be a valid 5 digit zip code.");
    }
 }

function checkInputLength(element, message)
{
   if(element.value.length == 0)
   {
       alert(message);
       return false;
   }
   else
   {
       return true;
   }
}

function validateLen(element, maxSize)
{
   if(element.value.length == 0)
   {
       alert("Entry is missing");
       return false;
   }
   else if(element.value.length > maxSize)
   {
       alert("Entry is too long. Max length: " + maxSize + " characters.");
       return false;
   }
   else
   {
       return true;
   }
}

function checkSite(element, message)
{
   if(element && element.value == "ND")
   {
       alert(message);
       return false;
   }
   else
   {
       return true;
   }
}


function checkInputsLength(formObj, prefix, message)
{
    for (var i=0;i < formObj.length;i++)
    {
        fldObj = formObj.elements[i];
        if (fldObj.type == 'text' && fldObj.name.indexOf(prefix) == 0 && trim(fldObj.value).length == 0)
        {
            alert(message);
            return false;
        }
    }

    return true;
}

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

function validateBoxEntries(box)
{
    if (box.options.length > 0)
    {
        return true;
    }
    else
    {
        alert("Please add samples to appear on report.");
        return false;
    }
}

function validMeasurementLabel(textVolume, boxLabel)
{
    var volume = (textVolume) ? textVolume.value : 0;
    var label = (boxLabel) ? boxLabel.value : "";

    if(volume == 0)
    {
        return true;
    }
    else
    {
        if(label == "N/A")
        {
            alert("Please select an appropriate Unit");
            return false;
        }

         return true;
    }
}

function elementSelected(formObj, controlName, msg)
{
    for (var i=0;i < formObj.length;i++)
   {
      fldObj = formObj.elements[i];
      if (fldObj.type == 'checkbox' && fldObj.name == controlName)
      {
         if(fldObj.checked)
         {
            return true;
         }
      }
   }
   alert(msg);
   return false;
}

function checkNewAnalysisInput(analysisElement, turnaroundElement, locationElement, dueDateElement)
{
   if(analysisElement.value != "-1")
   {
        if(turnaroundElement.value == "-1" || turnaroundElement.value == "")
        {
            alert('Please select new Analysis Turnaround.');
            return false;
        }

        if(dueDateElement.value.length == 0)
        {
            alert('Please enter new Analysis Due Date.');
            return false;
        }

        if(locationElement.value == "ND" || locationElement.value == "-1" || locationElement.value == "")
        {
            alert('Please select new Analysis Site.');
            return false;
        }
    }

    return true;
}

function checkModifyAnalysisInput(analysisElement, turnaroundElement, locationElement, dueDateElement)
{
   if(analysisElement.value == "-1")
   {
        if(turnaroundElement.value != "-1" && turnaroundElement.value != "")
        {
            alert('Please select Analysis to modify.');
            return false;
        }

        if(dueDateElement.value.length > 0)
        {
            alert('Please select Analysis to modify.');
            return false;
        }

        if(locationElement.value != "ND" && locationElement.value != "-1" && locationElement.value != "")
        {
            alert('Please select Analysis to modify.');
            return false;
        }
    }

    return true;
}

