function fbkFormValidationRuleRequired (_elements, _parameters, _required)
{
	var valid = true;
	
	for (var i = 0; i < _elements.length; i++) {
		var element = _elements[i];
		var value = fbkGetElementValue(element[1], element[0], element[2]);
		
		if (value == null || value == '' || value == undefined) {
			valid = false;
		}
	}
	
	return valid;
}

function fbkFormValidationRuleMinimumLength (_elements, _parameters, _required)
{	
	var length = _parameters[0];
	var valid = true;

	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
		
			if (value != null && value.length < length) {
				valid = false;
			}
		}
	}
	
	return valid;
}

function fbkFormValidationRuleMaximumLength (_elements, _parameters, _required)
{	
	var length = _parameters[0];
	var valid = true;

	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
			
			if (value != null && value.length > length) {
				valid = false;
			}
		}
	}
	
	return valid;
}

function fbkFormValidationRuleFileExtension (_elements, _parameters, _required)
{
	var valid = true;
	
	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
			
			if (value != '') {
				var found = false;
				
				for (var j = 0; j < _parameters.length; j++) {
					var extension = value.substr(value.length - _parameters[j].length - 1);
					
					if ('.' + _parameters[j].toLowerCase() == extension.toLowerCase()) {
						found = true;
					}
				}
				
				if (!found) {
					valid = false;
				}
			}
		}
	}
	
	return valid;
}

function fbkFormValidationRuleOneRequired (_elements, _parameters, _required)
{
	var valid = false;
	
	for (var i = 0; i < _elements.length; i++) {
		var element = _elements[i];
		var value = fbkGetElementValue(element[1], element[0], element[2]);
			
		if (value != '' && value != null && value != undefined) {
			valid = true;
		}
	}
	
	return valid;
}

function fbkFormValidationRuleInteger (_elements, _parameters, _required)
{
	var valid = true;
	
	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
		
			if (value != null) {
				for (var j = 0; j < value.length; j++) {
					if (!fbkFormValidationIsDigit(value.charAt(j))) { 
						valid = false;
					}
				}
			}
		}
	}
	
	return valid;
}

function fbkFormValidationRuleIntegerGreaterThan (_elements, _parameters, _required)
{
	var greater_than = _parameters[0];
	var valid = true;
	
	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
			
			for (var j = 0; j < value.length; j++) {
				if (!fbkFormValidationIsDigit(value.charAt(j))) { 
					valid = false;
				}
			}
			
			if (valid && new Number(value) <= greater_than) {
				valid = false;
			}
		}
	}
	
	return valid;
}

function fbkFormValidationRuleIntegerLessThan (_elements, _parameters, _required)
{
	var less_than = new Number(_parameters[0]);
	var valid = true;
	
	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
			
			for (var j = 0; j < value.length; j++) {
				if (!fbkFormValidationIsDigit(value.charAt(j))) { 
					valid = false;
				}
			}

			if (valid && (new Number(value) >= less_than)) {
				valid = false;
			}
		}
	}
	
	return valid;
}

function fbkFormValidationRuleIntegerBetween (_elements, _parameters, _required)
{
	var greater_than = _parameters[0];
	var less_than = _parameters[1];
	var valid = true;
	
	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
			
			for (var j = 0; j < value.length; j++) {
				if (!fbkFormValidationIsDigit(value.charAt(j))) { 
					valid = false;
				}
			}
			
			if (valid && (value <= greater_than || value >= less_than)) {
				valid = false;
			}
		}
	}
	
	return valid;
}

function fbkFormValidationIsDigit (_number)
{
	if (_number.length > 1) {
		return false;
	}
	
	var string = "1234567890";
	
	if (string.indexOf(_number) != -1){
		return true;
	}
	
	return false;
}

function fbkFormValidationIsEmailAddress (_email)
{
	return ( /^[\w\-]+(\.[\w\-]+)*@[\w-]+(\.[\w\-]+)*(\.[a-z]{2,6})(\.[a-z]{2})?$/i ).test(_email) == true;
}

function fbkFormValidationRuleEmail (_elements, _parameters, _required)
{
	var valid = true;
	
	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
			
			if (!_required && value == '') {
				// is valid
			} else {
				if (!fbkFormValidationIsEmailAddress(value)) {
					valid = false;
				}
			}
		}
	}
	
	return valid;
}

function fbkFormValidationRuleMatch (_elements, _parameters, _required)
{
	var valid = true;
	
	if (_required && !fbkFormValidationRuleRequired(_elements, _parameters, _required)) {
		valid = false;
	} else {
		var firstValue = undefined;
		
		for (var i = 0; i < _elements.length; i++) {
			var element = _elements[i];
			var value = fbkGetElementValue(element[1], element[0], element[2]);
			
			if (firstValue == undefined) {
				firstValue = value;
			} else if (value != firstValue) {
				valid = false;
			}
		}
	}
	
	return valid;
}
