function validate(elem, errorElem) {
	elem.submit(function() {
		$(".error").removeClass('error');
		shouldSubmit = true;
		$(this).find('.required input, .required select').each(function() {
			sv = sValidate($(this));
			shouldSubmit = (sv && shouldSubmit);
			if(!sv) {
				$(this).closest('.required').find('.error-message').appendTo(errorElem);
			}
		});
		return shouldSubmit;
	});
}

function sValidate(field) {
	if(field.hasClass('notempty')) {
		if(field.closest('.required').hasClass('check')) {
			if(!field.is(':checked')) {
				field.closest('.required').addClass('error');
				return false;
			}
		} else {
			if(field.val() == '') {
				field.closest('.required').addClass('error');
				return false;
			}
		}
	}
	if (field.hasClass('numeric')) {
		if(field.val() == '' || field.val().match(/[^\d]/g)) {
			field.closest('.required').addClass('error');
			return false;
		}
	}
	if(field.hasClass('email')) {
		if(!field.val().match(/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]{2,4}|museum|travel)$/i)) {
			field.closest('.required').addClass('error');
			return false;
		}
	}
	if(field.hasClass('length') && field.attr('length') !== undefined) {
		if(field.val().length != field.attr('length')) {
			field.closest('.required').addClass('error');
			return false;
		}
	}
	return true;
}

function twiddleTicks() {
	var _this = $(this).closest('.required');
	var isFilled = true;

	if(_this.hasClass('radio')) {
		isFilled = _this.find(":checked").size() > 0;
	} else {
		//this takes care of the case where you have multiple inputs that should be validated as one - like a phone number
		_this.find('input, select').each(function() {
			if(isFilled && $(this).val() != '') {
				if($(this).hasClass('length')) {
					if($(this).val().length != $(this).attr('length')) {
						isFilled = false;
					}
				}
			} else {
				isFilled = false;
			}
		});
	}

	if(isFilled) {
		//fix for IE7
		$(this).parent().css({background: "transparent url('../img/icons/16x16/tick.png') no-repeat scroll 98% 50%"});
		$(this).closest('.error').removeClass('error');
	} else {
		$(this).parent().css({background: "transparent none no-repeat scroll 0 0"});
	}
};

jQuery(function($) {
	$("input.extend").focus(function() {
		$(this).animate({width: "+=150px"});
	}).blur(function() {
		$(this).animate({width: "-=150px"});
	});
});