/* Form functions
 * REQUIRES PROTOTYPE!
 * (c) 2008-2009 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('feedback/send-feedback.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') {
			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() {
	hideAll();
	$('form-error').style.display = 'block';
}
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='feedback/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 ($('form-business')) {
	    // not all pages have the business name entry
	    if (isEmpty($('form-business').value)) {
    		markError($('form-business'));
    		foundErrors=true;
    	} else {
    		$('form-business').removeClassName('error');
    	}
	}
	
	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;
}