// 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;
}

var alphanumchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒšœŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ0123456789";
var alphachars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒšœŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ";

function isAlphanumeric(s, valid_chars) {
	var allValid = true;
	var ch = '';
	for (i = 0;  i < s.length;  i++) {
		ch = s.charAt(i);
		for (j = 0;  j < valid_chars.length;  j++)
			if (ch == valid_chars.charAt(j))
				break;
		if (j == valid_chars.length) {
			allValid = false;
			break;
		}
	}
	return allValid;
}

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));
}

function textCounter(field, countfield, maxlimit) {
	if (field.value.length > maxlimit) // if too long...trim it!
		field.value = field.value.substring(0, maxlimit);
	// otherwise, update 'characters left' counter
	else 
		countfield.value = maxlimit - field.value.length;
}

function validEmail(email) {
	invalidChars = " /:,;"
	if (email == "") {						// cannot be empty
		return false
	}
	for (i=0; i<invalidChars.length; i++) {	// does it contain any invalid characters?
		badChar = invalidChars.charAt(i)
		if (email.indexOf(badChar,0) > -1) {
			return false
		}
	}
	atPos = email.indexOf("@",1)			// there must be one "@" symbol
	if (atPos == -1) {
		return false
	}
	if (email.indexOf("@",atPos+1) != -1) {	// and only one "@" symbol
		return false
	}
	periodPos = email.indexOf(".",atPos)
	if (periodPos == -1) {					// and at least one "." after the "@"
		return false
	}
	if (periodPos+3 > email.length)	{		// must be at least 2 characters after the "."
		return false
	}
	return true
}

function checkForm(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);
		}
	}
	// type of inquiry
	if (form.what.selectedIndex == 0){
		alert('Please choose a subject.');
		form.what.focus();
		return false;
	}
	// name
	str = form.fullname.value;
	if (isWhitespace(str)) {
		alert('Please enter your full name.');
		form.fullname.focus();
		return false;
	}
	if(!isAlphanumeric(str, alphachars + ',()-. \'')) {
		alert('Invalid character in your name.');
		form.fullname.select();
		form.fullname.focus();
		return false;    
	}
	// organization
	str = form.organization.value;
	if(!isAlphanumeric(form.organization.value, alphachars + ',()-. \'')) {
		alert('Invalid character in your organization.');
		form.organization.select();
		form.organization.focus();
		return false;    
	}
	// email
	str = form.email.value;
	if (isWhitespace(str)) {
		alert('Please enter your valid e-mail address.');
		form.email.focus();
		return false;
	}
	if (!validEmail(form.email.value)) {
		alert("Please provide a VALID email address.")
		form.email.focus()
		form.email.select()
		return false
	}
	// telephone
	str = form.telephone.value;
	if (isWhitespace(str)) {
		alert('Please enter your telephone number.');
		form.telephone.focus();
		return false;
	}
	if(!isAlphanumeric(form.telephone.value, alphanumchars + ',. -()+')) {
		alert('Invalid character telephone number.');
		form.telephone.select();
		form.telephone.focus();
		return false;    
	}
	// comments
	
	// disable button
	form.xsubmit.disabled=true;
	// message
	alert('Thank You.\n\nYour form will now be submitted. Please do not click submit again.\n\nYouHaveHomeWork.com will contact you shortly.');
	// return false for now
	return true;
}

