// whitespace characters
var whitespace = " \t\n\r";

// Check whether string s is empty.
function isEmpty(s){
	return ((s == null) || (s.length == 0))
}
function isWhitespace(s){
	var i;
	if (isEmpty(s)) return true;
	for (i = 0; i < s.length; i++){
		var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1) return false;
	}
	return true;
}

// define regexs
var nameRegxp 		= /^([a-zA-Z -]+)$/;
var emailRegxp 		= /^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,6}){1,2}$/;
var captchaRegxp 	= /^([a-zA-Z0-9]+)$/;

// trim functions
function LTrim(str) {
    var s = new String(str);
    var whitespace = new String(' \t\n\r');
    if (whitespace.indexOf(s.charAt(0)) != -1) {
        var j=0, i = s.length;
        while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
            j++;
        s = s.substring(j, i);
    }
    return s;
}
function RTrim(str) {
    var s = new String(str);
    var whitespace = new String(' \t\n\r');
    if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
        var i = s.length - 1;
        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
            i--;
        s = s.substring(0, i+1);
    }
    return s;
}
function Trim(str) {
    return RTrim(LTrim(str));
}

// form validation
function validateIt(form){
	// Trim whitespace
	for(var x = 0; x < form.elements.length; x++) {
		if(form.elements[x].type == 'text' || form.elements[x].type == 'hidden') {
	    	form.elements[x].value = Trim(form.elements[x].value);
		}
	}
	// fromName
	str = form.fromName.value;
	if (isWhitespace(str)) {
		alert("Please enter your name.");
		form.fromName.focus();
		return false;
	}
	if (nameRegxp.test(str) != true){
		alert("Your name contains invalid characters.");
		form.fromName.focus();
		form.fromName.select();
		return false;
	}
	
	// fromEmail
	str = form.fromEmail.value;
	if (isWhitespace(str)) {
		alert("Please enter your email address.");
		form.fromEmail.focus();
		return false;
	}
	if (emailRegxp.test(str) != true){
		alert("Your email is invalid.");
		form.fromEmail.focus();
		form.fromEmail.select();
		return false;
	}

	// toName0
	str = form.toName0.value;
	if (isWhitespace(str)) {
		alert("Please enter your friend's name.");
		form.toName0.focus();
		return false;
	}
	if (nameRegxp.test(str) != true){
		alert("Your friend's name contains invalid characters.");
		form.toName0.focus();
		form.toName0.select();
		return false;
	}
	// toEmail0
	str = form.toEmail0.value;
	if (isWhitespace(str)) {
		alert("Please enter your friend's email address.");
		form.toEmail0.focus();
		return false;
	}
	if (emailRegxp.test(str) != true){
		alert("Your friend's email is invalid.");
		form.toEmail0.focus();
		form.toEmail0.select();
		return false;
	}
	// captcha
	str = form.captcha.value;
	if (isWhitespace(str)) {
		alert("Please enter the security code.");
		form.captcha.focus();
		return false;
	}
	if (captchaRegxp.test(str) != true){
		alert("Security code contains invalid characters (letters and numbers only please).");
		form.captcha.focus();
		form.captcha.select();
		return false;
	}
	return true;
}