function error_message(item, message) {
	error_div = $('<div class="error">' + message + '</div>');
	error_div.hide();
	item.after(error_div);
	error_div.slideDown();
}

Input.prototype.get_value = function() {
	return this.item.attr('value');
}

Input.prototype.set_value = function (value) {
	this.item.attr('value', value);
}

Input.prototype.validate_notblank = function(message) {
	var d = this.default_value;
	return this.validate(function (str) { return str != d; }, message);
}

Input.prototype.validate = function(checker, message) {
	if (checker(this.get_value())) {
		return true;
	} else {
		error_message(this.item, message);
		return false;
	}
}

function Input(item) {
	item.data('Input', this);
	this.item = item;
	this.default_value = item.attr('value');

	item.focus(function(evt) {
		itm = $(this).data('Input');
		if (itm.default_value == itm.get_value()) {
			itm.item.css({'font-style':'normal', 'color':'#222'})
			itm.set_value('');
		}
	});

	item.blur(function(evt) {
		itm = $(this).data('Input');
		if (itm.get_value() == '') {
			itm.item.css({'font-style': 'italic', 'color': '#999'});
			itm.set_value(itm.default_value);
		}
	});
}

function is_valid_email(str) {
	return str.match(/[a-z,A-Z,0-9,!,#,$,%,&,',*,+,\-,\/,=,?,^,_,`,{,|,},~]+(?:\.[a-z,A-Z,0-9,!,#,$,%,&,',*,+,\-,\/,=,?,^,_,`,{,|,},~]+)*@[a-z,A-Z,0-9,\-]+(?:\.[a-z,A-Z,0-9,\-]+)+/) ? true : false;
}

function not_blank(str) {
	return str != '';
}

$(document).ready(function() {
	$('#contact_link').click(function(evt) {
		evt.preventDefault()
		$.get('contact.html', {}, function(data) {
			dialog($(data));

			var e = new Input($('#email'));
			var s = new Input($('#subject'));
			var m = new Input($('#message'));

			var email_message = "Please supply a valid email address";
			var subject_message = "Please supply a subject for your email";
			var message_message = "Please write a message";

			$('#submit').click(function(evt) {
				evt.preventDefault();
				if (document.submit_link_clicked) { return; }
				document.submit_link_clicked = true;
				$('.error').remove();
				if (e.validate(is_valid_email, email_message) &
					s.validate_notblank(subject_message) &
					m.validate_notblank(message_message)) {
					$('#submit a').slideUp();
					$('#sending_spinner').slideDown();
					$.post('contact.php', $('#contact_form').serialize(),
						function(data) {
							if (data.success) {
								dialog('Message sent succesfully!');
							} else {
								if (data.email_error) {
									error_message(e.item, email_message);
								}
								if (data.subject_error) {
									error_message(s.item, subject_message);
								}
								if (data.message_error) {
									error_message(m.item, message_message);
								}

								document.submit_link_clicked = false;

								$('#sending_spinner').slideUp();
								$('#submit a').slideDown();
							}
						}, 'json');
				} else {
					document.submit_link_clicked = false;
				}
			});
		});
	});
});

