	var errColor = '#fedfeb';
	var hlColor = '#fedfeb';
	var xmlhttp_busc = '';
	var sNombreCapa = '';
	
	function validarNum(e){
		// 8      = retroceso
		// 9	  = tab (-)
		// 47-58  = números (1234567890)
		
		tecla=(document.all) ? e.keyCode : e.which;

		if ((tecla!=8) && (tecla!=9)){
			if ((tecla>47) && (tecla<58)){
				return true;
			}
			else{
				return false;
			}
		}
		else{
			return true;	
		}
	}
	
	/* Publico */
	function valLogin(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valEmail(valObj, myForm.LOGIN, "El campo 'Login' es incorrecto, ha de ser un e-mail v\xe1lido.")
		_valLength(valObj, myForm.PASSWORD, 1, null, "El campo 'Contrase\xf1a' est\xe1 vac\xedo.")	
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}
	
	/* Publico */
	function valBuscadorDef(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n");
		
		_valNotSelected(valObj, myForm.MODALIDAD, 0, 'La primera opci\xf3n no es v\xe1lida para el campo \'Qué quieres\'. Elige otra.');
		_valLength(valObj, myForm.idmaeprovincia, 1, null, 'La primera opci\xf3n no es v\xe1lida para el campo \'Provincia\'. Elige otra.');
	
		if (!valObj.valid) { alert(valObj.errMsg); }
		return valObj.valid;
	}

	/* Publico */
	function valEnviarAmigo(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n");
		
		if (myForm.CHKAVISO.checked==false){
			valObj.valid = false;
			valObj.errMsg = valObj.errMsg + '- Debe aceptar el aviso legal.';
			}
			
		_valEmail(valObj, myForm.EMAIL, "El campo 'Email' es incorrecto, ha de ser un e-mail v\xe1lido.")
		_valLength(valObj, myForm.ASUNTO, 1, null, "El campo 'Asunto' est\xe1 vac\xedo.")
		_valLength(valObj, myForm.MENSAJE, 0, 1000, "El campo 'Mensaje' tiene una longitud superior a 1000 car\xe1cteres. Reduzca la longitud.")
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Publico */
	function valOpinion(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valLength(valObj, myForm.ASUNTO, 1, 1000, "Escribe un asunto (1000 car\xe1cteres m\xe1ximo).")
		_valLength(valObj, myForm.SOLUCION, 0, 1000, "El campo 'Soluci\xf3n' tiene una longitud superior a 1000 car\xe1cteres. Reduzca la longitud.")
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Publico */
	function valRegParticular(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n");
			
		if (myForm.CHKAVISO.checked==false){
			valObj.valid = false;
			valObj.errMsg = valObj.errMsg + '- Debe aceptar el aviso legal.';
			}
		
		_valLength(valObj, myForm.idmaeprovincia, 1, null, "El campo 'Provincia' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.idINEMunicipio, 1, null, "El campo 'Población' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.PRECIO, 1, null, "El campo 'Precio' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.NOMBRE, 1, null, "El campo 'Nombre' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.TELEFONO, 1, null, "El campo 'Tel\xe9fono' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.TITULO, 1, null, "El campo 'T\xedtulo' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.DESCRIPCION, 1, null, "El campo 'Observaciones' est\xe1 vac\xedo.");
		
		_valNotSelected(valObj, myForm.MODALIDAD, 0, "La primera opci\xf3n no es v\xe1lida para el campo 'Modalidad'. Elige otra.")	;
		_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "La primera opci\xf3n no es v\xe1lida para el campo 'Tipo de vivienda'. Elige otra.")	;

		_valNotSelected(valObj, myForm.USUARIO, 0, "La primera opci\xf3n no es v\xe1lida para el campo 'Usuario'. Elige otra.")	;
		_valLength(valObj, myForm.DESCRIPCION, 0, 500, "El campo 'Observaciones' tiene una longitud superior a 500 caracteres. Reduzca la longitud.");
		_valEmail(valObj, myForm.LOGIN, "El campo 'Login' es incorrecto. Ha de ser un e-mail v\xe1lido.");
		
		res1 = _valLength(valObj, myForm.PASSWORD, 1, 20, "El campo 'Contrase\xf1a' ha de ser entre 1 y 20 caracteres de longitud.");
		res2 = _valLength(valObj, myForm.PASSWORD1, 1, 20, "El campo 'Repite la contrase\xf1a' ha de ser entre 1 y 20 caracteres de longitud.");
		
		if (res1 && res2) {
			_valMatch(valObj, myForm.PASSWORD, myForm.PASSWORD1, "La contrase\xf1a no coincide con el campo 'Repite la contrase\xf1a'.");
		}
	
		if ((myForm.MODALIDAD.value == 2) && (myForm.TIPO_VIVIENDA.value == 2)) { myForm.MODALIDAD.value = 1; }
		if ((myForm.MODALIDAD.value == 5) && (myForm.TIPO_VIVIENDA.value == 2)) { myForm.MODALIDAD.value = 4; }
	
		if (!valObj.valid) { alert(valObj.errMsg); }
		return valObj.valid;
	}

	/* Publico */
	function valRegAgencia(myForm) {
		valObj = new validator(true, 'Hay un error en el formulario:\n');
		
		if (myForm.CHKAVISO.checked==false){
			valObj.valid = false;
			valObj.errMsg = valObj.errMsg + '- Debe aceptar el aviso legal.';
			}
			
		_valLength(valObj, myForm.NOMBRE_AGENCIA, 1, null, 'El campo \'Nombre de la agencia\' est\xe1 vac\xedo.');
		_valLength(valObj, myForm.NOMBRE_CONTACTO, 1, null, 'El campo \'Nombre (del contacto)\' est\xe1 vac\xedo.');
		_valLength(valObj, myForm.APELLIDO, 1, null, 'El campo \'Apellidos\' est\xe1 vac\xedo.');
		_valLength(valObj, myForm.TELEFONO, 1, null, 'El campo \'Tel\xe9fono\' est\xe1 vac\xedo.');
	
		_valEmail(valObj, myForm.LOGIN, 'El campo \'Login\' es incorrecto. Ha de ser un e-mail v\xe1lido.');
		
		res1 = _valLength(valObj, myForm.PASSWORD, 1, 20, 'El campo \'Contrase\xf1a\' ha de ser entre 1 y 20 caracteres de longitud.');
		res2 = _valLength(valObj, myForm.PASSWORD1, 1, 20, 'El campo \'Repite la contrase\xf1a\' ha de ser entre 1 y 20 caracteres de longitud.');
		
		if (res1 && res2) {
			_valMatch(valObj, myForm.PASSWORD, myForm.PASSWORD1, 'La contrase\xf1a no coincide con el campo \'Repite la contrase\xf1a\'.');
		}
		
		if (!valObj.valid) { alert(valObj.errMsg); }
		return valObj.valid;
	}

	/* Publico */
	function valInformarAmigo(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valEmail(valObj, myForm.EMAIL, "El campo 'E-mail' es incorrecto. Ha de ser un e-mail v\xe1lido.")
		if (_valLength(valObj, myForm.ASUNTO, 1, null, "El campo 'Asunto' est\xe1 vac\xedo.")) {
			_valLength(valObj, myForm.ASUNTO, 0, 1000, "El campo 'Asunto' tiene una longitud superior a 1000 caracteres. Reduzca la longitud.")
		}
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Publico */
	function valContact(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
	
		_valLength(valObj, myForm.nombre, 1, null, "El campo 'Nombre' est\xe1 vac\xedo. Rellena todos los campos.")	
		_valEmail(valObj, myForm.email, "El campo 'E-mail' es incorrecto. Ha de ser un e-mail v\xe1lido.")
		_valLength(valObj, myForm.mensaje, 1, null, "El campo 'Mensaje' est\xe1 vac\xedo. Rellena todos los campos.")
		
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Agencia */
	function valDatosAgencia(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
	
		_valLength(valObj, myForm.NOMBRE_AGENCIA, 1, null, "El campo 'Nombre de la Agencia' est\xe1 vac\xedo.")
		_valLength(valObj, myForm.NOMBRE_CONTACTO, 1, null, "El campo 'Nombre (contacto)' est\xe1 vac\xedo.")
		_valLength(valObj, myForm.APELLIDO, 1, null, "El campo 'Apellido (contacto)' est\xe1 vac\xedo.")
		_valLength(valObj, myForm.TELEFONO, 1, null, "El campo 'Tel\xe9fono (contacto)' est\xe1 vac\xedo.")
	
		_valLength(valObj, myForm.DESCRIPCION, 0, 500, "El campo 'Descripci\xf3n' tiene una longitud superior a 500 caracteres. Reduzca la longitud.")
		_valLength(valObj, myForm.COMISION, 0, 255, "El campo 'Comisi\xf3n' tiene una longitud superior a 250 caracteres. Reduzca la longitud.")
		
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Publico */
	function valRegPartAg(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		
		_valLength(valObj, myForm.idmaeprovincia, 1, null, 'El campo \'Provincia\' est\xe1 vac\xedo.');
		_valLength(valObj, myForm.idINEMunicipio, 1, null, 'El campo \'Población\' est\xe1 vac\xedo.');
		
		_valNotSelected(valObj, myForm.MODALIDAD, 0, "La primera opci\xf3n no es v\xe1lida para el campo '\xbfQu\xe9 quieres?'");
		_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "La primera opci\xf3n no es v\xe1lida para el campo 'Tipo de propiedad'");
		_valNotSelected(valObj, myForm.USUARIO, 0, "La primera opci\xf3n no es v\xe1lida para el campo 'Usuario'");
		_valLength(valObj, myForm.PRECIO, 1, null, "El campo 'Precio' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.NOMBRE, 1, null, "El campo 'Nombre' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.TELEFONO, 1, null, "El campo 'Tel\xe9fono 1' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.TITULO, 1, null, "El campo 'T\xedtulo' est\xe1 vac\xedo.");
		_valLength(valObj, myForm.DESCRIPCION, 1, null, "El campo 'Observaciones' est\xe1 vac\xedo.");
	
		if (!valObj.valid) { alert(valObj.errMsg); }
		return valObj.valid;
	}

	/* Agencia/Particular */
	function valCambiarPw(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valLength(valObj, myForm.PASSWORD2, 1, 20, "El campo 'Contrase\xf1a actual' ha de ser entre 1 y 20 caracteres de longitud.")
		if (_valLength(valObj, myForm.PASSWORD, 1, 20, "El campo 'Nueva contrase\xf1a' ha de ser entre 1 y 20 caracteres de longitud.")) {
			_valMatch(valObj, myForm.PASSWORD, myForm.PASSWORD1, "La nueva contrase\xf1a no coincide con el campo \"Repite la contrase\xf1a\".")
		}
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}
	
	/* Particular */
	function valSolPw(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valEmail(valObj, myForm.LOGIN, "El campo 'E-mail' es incorrecto. Ha de ser un e-mail v\xe1lido.")
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Particular */
	function valDatosGen(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valLength(valObj, myForm.CIUDAD, 1, null, "El campo 'Ciudad' est\xe1 vac\xedo.")
		_valLength(valObj, myForm.NOMBRE, 1, null, "El campo 'Nombre' est\xe1 vac\xedo.")
		_valLength(valObj, myForm.TELEFONO, 1, null, "El campo 'Tel\xe9fono' est\xe1 vac\xedo.")
		_valLength(valObj, myForm.TITULO, 1, null, "El campo 'T\xedtulo' est\xe1 vac\xedo.")
	
		_valNotSelected(valObj, myForm.MODALIDAD, 0, "La primera opci\xf3n no es v\xe1lida para el campo '\xbfQu\xe9 quieres?'")
		_valNotSelected(valObj, myForm.TIPO_VIVIENDA, 0, "La primera opci\xf3n no es v\xe1lida para el campo 'Tipo de propiedad'")
		_valNotSelected(valObj, myForm.USUARIO, 0, "La primera opci\xf3n no es v\xe1lida para el campo 'Usuario'")
		_valNotSelected(valObj, myForm.PROVINCIA, 0, "La primera opci\xf3n no es v\xe1lida para el campo 'Provincia'")
		
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Particular */
	function valOfrezco(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valLength(valObj, myForm.ENCONTRAR, 0, 255, "El campo 'Indicaciones ...' tiene una longitud superior a 250 caracteres. Reduzca la longitud.")
		_valLength(valObj, myForm.DESCRIPCION, 0, 500, "El campo 'Observaciones' tiene una longitud superior a 500 caracteres. Reduzca la longitud.")
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Particular */
	function valBusco(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valLength(valObj, myForm.DESCRIPCION, 0, 500, "El campo 'Observaciones' tiene una longitud superior a 500 caracteres. Reduzca la longitud.")
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}
	/* Particular */
	function valPrivado(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valLength(valObj, myForm.OBSERVACIONES, 0, 255, "El campo 'Observaciones' tiene una longitud superior a 250 caracteres. Reduzca la longitud.")
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}


	/* Particular */
	function valDarseBaja(myForm) {
		valObj = new validator(true, "Hay un error en el formulario:\n")
		_valLength(valObj, myForm.PASSWORD, 1, null, "El campo 'Contrase\xf1a' est\xe1 vac\xedo.")
		if (!valObj.valid) { alert(valObj.errMsg) }
		return valObj.valid
	}

	/* Row highlighter functions  */
	function marcarFila(myTr,on) {
		if (on) {
			myTr.className += " hl"
		} else {
			myTr.className = myTr.className.replace("hl","")
		}
	}
	
	function mostrarFila(myTr) {
		myATags = myTr.getElementsByTagName("a")
		if (myATags[0]) { location.href = myATags[0].href }
	}

	/* 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;
		}
	}
	
	function _valMatch(valObj, myEle1, myEle2, errStr) {
		if (myEle1.value != myEle2.value) {
			valObj.errMsg += "\n - " + errStr
			myEle1.style.backgroundColor = errColor
			myEle2.style.backgroundColor = errColor
			valObj.valid = false
			return false
		} else {
			myEle1.style.backgroundColor = ""
			myEle2.style.backgroundColor = ""
			return true
		}
	}
	
	function cargarLista(valor, defecto, capa){
		
		sNombreCapa = capa;
		if ((valor!='')&&(sNombreCapa!='')) {
			sUrl = 'http://www.pisocompartido.com/includes/cargar_municipios.asp?idmaeprovincia=' + valor;
			
			if (defecto!=''){
				sUrl = sUrl + '&idinemunicipio=' + defecto;	 
			}
			
			loadXMLDoc_busc(sUrl);
		}
	}
	
	function loadXMLDoc_busc(url){
		
		
		// code for Mozilla, etc.
		if (window.XMLHttpRequest){
			xmlhttp_busc=new XMLHttpRequest();
			xmlhttp_busc.onreadystatechange=xmlhttpChange_busc;
			xmlhttp_busc.open('GET',url,true);
			xmlhttp_busc.send(null);
		}
		// code for IE
		else if (window.ActiveXObject){
			xmlhttp_busc=new ActiveXObject('Microsoft.XMLHTTP');
			if (xmlhttp_busc){
				xmlhttp_busc.onreadystatechange=xmlhttpChange_busc;
				xmlhttp_busc.open('GET',url,true);
				xmlhttp_busc.send();
			}
		}
	}
	
	function xmlhttpChange_busc(){
		// if xmlhttp shows "loaded"
		if (xmlhttp_busc.readyState==4){
	  		// if "OK"
	  		if (xmlhttp_busc.status==200){
				texto = xmlhttp_busc.responseText;
				
				sel = document.getElementById(sNombreCapa);
				sel.innerHTML=texto;
			}
		}
	}