// 2009-01-17 - 16:34 PM
// - Added checkboxes to form val
// - Fixed phone digit count bug (added 'g' to regex)

// ============================
// = Error handling functions =
// ============================

//Define global vars
var ga_error	= new Array();
var ga_msg		= new Array();

function addError( as_error )
{
	ga_error[ga_error.length] = as_error + '\n';
}

function addMsg( as_msg )
{
	ga_msg[ga_msg.length] = as_msg + '\n';
}

function alertMsg()
{
	var ls_msg = '';

	if ( ga_error.length > 0 )
		{
		ls_msg += 'Error:\n';
		for ( var i=0; i<ga_error.length; i++ )
			{
			ls_msg += '  - ' + ga_error[i];
			}
		ls_msg += '\n';
		}

	if ( ga_msg.length > 0 )
		{
		ls_msg += 'Info:\n';
		for (var i=0; i<ga_msg.length; i++)
			{
			ls_msg += '  - ' + ga_msg[i];
			}
		ls_msg += '\n';
		}
	
	//Display alert
	if ( ls_msg != '' ) alert( ls_msg );

	//Clear the vars;
	ga_error	= new Array();
	ga_msg		= new Array();
}



// ========================
// = Validation functions =
// ========================
function isValidFormInput( as_type, ab_required, as_data, as_friendlyName, ai_length )
{
	//If it's not empty, OR it's required, we need to check it
	if ( as_data != '' || ab_required )
		{
		// Check length
		if ( ai_length != 0 && String( as_data ).length > ai_length )
			{
			addError( '"' + as_friendlyName + '" contains too many characters. You must enter ' + ai_length + ' characters or less' );
			return false;
			}

		//A requried field that's blank
		if ( as_data == '' && ab_required )
			{
			addError( '"' + as_friendlyName + '" can not be blank' );
			return false;
			}

		//Number
		if ( ( as_type == 'num' ) && ( isNaN( as_data ) ) )
			{
			addError( '"' + as_friendlyName + '" must be a number' );
			return false;
			}

		//Phone Number must be 10 digits and allows )(.-
		if ( ( as_type == 'phn' ) && ( /[^ \d\(\)\.\-]/.test( as_data ) ) )
			{
			addError( '"' + as_friendlyName + '" can only contain numbers, dashes, parenthesis, or dots.' );
			return false;
			}
		else if ( ( as_type == 'phn' ) && ( as_data.replace( /\D/g, '' ).length != 10 ) )
			{
			addError( '"' + as_friendlyName + '" must contain 10 digits.' );
			return false;
			}
		
		//Email
		if ( ( as_type == 'eml' ) && ( !isValidEmailSyntax( as_data ) ) )
			{
			addError( '"' + as_friendlyName + '" is not a valid email address' );
			return false;
			}
		
		//Multiple options, at least one required (checkboxes)
		if ( ( as_type == 'mult_check' ) )
			{
			li_test = 0;
			for ( var i=0; i<as_data.length; i++ )
				{
				li_test += as_data[i].checked;
				}
			if ( !li_test ) addError( '"' + as_friendlyName + '" requires at least one checked box' );
			return false;
			}

		}
	return as_data;
}

function isValidEmailSyntax( as_data )
{
	// regular expression courtesy of ed.courtenay@nationwideisp.net
	return ( String( as_data ).search( /\w+((-\w+)|(\.\w+)|(\_\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z]{2,5}/ ) != -1 );
}



// ==================
// = Global helpers =
// ==================
function trim( as_data )
{
	return as_data.replace( /^\s+/g, '' ).replace( /\s+$/g, '' );
}

function cleanTextareaEols( as_data )
{
	return as_data.replace( /(\r\n|\r)/g, '\n' );
	// return ereg_replace( "(\r\n|\r)", "\n", $as_data );
}

