
////////////////////////////////////////////////////////////////////
/// Webo Generic Form Checker, ver 1.0
/// written by. Antony Hendro
/// Webo, 2002
////////////////////////////////////////////////////////////////////

/// _isFilled(element)
/// parm: element : object - field element
/// return: true, if element has value
function _isFilled(element)
{
	return (String(element.value).replace(' ', '') != '')

}

/// _isEmail(element)
/// Param: element : string - field name
/// return: string, field name is a email format
function _isEmail(element)
{
	var str = new String(element.value);
	//return ((str.indexOf('@')>0)&&(str.indexOf('.',(str.indexOf('@')+1))>0));

	// Check the validity of email using regex
	// The regular expresion was fetched from visual studio	
	if (str.match(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/)) return true;
	else if (str.match(/^(")?(\w+([-+.\s]\w+)*(")?\s*[<(])\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([)>])$/)) return true;	
	else return false;	
}

/// _isRequired(fieldname)
/// Param: fieldname : string - field name
/// return: true, if fieldname starts with 'X'
function _isRequired(fieldname)
{
	return (String(fieldname).charAt(0).toUpperCase() == 'X');
}

/// _getFieldname(fieldname)
/// Param: fieldname : string - field name
/// return: string, field name at char pos after ':', and replace '_' with ' '
function _getFieldname(fieldname)
{
	var str = new String(fieldname);
	return (str.substr((str.indexOf(':') + 1), str.length).replace(new RegExp('_', 'g'), ' '));
}

/// _getRawFieldname(fieldname)
/// Param: fieldname : string - field name
/// return: string, field name at char pos after ':', and replace '_' with ' '
function _getRawFieldname(fieldname)
{
	var str = new String(fieldname);
	return (str.substr((str.indexOf(':') + 1), str.length));
}

/// _getCheckType(fieldname)
/// Param: fieldname : string - field name
/// return: string, Check Type before ':'
function _getCheckType(fieldname)
{
	var str = new String(fieldname);
	return (str.substr(0, (str.indexOf(':'))));
}

/// GFCheck(docform)
/// Param: docform : object - form object
/// return: boolean, Check if all required fields are filled
/// Usage: [?]:Field_Name
/// 	X - Required Text
///		E - Required Email
///		N - Required Number
///		V - Verify Password
function GFCheck(docform)
{
	var err = 0;

	for (var i=0; i<docform.length; i++)
	{
		switch(_getCheckType(docform.elements[i].name))
		{
			case 'X':
				if (_isRequired(docform.elements[i].name) && !_isFilled(docform.elements[i]))
				{
					alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(docform.elements[i].name).toUpperCase());
					docform.elements[i].focus();
					return false;
				}
				break;
			case 'E':
				if (!_isEmail(docform.elements[i]))
				{
					alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(docform.elements[i].name).toUpperCase() + '\n(The value you have entered is not a valid email address)\nPlease follow the following format: "xxx" <xxx@xxx.xxx>');
					docform.elements[i].focus();
					return false;
				}
				break;
			case 'N':
				if (isNaN(docform.elements[i].value) || !_isFilled(docform.elements[i]))
				{
					alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(docform.elements[i].name).toUpperCase() + '\n(The value you have entered is not a number)');
					docform.elements[i].focus();
					return false;
				}
				break;
			case 'V':
				if (docform.elements[i].value != docform.elements('X:' + _getRawFieldname(docform.elements[i].name)).value)
				{
					alert('PASSWORD NOT VERIFIED!\n\nPlease re-verify: ' + _getFieldname(docform.elements[i].name).toUpperCase() + '\n(The password you entered cannot be verified)');
					docform.elements[i].focus();
					return false;
				}
				break;
		}
	}

	if (err == 0)
	{
		docform.submit();
		return true;
	}	
	return false;
}

/// GFCheckNoSubmit(docform)
/// Param: docform : object - form object
/// return: boolean, Check if all required fields are filled
/// Usage: [?]:Field_Name
/// 	X - Required Text
///		E - Required Email
///		N - Required Number
///		V - Verify Password
function GFCheckNoSubmit(docform)
{
	var err = 0;

	for (var i=0; i<docform.length; i++)
	{
		switch(_getCheckType(docform.elements[i].name))
		{
			case 'X':
				if (_isRequired(docform.elements[i].name) && !_isFilled(docform.elements[i]))
				{
					alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(docform.elements[i].name).toUpperCase());
					docform.elements[i].focus();
					return false;
				}
				break;
			case 'E':
				if (!_isEmail(docform.elements[i]))
				{
					alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(docform.elements[i].name).toUpperCase() + '\n(The value you have entered is not a valid email address)\nPlease follow the following format: "xxx" <xxx@xxx.xxx>');
					docform.elements[i].focus();
					return false;
				}
				break;
			case 'N':
				if (isNaN(docform.elements[i].value) || !_isFilled(docform.elements[i]))
				{
					alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(docform.elements[i].name).toUpperCase() + '\n(The value you have entered is not a number)');
					docform.elements[i].focus();
					return false;
				}
				break;
			case 'V':
				if (docform.elements[i].value != docform.elements('X:' + _getRawFieldname(docform.elements[i].name)).value)
				{
					alert('PASSWORD NOT VERIFIED!\n\nPlease re-verify: ' + _getFieldname(docform.elements[i].name).toUpperCase() + '\n(The password you entered cannot be verified)');
					docform.elements[i].focus();
					return false;
				}
				break;
		}
	}

	if (err == 0)
	{		
		return true;
	}

	return false;
}


function GFCheckField(field, fieldtype)
{
	switch(fieldtype)
	{
		case 'X':
			if (!_isFilled(field))
			{
				alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(field.name).toUpperCase());
				field.focus();
				return false;
			}
			break;
		case 'E':
			if (!_isEmail(field))
			{
				alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(field.name).toUpperCase() + '\n(The value you have entered is not a valid email address)\nPlease follow the following format: "xxx" <xxx@xxx.xxx>');
				field.focus();
				return false;
			}
			break;
		case 'N':
			if (isNaN(field.value) || !_isFilled(field))
			{
				alert('REQUIRED!\n\nPlease enter a valid: ' + _getFieldname(field.name).toUpperCase() + '\n(The value you have entered is not a number)');
				field.focus();
				return false;
			}
			break;
	}
	
	field.form.submit();
	return true;

}