function ensoValidateNotEmpty(value) {
	return value.match(/\S+/);
}

function ensoValidateEmail(address) {
	return address.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
}

jQuery(document).ready(function() {
	var $ = jQuery;
	
	var form = '#commentform';
	
	var error_message = 'Validation errors occurred. Please confirm the fields and submit it again.';
	var wpcf7ResponseOutput = $('<div class="wpcf7-response-output wpcf7-display-none"></div>').appendTo('#commentform');
	
	var validation_fields = ['#author', '#email', '#comment'];

	$(form).find('input[type=submit]').click(function() {
		var valid = true;
	
		wpcf7ResponseOutput.hide().empty().removeClass('wpcf7-validation-errors wpcf7-display-none');
		$('span.wpcf7-not-valid-tip').remove();
		
		$.each(validation_fields, function(i, f) {
			var field = $(form).find(f);
			if(field.length > 0) {
				var message = '';
				
				if(field.attr('name') == 'email') {
					if(!ensoValidateEmail(field.val())) {
						message = 'Email address seems invalid.';
					}
				}
				
				if(!ensoValidateNotEmpty(field.val())) {
					message = "Please fill the required field.";
				}
				
				if(message) {
					valid = false;
					
					var into = field.parent();
					into.append('<span class="wpcf7-not-valid-tip">' + message + '</span>');
					$('span.wpcf7-not-valid-tip').mouseover(function() {
						$(this).fadeOut('fast');
					});
					into.find(':input').mouseover(function() {
						into.find('.wpcf7-not-valid-tip').not(':hidden').fadeOut('fast');
					});
					into.find(':input').focus(function() {
						into.find('.wpcf7-not-valid-tip').not(':hidden').fadeOut('fast');
					});
				}
			}
		});
		
		if(!valid) {
			wpcf7ResponseOutput.append(error_message).addClass('wpcf7-validation-errors').slideDown('fast');
		}
		
		return valid;
	});
});
