/* Global vars */
var errColor = "#fedfeb"
var hlColor = "#fedfeb"

/* Page/form specific validation functions */
function valContact(myForm) {
	valObj = new validator(true,"There is an error in your form:\n")

	_valLength(valObj, myForm.name, 1, null, "Please enter your name.")	
	_valEmail(valObj, myForm.email, "Please provide a valid e-mail address.")
	_valLength(valObj, myForm.message, 1, null, "Please enter your message.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}

function valContacto(myForm) {
	valObj = new validator(true,"Hay un error en el formulario:\n")

	_valLength(valObj, myForm.nombre, 1, null, "El campo 'Nombre' está vacío.")
	_valEmail(valObj, myForm.email, "El campo 'E-mail' es incorrecto. Ha de ser un e-mail válido.")
	_valLength(valObj, myForm.message, 1, null, "El campo 'Mensaje' está vacío.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}

function valBuscoHabEn(myForm) {
	valObj = new validator(true, "There is an error in your form:\n")

	_valLength(valObj, myForm.NOMBRE, 1, null, "Name must be entered")
	_valLength(valObj, myForm.TELEFONO, 1, null, "Phone must be entered")
	_valLength(valObj, myForm.CIUDAD, 1, null, "City must be entered")
	_valLength(valObj, myForm.PRECIO, 1, null, "Maximum Price must be entered")
	_valLength(valObj, myForm.TITULO, 1, null, "Title must be entered")
	_valLength(valObj, myForm.DESCRIPCION, 1, null, "Free text must be entered")

	_valEmail(valObj, myForm.LOGIN, "Enter a valid e-mail address")

	_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "Select a valid option for Type of Room")

	_valLength(valObj, myForm.DESCRIPCION, 0, 500, "Description cannot be longer than 500 characters. Please shorten it.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}

function valBuscoHabEs(myForm) {
	valObj = new validator(true, "Hay un error en el formulario:\n")
	
	_valLength(valObj, myForm.NOMBRE, 1, null, "El campo 'Nombre' está vacío")
	_valLength(valObj, myForm.TELEFONO, 1, null, "El campo 'Telefono' está vacío")
	_valLength(valObj, myForm.CIUDAD, 1, null, "El campo 'Ciudad' está vacío")
	_valLength(valObj, myForm.PRECIO, 1, null, "El campo 'Precio máximo' está vacío")
	_valLength(valObj, myForm.TITULO, 1, null, "El campo 'Titulo' está vacío")
	_valLength(valObj, myForm.DESCRIPCION, 1, null, "El campo 'Otros' está vacío")

	_valEmail(valObj, myForm.LOGIN, "El campo 'E-mail' ha de ser un e-mail válido")

	_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "La primera opción no es valida para el campo 'Tipo de habitación'")

	_valLength(valObj, myForm.DESCRIPCION, 0, 500, "El campo 'Descripción' debe tener una longitud inferior a 500 caracteres. Reduzca la longitud.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}
function valBuscoPisoEn(myForm) {
	valObj = new validator(true, "There is an error in your form:\n")

	_valLength(valObj, myForm.NOMBRE, 1, null, "Name must be entered")
	_valLength(valObj, myForm.TELEFONO, 1, null, "Phone number must be entered")
	_valLength(valObj, myForm.CIUDAD, 1, null, "City must be entered")
	_valLength(valObj, myForm.PRECIO, 1, null, "Maximum Price must be entered")
	_valLength(valObj, myForm.TITULO, 1, null, "Title must be entered")
	_valLength(valObj, myForm.DESCRIPCION, 1, null, "Free text must be entered")

	_valEmail(valObj, myForm.LOGIN, "Enter a valid e-mail address")

	_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "Select a valid option for Type of Property")

	_valLength(valObj, myForm.DESCRIPCION, 0, 500, "Description cannot be longer than 500 characters. Please shorten it.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}
function valBuscoPisoEs(myForm) {
	valObj = new validator(true, "Hay un error en el formulario:\n")
	
	_valLength(valObj, myForm.NOMBRE, 1, null, "El campo 'Nombre' está vacío")
	_valLength(valObj, myForm.TELEFONO, 1, null, "El campo 'Telefono' está vacío")
	_valLength(valObj, myForm.CIUDAD, 1, null, "El campo 'Ciudad' está vacío")
	_valLength(valObj, myForm.PRECIO, 1, null, "El campo 'Precio máximo' está vacío")
	_valLength(valObj, myForm.TITULO, 1, null, "El campo 'Titulo' está vacío")
	_valLength(valObj, myForm.DESCRIPCION, 1, null, "El campo 'Otros' está vacío")

	_valEmail(valObj, myForm.LOGIN, "El campo 'E-mail' ha de ser un e-mail válido")

	_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "La primera opción no es valida para el campo 'Tipo de inmueble'")

	_valLength(valObj, myForm.DESCRIPCION, 0, 500, "El campo 'Descripción' debe tener una longitud inferior a 500 caracteres. Reduzca la longitud.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}
function valOfrezcoHabEn(myForm) {
	valObj = new validator(true, "There is an error in your form:\n")

	_valLength(valObj, myForm.NOMBRE, 1, null, "Name must be entered")
	_valLength(valObj, myForm.TELEFONO, 1, null, "Phone number must be entered")
	_valLength(valObj, myForm.CIUDAD, 1, null, "City must be entered")
	_valLength(valObj, myForm.PRECIO, 1, null, "Maximum Price must be entered")
	_valLength(valObj, myForm.TITULO, 1, null, "Title must be entered")
	_valLength(valObj, myForm.DESCRIPCION, 1, null, "Free text must be entered")

	_valEmail(valObj, myForm.LOGIN, "Enter a valid e-mail address")

	_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "Select a valid option for Type of Room")

	_valLength(valObj, myForm.DESCRIPCION, 0, 500, "Description cannot be longer than 500 characters. Please shorten it.")
	_valLength(valObj, myForm.ENCONTRAR, 0, 255, "'How to find the property' cannot be longer than 250 characters. Please shorten it.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}
function valOfrezcoHabEs(myForm) {
	valObj = new validator(true, "Hay un error en el formulario:\n")
	
	_valLength(valObj, myForm.NOMBRE, 1, null, "El campo 'Nombre' está vacío")
	_valLength(valObj, myForm.TELEFONO, 1, null, "El campo 'Teléfono' está vacío")
	_valLength(valObj, myForm.CIUDAD, 1, null, "El campo 'Ciudad' está vacío")
	_valLength(valObj, myForm.PRECIO, 1, null, "El campo 'Precio máximo' está vacío")
	_valLength(valObj, myForm.TITULO, 1, null, "El campo 'Titulo' está vacío")
	_valLength(valObj, myForm.DESCRIPCION, 1, null, "El campo 'Texto libre' está vacío")

	_valEmail(valObj, myForm.LOGIN, "El campo 'E-mail' ha de ser un e-mail válido")

	_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "La primera opción no es valida para el campo 'Tipo de habitación'")

	_valLength(valObj, myForm.DESCRIPCION, 0, 500, "El campo 'Descripción' debe tener una longitud inferior a 500 caracteres. Reduzca la longitud.")
	_valLength(valObj, myForm.ENCONTRAR, 0, 250, "El campo 'Indicaciones para encontrar la propiedad' debe tener una longitud inferior a 250 caracteres. Reduzca la longitud.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}
function valOfrezcoPisoEn(myForm) {
	valObj = new validator(true, "There is an error in your form:\n")

	_valLength(valObj, myForm.NOMBRE, 1, null, "Name must be entered")
	_valLength(valObj, myForm.TELEFONO, 1, null, "Phone number must be entered")
	_valLength(valObj, myForm.CIUDAD, 1, null, "City must be entered")
	_valLength(valObj, myForm.PRECIO, 1, null, "Maximum Price must be entered")
	_valLength(valObj, myForm.TITULO, 1, null, "Title must be entered")
	_valLength(valObj, myForm.DESCRIPCION, 1, null, "Free text must be entered")

	_valEmail(valObj, myForm.LOGIN, "Enter a valid e-mail address")

	_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "Select a valid option for Type of Property")

	_valLength(valObj, myForm.DESCRIPCION, 0, 500, "Description cannot be longer than 500 characters. Please shorten it.")
	_valLength(valObj, myForm.ENCONTRAR, 0, 255, "'How to find the property' cannot be longer than 250 characters. Please shorten it.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}
function valOfrezcoPisoEs(myForm) {
	valObj = new validator(true, "Hay un error en el formulario:\n")
	
	_valLength(valObj, myForm.NOMBRE, 1, null, "El campo 'Nombre' está vacío")
	_valLength(valObj, myForm.TELEFONO, 1, null, "El campo 'Teléfono' está vacío")
	_valLength(valObj, myForm.CIUDAD, 1, null, "El campo 'Ciudad' está vacío")
	_valLength(valObj, myForm.PRECIO, 1, null, "El campo 'Precio máximo' está vacío")
	_valLength(valObj, myForm.TITULO, 1, null, "El campo 'Titulo' está vacío")
	_valLength(valObj, myForm.DESCRIPCION, 1, null, "El campo 'Texto libre' está vacío")

	_valEmail(valObj, myForm.LOGIN, "El campo 'E-mail' ha de ser un e-mail válido")

	_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "La primera opción no es valida para el campo 'Tipo de inmueble'")

	_valLength(valObj, myForm.DESCRIPCION, 0, 500, "El campo 'Descripción' debe tener una longitud inferior a 500 caracteres. Reduzca la longitud.")
	_valLength(valObj, myForm.ENCONTRAR, 0, 250, "El campo 'Indicaciones para encontrar la propiedad' debe tener una longitud inferior a 250 caracteres. Reduzca la longitud.")
	
	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}

function valEnvAmigoEs(myForm) {
	valObj = new validator(true, "Hay un error en el formulario:\n")
	_valEmail(valObj, myForm.EMAIL, "El campo 'E-mail' ha de ser un e-mail válido.")
	_valLength(valObj, myForm.ASUNTO, 1, null, "El campo 'Asunto' está vacío.")
	_valLength(valObj, myForm.MENSAJE, 0, 1000, "El campo 'Mensaje' debe tener una longitud inferior a 1000 caracteres. Reduzca la longitud.")

	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}

function valEnvAmigoEn(myForm) {
	valObj = new validator(true, "There is an error in your form:\n")
	_valEmail(valObj, myForm.EMAIL, "Please enter a valid e-mail address.")
	_valLength(valObj, myForm.ASUNTO, 1, null, "Please enter a subject.")
	_valLength(valObj, myForm.MENSAJE, 0, 1000, "Your message cannot be longer than 1000 caracteres. Please shorten it.")

	if (!valObj.valid) alert(valObj.errMsg)
	return valObj.valid
}
/* * * Functions for highlighting rows and linking them to records * * */
/* Dynamically modify classname */
function marcarFila(myTr,on) {
	on ? myTr.className += " hi" : myTr.className = myTr.className.replace("hi","")
}
/* Dynamically change location based on first link in row */
function mostrarFila(myTr) {
	myATags = myTr.getElementsByTagName("a")
	myATags[0] ? location.href = myATags[0].href : true
}
/* * * Helper functions * * */
function is_email(str) {
	return (-1 != str.search(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i))
}

/* * * Validation objects and functions * * */
function validator(valid, warnStr) {
	this.valid = valid
	this.errMsg = warnStr
}
function _valEmail(valObj, myEle, errStr) {
	if (!is_email(myEle.value)) {
		valObj.errMsg += "\n - " + errStr
		myEle.style.backgroundColor = errColor
		valObj.valid = false
		return false
	} else {
		myEle.style.backgroundColor = ""
		return true
	}
}
function _valNotSelected(valObj, myEle, badIndex, errStr) {
	if (myEle.selectedIndex == badIndex) {
		valObj.errMsg += "\n - " + errStr
		myEle.style.backgroundColor = errColor
		valObj.valid = false
		return false
	} else {
		myEle.style.backgroundColor = ""
		return true
	}
}
function _valLength(valObj, myEle, len_lower, len_upper, errStr) {
	lower_true = myEle.value.length < len_lower
	upper_true = len_upper ? (myEle.value.length > len_upper) : false
	if (lower_true || upper_true) {
		valObj.errMsg += "\n - " + errStr
		myEle.style.backgroundColor = errColor
		valObj.valid = false
		return false
	} else {
		myEle.style.backgroundColor = ""
		return true
	}
}
/* Haven't found a use for this yet (?) */
function _valFormat(valObj, myEle, format, errStr) {
	if (myEle.value.match(format)) {
		valObj.errMsg += "\n - " + errStr
		myEle.style.backgroundColor = errColor
		valObj.valid = false
		return false
	} else {
		myEle.style.backgroundColor = ""
		return true
	}
}

function addClass( node, className ) {
	if(!hasClass(node, className)) {
		node.className = node.className + (node.className ? " " : "") + className;
		return true;
	}
	return false;
};

function removeClass( node, className ) {
	if(hasClass(node, className)) {
		node.className = (' '+node.className+' ').replace(' '+className+' ',' ').replace(/^ | $/,'');
		return true;
	}
	return false;
}

function hasClass( node, value ) {
	return (" "+node.className+" ").match(" "+value+" ") ? true : false;
};

