// -----------------------------------------------------------------------------
// Automated validation script
// Author: Simon Aurell
// Last updated 2006-09-08
// -----------------------------------------------------------------------------

val_required_fields = new Array();
val_required_xor_fields = new Array();
val_email_fields = new Array();
val_date_fields = new Array();
val_matching_fields = new Array();
val_rules = new Array();
val_validation_messages = new Array();

function set_required(required)
{
	val_required_fields = required;
}
function set_required_xor(required_xor)
{
	val_required_xor_fields = required_xor;
}
function set_email(email)
{
	val_email_fields = email;
}
function set_matching(matching)
{
	val_matching_fields = matching;
}
function set_date_fields(date_fields)
{
	val_date_fields = date_fields;
}
function set_rules(rules)
{
	val_rules = rules;
}

// Inserts a div with appropriate message after each element failing validation
function do_validate()
{
	clear_validation();
	var valid = true;
	// Check required
	if(val_required_fields.length > 0) {
		for(var i = 0; i < val_required_fields.length; i++) {
			element = document.getElementById(val_required_fields[i]);
			if("" == element.value) {
				insert_message(element, "This field is required");
				valid = false;
			}
		}
	}
	
	// Check required either/or
	if(val_required_xor_fields.length > 0) {
		var empty = true;
		for(var i = 0; i < val_required_xor_fields.length; i++) {
			element = document.getElementById(val_required_xor_fields[i]);
			if("" != element.value) {
				empty = false;
			}
		}
		if(empty) {
			var seedElement = document.getElementById(val_required_xor_fields[0]);		
			insert_message(seedElement, "Select one of the options");
			valid = false;
		}
	}
	
	// Check email
	if(val_email_fields.length > 0) {
		for(var i = 0; i < val_email_fields.length; i++) {
			element = document.getElementById(val_email_fields[i]);
			if("" != element.value && !is_email(element.value)) {
				insert_message(element, "This is not a valid email address");
				valid = false;
			}
		}
	}
	
	// Check dates
	if(val_date_fields.length > 0) {
		for(var i = 0; i < val_date_fields.length; i++) {
			element = document.getElementById(val_date_fields[i]);
			if("" != element.value && !is_valid_date(element.value)) {
				insert_message(element, "This is not a valid date");
				valid = false;
			}
		}
	}
	
	// Check matching
	if(val_matching_fields.length > 0) {
		var seed = document.getElementById(val_matching_fields[0]).value;
		for(var i = 0; i < val_matching_fields.length; i++) {
			element = document.getElementById(val_matching_fields[i]);
			if(seed != element.value) {
				insert_message(element, "This field is not matching");
				valid = false;
			}
		}
	}
	
	// For now, specific to Penate, check file is JPG
	var file = document.getElementById("file");
	if(".jpg" != theright(file.value, 4) && ".JPG" != theright(file.value, 4)
	 && ".jpeg" != theright(file.value, 4) && ".JPEG" != theright(file.value, 4)
	 && "" != file.value) {
		valid = false;
		element = document.getElementById("file");
		insert_message(element, "File needs to be in JPG format. ");
	}

	return valid;
}

// Clears all previously created validation messages
function clear_validation()
{
	for(var i = 0; i < val_validation_messages.length; i++) {
		(val_validation_messages[i]).parentNode.removeChild(val_validation_messages[i]);
	}
	val_validation_messages = new Array();
}

// Inserts a DIV node with a child text node (message) after element.
// The DIV class is "validation_msg".
function insert_message(element, message)
{
	// Create the node and its text
	msg = document.createElement("div");
	msg.setAttribute("class", "validation_msg");
	text = document.createTextNode(message);
	msg.appendChild(text);
	// Insert new node after validation element
	element.parentNode.insertBefore(msg, element.nextSibling);
	// Add to list of created messages so we can clear
	val_validation_messages[val_validation_messages.length] = msg;
	return msg;
}

function is_email(str)
{
	return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
}

// TODO: implement
function is_valid_date(date)
{
	return true;
}

function theright(str, n)
{
	if (n <= 0)
	   return "";
	else if (n > String(str).length)
	   return str;
	else {
	   var iLen = String(str).length;
	   return String(str).substring(iLen, iLen - n);
	}
}
