
////////////////////////////////////////////////////////////////////
/// Webo Generic Form Checker, ver 1.0
/// written by. Antony Hendro
/// Webo, 2002
///
///
/// 1.0.2006.6.15.0	_isEmail(): regex following regex:
///				/^(")?(\w+([-+.\s]\w+)*(")?\s*[<(])\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([)>])$/
///				fail to validate the following
///				email format: "some ." <email@domain.com>
///				The (.) causes the issue.
///
///
////////////////////////////////////////////////////////////////////

/// _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
	//var re = new RegExp("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
	if (str.match(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/)) return true;
	else if (str.match(/^["](.*["]\s*[<(])\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*([)>])$/)) return true;
	else return false;
}

//function _isEmail(element)
//{
//	var str = new String(element.value);
//	return ((str.indexOf('@')>0)&&(str.indexOf('.',(str.indexOf('@')+1))>0));
//}

/// _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)');
					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 != GFGetObject(docform, '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;
}

/// GFGetObject(docform, fieldname)
/// Param: docform : object - form object
///        fieldname : string
/// return: object
function GFGetObject(docform, fieldname)
{
	for (var i=0; i<docform.length; i++)
	{
        if (docform.elements[i].name == fieldname)
        {
            return docform.elements[i]
        }
    }

    return null
}
