var Focus = function () {
	this.className = 'default';
	switch(this.name) {
		case 'name':
			if (this.value == defaults.getName()) {
				this.value = '';
			}
			break;
		case 'email':
			if (this.value == defaults.getEmail()) {
				this.value = '';
			}
			break;
		case 'subject':
			if (this.value == defaults.getSubject()) {
				this.value = '';
			}
			break;
		case 'message':
			if (this.value == defaults.getMessage()) {
				this.value = '';
			}
			break;
	}
}

var Blur = function () {
	switch(this.name) {
		case 'name':
			if (this.value == "") {
				this.value = defaults.getName();
			}
			break;
		case 'email':
			if (this.value == "") {
				this.value = defaults.getEmail();
			}
			break;
		case 'subject':
			if (this.value == "") {
				this.value = defaults.getSubject();
			}
			break;
		case 'message':
			if (this.value == "") {
				this.value = defaults.getMessage();
			}
			break;
	}
}

function DefForm () {}

DefForm.prototype._name; 
DefForm.prototype._email;
DefForm.prototype._subject;
DefForm.prototype._message;

DefForm.prototype.setName = function (txt) {
	this._name = txt;
}
DefForm.prototype.setEmail = function (txt) {
	this._email = txt;
}
DefForm.prototype.setSubject = function (txt) {
	this._subject = txt;
}
DefForm.prototype.setMessage = function (txt) {
	this._message = txt;
}

DefForm.prototype.getName = function () {
	return this._name;
}

DefForm.prototype.getEmail = function () {
	return this._email;
}
DefForm.prototype.getSubject = function () {
	return this._subject;
}
DefForm.prototype.getMessage = function () {
	return this._message;
}

var defaults = new DefForm();

var formEvents = function () {
	// fill default values
	var form = document.contact;
	defaults.setName(form.name.value);
	defaults.setEmail(form.email.value);
	defaults.setSubject(form.subject.value);
	defaults.setMessage(form.message.value);
	
	form.onsubmit = doSubmit;
	
	// field behaviour
	for (i=0; i<form.elements.length; i++) {
		var field = form.elements[i];
		if (field.type.substring(0,1) == "t") {
			field.onfocus = Focus;
			field.onblur = Blur;
		}
	}
}

var doSubmit = function () {
	if (validate()) {
		this.submit();
	}
	return false;
}

function validate() {
	var form = document.contact;
	var isvalid = 0;
	var labels = new Array();
	var cadena = '';
	
	if (form.name.value == '' || form.name.value == defaults.getName()) {
		labels.push(defaults.getName());
		form.name.className = 'required';
	}
	if (form.email.value == '' || form.email.value == defaults.getEmail()) {
		labels.push(defaults.getEmail());
		form.email.className = 'required';
	} else {
		if (!validaEmail('contact','email',msgValidEmail)) {
			form.email.className = 'required';
			return false;
		}
	}
	if (form.subject.value == '' || form.subject.value == defaults.getSubject()) {
		labels.push(defaults.getSubject());
		form.subject.className = 'required';
	}
	if (form.message.value == '' || form.message.value == defaults.getMessage()) {
		labels.push(defaults.getMessage());
		form.message.className = 'required';
	}
	if (labels.length > 0) {
		cadena += msgPleaseFill;
		for (i=0; i<labels.length; i++) {
			cadena += labels[i];
			if (i < labels.length-1) {
				cadena += ",\n";
			}
		}
		alert(cadena);
	} else {
		isvalid = 1;
	}
	return isvalid;
}

function validaEmail(nomForm, nomCampo, mensaje){
	valor = eval("document."+nomForm+"."+nomCampo+".value");
	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // no válidos
	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // válidos
	if (!reg1.test(valor) && reg2.test(valor)) { // si la sintaxis es correcta
		return 1;
	}
	alert(mensaje);
}