//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 checkDate(object_value)
{
//Returns true if value is a date format or is NULL
//otherwise returns false	

if (object_value.length == 0)
    return true;

//Returns true if value is a date in the mm/dd/yy(yy) format or mm-dd-yy(yy)
	var dlmt = '/';
	isplit = object_value.indexOf(dlmt);

	if (isplit == -1) {
		dlmt = '-';
		isplit = object_value.indexOf(dlmt);
	}
		
	if (isplit == -1 || isplit == object_value.length)
		return false;

	sMonth = object_value.substring(0, isplit);

	if (sMonth.length == 0)

    return false;

	isplit = object_value.indexOf(dlmt, isplit + 1);
	if (isplit == -1) {
		dlmt = '-';
		isplit = object_value.indexOf(dlmt, isplit + 1);
	}
	if (isplit == -1 || (isplit + 1 ) == object_value.length)
		return false;

	sDay = object_value.substring((sMonth.length + 1), isplit);

	if (sDay.length == 0)

    return false;

	sYear = object_value.substring(isplit + 1);

	if (!checkinteger(sMonth)) //check month
		return false;
	else
	if (!checkrange(sMonth, 1, 12)) //check month
		return false;
	else
	if (!checkinteger(sYear)) //check year
		return false;
	else
	if (!checkrange(sYear, 0, 9999)) //check year
		return false;
	else
	if (!checkinteger(sDay)) //check day
		return false;
	else
	if (!checkday(sYear, sMonth, sDay)) // check day
		return false;
	else
		return true;

}// end function checkDate

function checkday(checkYear, checkMonth, checkDay)
{
	maxDay = 31;

	if (checkMonth == 4 || checkMonth == 6 ||
			checkMonth == 9 || checkMonth == 11)
		maxDay = 30;
	else
	if (checkMonth == 2)
	{
		if (checkYear % 4 > 0)
			maxDay =28;
		else
		if (checkYear % 100 == 0 && checkYear % 400 > 0)
			maxDay = 28;
		else
			maxDay = 29;
	}

	return checkrange(checkDay, 1, maxDay); //check day

}// end function checkday

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 function checkinteger

function numberrange(object_value, min_value, max_value)
{
// check minimum
if (min_value != null)
	{
    if (object_value < min_value)
		return false;
	}

// check maximum
if (max_value != null)
	{
	if (object_value > max_value)
		return false;
	}

//All tests passed, so...
return true;
}// end function numberrange

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 function checknumber


function checkrange(object_value, min_value, max_value)
{

//if value is in range then return true else return false
if (object_value.length == 0)
    return true;
	
if (!checknumber(object_value))
	{return false;}
else
	{return (numberrange((eval(object_value)), min_value, max_value));}
	
//All tests passed, so...
return true;

} // end function checkrange

function y2k(number) { 

	var thisyear = new Number();
	thisyear = number;
	
	if (thisyear < 1000) {
		if (thisyear < 50)
			return (parseInt(thisyear) + 2000);
		else
			return (parseInt(thisyear) + 1900);
	} else {
		return (parseInt(thisyear) + 2000);
	}
 }

function daysElapsed(date1,date2) {
    var difference =
        Date.UTC(y2k(date1.getYear()),date1.getMonth(),date1.getDate(),0,0,0)
      - Date.UTC(y2k(date2.getYear()),date2.getMonth(),date2.getDate(),0,0,0);
    return difference/1000/60/60/24;
} // end function daysElapsed

