function validateme(form) {
	return checkRequired();
	//return false;
}

var errors = [];
errors[0] = 'Your <a href="#first_name">First Name</a> is required.';
errors[1] = 'You did not enter a complete <a href="#areacode">phone number</a>. Please include your area code. Alternatively, you may specify a valid <a href="#email">email address</a>.';
errors[2] = 'You must enter a valid <a href="#email">email address</a>.';
errors[3] = 'Please include either your <a href="#areacode">phone number</a> or your <a href="#email">email address</a>.';
errors[4] = 'You asked us to reply via email, but the <a href="#email">email address</a> you entered is invalid.';
errors[5] = 'You asked us to reply via phone, but the <a href="#areacode">phone number</a> you entered is incomplete.';
errors[6] = 'Please enter your <a href="#comments">comments or questions</a>.';
errors[7] = 'Please enter a number in the <a href="#qty">Quantity field</a>.';


$(window).load(function () {
	var code = '<strong>Please complete all required fields.</strong><br /><ul>';
	for (i=0; i < errors.length; i++) code += '<li class="error" id="error'+i+'">'+errors[i]+'</li>';
	code += '</ul>';
	$("#errorarea").html(code);
});

function throwError(errorId) {
	if ($("#errorarea").is(":hidden")) {
		// fade in error area
		$("#error"+errorId).show();
		$("#errorarea").fadeIn('fast');
	} else {
		$("#error"+errorId).fadeIn('fast');
	}
	$.scrollTo("#errorarea", 400);
}

function hideError(errorId) {
	if ($("#errorarea li:visible").length==1) {
		// if all are to be hidden
		$("#errorarea").fadeOut('fast', function() {
			$("#error"+errorId).hide();
		});
	} else {
		$("#error"+errorId).fadeOut('fast');
	}
}

var focused = false;
function focusFirst(focusedObj) {
	if (!focused) {
		focused = true;
		focusedObj.focus();
		focusedObj.bind('validate', function() {
			focused = false;
		});
	}
}

function checkValidPhone() {
	feedback = $("#phone2 ~ .feedback");
	if ($("#areacode").val().length<3 || $("#phone1").val().length<3 || $("#phone2").val().length<4) {
		// bad
		if (!feedback.hasClass('wrong') && !feedback.hasClass('ok') && $("#areacode").val().length==0) return false;
		// ^^ skip empty because this is not really required
		if (!feedback.hasClass('wrong')) {
			feedback.hide();
			feedback.toggleClass('wrong', true);
			feedback.toggleClass('ok', false);
			feedback.fadeIn('fast');
			$("#areacode").bind('keyup', function(){
				checkValidPhone();
			});
			$("#phone1").bind('keyup', function(){
				checkValidPhone();
			});
			$("#phone2").bind('keyup', function(){
				checkValidPhone();
			});
		}
		return false;
	} else {
		// good
		if (!feedback.hasClass('ok')) {
			feedback.hide();
			feedback.toggleClass('wrong', false);
			feedback.toggleClass('ok', true);
			feedback.fadeIn('fast');
			$("#areacode").unbind('keyup'); // clear keyup function
			$("#phone1").unbind('keyup'); // clear keyup function
			$("#phone2").unbind('keyup'); // clear keyup function
			$("#areacode").trigger('validate');
		}
		return true;
	}
}

function checkValidEmail() {
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	feedback = $("#email ~ .feedback");
   if(reg.test($("#email").val()) == false) {
	  if (!feedback.hasClass('wrong') && !feedback.hasClass('ok') && $("#email").val().length==0) return false;
		// ^^ skip empty because this is not really required
		if (!feedback.hasClass('wrong')) {
			feedback.hide();
			feedback.toggleClass('wrong', true);
			feedback.toggleClass('ok', false);
			feedback.fadeIn('fast');
			$("#email").bind('keyup', function(){
				checkValidEmail();
			});
		}
		return false;
   } else {
		// good
		if (!feedback.hasClass('ok')) {
			feedback.hide();
			feedback.toggleClass('wrong', false);
			feedback.toggleClass('ok', true);
			feedback.fadeIn('fast');
			$("#email").unbind('keyup'); // clear keyup function
			$("#email").trigger('validate');
		}
		return true;
   }
}

function checkRequired() {
	var returnme = true;
	focused = false;
	// first name
	if(checkempty('first_name', false)) {
		focusFirst($("input[name='first_name']"));
		throwError(0);
		$("input[name='first_name']").bind('validate', function() {
			hideError(0);
		});
		$("a[href='#first_name']").click(function () {
			$("input[name='first_name']").focus();
			return false;
		});
		returnme = false;
	}
	
	//make sure Qty is a number if it has a value
	
	if(!checkempty('qty', false)) {	
		//it is not empty, check to make sure it's a number
		if(!IsNumeric($('input[name="qty"]').val())) {			
			throwError(7);
			$("input[name='qty']").bind('validate', function() {
			hideError(7);
		});
		$("a[href='#qty']").click(function () {
			$("input[name='qty']").focus();
			return false;
		});
		returnme = false;
		}
	}
	
	var email_valid = checkValidEmail();
	var phone_valid = checkValidPhone();
	
	if (!email_valid && !phone_valid) {
		// phone OR email is required
		if ($("#areacode").val().length > 0 || $("#phone1").val().length > 0 || $("#phone2").val().length > 0) {
			// highlight phone
			focusFirst($("#areacode"));
			throwError(1);
			$("#areacode").bind('validate', function() {
				hideError(1);
			});
			$("#email").bind('validate', function() {
				hideError(1);
			});
			$("a[href='#areacode']").click(function () {
				$("#areacode").focus();
				return false;
			});
			$("a[href='#email']").click(function () {
				$("#email").focus();
				return false;
			});
			returnme = false;
		} else if ($("#email").val().length > 0) {
			// highlight email - validation msg
			focusFirst($("#email"));
			throwError(2);
			$("#email").bind('validate', function() {
				hideError(2);
			});
			$("a[href='#email']").click(function () {
				$("#email").focus();
				return false;
			});
			returnme = false;
		} else {
			// must specify either
			focusFirst($("#email"));
			throwError(3);
			$("#areacode").bind('validate', function() {
				hideError(3);
			});
			$("#email").bind('validate', function() {
				hideError(3);
			});
			$("a[href='#areacode']").click(function () {
				$("#areacode").focus();
				return false;
			});
			$("a[href='#email']").click(function () {
				$("#email").focus();
				return false;
			});
			returnme = false;
		}
	}
	
	if (!email_valid && $("#respondby").val()=='Email') {
		focusFirst($("#email"));
		throwError(4);
		$("#email").bind('validate', function() {
			hideError(4);
		});
		$("a[href='#email']").click(function () {
			$("#email").focus();
			return false;
		});
		returnme = false;
	}
	
	if (!phone_valid && $("#respondby").val()=='Phone') { 
		focusFirst($("#areacode"));
		throwError(5);
		$("#areacode").bind('validate', function() {
			hideError(5);
		});
		$("a[href='#areacode']").click(function () {
			$("#areacode").focus();
			return false;
		});
		returnme = false;
	}
	
	// comments
	if(checkempty('comments', true)) {
		focusFirst($("textarea[name='comments']"));
		throwError(6);
		$("textarea[name='comments']").bind('validate', function() {
			hideError(6);
		});
		$("a[href='#comments']").click(function () {
			$("textarea[name='comments']").focus();
			return false;
		});
		returnme = false;
	}
	
	
	
	
	return returnme;
}

function IsNumeric(input){
    var RE = /^-{0,1}\d*\.{0,1}\d+$/;
    return (RE.test(input));
}


function checkempty(name, textarea) {
	// true if empty
	if (textarea) {
		element = 'textarea';
	} else {
		element = 'input';
	}
	feedback = $(element+"[name='"+name+"'] ~ .feedback");
	if ($(element+"[name='"+name+"']").val() != '') {
		// ~ gets the next sibling
		// not empty
		if (!feedback.hasClass('ok')) {
			feedback.hide();
			feedback.toggleClass('wrong', false);
			feedback.toggleClass('ok', true);
			feedback.fadeIn('fast');
			$(element+"[name='"+name+"']").unbind('keyup'); // clear keyup function
			$(element+"[name='"+name+"']").trigger('validate');
		}
		return false;
	} else {
		// empty
		if (!feedback.hasClass('wrong')) {
			feedback.hide();
			feedback.toggleClass('wrong', true);
			feedback.toggleClass('ok', false);
			feedback.fadeIn('fast');
			$(element+"[name='"+name+"']").bind('keyup', function(){
				checkempty(name, textarea);
			});
		}
		return true;
	}
}

$(document).ready(function () {
	$("input[name='first_name']").blur(function() {checkempty('first_name', false)});
	$("textarea[name='comments']").blur(function() {checkempty('comments', true)});
	$("#phone2").blur(function() {checkValidPhone()});
	$("#email").blur(function() {checkValidEmail()});
	
	$("#areacode").autotab({ target: 'phone1', format: 'numeric' });
	$("#phone1").autotab({ target: 'phone2', format: 'numeric', previous: 'areacode' });
	$("#phone2").autotab({ previous: 'phone1', format: 'numeric' });
});
