/* validation methods - syntax modeled after prototype.js */

var Validation = {
	required: function(element) {
		element = $(element);
		
		if (($F(element) || "").isBlank()) {
			Validation.showError(element, arguments[1], arguments[2] || "is required.", arguments[3]);
			element.activate();
			return false;
		}
		
		return true;
	},
	
	numeric: function(element) {
		element = $(element);
		
		if (!($F(element) || "").isNumeric()) {
			Validation.showError(element, arguments[1], arguments[2] || "must be a number.", arguments[3]);
			element.activate();
			return false;
		}
		
		return true;
	},
	
	email: function(element) {
		element = $(element);
		
		if (!($F(element) || "").isEmail()) {
			Validation.showError(element, arguments[1], arguments[2] || "must be a valid email.", arguments[3]);
			element.activate();
			return false;
		}
		
		return true;
	},
	
	date: function(element) {
		element = $(element);
		
		if (!($F(element) || "").isDate()) {
			Validation.showError(element, arguments[1], arguments[2] || "is not a valid date.", arguments[3]);
			element.activate();
			return false;
		}
		
		return true;
	},
	
	pattern: function(element, regex) {
		element = $(element);
		
		if (!regex.test(($F(element) || ""))) {
			Validation.showError(element, arguments[2], arguments[3] || "is not valid.", arguments[4]);
			element.activate();
			return false;
		}
		
		return true;
	},
	
	showError: function(element, name, predicate, callback) {
		
		if (!name) {
			var label = element.previous();
			
			if (label && label.tagName && label.tagName.toLowerCase() == "label") {
				name = label.innerHTML;
			}
		}
		
		if (name) {
			
			realCallback = null;
			
			if (callback)
			{
				realCallback = function(w) { callback(); w.close() };
			}
			
			alertDialog("The \"" + name + "\" field " + predicate, realCallback);
		}
	}
}

/* shortcuts */
var $$R = Validation.required;
var $$N = Validation.numeric;
var $$E = Validation.email;
var $$D = Validation.date;
var $$P = Validation.pattern;