var invalid_field_class = "required_field";


var IntegerMask = /(^-?\d\d*$)/;
var NumberMask = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
var EmailMask = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/i;
var PostalCodeMask = /^[a-z]\d[a-z]\s?\d[a-z]\d$/i;
var TelephoneMask = /^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$/;

fixYear = function(year) { return (year < 1000) ? year + 1900 : year; }


isDate = function(year, month, day)
{
	month = month - 1;  // javascript month range : 0- 11
	var tempDate = new Date(year, month, day);

	return ((fixYear(tempDate.getYear()) == year) && (month == tempDate.getMonth()) && (day == tempDate.getDate()));
}


function formatCurrency(num)
{
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) num = "0";
	
	var sign = (num == (num = Math.abs(num)));
	
	num = Math.floor(num*100+0.50000000001);
	
	var cents = num % 100;
	
	num = Math.floor(num/100).toString();
	if(cents<10) cents = "0" + cents;
	
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
		
	num.substring(num.length-(4*i+3));
	
	return (((sign)?'':'-') + '$ ' + num + '.' + cents);
}


checkRequiredField = function(inputID, rowID, message)
{
	var input = $("#" + inputID);
	var row = $("#" + rowID);
	
	var isValid = (input.val() != "");
	
	(isValid) ? row.removeClass(invalid_field_class) : highlightField(input, row, message);
	
	return isValid;
}


checkDateField = function(yearID, monthID, dayID, rowID, message)
{
	var year = $("#" + yearID);
	var month = $("#" + monthID);
	var day = $("#" + dayID);
	
	var row = $("#" + rowID);
	
	var isValid = isDate(year.val(), month.val(), day.val());
	
	(isValid) ? row.removeClass(invalid_field_class) : highlightField(day, row, message);
	
	return isValid;
}


compareEqualFields = function(inputID1, inputID2, rowID1, rowID2, message)
{
	input1 = $("#" + inputID1);
	input2 = $("#" + inputID2);
	
	var row1 = $("#" + rowID1);
	var row2 = $("#" + rowID2);
	
	var isValid = (input1.val() != input2.val());
	
	if (isValid)
	{
		row1.addClass(invalid_field_class);
		highlightField(input2, row2, message);
		return false;
	}
	else
	{
		row1.removeClass(invalid_field_class);
		row2.removeClass(invalid_field_class);
		return true;
	}
}


checkPostalCodeField = function(inputID, rowID, message)
{
	var input = $("#" + inputID);
	var row = $("#" + rowID);
	
	var isValid = PostalCodeMask.test(input.val());
	
	(isValid) ? row.removeClass(invalid_field_class) :	highlightField(input, row, message);

	return isValid;
}


checkTelephoneField = function(inputID, rowID, message)
{
	var input = $("#" + inputID);
	var row = $("#" + rowID);
	
	var isValid = TelephoneMask.test(input.val());
	
	(isValid) ? row.removeClass(invalid_field_class) :	highlightField(input, row, message);

	return isValid;
}

checkIntegerField = function(inputID, rowID, message)
{
	var input = $("#" + inputID);
	var row = $("#" + rowID);
	
	var isValid = IntegerMask.test(input.val());
	
	(isValid) ? row.removeClass(invalid_field_class) : highlightField(input, row, message);
	
	return isValid;
}


checkNumberField = function(inputID, rowID, message)
{
	var input = $("#" + inputID);
	var row = $("#" + rowID);
	
	var isValid = NumberMask.test(input.val());
	
	(isValid) ? row.removeClass(invalid_field_class) : highlightField(input, row, message);

	return isValid;
}


checkMoneyField = function(required, inputID, rowID, message)
{
	var input = $("#" + inputID);
	var row = $("#" + rowID);
	
	var value = input.val().replace(/\$|\,/g,'');
	
	var isValid = NumberMask.test(value);
	
	(isValid) ? row.removeClass(invalid_field_class) : highlightField(input, row, message);

	return isValid;
}


checkEmailField = function(inputID, rowID, message)
{
	var input = $("#" + inputID);
	var row = $("#" + rowID);
	
	var isValid = EmailMask.test(input.val());
	
	(isValid) ? row.removeClass(invalid_field_class) :	highlightField(input, row, message);

	return isValid;
}


checkCustomField = function(isValid, inputID, rowID, message)
{
	var input = $("#" + inputID);
	var row = $("#" + rowID);
		
	(isValid) ? row.removeClass(invalid_field_class) : highlightField(input, row, message);

	return isValid;
}


highlightField = function(input, row, message)
{
	row.addClass(invalid_field_class);
	alert(message);
	input.focus();
}