/** Form functions
 ** (c) 2008 Jerpix and Jeff Pickhardt
 **/

function randomString(length) {
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var randomStr = '';
	for (var i=0; i<length; i++) {
		var randNum = Math.floor(Math.random() * chars.length);
		randomStr += chars.substring(randNum,randNum+1);
	}
	return randomStr;
}

function sendMessage() {
	if(validate()) {
		return false;
	}
	showThinking();
	new Ajax.Request('cgi-bin/send-msg.php?ajax=true', {
		method: 'post',
		parameters: Form.serialize($('form-contact')),
		onSuccess: function(transport) {
				interpretResult(transport);
			},
		onFailure: function(transport) {
				showError();
			}
		});
	return false;
}
function interpretResult(transport) {
	if (transport.responseText=='success') {
		showThanks();
	} else {
		if (transport.responseText=='error: captcha') {
			showError(); // removed captcha since the bots aren't bothering this
			//errorCaptcha();
		} else {
			showError();
		}
	}
}
function hideAll() {
	$('form-contact').style.display = 'none';
	$('form-thinking').style.display = 'none';
	$('form-received').style.display = 'none';
	$('form-error').style.display = 'none';
}
function showThinking() {
	hideAll();
	$('form-thinking').style.display = 'block';
}
function showThanks() {
	hideAll();
	$('form-received').style.display = 'block';
}
function showError() {
	setEmailAddress();
	hideAll();
	$('form-error').style.display = 'block';
}
function setEmailAddress() {
	// this isn't very complicated encryption, but it should be sufficient to keep bots from bothering to get my addr
	var addr='jrpi';
	addr=addr+'ck@';
	addr=addr+'stanfo';
	addr=addr+'rd.e';
	addr=addr+'du';
	$('my-email').innerHTML='<a href="mailto:'+addr+'">'+addr+'</a>';
}
function errorCaptcha() {
	hideAll();
	$('form-contact').style.display = 'block';
	markError($('form-captcha'));
	markError($('form-captcha-image'));
	$('form-captcha-image').src='';
	setTimeout('newCaptcha()', 200);
}
function newCaptcha() {
	$('form-captcha-image').src='cgi-bin/captcha.php?'+randomString(20);
}
function isInvalidEmail(str) {
	var emailPattern = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; // credit to dustindiaz.com
	if (str.match(emailPattern)) { // regexp for (anything)@(anything).(anything)
		return false;
	}
	return true;
}
function isEmpty(str) {
	if (str == '') {
		return true;
	} else {
		return false;
	}
}
function markError(elem) {
	elem.addClassName('error');
	Effect.Shake(elem);
	foundErrors=true;
}
function validate() {
	var foundErrors=false;
	
	if (isEmpty($('form-name').value)) {
		markError($('form-name'));
		foundErrors=true;
	} else {
		$('form-name').removeClassName('error');
	}
	
	if (isEmpty($('form-email').value) || isInvalidEmail($('form-email').value)) {
		markError($('form-email'));
		foundErrors=true;
	} else {
		$('form-email').removeClassName('error');
	}
	
	if (isEmpty($('form-message').value)) {
		markError($('form-message'));
		foundErrors=true;
	} else {
		$('form-message').removeClassName('error');
	}
	
	//if (isEmpty($('form-captcha').value)) {
	//	markError($('form-captcha'));
	//	foundErrors=true;
	//} else {
	//	$('form-captcha').removeClassName('error');
	//}
	//$('form-captcha-image').removeClassName('error');
	
	return foundErrors;
}