$(function()
 {
	$("#dialog").dialog("destroy");

	var name = $("#name"),
		email = $("#email"),
        subject = $("#subject"),
        message = $("#message"),
		friend_name = $("#friend_name"),
		friend_email = $("#friend_email"),
		allFields = $([]).add(name).add(email).add(subject).add(message).add(friend_name).add(friend_email),
		tips = $("#validateTips");

	function updateTips(t)
	{
		tips.text(t).effect("highlight", {}, 1500);
	}

	function checkLength(o, n, min, max)
	{
	   
		if ( o.val().length > max || o.val().length < min )
		{
			o.addClass('ui-state-error');
			o.focus();
			updateTips(!(min == max) ? "Length of [" + n + "] must be between " + min + " and " + max : "[" + n + "] cannot be left blank");
			return false;
		} else {
			return true;
		}
	}

	function checkEmpty(o, n)
	{
		if ( o.val().length < 1 )
		{
			o.addClass('ui-state-error');
			o.focus();
			updateTips("[" + n + "] cannot be left blank");
			return false;
		} else {
			return true;
		}
	}

	function checkRegexp(o, regexp, n)
	{
		if ( !( regexp.test( o.val() ) ) )
		{
			o.addClass('ui-state-error');
			o.focus();
			updateTips(n);
			return false;
		} else {
			return true;
		}
	}
	
	$(".dialog").dialog({
		bgiframe: true,
		autoOpen: false,
		width: 450,
		height: 410,
		modal: true,
		buttons: {
			'SEND EMAIL': function() {
				var bValid = true;
				allFields.removeClass('ui-state-error');

				bValid = bValid && checkLength(name, "Name", 3, 30);
				bValid = bValid && checkRegexp(name, /^[a-z]([0-9a-z _'])+$/i, "[Name] may consist of a-z, 0-9, whitespaces, underscores, begin with a letter");

				bValid = bValid && checkLength(email, "Email", 6, 40);
				bValid = bValid && checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "Please enter VALID [Email] :: example - yourname@domain.com");

   				bValid = bValid && checkLength(friend_name, "Friend\'s Name", 3, 30);
				bValid = bValid && checkRegexp(friend_name, /^[a-z]([0-9a-z _'])+$/i, "[Friend\'s Name] may consist of a-z, 0-9, whitespaces, underscores, begin with a letter");

				bValid = bValid && checkLength(friend_email, "Friend\'s Email", 6, 40);
				bValid = bValid && checkRegexp(friend_email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "Please enter VALID [Friend\'s Email] :: ex - yourname@domain.com");

				if (bValid)
				{
					$(".dialog form").submit();

					$(this).dialog('close');

					return false;
				}
			},
			' CANCEL ': function() {
				$(this).dialog('close');
			}
		},
		close: function() {
			allFields.val('').removeClass('ui-state-error');
		}
	});
	
	$('.ui-button').click(function() {
		$('#dialog').dialog('open');
	})
	.hover(
		function(){ 
			$(this).addClass("ui-state-hover"); 
		},
		function(){ 
			$(this).removeClass("ui-state-hover"); 
		}
	).mousedown(function(){
		$(this).addClass("ui-state-active"); 
	})
	.mouseup(function(){
			$(this).removeClass("ui-state-active");
	});
});
