// ****************************************************************
//	fieldObject
// ****************************************************************

// Constructor
function fieldObject (id, isrequired, msg) {

	// Característiques de la classe
	this.id = id
	this.isrequired = isrequired
	this.msg = msg
	
	// Mètodes i funcions de la classe
	this.doRequired = doRequired
	this.doValidate = dummy
}

// Funció buida
function dummy () {
	return true
}

// Camp obligatori
function doRequired () {
	if (this.isrequired && document.getElementById(this.id).value=="") return false
	return true
}


// ****************************************************************
//	fieldObject::fieldString
// ****************************************************************

// Constructor
function fieldString (id, isrequired, msg, maxlen) {

	// Inheritància
	this.inheritFrom = fieldObject
	this.inheritFrom (id, isrequired, msg)
	
	// Propietats de classe
	this.maxlen = maxlen

	// Mètodes i funcions de la classe
	this.doValidate = doValidateString
	
}

function doValidateString () {
	
	// Valor del camp
	var v = document.getElementById(this.id).value
	
	// Està  buid? ==> correcte
	if (v=="") return true
	
	// Sobrepassa les dimensions
	if (v.length>this.maxlen) return false

	// Tot ok
	return true
}


// ****************************************************************
//	fieldObject::fieldEMail
// ****************************************************************

// Constructor
function fieldEMail (id, isrequired, msg, maxlen) {

	// Inheritància
	this.inheritFrom = fieldObject
	this.inheritFrom (id, isrequired, msg)
	
	// Propietats de classe
	this.maxlen = maxlen

	// Mètodes i funcions de la classe
	this.doValidate = doValidateEMail
	
}

function doValidateEMail () {
	
	// Valor del camp
	var v = document.getElementById(this.id).value
	
	// Sobrepassa les dimensions
	if (v.length>this.maxlen) return false

	// Està  buid? ==> correcte
	if (v=="") return false

	// Té dues parts: a@b
	var email_parts = v.split ("@")
	if (email_parts.length!=2) return false
	
	// La part dreta te dues parts: c.d
	var ext_parts = email_parts[1].split (".")
	if (ext_parts.length<2) return false
	
	// Tot ok
	return true
}

// ****************************************************************
//	fieldObject::fieldInteger
// ****************************************************************

// Constructor
function fieldInteger (id, isrequired, msg) {

	// Inheritància
	this.inheritFrom = fieldObject
	this.inheritFrom (id, isrequired, msg)
	
	// Mètodes i funcions de la classe
	this.doValidate = doValidateInteger
	
}

function doValidateInteger () {
	
	// Valor del camp
	var v = document.getElementById(this.id).value
	
	// Si no és un número hi ha un error
	if (isNaN(v)) return false
	
	// Tot ok
	return true
}


// ****************************************************************
//	fieldObject::fieldSelect
// ****************************************************************

// Constructor
function fieldSelect (id, isrequired, msg) {

	// Inheritància
	this.inheritFrom = fieldObject
	this.inheritFrom (id, isrequired, msg)
	
	// Mètodes i funcions de la classe
	this.doValidate = doValidateSelect
	
}

function doValidateSelect () {
	
	// Valor del camp
	var v = document.getElementById(this.id).value
	
	// Si no és un número hi ha un error
	if (v=="0") return false
	
	// Tot ok
	return true
}




// ****************************************************************
//	formValidator
// ****************************************************************

// Constructor
function formValidator (msg1, msg2) {

	// Característiques de la classe
	this.list = new Array()
	this.error = ""
	this.msg1 = msg1
	this.msg2 = msg2

	
	// Mètodes de la classe
	this.add = add
	this.doValidation = doValidationForm
	this.doRequieredFields = doRequiredFieldsInForm
	this.doValidateFields = doValidateFieldsInForm
	
}

// Afegir un nou objecte
function add (obj) {
	this.list[this.list.length] = obj
}

// Validar el formulari
function doValidationForm () {

	// Camps obligatoris i missatge d'error
	var ret = this.doRequieredFields()
	if (!ret) alert (this.msg1 + this.error)


	// validació de camps i missatge d'error
	if (ret) {
		ret = this.doValidateFields()
		if (!ret) alert (this.msg2 + this.error)
	}

	// Retorn de la funció
	return ret
}

// Validar dades
function doRequiredFieldsInForm () {

	// Declaració de variables
	var ret = true
	var ret1
	
	this.error = ""
	for (i=0; i<this.list.length; i++) {
		if (this.list[i].isrequired) {
			ret1 = this.list[i].doRequired()
			ret = ret && ret1
			if (!ret1) {	
				this.error += "- " + this.list[i].msg + "\n"
			}
		}
	}
	
	// Retorn de la funció
	return ret
}

function doValidateFieldsInForm () {

	// Declaració de variables
	var ret = true
	var ret1
	
	this.error = ""
	for (i=0; i<this.list.length; i++) {
		ret1 = this.list[i].doValidate()
		ret = ret && ret1
		if (!ret1) {	
			this.error += "- " + this.list[i].msg + "\n"
		}
	}
	
	// Retorn de la funció
	return ret

}

function xafarder () {
	alert ("Hola")
}