//declare global values for doing string validation
var regexp_phone = /[0-9\-\.\(\)\x ]/;
var regexp_email1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
var regexp_email2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; //
var regexp_zip = /[0-9\-]/;
var regexp_state = /[A-Z\a-z]/;

function onError(input_object, error_message)
{
	alert(error_message);
	input_object.focus();
 	return false;
}// end onError function

function hasValue(obj, obj_type)
{
if (obj_type == "TEXT"|| obj_type == "TEXTAREA")
	{
	if (obj.value.length == 0){
		return false;
	}else{
		return true;}
	}
else if (obj_type == "SELECT")
	{
	for (i=0; i < obj.length; i++)
		{
		if (obj.options[i].selected && obj.options[i].value != '' && obj.options[i].value != '0')
		return true;
		}

 	return false;
	}

else if (obj_type == "RADIO")
	{
	if (obj.length) {
	for (i=0; i < obj.length; i++)
		{
		if (obj[i].checked)
		return true;
		}
	} else {
		if (obj.checked)
		return true;
	}

 	return false;
	}
}// end hasValue function

function checknumber(object_value)
	{
	//Returns true if value is a number or is NULL
	//otherwise returns false

	if (object_value.length == 0)
		return true;

	//Returns true if value is a number defined as
	//		having an optional leading + or -.
	//		having at most 1 decimal point.
	//		otherwise containing only the characters 0-9.
	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;

	//The first character can be + - .	blank or a digit.
	check_char = start_format.indexOf(object_value.charAt(0))
	//Was it a decimal?
	if (check_char == 1)
		decimal = true;
	else if (check_char < 1)
		return false;

	//Remaining characters can be only . or a digit, but only one decimal.
	for (var i = 1; i < object_value.length; i++)
	{
		check_char = number_format.indexOf(object_value.charAt(i))
		if (check_char < 0)
		return false;
		else if (check_char == 1)
		{
		if (decimal)		// Second decimal.
		return false;
		else
		decimal = true;
		}
		else if (check_char == 0)
		{
		if (decimal || digits)
		trailing_blank = true;
		// ignore leading blanks

		}
		else if (trailing_blank)
		return false;
		else
		digits = true;
	}
	//All tests passed, so...
	return true
}// end checknumber function

function checkinteger(object_value)
	{
	//Returns true if value is a number or is NULL
	//otherwise returns false

	if (object_value.length == 0)
		return true;

	//Returns true if value is an integer defined as
	//		having an optional leading + or -.
	//		otherwise containing only the characters 0-9.
	var decimal_format = ".";
	var check_char;

	//The first character can be + -	blank or a digit.
	check_char = object_value.indexOf(decimal_format)
	//Was it a decimal?
	if (check_char < 1)
	return checknumber(object_value);
	else
	return false;
}// end checkinteger function


function checkemail(emailval) {
	if ( regexp_email1.test(emailval) || !regexp_email2.test(emailval) )
		return false;
	return true;
}// end checkemail function

function checkstate(stateval) {

	if (stateval.length != 2)
		return false;

	for (i=0; i < stateval.length; i++) {
		check_char = stateval.charAt(i);
		if (!regexp_state.test(check_char))
			return false;
		}

	return true;

}// end checkstate function

function checkzip(zipval) {

	if (zipval.length < 5)
		return false;

	for (i=0; i < 5; i++) {
		check_char = zipval.charAt(i);
		if (!regexp_zip.test(check_char))
			return false;
		}

	return true;

}// end checkzip function


function checkphone(phoneval) {

	if (phoneval.length < 10 || phoneval.length > 20)
		return false;

	for (i=0; i < phoneval.length; i++) {
		check_char = phoneval.charAt(i);
		if (!regexp_phone.test(check_char))
			return false;
		}

	return true;

}// end checkphone function


function checkcreditcard(object_value) {
	var white_space = " -";
	var creditcard_string="";
	var check_char;

	if (object_value.length == 0)
		return true;

	// squish out the white space
	for (var i = 0; i < object_value.length; i++)
	{
		check_char = white_space.indexOf(object_value.charAt(i))
		if (check_char < 0)
		creditcard_string += object_value.substring(i, (i + 1));
	}

	// if all white space return error
	if (creditcard_string.length == 0)
		return false;

	// make sure number is a valid integer
	if (creditcard_string.charAt(0) == "+")
		return false;

	if (!checkinteger(creditcard_string))
		return false;

	var doubledigit = creditcard_string.length % 2 == 1 ? false : true;
	var checkdigit = 0;
	var tempdigit;

	for (var i = 0; i < creditcard_string.length; i++)
	{
		tempdigit = eval(creditcard_string.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;
}// end checkcreditcard function

function y2k(number) { return (number < 1000) ? number + 2000 : number; }

function daysElapsed(date1,nowdate2) {
	var difference =
		Date.UTC(y2k(date1.getYear()),date1.getMonth(),date1.getDate(),0,0,0)
		- Date.UTC(y2k(nowdate2.getYear()),nowdate2.getMonth(),nowdate2.getDate(),0,0,0);
	return (difference/1000/60/60/24);
}// end daysElapsed function