//()()
//(^^)
//Borja 2004
//////////////
var M_INDEPENDIENTE=0;
var M_SCO=1;
var M_MAIL=2;
function Ejercicio(titulo,instrucciones,modo,autozuzenketa){
	this.id=__idObj++;
	this.preguntas=new Array();
	this.titulo=titulo;
	this.instrucciones=instrucciones;
	this.addPregunta=addPregunta;
	this.getPregunta=getPregunta;
	this.isCorrecta=isCorrecta;
	this.toScreen=toScreen;	
	this.getTitulo=getTitulo;
	this.getInstrucciones=getInstrucciones;
	this.corregir=corregir;
	this.putCorrectas=putCorrectas;
	this.modo=modo;
	this.corregirIndependiente=corregirIndependiente;
	this.corregirSco=corregirSco;
	this.startDate=null;
	this.contador=0;
	this.zerrenda = "";
	this.setZerrenda = setZerrenda;
	this.getZerrenda = getZerrenda;

	if (autozuzenketa != null)
		this.autozuzenketa = autozuzenketa;
	else 
		this.autozuzenketa = true;
	this.getAutozuzenketa = getAutozuzenketa;
	function getAutozuzenketa(){
		return this.autozuzenketa;
	}	

	function addPregunta(pregunta){			
		this.preguntas[this.preguntas.length]=pregunta;		
	}
	function isCorrecta(idx){
		var p=this.preguntas[idx];
		return p.isCorrecta();
	}	
	function getPregunta(idx){
		return this.preguntas[idx];
	}
	function getTitulo(){
		return this.titulo;
	}
	function getInstrucciones(){
		return this.instrucciones;
	}	
	function setZerrenda(zerrenda) {
		this.zerrenda = zerrenda;
	}
	function getZerrenda() {
		return this.zerrenda;
	}

	function toScreen(){		
		var i=0;
		var html = ""
		if (this.getInstrucciones() != "") 
			html = html + "<div class='instrukzioak'>" + this.getInstrucciones() + "</div>";
		if (this.getTitulo() != "") 
			html = html + "<H1>" + this.getTitulo() + "</H1>";
		html=html + "<form name='frm' method='post' action='javascript:corregir(this)'>";
		if (this.zerrenda != "") html += "<" + this.zerrenda + ">";
		for(i=0;i<this.preguntas.length;i++){
			var p=this.preguntas[i];
			if (this.zerrenda != "") html += "<li>";
			html+="<div class='preguntasdiv'>";
			html+=p.getHtml();
			html+="</div>";
			if (this.zerrenda != "") html += "</li>";
		}		
		html+="<div class='botoiak'>";
		if (this.autozuzenketa) {
			html+="<input name='elBoton' id='elboton' type='submit' value='Zuzendu'>";
			html+="<input name='elBoton2' id='elboton2' type='button' value='Erantzun zuzenak ikusi' disabled='true' onclick='ejercicio.putCorrectas()'></from>";
		} else {
			html+="<input name='elBoton2' id='elboton2' type='button' value='Ereduak ikusi' onclick='ejercicio.putCorrectas()'>";
		}


		html+="</from>";
		html+="</div>";
		var capa = document.getElementById("div_pregunta");
		capa.innerHTML = html;
//		div_pregunta.innerHTML=html;
		this.startDate=new Date();		
	}
	function putCorrectas(){		
		var i,k;
		var g;		
		for (i=0;i<this.preguntas.length;i++){
			g=this.preguntas[i].elemento;			
			for (k=0;k<g.length;k++){
				if (g[k].TIPO==TIPO_GAP){
					g[k].putCorrecta();
					g[k].putFeedback();
				}
			}
		}
	}
	function corregirIndependiente(){
		this.contador=0;
		var i=0;
		for(i=0;i<this.preguntas.length;i++){
			if (this.preguntas[i].isCorrecta()==true) this.contador++;
			//alert("Pregunta ("+i+") "+this.preguntas[i].isCorrecta());
		}
		alert((intentos + 1) + ". saiakera:\n" + this.preguntas.length+" galdera, "+this.contador+" zuzen.\n\n\n(" + reintentos + " saiakera dituzu)\n");

//		if (this.contador==1) {alert(this.preguntas.length+" galdera, "+this.contador+" zuzen.");}
//			else {alert(this.preguntas.length+" galdera, "+this.contador+" zuzen.");}
		intentos++;
		if (intentos>=reintentos) {
			frm.elBoton.disabled=true;
			frm.elBoton2.disabled=false;
			alert("Ez dago saikera gehiago");
		}
		if (this.preguntas.length==this.contador) {
			frm.elBoton.disabled=true;
//			frm.elBoton2.disabled=true;
			frm.elBoton2.disabled=false;
			alert("Ariketa zuzena");
			this.putCorrectas();
		}
		
	}		
	function corregirSco(){
		this.corregirIndependiente();		
		if ((intentos>=reintentos) || (this.preguntas.length==this.contador)) {
			var score=(this.contador/this.preguntas.length)*100;			
			var ahora=new Date();
			var tiempo_total=Math.round((ahora.getTime()-this.startDate.getTime())/1000);
			if (isNaN(score) || score<0) score=0;
			if (isNaN(tiempo_total) || tiempo_total<0) tiempo_total=0;			
			send2Ims(score,tiempo_total);
		}
	}	
	function corregir(){
		 	this.corregirIndependiente();
//		 var LMS=FindAPI();
//		 if (LMS!=null){
//		 	this.corregirSco();
//		 }else{
//		 	this.corregirIndependiente();
//		 }
		/*
		switch (this.modo){
			case (M_INDEPENDIENTE):{
				this.corregirIndependiente();
				break;
			}
			case (M_SCO):{
				this.corregirSco();
				break;
			}
			case (M_EMAIL):{
				alert("Egin gabea.");
				break;
			}
		}*/
		
	}				
}
var TIPO_TEXTO=1;
var TIPO_GAP=2;
var intentos=0;
function Pregunta(){
	this.id=__idObj++;
	this.elemento=new Array();
	this.addElemento=addElemento;	
	this.getHtml=getHtml;
	this.isCorrecta=isCorrecta;
	function addElemento(obj){
		this.elemento[this.elemento.length]=obj;
	}
	function getHtml(zein){		
		var i;
		var html="";
		for (i=0;i<this.elemento.length;i++){			
			var e=this.elemento[i]			
			if (e.getTipo()==TIPO_TEXTO){			
				html+= "<div class='galdera'>" + e.getHtml() + "</div>";
			}
		}
		for (i=0;i<this.elemento.length;i++){			
			var e=this.elemento[i]			
			if (e.getTipo()==TIPO_GAP){			
				html+=e.getHtmlZerrenda();
			}
		}
		return html;				
	}
	function isCorrecta(){
		var i;		
		for (i=0;i<this.elemento.length;i++){	
			var e=this.elemento[i];			
			if (e.getTipo()==TIPO_GAP){			
				if (!e.isCorrecta()) return false;
			}
		}
		return true;
	}
}
function Texto(){
	this.id=__idObj++;
	this.TIPO=TIPO_TEXTO;
	this.texto="";
	this.getHtml=getHtml;
	this.setTexto=setTexto;
	this.getTexto=getTexto;
	this.getTipo=getTipo;
	
	function setTexto(t){
		this.texto=t
	}
	function getTexto(){
		return this.texto;
	}
	function getHtml(){
		return this.texto;	
	}
	function getTipo(){
		return this.TIPO;
	}
}
var R_COMBO=1;	
var R_INPUT=0;
var R_CHECK=2;
var R_RADIO=3;
var R_ESALDI=4;
function Gap(render){
	this.id=__idObj++;
	this.TIPO=TIPO_GAP;
	this.render=render;
	this.maxLength=0;
	this.respuestas=new Array();
	this.correcta=new Array();
	this.getHtml=getHtml
	this.getHtmlZerrenda=getHtmlZerrenda
	this.isCorrecta=isCorrecta
	this.addValor=addValor;	
	this.getTipo=getTipo;	
	this.putCorrecta=putCorrecta;	
	this.getRender = getRender;

	this.Feedback = "";
	this.setFeedback = setFeedback;
	this.getFeedback = getFeedback;
	this.putFeedback = putFeedback;
	function setFeedback(texto) {
		this.Feedback = texto;
	}
	function getFeedback() {
		return this.Feedback;
	}

	function addValor(v,c){
		this.respuestas[this.respuestas.length]=v
		this.correcta[this.correcta.length]=c;
		if (v.length>this.maxLength) this.maxLength=v.length;
	}
	function putCorrecta(){		
		var valor="";
		for (i=0;i<this.respuestas.length;i++){
			if (this.correcta[i]){
				if (valor!="") valor+=", ";
				valor+=this.respuestas[i];
			}
		}
		valor="("+valor+")";
		var nombre = 'div_id' + this.id;
		var a = document.getElementsByTagName("span");
		for (var i=0; i<a.length; i++) {
			if (a[i].id == nombre) {
				a[i].innerHTML = valor;
				i = a.length + 1;
			}
		}
		eval('div_id'+this.id+'.innerHTML=\''+valor+'\';');		
	}
	function putFeedback(){	
		var feed = this.getFeedback();
		if (feed.length > 6) {
			var valor="";
			var nombre = 'feed_id' + this.id;
			var a = document.getElementsByTagName("div");
			for (var i=0; i<a.length; i++) {
				if (a[i].id == nombre) {
					a[i].innerHTML = this.getFeedback();
					a[i].className = "instrucciones";
					i = a.length + 1;
				}
			}
			eval('feed_id'+this.id+'.className="instrucciones";');		
			eval('feed_id'+this.id+'.innerHTML="'+this.getFeedback()+'";');		
		}
	}
	function getRender() {
		return this.render;
	}
	function getHtml(){
		var i;				
		var html="";
		switch (this.render){
	  		case R_INPUT:{		    		
		    	      	 html="<input name='id"+this.id+"' type='text' size='"+this.maxLength+"' maxlength='"+this.maxLength+"'>";
		  		break;
	  		}
	  		case R_COMBO: {
				html="<select name='id"+this.id+"'><option value=''></option>";
		    		for (i=0;i<this.respuestas.length;i++){    			
		    	      	 html+="<option value='"+this.respuestas[i]+"'>"+this.respuestas[i]+"</option>";
		  		}
		  		html+="</select>";
		  		break;
		  	}
		  	case R_CHECK:{	
		    		html+="<input name='id"+this.id+"' type='checkbox' value='"+this.respuestas[i]+"'>";
		  		break;
		  	}
		  	case R_RADIO:{				
		    		html+="<input name='id"+this.id+"' type='radio' value='"+this.respuestas[i]+"'>";
		  		break;
		  	}
	  	}
	  	
	  	html+="<b><span id='div_id"+this.id+"'></span></b>";
	  	html+="<div id='feed_id"+this.id+"'></div>";
  		return html;
	}
	function getHtmlZerrenda(){
		var i;				
		var html="";
		var posibles = new Array();
		switch (this.render){
		  	case R_CHECK:{				
		    		for (i=0;i<this.respuestas.length;i++){
		    			posibles[i] = "<input value='"+this.respuestas[i]+"' name='id"+this.id+"' type='checkbox'>"+this.respuestas[i] + "<br />";
		  		}
				posibles.sort();
		    		for (i=0;i<posibles.length;i++){
		    			html += posibles[i];
				}
		  		html+="<br>";
		  		break;
		  	}
		  	case R_RADIO:{				
		    		for (i=0;i<this.respuestas.length;i++){
		    			posibles[i] = "<input name='id"+this.id+"' type='radio' value='"+this.respuestas[i]+"'>"+this.respuestas[i] + "<br />";
		  		}
				posibles.sort();
		    		for (i=0;i<posibles.length;i++){
		    			html += posibles[i];
				}
		  		html+="<br>";
		  		break;
		  	}
	  	}
	  	
	  	html+="<b><span id='div_id"+this.id+"'></span></b>";
	  	html+="<div id='feed_id"+this.id+"'></div>";
  		return html;
	}
	function isChecked(a,r,c){
		var i;		
		for (i=0;i<a.length;i++){
			if (a[i]==r) return c;
		}
		return false;
	}	
	function isCheckOk(a,r,c){
		var i;
		var correctas=0;
		var correctasUser=0;		
		for (i=0;i<r.length;i++) if (c[i]) correctas++;		
		for (i=0;i<r.length;i++){
			if (isChecked(a,r[i],c[i])) correctasUser++;
		}
		if (a.length>correctas) return false;
		else return (correctas==correctasUser);
	}
	function isCorrecta(){		
		var elegida="";
		var aElegida=new Array();		
		var eraZuzena = true;
		if ((this.render==R_INPUT) || (this.render==R_COMBO)) {
			elegida=eval("frm.id"+this.id+".value");
		}else if (this.render==R_RADIO) {
			var l,i;
			l=eval("frm.id"+this.id+".length");
			for (i=0;i<l;i++){
				var b=eval("frm.id"+this.id+"["+i+"].checked");
				if (b) elegida=eval("frm.id"+this.id+"["+i+"].value");
			}
		} else if (this.render==R_CHECK){
			var l,i;			
			l=eval("frm.id"+this.id+".length");
			eraZuzena = true;
			for (i=0;i<l;i++){
				for (j=0;j<this.respuestas.length;j++) {
					if (eval("frm.id"+this.id+"["+i+"].value") == this.respuestas[j]) {
						if (eval("frm.id"+this.id+"["+i+"].checked") != this.correcta[j]) eraZuzena = false;				
					}
				}
//				b=eval("frm.id"+this.id+"["+i+"].checked");				
//				if (b) aElegida[aElegida.length]=eval("frm.id"+this.id+"["+i+"].value");				
			}
		}
		var i;
		if (this.render==R_CHECK){
//			return isCheckOk(aElegida,this.respuestas,this.correcta);
//			return (eval("frm.id"+this.id+".checked")) == this.correcta[0];				
			return (eraZuzena);
		}else{						
			if (elegida=="") return false;
			for (i=0;i<this.respuestas.length;i++){
				if (this.respuestas[i].toUpperCase()==elegida.toUpperCase()) return this.correcta[i];
			}
		}
		//return true;
	}
	function getTipo(){
		return this.TIPO;
	}
}
var __idObj=0;
///////////////////////////
function corregir(){
ejercicio.corregir();
}

window.onSubmit=function descarga(){		
	ejercicio.corregirIndependiente();		
	var score=(ejercicio.contador/ejercicio.preguntas.length)*100;			
	var ahora=new Date();
	var tiempo_total=Math.round((ahora.getTime()-ejercicio.startDate.getTime())/1000);
	if (isNaN(score) || score<0) score=0;
	if (isNaN(tiempo_total) || tiempo_total<0) tiempo_total=0;			
	send2Ims(score,tiempo_total);
		
	}	