
	//#######################################################################
	//Recorremos y desactivamos las preguntas que estan condicionadas
	function recorreYdesactiva() {
		for (var f=0;f<survey.length ;f++ ) {
			for (var k=0;k<survey[f].length ;k++ ) {

				if (survey[f][k].length>0) {
					pregs=survey[f][k].split(":");
					for (var p=0;p<pregs.length ;p++ ) {
						//Formo el id respectivo en el HTML y lo selecciono
						//Busco los elementos de formulario que tenemos para contestar a esa pregunta
						respuestas=respuestasPreg("q"+pregs[p]);

						//Recorro los elementos de formulario que hay para contestar
						pregunta=0;
						for (var j=0;j<respuestas.length ;j++ ) {
							//Desactivo el elemento de formulario j bajo la pregunta pregs[p]
							respuestas[j].disabled=true;
						}//end for j
					}//end for p
				}//end if survey[f][k].length>0
			}//end for k
		}//end for f

		for (var p=0;p<survey.length ;p++ ) {
			//Formo el id respectivo en el HTML y lo selecciono
			//Busco los elementos de formulario que tenemos para contestar a esa pregunta
			misRespuestas=respuestasPreg("q"+(p+1));

			//Recorro los elementos de formulario que hay para contestar
			var pregunta=0;
			var optionAlt=0;
			for (var j=0;j<misRespuestas.length ;j++ ) {
				//Desactivo el elemento de formulario de texto alternativo
				optionAlt=misRespuestas[j].id.indexOf("alt");
				if (optionAlt>0) {
					if (misRespuestas[j].id.indexOf("text")==-1) {
						textAlternative=misRespuestas[j].id+"text";
						interAux=document.getElementById(textAlternative);
						interAux.disabled=true;

						misRespuestas[j].onclick= function () {
							var campoInt=this.id+"text";
							document.getElementById(campoInt).disabled=false;
							if (this.checked) {
								document.getElementById(campoInt).focus();
							}//end if
							if (this.id.type="checkbox") {
								activate(this.id,this.parentNode.parentNode.parentNode.id);
							}//end if
						}
					}//end if
				textAlternative="";
				}//end if
			}//end for j
		}//end for p

		//Boton de envio para validar antes
		if (document.getElementById("encuSend")) {
			var sendButton=document.getElementById("encuSend");
			sendButton.onclick=function () {
				//validar el formulario
				//devuelve true / false
				if (validateSurvey()) {
					//envia
					if(validateMaxLengthAndType()){
						return true;
						}else{
							alert(messageNoSend);
							return false;
						}
				}
				else {
					//falla validacion, no envia
					alert(messageMandatory);
					return false;
				}//end if
			}
	
			sendButton.onkeypress=function () {
				//validar el formulario
				//devuelve true / false
				if (validateSurvey()) {
					//envia
					if(validateMaxLengthAndType()){
						return true;
						}else{
							alert(messageNoSend);
							return false;
						}
				}
				else {
					//falla validacion, no envia
					alert(messageMandatory);
					return false;
				}//end if
			}
		}//end if encuSend
	}//end function recorreYdesactiva



	//#######################################################################
	//Validamos la encuesta
	function validateMaxLengthAndType () {
		//Array para pruebas, comprueba los tipos de prguntas
		//Determinar el modo en que se va a obtener la informacion para el javascript
		//Sugerencia: similar al caso de las reglas
		//longitudMaxima: 2,false,10,10,false
		//var longitudMaxima = new Array(2,false,10,10,false);
		var valid=true;
		var comprueba = new Array();
		//Fin array pruebas
		//desactivamos para todas las preguntas los estilos show failed  de los mensajes de error
		for (var g=0;g<survey.length ;g++ ) {
			var myAsk2="q"+(g+1);
			var misRespuestasValidate2=respuestasPreg(myAsk2);
		
			if (misRespuestasValidate2[0].type=="text" || misRespuestasValidate2[0].type=="textarea") {
				var idFieldtoHidden="validatelengthq"+(g+1);
				var fieldtoHidden=document.getElementById(idFieldtoHidden);
				fieldtoHidden.className="hidden";
				var idFieldtoHidden2="validatetypeq"+(g+1);
				var fieldtoHidden2=document.getElementById(idFieldtoHidden2);
				fieldtoHidden2.className="hidden"; 
			}
		}
		
		

		for (var f=0;f<survey.length ;f++ ) {
			var myAsk="q"+(f+1);
			//desactivamos para todas las preguntas los estilos show failed  de los mensajes de error
			
			//alert(myAsk+"  "+obligatorias[f]);
				
				var misRespuestasValidate=respuestasPreg(myAsk);

				if (misRespuestasValidate[0].type=="text" || misRespuestasValidate[0].type=="textarea") {
					if(!misRespuestasValidate[0].disabled == true){//solo si la respuesta esta activada comprueba las validaciones
						if (misRespuestasValidate[0].value!="") {
							if (longitudMaxima[f]!=false) {
									if(misRespuestasValidate[0].value.length >longitudMaxima[f]){
										var valdateId="validatelengthq"+(f+1);
										var invalidafield=document.getElementById(valdateId);
										invalidafield.className="show failed"; 
										valid=false;
									}
							}
						
							if (validaciones[f]!=false) {
								if(!validAnswerType(misRespuestasValidate[0].value,validaciones[f])){
									var valdateId="validatetypeq"+(f+1);
									var invalidafield=document.getElementById(valdateId);
									invalidafield.className="show failed"; 
									valid=false;
								}
							}
						}
					}	
							
				}
			
		}//end for f

		return valid;

	}//end function



	//#######################################################################
	//Marcamos la pregunta en la que esta el usuario
	function validAnswerType (value,type) {
		var questionType=type;
		var answerValue=value;
		if(questionType!=false){
			if(questionType=='numericType'){
				if(!isInteger(answerValue)){
					return false;
				}
			}
			if(questionType=='textType'){
				if(!isAlphabeticSpace(answerValue)){
					return false;
				}
			}
			if(questionType=='alphanumericType'){
				if(!isAlphanumericSpace(answerValue)){
					return false;
				}
			}
			if(questionType=='emailType'){
				if(!isEmail(answerValue)){
					return false;
				}
			}


		}//if que comprueba si la respuesta tiene validacion
		return true;
	}//end function
	
	
	
	//#######################################################################
	//Validamos la encuesta
	function validateSurvey () {
		//Array para pruebas, preguntas obligatorias
		//Determinar el modo en que se va a obtener la informacion para el javascript
		//Sugerencia: similar al caso de las reglas
		//Obligatorias: 1, 2, 3, 4, 13 y 14
		//var obligatorias = new Array(true,true,true,true,false,false,false,false,false,false,false,false,true,true);
		var comprueba = new Array();
		//Fin array pruebas

		for (var f=0;f<survey.length ;f++ ) {
			var myAsk="q"+(f+1);
			//alert(myAsk+"  "+obligatorias[f]);
			if (obligatorias[f]) {
				
				var misRespuestasValidate=respuestasPreg(myAsk);

				if (misRespuestasValidate[0].type=="radio" || misRespuestasValidate[0].type=="checkbox") {
					var responseChecked=0;
					for (var j=0;j<misRespuestasValidate.length ;j++ ) {
						if (misRespuestasValidate[j].checked) {
							var alternativa=misRespuestasValidate[j].id.indexOf("alt");
							if (alternativa>0) {
								if (document.getElementById(misRespuestasValidate[j].id+"text")) {
									if (document.getElementById(misRespuestasValidate[j].id+"text").value!="") {
										responseChecked++;
									}//end if
								}//end if
							}
							else {
								responseChecked++;
							}//end if
						}//end if
					}//end for j

					//alert(""+myAsk+" respuesta "+responseChecked);

					if (!responseChecked>0) {
						questionMandatory(myAsk);
						comprueba[f]=false;
					}
					else {
						questionMandatoryOk(myAsk);
						comprueba[f]=true;
					}//end if
				}
				else { //type text y type textarea
					//Incluir logica de las validaciones
					if (misRespuestasValidate[0].value!="") {
						questionMandatoryOk(myAsk);
						comprueba[f]=true;
					}
					else {
						questionMandatory(myAsk);
						comprueba[f]=false;
					}//end if
				}//end if
			}//end if obligatorias[f]
		}//end for f

		for (var d=0;d<survey.length ;d++ ) {
			//alert(myAsk+"  "+obligatorias[d]);
			if (obligatorias[d]) {
				if (!comprueba[d]) {
					return false;
				}//end if
			}//end if
		}//end for d
		return true;

	}//end function



	//#######################################################################
	//A cada elemento del formulario le asignamos las funciones
	//asociadas a los eventos
	function accionesElems () {
		var encuesta=document.getElementById("survey");
		var preguntas=encuesta.getElementsByTagName("li");
		var aux=0;
		for (var m=0;m<preguntas.length;m++ ) {
			if (preguntas[m].id!="") {
				aux++;
				misRespuestasA=0;
				misRespuestasB=0;
				misRespuestasA=preguntas[m].getElementsByTagName("textarea");
				misRespuestasB=preguntas[m].getElementsByTagName("input");

				if (misRespuestasA.length>0)
				{ misRespuestas=misRespuestasA; }
				else
				{ misRespuestas=misRespuestasB; }

				respuestas=misRespuestas;

				for (var d=0;d<respuestas.length ;d++ ) {
					if(respuestas[d].id.indexOf("text")==-1) {
						respuestas[d].onblur= function () {
								noMarkQuestion (this.parentNode.parentNode.parentNode.id);
							}

						respuestas[d].onkeyup= function () {
								activate(this.id,this.parentNode.parentNode.parentNode.id);
							}
						
						respuestas[d].onclick= function () {
								activate(this.id,this.parentNode.parentNode.parentNode.id);
							}

						respuestas[d].onfocus= function () {
								markQuestion (this.parentNode.parentNode.parentNode.id);
							}
					}
					else {
						//Si estamos sobre el input de la opcion alternativa los eventos
						//deben relacionarse con el radiobutton o check que corresponda
						respuestas[d].onblur= function () {
								noMarkQuestion (this.parentNode.parentNode.parentNode.id);
							}

						respuestas[d].onfocus= function () {
								markQuestion (this.parentNode.parentNode.parentNode.id);
							}

						respuestas[d].onkeyup= function () {
								auxId=this.id.substr(0,(this.id.length-4));
								activate(auxId,this.parentNode.parentNode.parentNode.id);
							}
					}//end if
				}//end for d
			}//end if
		}//end for m
	}//end function accionesElems



	//#######################################################################
	//Marcamos la pregunta en la que esta el usuario
	function markQuestion (cual) {
		var pregunta=document.getElementById(cual);
		if (pregunta.className!="") {
			pregunta.className+=" questionActive";
		}
		else {
			pregunta.className="questionActive";
		}//end if
		//alert(cual);
	}//end function markQuestion



	//#######################################################################
	//Desmarcamos la pregunta en la que estaba el usuario
	function noMarkQuestion (cual) {
		var pregunta=document.getElementById(cual);
		//alert(pregunta.className);
		if (pregunta.className.indexOf("failed")!=-1) {
			pregunta.className="failed";
		}
		else {
			pregunta.className="";
		}//end if
	}//end function markQuestion



	//#######################################################################
	//Marcamos la pregunta de respuesta erronea
	function questionMandatory (cual) {
		var pregunta=document.getElementById(cual);
		pregunta.className="failed";
	}//end function markQuestion



	//#######################################################################
	//Desmarcamos la pregunta de respuesta erronea
	function questionMandatoryOk (cual) {
		var pregunta=document.getElementById(cual);
		pregunta.className="";
	}//end function markQuestion



	//#######################################################################
	// Recibo valor: value del input o textarea
	// preguntas: id de la pregunta a la que pertenece esa respuesta
	function activate (valor, preguntas) {
		//Cargamos las respuestas de la pregunta en cuestion
		var misRespuestas=respuestasPreg(preguntas);

		//Identifico los tipos de respuestas para esa pregunta
		//text y textarea, radio, checkbox
		//Dependiendo del tipo haremos comprobaciones distintas
		var valorAux=misRespuestas[0];
		var opcionRespuesta=valor.split("opt");
		opcionRespuesta=parseInt(opcionRespuesta[1])-1;
		if (opcionRespuesta<0){opcionRespuesta=0;}
		var numberQuestion=preguntas.substr(1,preguntas.length);
		var auxArr= new Array();
		copyArr="question"+numberQuestion;
		auxArr=eval(copyArr);

		if (valorAux.type=="text" || valorAux.type=="textarea") {

			if (auxArr[opcionRespuesta].length>0) {
				var preRef=auxArr[opcionRespuesta].split(":");
				if (valorAux.value!="") {
					if (preRef.length>1) {
						//Para todas las preguntas que condiciona
						for (var p=0;p<preRef.length ;p++ ) {
							if (valorAux.disabled) {
								condiUna(preRef[p],true);
							}
							else {
								condiUna(preRef[p],false);
							}//end if
						}//end for p
					}
					else {
						if (valorAux.disabled) {
							condiUna(auxArr[opcionRespuesta],true);
						}
						else {
							condiUna(auxArr[opcionRespuesta],false);
						}//end if
					}//end if
				}
				else {
					if (preRef.length>1) {
						//Para todas las preguntas que condiciona
						for (var p=0;p<preRef.length ;p++ ) {
							condiUna(preRef[p],true);
						}//end for p
					}
					else {
						condiUna(auxArr[opcionRespuesta],true);
					}//end if
				}//end if valorAux.value!=""
			}//end if auxArr[opcionRespuesta].length
		}
		else if (valorAux.type=="radio") {

			var posicion=0;
			var estadoTexto=true;

			for (var d=0;d<misRespuestas.length ;d++ ) {
				if (misRespuestas[d].id==valor) {
					posicion=d;
					estadoTexto=false;
				}//end if
				optionAlt=misRespuestas[d].id.indexOf("alt");
				if (optionAlt>0) {
					if (misRespuestas[d].id.indexOf("text")==-1) {
						textAlternative=misRespuestas[d].id+"text";
						interAux=document.getElementById(textAlternative);
						interAux.disabled=estadoTexto;
					}//end if
				}//end if
				estadoTexto=true;
			}//end for d

			//Resto de dependencias inactivas
			for (var m=0;m<auxArr.length ;m++ ) {
				if (auxArr[m].length>0) {
					var preRef=auxArr[m].split(":");
					if (preRef.length>1) {
						//Para todas las preguntas que condiciona
						if (m!=posicion) {
							for (var p=0;p<preRef.length ;p++ ) {
								condiUna(preRef[p],true);
							}//end for p
						}//end if
					}
					else {
						//alert(valorAux.checked);
						if (m!=posicion) {
							condiUna(auxArr[m],true);
						}//end if
					}//end if
				}//end if
			}//end for m
			
			if (posicion<auxArr.length) {
				//Activo dependencias de la seleccionada
				var preRef=auxArr[posicion].split(":");
				if (preRef.length>1) {
					if (valorAux.disabled) {
						for (var p=0;p<preRef.length ;p++ ) {
							condiUna(preRef[p],true);
						}//end for p
					}
					else {
						for (var p=0;p<preRef.length ;p++ ) {
							radioActivate (preRef[p], valor);
						}//end for p
					}//end if
				} else {
					if (valorAux.disabled) {
						condiUna(auxArr[posicion],true);
					} else {
						radioActivate (auxArr[posicion], valor);
					}//end if
				}//end if
			}//end if
		}
		else if (valorAux.type=="checkbox") {
			if (!document.getElementById(valor).checked) {
				if (auxArr[opcionRespuesta].length>0) {
					var preRef=auxArr[opcionRespuesta].split(":");
					if (preRef.length>1) {
						//Para todas las preguntas que condiciona
						for (p=0;p<preRef.length ;p++ ) {
							condiUna(preRef[p],true);
						}//end for p
					}
					else {
						condiUna(auxArr[opcionRespuesta],true);
					}//end if
				}//end if

				//Desactivo el input type="text"
				optionAlt=valor.indexOf("alt");
				if (optionAlt>0) {
					if (valor.indexOf("text")==-1) {
						textAlternative=valor+"text";
						interAux=document.getElementById(textAlternative);
						interAux.disabled=true;
					}//end if
				}//end if
			}//end if
			
			//alert(misRespuestas.length);
			//debe ser ascendente para casos con opcion alternativa
			for (var n=misRespuestas.length-1;n>=0 ;n-- ) {
				if (misRespuestas[n].checked) {
					optionAlt=0;
					interAux=null;
					//alert(misRespuestas[n].id);
					if (auxArr[n].length>0) {
						//Activo el input type="text"
						//Si la respuesta es una opcion alternativa almaceno en interAux el input type="text"
						var optionAlt=misRespuestas[n].id.indexOf("alt");
						if (optionAlt>0) {
							if (misRespuestas[n].id.indexOf("text")==-1) {
								textAlternative=misRespuestas[n].id+"text";
								interAux=document.getElementById(textAlternative);
								interAux.disabled=false;
							}//end if
						}//end if
	
						var preRef=auxArr[n].split(":");
						if (preRef.length>1) {
							
							//Para todas las preguntas que condiciona
							for (var p=0;p<preRef.length ;p++ ) {
								if (valorAux.disabled) {
									condiUna(preRef[p],true);
								} else {
									checkboxActivate (preRef[p], optionAlt, interAux);
								}//end if
							}//end for p
						} else {
							if (valorAux.disabled) {
								condiUna(auxArr[n],true);
							} else {
								checkboxActivate (auxArr[n], optionAlt, interAux);
							}//end if
						}//end if (preRef.length>1)
					}//end if (auxArr[n].length>0)
				}//end if (misRespuestas[n].checked)
			}//end for n
		}//end if (valorAux.type=="checkbox")
	}//end function activate



	//#######################################################################
	//Recibo pregunta condicionada e identificador de respuesta
	function radioActivate (pregunta, idRespuesta) {
		if (document.getElementById(idRespuesta+"text")) {
			if (document.getElementById(idRespuesta+"text").value!="") {
				condiUna(pregunta,false);
			}
			else {
				condiUna(pregunta,true);
			}//end if
		}
		else {
			if (document.getElementById(idRespuesta).checked) {
				if (document.getElementById(idRespuesta).disabled) {
					condiUna(pregunta,true);
				}
				else {
					condiUna(pregunta,false);
				}//end if
			}
			else {
				condiUna(pregunta,true);
			}//end if
		}//end if
	}//end function radioActivate



	//#######################################################################
	//Recibo pregunta condicionada, si posee la opcion alternativa y caja asociada 
	//a la alternativa
	function checkboxActivate (pregunta, optAlternativa, optCaja) {
		if (optAlternativa>0) {
			if (optCaja.value!="") {
				condiUna(pregunta,false);
			}
			else {
				condiUna(pregunta,true);
			}//end if
		}
		else {
			condiUna(pregunta,false);
		}//end if
	}//end function checkboxActivate



	//#######################################################################
	function condiUna (pregunta, que) {
		//Busco los elementos de formulario que tenemos para contestar a esa pregunta
		if (pregunta=="") { return true;}
		var respuestas=respuestasPreg("q"+pregunta);
		//alert(respuestas);
		condicionadas= new Array();
		copyArr="question"+pregunta;
		condicionadas=eval(copyArr);
		//alert(copyArr);
		//var condicionadas=eval("question"+pregunta);
		//Recorro los elementos de formulario que hay para contestar
		for (var j=0;j<respuestas.length ;j++ ) {
			//alert(respuestas[j].id);
			//Dependiendo del par?metro que llega a la funci?n...
			if (que) {
				//Desactivo el elemento de formulario j bajo la pregunta "pregunta"
				respuestas[j].disabled=true;
			}
			else {
				//Activo el elemento de formulario j bajo la pregunta "pregunta"
				if (respuestas[j].id.indexOf("text")==-1) {
					respuestas[j].disabled=false;
				}//end if
				else {
					//Si existe opcion alternativa y en la caja asociada 
					//se ha introducido algo, activamos
					if (document.getElementById(respuestas[j].id).value!="") {
						respuestas[j].disabled=false;
					}//end if
				}//end if
			}//end if
		}//end for j

		var auxRespuestas=respuestasPreg("q"+pregunta)
		//Recorro los elementos de formulario que hay para contestar
		for (var g=0;g<auxRespuestas.length ;g++ ) {
			//alert(auxRespuestas[g].id);
			var auxCond=auxRespuestas[g].id;

			//Dependiendo del par?metro que llega a la funci?n...
			//Desactivo el elemento de formulario j bajo la pregunta "pregunta"
			if (condicionadas[g]!="") {
				//alert("Pregunta "+respuestas[j].parentNode.parentNode.parentNode.id+" Respuesta "+respuestas[j].id+" condiciona pregunta "+condicionadas[j]+" ");
				if (auxRespuestas[g].type=="radio") {
					if (auxRespuestas[g].checked) {
						activate(auxRespuestas[g].id,auxRespuestas[g].parentNode.parentNode.parentNode.id);
					}
				}
				else {
					activate(auxRespuestas[g].id,auxRespuestas[g].parentNode.parentNode.parentNode.id);
				}//end if
			}//end if
		}//end for g
	}//end function condiUna



	//#######################################################################
	//Array con los elementos de formulario que se encuentran bajo la pregunta
	function respuestasPreg (queId) {
		var misRespuestasA=0;
		var misRespuestasB=0;
		misRespuestasA=document.getElementById(queId).getElementsByTagName("textarea");
		misRespuestasB=document.getElementById(queId).getElementsByTagName("input");
		
		if (misRespuestasA.length>0)
		{ misRespuestas=misRespuestasA; }
		else
		{ misRespuestas=misRespuestasB; }
		//alert(queId);
		return misRespuestas;
	}//end function respuestasPreg
