/*
 * Name: Validation JavaScript File
 * File: validate.js
 * Date: 23/05/2008
 * Auth: Tom Garbutt
 *
 * Validation methods for the form helper, needs to
 * be packaged with.
 */

var Validate = {

	// Check entire form
	entireForm: function() {
		var _error_count = document.getElementById('_error_count');
		var count = parseInt(_error_count.value);
		if (count > 0) {
			return false;
		}
		return true;
	},

	// Email validation method
	email: function(element) {
		var _error_count = document.getElementById('_error_count');
		var count = parseInt(_error_count.value);

		var failure = '<img src="images/form/icon-error.gif" border="0" alt="" />';
		var success = '<img src="images/form/icon-greentick.gif" border="0" alt="" />';

		//var regex = /^([a-zA-Z0-9_\.\-+])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		regex = new RegExp(/^([a-zA-Z0-9_\.\-+])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/);

		var msg = document.getElementById('validate'+element.getAttribute('name'));
		var div = element.parentNode;

		// check if prev style is error
		var isError = false;
		var nodes = div.childNodes;
		for (var i = 0; i < nodes.length; i++) {
			if (nodes[i].className == 'errorField') {
				isError = true;
				continue;
			}
		}

		if (regex.test(element.value)) {
			if (count > 0) {
				count--;
				_error_count.value = count;
			}
			msg.innerHTML = success;
			if (isError) {
				div.setAttribute('class', 'ctrlHolder error');
			} else {
				div.setAttribute('class', 'ctrlHolder focused');
			}
			return true;
		} else {
			count++;
			_error_count.value = count;
			msg.innerHTML = failure;
			div.setAttribute('class', 'ctrlHolder error');
			return false;
		}
	},

	// Password confirm validation
	comparewith: function(element, password_compare) {

		var _error_count = document.getElementById('_error_count');
		var count = parseInt(_error_count.value);

		var failure = '<img src="images/form/icon-error.gif" border="0" alt="" />';
		var success = '<img src="images/form/icon-greentick.gif" border="0" alt="" />';

		var comp = document.getElementById(password_compare);

		var msg = document.getElementById('validate'+element.getAttribute('name'));
		var div = element.parentNode;

		// check if prev style is error
		var isError = false;
		var nodes = div.childNodes;
		for (var i = 0; i < nodes.length; i++) {
			if (nodes[i].className == 'errorField') {
				isError = true;
				continue;
			}
		}

		if (element.value == comp.value) {
			if (count > 0) {
				count--;
				_error_count.value = count;
			}
			msg.innerHTML = success;
			if (isError) {
				div.setAttribute('class', 'ctrlHolder error');
			} else {
				div.setAttribute('class', 'ctrlHolder focused');
			}
			return true;
		} else {
			count++;
			_error_count.value = count;
			msg.innerHTML = failure;
			div.setAttribute('class', 'ctrlHolder error');
			return false;
		}
	},
	// Password strength
	passwordstrength: function(element) {

		var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
		var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
		var enoughRegex = new RegExp("(?=.{6,}).*", "g");

		var strength = document.getElementById('validate'+element.getAttribute('name'));

		if (element.value.length == 0) {
			strength.setAttribute('style', 'color:black;font-weight:bold;');
			strength.innerHTML = '';//'<img src="img/icon-error.png" border="0" alt="" />';
		} else if (false == enoughRegex.test(element.value)) {
			strength.setAttribute('style', 'color:black;font-weight:bold;');
			strength.innerHTML = '';//'<img src="img/icon-error.png" border="0" alt="" />';
		} else if (strongRegex.test(element.value)) {
			strength.setAttribute('style', 'color:green;font-weight:bold;');
			strength.innerHTML = 'Strong';
		} else if (mediumRegex.test(element.value)) {
			strength.setAttribute('style', 'color:orange;font-weight:bold;');
			strength.innerHTML = 'Medium';
		} else {
			strength.setAttribute('style', 'color:red;font-weight:bold;');
			strength.innerHTML = 'Weak';
		}
	},
	// Required
	required: function(element, name) {

		var _error_count = document.getElementById('_error_count');
		var count = parseInt(_error_count.value);

		var failure = '<img src="images/form/icon-error.gif" border="0" alt="" />';
		var success = '<img src="images/form/icon-greentick.gif" border="0" alt="" />';

		var msg = document.getElementById('validate'+name);
		var div = element.parentNode;

		// check if prev style is error
		var isError = false;
		var nodes = div.childNodes;
		for (var i = 0; i < nodes.length; i++) {
			if (nodes[i].className == 'errorField') {
				isError = true;
				continue;
			}
		}

		if (element.value == '' || element.value == null) {
			count++;
			_error_count.value = count;

			msg.innerHTML = failure;
			div.setAttribute('class', 'ctrlHolder error');
			return true;
		} else {
			if (count > 0) {
				count--;
				_error_count.value = count;
			}
			msg.innerHTML = success;
			if (isError) {
				div.setAttribute('class', 'ctrlHolder error');
			} else {
				div.setAttribute('class', 'ctrlHolder focused');
			}
			return false;
		}
	},

	// Minimum length for a field
	minlength: function(element, length) {

		var _error_count = document.getElementById('_error_count');
		var count = parseInt(_error_count.value);

		var failure = '<img src="images/form/icon-error.gif" border="0" alt="" />';
		var success = '<img src="images/form/icon-greentick.gif" border="0" alt="" />';

		var msg = document.getElementById('validate'+element.getAttribute('name'));
		var div = element.parentNode;

		// check if prev style is error
		var isError = false;
		var nodes = div.childNodes;
		for (var i = 0; i < nodes.length; i++) {
			if (nodes[i].className == 'errorField') {
				isError = true;
				continue;
			}
		}

		// Count the characters and display
		var counter = document.getElementById('charcount');
		if (length - element.value.length >= 0) {
			counter.innerHTML = (length - element.value.length) + ' more characters required';
		} else {
			counter.innerHTML = '';
		}

		// Change class
		if (element.value.length < length) {
			count++;
			_error_count.value = count;

			msg.innerHTML = failure;
			div.setAttribute('class', 'ctrlHolder error');
		} else {
			if (count > 0) {
				count--;
				_error_count.value = count;
			}
			msg.innerHTML = success;
			if (isError) {
				div.setAttribute('class', 'ctrlHolder error');
			} else {
				div.setAttribute('class', 'ctrlHolder focused');
			}
		}
	},

	// Maximum length for a field
	maxlength: function(element, length) {

		var _error_count = document.getElementById('_error_count');
		var count = parseInt(_error_count.value);

		var failure = '<img src="images/form/icon-error.gif" border="0" alt="" />';
		var success = '<img src="images/form/icon-greentick.gif" border="0" alt="" />';

		var msg = document.getElementById('validate'+element.getAttribute('name'));
		var div = element.parentNode;

		// check if prev style is error
		var isError = false;
		var nodes = div.childNodes;
		for (var i = 0; i < nodes.length; i++) {
			if (nodes[i].className == 'errorField') {
				isError = true;
				continue;
			}
		}

		// Count the characters and display/limit
		var counter = document.getElementById('charcount');
		if (length - element.value.length <= 0) {
			element.value = element.value.substring(0, length);
			counter.innerHTML = (length - element.value.length) + ' characters remaining';
		} else {
			counter.innerHTML = (length - element.value.length) + ' characters remaining';
		}

		// change class
		if (element.value.length > length) { // error
			count++;
			_error_count.value = count;

			msg.innerHTML = failure;
			div.setAttribute('class', 'ctrlHolder error');
		} else { // we're good
			if (count > 0) {
				count--;
				_error_count.value = count;
			}
			msg.innerHTML = success;
			if (isError) {
				div.setAttribute('class', 'ctrlHolder error');
			} else {
				div.setAttribute('class', 'ctrlHolder focused');
			}
		}
	}
};
