function caps(fo) {
  fo.value = trim(fo.value);
  fo.value = fo.value.substring(0,1).toUpperCase() + fo.value.substring(1,fo.value.length).toLowerCase();
}

function trim(strText) {
    // this will get rid of leading spaces 
    while (strText.substring(0,1) == ' ') 
        strText = strText.substring(1, strText.length);

    // this will get rid of trailing spaces 
    while (strText.substring(strText.length-1,strText.length) == ' ')
        strText = strText.substring(0, strText.length-1);

   return strText;
}

function dollarFormat(n) {
  var s = "" + Math.round(n * 100) / 100
  var i = s.indexOf('.')
  if (i < 0) return s + ".00"
  var t = s.substring(0, i + 1) + s.substring(i + 1, i + 3)
  if (i + 2 == s.length) t += "0"
  return t
}

function isCreditCard(val) {
  if (!isInteger(val))
  {
    return false;
  }
  
  var doubledigit = val.length % 2 == 1 ? false : true;
  var checkdigit = 0;
  var tempdigit;

  for (var i = 0; i < val.length; i++)
  {
	tempdigit = eval(val.charAt(i))
	if (doubledigit)
	{
		tempdigit *= 2;
		checkdigit += (tempdigit % 10);
		if ((tempdigit / 10) >= 1.0)
		{
			checkdigit++;
		}
		doubledigit = false;
	}
	else
	{
		checkdigit += tempdigit;
		doubledigit = true;
	}
  }
  
  return (checkdigit % 10) == 0 ? true : false;
}

function isInteger(value)
{
  var allowableCharacters = "0123456789";
  if (value.length == 0)
  {
	return false;
  }
  else if (value.substr(0,2) == '-0')
  {
	return false;
  }
  else if (value.substr(0,1) == '-' && value.length == 1)
  {
	return false;
  }
  else if (value.substr(0,1) == '-')
  {
	var startPos = 1;
  }
  else
  {
	var startPos = 0;
  }
	
  for (var i = startPos; i < value.length; i++)
  {
	if (allowableCharacters.indexOf(value.charAt(i)) == -1)
	{
	  return false;
	}
  }
	  
  return true;
}

function isNumber(value)
{
  var allowableCharacters = ".0123456789";

  if (value.length == 0)
  {
    return false;
  }
  else if (value == '-0')
  {
    return false;
  }
  else if (value.substr(0,1) == '-' && value.length == 1)
  {
    return false;
  }
  else if (value.substr(0,1) == '-')
  {
    var startPos = 1;
  }
  else
  {
    var startPos = 0;
  }

  for (var i = startPos; i < value.length; i++)
  {
    if (allowableCharacters.indexOf(value.charAt(i)) == -1)
    {
	  return false;
    }
  }
  
  return true;
}

function isEmail(email) {
  var emailReg = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$";
  var regex = new RegExp(emailReg);
  return regex.test(email);
}

function isEmail_old(value)
{
  if (value.indexOf('@') > -1 && value.indexOf('.') > -1)
  {
    return true;
  }
  else
  {
    return false;
  }
}

var daysofmonth   = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var daysofmonthLY = new Array( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    
function y2k(number)
{
  return (number < 1000) ? number + 1900 : number;
}

function to24hour(hr,tm)
{
  if ((tm == 'PM' || tm == 'pm') && hr < 12)
  {
    return Number(hr) + 12;
  }
  else if ((tm == 'AM' || tm == 'am') && hr == 12)
  {
    return 0;
  }
  else
  {
    return hr;
  }
}

function isDate(day,month,year)
{
  // checks if date passed is valid
  // will accept dates in following format:
  // isDate(dd,mm,ccyy), or
  // isDate(dd,mm) - which defaults to the current year, or
  // isDate(dd) - which defaults to the current month and year.
  // Note, if passed the month must be between 1 and 12, and the
  // year in ccyy format.
  // Remember: Date(year,month-1,day,hours,minutes,seconds,milliseconds)

  var today = new Date();
  year = ((!year) ? y2k(today.getYear()):year);
  month = ((!month) ? today.getMonth():month-1);
  if (!day) return false
  var test = new Date(year,month,day);
  if ( (y2k(test.getYear()) == year) &&
       (month == test.getMonth()) &&
       (day == test.getDate()) )
  {
    return true;
  }
  else
  {
    return false
  }
}

function secondsDifference(laterdate,earlierdate)
{
  var difference = laterdate.getTime() - earlierdate.getTime();
  difference = Math.abs(difference);

  var daysDifference = Math.floor(difference/1000/60/60/24);
  difference -= daysDifference*1000*60*60*24
  var hoursDifference = Math.floor(difference/1000/60/60);
  difference -= hoursDifference*1000*60*60
  var minutesDifference = Math.floor(difference/1000/60);
  difference -= minutesDifference*1000*60
  var secondsDifference = Math.floor(difference/1000);
  return secondsDifference;
}

function minutesDifference(laterdate,earlierdate)
{
  var difference = laterdate.getTime() - earlierdate.getTime();
  difference = Math.abs(difference);
  
  var daysDifference = Math.floor(difference/1000/60/60/24);
  difference -= daysDifference*1000*60*60*24
  var hoursDifference = Math.floor(difference/1000/60/60);
  difference -= hoursDifference*1000*60*60
  var minutesDifference = Math.floor(difference/1000/60);
  return minutesDifference;
}

function hoursDifference(laterdate,earlierdate)
{
  var difference = laterdate.getTime() - earlierdate.getTime();
  difference = Math.abs(difference);

  var daysDifference = Math.floor(difference/1000/60/60/24);
  difference -= daysDifference*1000*60*60*24
  var hoursDifference = Math.floor(difference/1000/60/60);
  return hoursDifference;
}

function daysDifference(laterdate,earlierdate)
{
  var difference = laterdate.getTime() - earlierdate.getTime();
  difference = Math.abs(difference);

  var daysDifference = Math.floor(difference/1000/60/60/24);
  return daysDifference;
}

function isZip(value)
{
  if (value.length == 0)
  {
    return false;
  }
  
  if (isInteger(value.charAt(0)))
  {
    // US ZIP Code
    if (value.length == 0)
    {
      return false;
    }
		
    if (value.length != 5 && value.length != 10)
    {
      return false;
    }

    // make sure first 5 digits are a valid integer
    if (value.charAt(0) == "-" || value.charAt(0) == "+")
    {
      return false;
    }

    if (!isInteger(value.substring(0,5)))
    {
	  return false;
    }

    if (value.length == 5)
    {
      return true;
    }

    // check if separator is either a'-' or ' '
    if (value.charAt(5) != "-")
    {
      return false;
    }

    // check if last 4 digits are a valid integer
    if (value.charAt(6) == "-" || value.charAt(6) == "+")
    {
      return false;
    }

    return (checkInteger(value.substring(6,10)));
  }
  else
  {
    // Canadian ZIP Code
	if (value.length != 7)
	{
	  return false;
	}
	
	if (!isLetter(value.charAt(0)))
	{
	  return false;
	}
	
	if (!isInteger(value.charAt(1)))
	{
	  return false;
	}
	
	if (!isLetter(value.charAt(2)))
	{
	  return false;
	}
	
	if (value.charAt(3) != ' ' && value.charAt(3) != '-')
	{
	  return false;
	}
	
	if (!isInteger(value.charAt(4)))
	{
	  return false;
	}
	
	if (!isLetter(value.charAt(5)))
	{
	  return false;
	}
	
	if (!isInteger(value.charAt(6)))
	{
	  return false;
	}
	
	return true;
  }
}

function isLetter(val)
{
  if (val.length != 1)
  {
    return false;
  }
  
  var letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  if (letters.indexOf(val) == -1)
  {
    return false;
  }
  
  return true;
}

function isPhone(value)
{
  if (value.length == 0)
  {
    return false;
  }
  	
  if (value.length != 12)
  {
    return false;
  }

  // check if first 3 characters represent a valid area code
  if (!isNumber(value.substring(0,3)))
  {
	return false;
  }
  else
  {
    if (eval(value.substring(0,3)) < 100 || eval(value.substring(0,3)) > 1000)
	{
	  return false;
	}

	// check if area code/exchange separator is a'-'
	if (value.charAt(3) != "-")
	{
      return false;
	}

	// check if  characters 5 - 7 represent a valid exchange
    if (!isNumber(value.substring(4,7)))
	{
	  return false;
	}
    else
	{
	  if (eval(value.substring(4,7)) < 100 || eval(value.substring(4,7)) > 1000)
	  {
	    return false;
	  }
	
	  // check if exchange/number separator is a'-'
	  if (value.charAt(7) != "-")
	  {
        return false;
	  }

	  // make sure last four digits are a valid integer
  	  if (value.charAt(8) == "-" || value.charAt(8) == "+")
  	  {
  	    return false;
  	  }
  	  else
  	  {
  	    return (isInteger(value.substring(8,12)));
  	  }
	}
  }
}

function testYear(year)
{
  if (year > 0 && year <= 9999)
  {
    return true;
  }
  else
  {
    return false;
  }
}
 
function defaultYear(month_object, year_object, default_year)
{
  if (default_year >= 1900)
  {
    if (month_object.value > 0 && year_object.value.length == 0)
    {
      year_object.value = default_year;
    }
    else if (!(month_object.value >= 1))
    {
      year_object.value = '';
    }
  }
}
 
function resetDays(day_object,month_object,year_object)
{
  if (day_object.options.length > 0 && day_object.options[0].value.length == 0)
  {
    day_object.options.length = 1;
  }
  else
  {
    day_object.options.length = 0;
  }
}
 
function populate(day_object,month_object,year_object)
{
  if (testYear(year_object.value) && month_object.value >= 1 && month_object.value <= 12)
  {
    if (leapYear(year_object.value))
    {
      // This is a leap year
	  if (day_object.options[0] && day_object.options[0].value.length == 0)
	  {
	    // Place the blank option first
	    day_object.options[0].value = '';
	    day_object.options[0].text = '';
	    day_object.options.length = daysofmonthLY[month_object.value - 1] + 1;
	    for (var i = 1; i <= daysofmonthLY[month_object.value - 1]; i++)
	    {
	      day_object.options[i].text = i;
		  day_object.options[i].value = i;
	    }
	  }
	  else
	  {
	    day_object.options.length = daysofmonthLY[month_object.value - 1];
	    for (var i = 0; i < daysofmonthLY[month_object.value - 1]; i++)
	    {
	      day_object.options[i].text = i + 1;
		  day_object.options[i].value = i + 1;
	    }
	  }
    }
    else
    {
      // This is not a leap year
	  if (day_object.options[0] && day_object.options[0].value.length == 0)
	  {
	    // Place the blank option first
	    day_object.options[0].value = '';
	    day_object.options[0].text = '';
	    day_object.options.length = daysofmonth[month_object.value - 1] + 1;
	    for (var i = 1; i <= daysofmonth[month_object.value - 1]; i++)
	    {
	      day_object.options[i].text = i;
		  day_object.options[i].value = i;
	    }
	  }
	  else
	  {
	    day_object.options.length = daysofmonth[month_object.value - 1];
	    for (var i = 0; i < daysofmonth[month_object.value - 1]; i++)
	    {
	      day_object.options[i].text = i + 1;
		  day_object.options[i].value = i + 1;
	    }
	  }
    }
  }
}
 
function syncDay(this_day_object,target_day_object)
{
  if (target_day_object.options.length >= this_day_object.selectedIndex)
  {
    target_day_object.selectedIndex = this_day_object.selectedIndex;
  }
}

function leapYear(year)
{
  if ((year/4)   != Math.floor(year/4)  )   return false;
  if ((year/100) != Math.floor(year/100)) return true;
  if ((year/400) != Math.floor(year/400)) return false;
  return true;
};