(function() {
	var observe = function(element, event, callback) {
		if (element.addEventListener) {
			element.addEventListener(event, callback, false);
		} else {
			if (event == 'focus' || event == 'blur') {
				element['on' + event] = callback;	// trick ie into booty trap!
			} else {
				element.attachEvent('on' + event, callback);
			}
		}
	}

	var validate = function(form) {
		// name?
		if (!form.name.value || form.name.value == window.__default_name || !form.name.value.replace(/\s+/, '').length) {
			alert(window.__name_error);
			form.name.focus();
			return false;
		}

		// phone?
		if (!form.phone.value || form.phone.value == window.__default_phone || ! form.phone.value.match(/^\+?[\s\d]+$/)) {
			alert(window.__phone_error);
			form.phone.focus();
			return false;
		}

		// email?
		if (!form.email.value || form.email.value == window.__default_email || !form.email.value.match(/^[0-9A-Za-z._-]+@(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})$/)) {
			alert(window.__email_error);
			form.email.focus();
			return false;
		}

		// message?
		if (!form.message.value || form.message.value == window.__default_message || !form.message.value.replace(/\s+/, '').length) {
			alert(window.__message_error);
			form.message.focus();
			return false;
		}

		// captcha?
		if (!form.captcha.value) {
			alert(window.__captcha_error);
			form.captcha.focus();
			return false;
		}

		// yak..
		return true;
	}

	observe(window, 'load', function() {
		var elements = ['name', 'phone', 'email', 'message'],
			element = document.getElementById(elements.shift());

		for (; element; element = document.getElementById(elements.shift())) {
			observe(element, 'focus', function() {
				if (this.value == window['__default_' + this.id]) {
					this.value = '';
				}
			});
			observe(element, 'blur', function() {
				if (this.value == '') {
					this.value = window['__default_' + this.id];
				}
			});
		}

		document.getElementById('contact_form').onsubmit = function() {
			return validate(this);
		}
	});
})();

