// Form Validation Functions
// Copyright 2004 Independent Digital Entertainment & Arts, LLC
// http://www.ideadistributors.com
// contact@ideadistributors.com
// Inspired by Stephen Poley's scripts and ideas. Check him out: http://www.xs4all.nl/~sbpoley/

var clearImg = "IDEAimages/clear.gif";
var warnImage = "IDEAimages/warn.gif";

// Test whether browser is capable changing images
function browserDOMImageCheck (elementId) {
	if (!document.getElementById) {
		return false;
	}
	var elem = document.getElementById(elementId);
	if (elem.nodeType != 1) { // 1 is image node type
		return false;
	}
	return true;
}

// Test whether browser is capable of changing text
function browserDOMTextCheck (elementId) {
	if (!document.getElementById) {
		return false;
	}
	var elem = document.getElementById(elementId);
	if (!elem.firstChild) {
		return false;
	}
	if (elem.firstChild.nodeType != 3) { // 3 is text node type
		return false;
	}
	return true;
}


// Clear form image
function clearImage (elementId) {
	// Setting message to empty string can cause problems. Using nbsp instead.
	var elem = document.getElementById(elementId);
	elem.src = clearImg;
}

// Update form image
function updateImage (elementId, imageURL) {
	// Setting image to null can cause problems. Using clear gif instead.
	var emptyString = /^\s*$/;
	if (emptyString.test(imageURL)) 
		imageURL = clear.gif;
	var elem = document.getElementById(elementId);
	elem.src = imageURL;  
}


// Clear form message
function clearMessage (elementId) {
	// Setting message to empty string can cause problems. Using nbsp instead.
	var elem = document.getElementById(elementId);
	elem.firstChild.nodeValue = String.fromCharCode(160); // 160 is nbsp character ;  
}

// Update form message
function updateMessage (elementId, msgtype, message) {
	// Setting message to empty string can cause problems. Using nbsp instead.
	var emptyString = /^\s*$/;
	if (emptyString.test(message)) 
		message = String.fromCharCode(160); // 160 is nbsp character    
	
	var elem = document.getElementById(elementId);
	elem.firstChild.nodeValue = message;  
	elem.className = msgtype;
}


// Trim leading and trailing space from a string
function trimString(str) {
	return str.replace(/^\s+|\s+$/g, '')
}


// Check whether element is empty
function isEmpty (element) {
	var regExp=/^\s*$/;
	return regExp.test(element.value);
}

// Check whether element contains alpha characters
function hasAlpha (element) {
	var regExp=/[A-Za-z]/;
	return regExp.test(element.value);
}

// Check whether email is valid
function isValidEmail (element) {
	var regExp = /^\s*[\w-\.]*@(([\w-\.]*\.[A-Za-z]{2,5})|(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})){1}\s*$/
	return regExp.test(element.value);
}

// Check whether two element values match
function valueMatch (element1, element2) {
	var email1 = trimString(element1.value).toLowerCase();
	var email2 = trimString(element2.value).toLowerCase();
	return (email1 == email2);
}


function validateName (element, imageId, messageId, fieldName) {
	// Test for browser DOM capability
	if ( !browserDOMImageCheck(imageId) || !browserDOMTextCheck(messageId)) {
		return true;
	}

	// Clear warnings
	clearImage(imageId);
	clearMessage (messageId);

	// Check existence
	if (isEmpty(element)) {
		updateMessage (messageId, "note", "Missing " + fieldName + ".");
		updateImage (imageId, warnImage);
		return false;
	}
	
	// Check for valid first name
	if (!hasAlpha(element)) {
		updateMessage (messageId, "note", "Invalid " + fieldName + ".");
		updateImage (imageId, warnImage);
		return false;
	}

	return true;
}


function validateEmail(element, imageId, messageId, fieldName) {
	// Test for browser DOM capability
	if ( !browserDOMImageCheck(imageId) || !browserDOMTextCheck(messageId)) {
		return true;
	}

	// Clear warnings
	clearImage(imageId);
	clearMessage (messageId);

	// Check existence
	if (isEmpty(element)) {
		updateMessage (messageId, "note", "Missing " + fieldName + ".");
		updateImage (imageId, warnImage);
		return false;
	}
	
	// Check for valid email
	if (!isValidEmail(element)) {
		updateMessage (messageId, "note", "Invalid " + fieldName + ".");
		updateImage (imageId, warnImage);
		return false;
	}

	return true;
}

