/**********************************************************
	Author:					Jonathan Allen
	Date Created:		21-01-2009
	Last updated:		28-01-2009
	Version:				1.0
	Contents:				commonly used validation functions
**********************************************************/



/***************************************************
	group validations
***************************************************/
// returns true if at least one option completed - false if nothing found
// 1st argument is the class name to add to object parents upon fail
function valid_options (class_name) {
	var found = false;
	for (i = 1; i < arguments.length; i++) {
		obj = getId (arguments [i]);
		remClass (obj.parentNode, class_name);
		if ((trim (obj.value) != '') && (trim (obj.value) != 0)) found = true;
	} // for
	
	if (!found)
		for (i = 1; i < arguments.length; i++) {
			obj = getId (arguments [i]);
			addClass (obj.parentNode, class_name);
		} // for
	
	return found;
} // function



// returns false if any fields left blank
// 1st argument is the class name to add to object parents upon fail
function valid_requirements (class_name) {
	var err = false;
	for (i = 1; i < arguments.length; i++) {
		obj = getId (arguments [i]);
		remClass (obj.parentNode, class_name);
		if (trim (obj.value) == '') {
			err = true;
			addClass (obj.parentNode, class_name);
		} // if
	} // for
	
	return !err;
} // function

// Removes all added styles from each class
// 1st argument is the class name to remove and check against
function strip_class (class_name) {
	for (i = 1; i < arguments.length; i++) {
		obj = getId (arguments [i]);
		remClass (obj.parentNode, class_name);
	} // for
} // function




/***************************************************
	type validations
***************************************************/
// validates with given functions (funciton must return true/false)
function valid_type (id, func, class_name) {
	var obj = getId (id), err = false, val = trim (obj.value);

	remClass (obj.parentNode, class_name);
	if (trim (val) != '') {
		eval ("err = !" + func + "('"+ val +"')");
		if (err) addClass (obj.parentNode, class_name);
	} // if

	return !err;
} // function



// email check
function validEmail (email) {
	reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4}|museum|travel)$/
	return reg.test (email);
} // function



// postcode check
function validPostCode (postcode) {
	reg = /^[A-Za-z]{1,2}[0-9]{1,2}[A-Za-z]{0,2}\s?[0-9][A-Za-z]{2}$/
	return reg.test (postcode);
} // function


// UK Date check
function isUKDate (curDate) {
	if (typeof curDate == 'undefined') return false;

	if (curDate.indexOf ('/') < 0) return false;
	curDate = curDate.split ('/');
	d = new Date (curDate [2], curDate [1] -1, curDate [0]);
	
	if (d.getFullYear () != curDate [2] || curDate [2] < 1000) return false;
	if (d.getMonth () != curDate [1]-1) return false;
	if (d.getDate () != curDate [0]) return false;

	return true;
} // function










