var CommentForm = {
	init: function() {
		this.form = $('comment_form');
		if (this.form) {
			this.form.addEvent('submit', function() { return false; });
			$('submit_comment').addEvent('click', this.validate.bindWithEvent(this));
		}
	},

	__isBlank: function(value) {
		return value.trim().length == 0;
	},

	__isValidEmail: function(value) {
		var regex = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
		return regex.test(value);
	},

	__isValidURL: function(value) {
		var regex = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
		return regex.test(value);
	},

	validate: function(e) {
		var valid = this.validateName();
		valid &= this.validateEmail();
		valid &= this.validateURL();
		valid &= this.validateComment();

		if (valid) {
			this.form.submit();
		}
	},

	validateName: function(e) {
		var value = this.form.getElementById('id_name').getProperty('value');
		var label = this.form.getElementById('id_name_error');
		var valid = true;
		if (this.__isBlank(value)) {
			label.set('text', 'this field is required');
			valid = false;
		} else {
			label.set('text', '');
		}
		return valid;
	},

	validateEmail: function(e) {
		var value = this.form.getElementById('id_email').getProperty('value');
		var label = this.form.getElementById('id_email_error');
		var valid = true;
		if (this.__isBlank(value)) {
			label.set('text', 'this field is required');
			valid = false;
		} else if (!this.__isValidEmail(value)) {
			label.set('text', 'Enter a valid e-mail address.');
			valid = false;
		} else {
			label.set('text', '');
		}
		return valid;
	},

	validateURL: function(e) {
		var value = this.form.getElementById('id_url').getProperty('value');
		var label = this.form.getElementById('id_url_error');
		var valid = true;
		if (!this.__isBlank(value) && !this.__isValidURL(value)) {
			label.set('text', 'Enter a valid URL.');
			valid = false;
		} else {
			label.set('text', '');
		}
		return valid;
	},

	validateComment: function(e) {
		var value = this.form.getElementById('id_comment').getProperty('value');
		var label = this.form.getElementById('id_comment_error');
		var valid = true;
		if (this.__isBlank(value)) {
			label.set('text', 'this field is required');
			valid = false;
		} else {
			label.set('text', '');
		}
		return valid;
	}
};

window.addEvent('domready', function() {
	CommentForm.init();
});