function error_message(item, message) {
	error_div = $('<div class="contact_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) {
	return this.validate(function (str) { return str != ''; }, 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) {
	this.item = item;
}

function is_positive_int(str) {
    return str == '' || str.match(/^\d+$/);
}

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,\-]+)+$/);
}

function not_blank(str) {
	return str != '';
}

$(document).ready(function() {
    document.submit_link_clicked = false;

	$('.contactlink').click(function(evt) {
		evt.preventDefault();

        var url = this.href.replace('/contact/', '/contact/ajax/');
		$.get(url, {}, function(data) {
			dialog($(data));

			var e = new Input($('#id_sender'));
			var s = new Input($('#id_subject'));
            var sn = new Input($('#id_stock_number'));
			var m = new Input($('#id_message'));

			var email_message = "Please supply a valid email address";
			var subject_message = "Please supply a subject for your email";
            var stock_message = "Please supply a valid stock number";
			var message_message = "Please write a message";

			$('#submit').click(function(evt) {
				evt.preventDefault();

				if (document.submit_link_clicked) { 
                    return;
                }
				document.submit_link_clicked = true;

				$('.contact_error').remove();

                if (e.validate(is_valid_email, email_message) &
                        s.validate_notblank(subject_message) &
                        sn.validate(is_positive_int, stock_message) &
                        m.validate_notblank(message_message)) {
					$('#submit a').slideUp();
					$('#sending_spinner').slideDown();
					$.post('/contact/ajax/', $('#contact_form').serialize(),
						function(data) {
							if (data.success) {
								dialog('Message sent succesfully!');
							} else {
								if (data.sender) {
									error_message(e.item, data.sender);
								}
								if (data.subject) {
									error_message(s.item, data.subject);
								}
								if (data.message) {
									error_message(m.item, data.message);
								}
                                if (data.stock_number) {
                                    error_message(sn.item, data.stock_number);
                                }

								document.submit_link_clicked = false;

								$('#sending_spinner').slideUp();
								$('#submit a').slideDown();
							}
						}, 'json');
				} else {
					document.submit_link_clicked = false;
				}
			});
		});
	});
});

