//===============================================================
//============ Comprobació compatibilitat ie4 i n4 ==============
//===============================================================

  var ns4,ie4,all;

    ns4 = (document.layers)? true:false;
  	ie4 = (document.all)? true:false;
	all = (document.getElementById)? true:false


//===============================================================
//====== Funció que apareix al codi de planes index.htm =========
//========= d'un tema però que no sembla fer-se servir ==========
//======================= enlloc(????) ==========================
//===============================================================

  function crea_fin(URL,titol,param) { 
  window.open(URL,titol,param);
}	  


// ===== FUNCIO INICI EDU365\JS\EXECICIS.JS ==========
function init() {
   if (ns4) {
     capa1 = document.capa1
  }
}


//========================================================================
//=== Funcio per establir mida del pop-up: es crida al body del pop-up ===
//========================================================================

function midapopup(width,height) {
		resizeTo(width+27,height+27);
}


//===============================================================
//======= Funcions obrir pop-ups index i pàgina següent =========
//===============================================================

function resize(width,height) {
		resizeTo(width+27,height+27);
}

function crea_finestra(url,ample,llarg){
	  carta=window.open(url,'displayWindow','toolbar=0,location=0,directories=0,screenX=0,screenY=0,top=0,left=0,status=0,menubar=no,scrollbars=no,resizable=0,width=' + ample + ',height=' + llarg + '');
	  carta.focus();
}
  
function crea_finestra2(url,ample,llarg){
	  carta=window.open(url,'displayWindow','toolbar=0,location=0,directories=0,screenX=0,screenY=0,top=0,left=0,status=0,menubar=no,scrollbars=1,resizable=0,width=' + ample + ',height=' + llarg + '');
     carta.focus();
}

// ======== FUNCIO MOSTRAR/OCULTAR D'EDU\JS\EXERCICIS.JS =========
function muestra(obj)
{
	if (ns4) obj.visibility = "show"
	else if (all) document.getElementById(obj).style.visibility="visible"
}

function oculta(obj)
{
	if (ns4) obj.visibility = "hide"
	else if (all) document.getElementById(obj).style.visibility="hidden"
}



//===============================================================
// ===== Funcions mostrar/ocultar etiquetes explicatives ========
//===============================================================

    
var etiquetaX=-20,etiquetaY=-40;
var x,y;
var mascaraX=-1000,mascaraY=-1000;


      // ------- Capturar event per Nestcape ----------      
      if(document.layers){
          document.captureEvents(Event.MOUSEMOVE);
      }          

      document.onmousemove=posicioCursor;

      
 // ========= Funció Mostrar etiqueta-text =========
      function mostrarEtiqueta(textEtiqueta){
   	      var txtEtiqueta="<div class='contenido'><table border=0 cellpadding=2 cellspacing=2>"+
          "<tr><td class='cellaetiqueta'>"+textEtiqueta+"</td></tr></table></div>";

          mascaraX=etiquetaX;
          mascaraY=etiquetaY;


         // ------- per Nestcape 4x abrimos el documento de la capa y escribimos la txtEtiqueta de contenido

          if(document.layers)
          {
              document.tip.document.write(txtEtiqueta);
              document.tip.document.close();
              document.tip.visibility="visible";
          }
		  
		  
         // ------- per Internet Explorer y Nestcape 6x  ----------
  
          if(document.all){
              document.all("etiqueta").innerHTML=txtEtiqueta;
              document.all("etiqueta").style.visibility="visible";
          }
          if(document.getElementById){
              document.getElementById('etiqueta').innerHTML=txtEtiqueta;
              document.getElementById('etiqueta').style.visibility="visible";
          }
      }
      
	  
// ========= Funció establir posició del cursor =======
      function posicioCursor(e){
          if(document.all){
              x=event.x+document.body.scrollLeft;
              y=event.y+document.body.scrollTop;
              document.all('etiqueta').style.left=x+mascaraX;			 
              document.all('etiqueta').style.top=y+mascaraY;
          }
          else if(document.layers){
              x=e.pageX+document.body.scrollLeft;
              y=e.pageY+document.body.scrollTop;
             // alert("layers"+e.currentTarget);
			  document.layers['etiqueta'].left=x+mascaraX;
              document.layers['etiqueta'].top=y+mascaraY;
          }
          else if(document.getElementById){
              x=e.clientX+document.body.scrollLeft;
              y=e.clientY+document.body.scrollTop;
              window.status=x;          
              //alert(e.currentTarget);
			  document.getElementById('etiqueta').style.left=x+mascaraX;
              document.getElementById('etiqueta').style.top=y+mascaraY;
			//  alert(etiqueta);
          }
      }



// ========= Funció per ocultar l'etiqueta-text =========
      function ocultarEtiqueta(){
          mascaraY=-1000;
          mascaraX=-1000;
          if(document.all)
              document.all("etiqueta").style.visibility="hidden";
          else if(document.layers)
              document.layers['etiqueta'].visibility="hide";
          else if(document.getElementById)
              document.getElementById('etiqueta').style.visibility="hidden";
      }
	  


// ========= Funció per mostrar l'etiqueta-imatge =========

      function mostrarImatge(textEtiqueta){
	    
   	      var txtEtiqueta="<div class='contenido'><table border=1 bordercolor='#D49342' cellpadding=2 cellspacing=0>"+
          "<tr><td class='cellaetiqueta'>"+"<img src='"+textEtiqueta+"'>"+"</td></tr></table></div>";
		  
/* Les imatges han de ser d'altura i/o amplada màxima aprox. 120px 
   per no tenir problemes en 800x600 */
          mascaraX=etiquetaX-15;
          mascaraY=etiquetaY-105;


         // ------- per Nestcape 4x abrimos el documento de la capa y escribimos la txtEtiqueta de contenido

          if(document.layers)
          {
              document.tip.document.write(txtEtiqueta);
              document.tip.document.close();
              document.tip.visibility="visible";
          }
		  
		  
         // ------- per Internet Explorer y Nestcape 6x  ----------
  
          if(document.all){
              document.all("etiqueta").innerHTML=txtEtiqueta;
              document.all("etiqueta").style.visibility="visible";
          }
          if(document.getElementById){
              document.getElementById('etiqueta').innerHTML=txtEtiqueta;
              document.getElementById('etiqueta').style.visibility="visible";
          }
      }
      
	  
// ========= Funció establir posició del cursor =======
      function posicioCursor(e){
  
          if(document.all){
              x=event.x+document.body.scrollLeft;
              y=event.y+document.body.scrollTop;
              document.all('etiqueta').style.left=x+mascaraX;			 
              document.all('etiqueta').style.top=y+mascaraY;
          }
          else if(document.layers){
              x=e.pageX+document.body.scrollLeft;
              y=e.pageY+document.body.scrollTop;
             // alert("layers"+e.currentTarget);
			  document.layers['etiqueta'].left=x+mascaraX;
              document.layers['etiqueta'].top=y+mascaraY;
          }
          else if(document.getElementById){
              x=e.clientX+document.body.scrollLeft;
              y=e.clientY+document.body.scrollTop;
              window.status=x;          
              //alert(e.currentTarget);
			  document.getElementById('etiqueta').style.left=x+mascaraX;
              document.getElementById('etiqueta').style.top=y+mascaraY;
			//  alert(etiqueta);
          }
      }


// ========= Funció per ocultar l'etiqueta-imatge =========
      function ocultarImatge(){
          mascaraY=-1000;
          mascaraX=-1000;
          if(document.all)
              document.all("etiqueta").style.visibility="hidden";
          else if(document.layers)
              document.layers['etiqueta'].visibility="hide";
          else if(document.getElementById)
              document.getElementById('etiqueta').style.visibility="hidden";
      }



// ========== Canvi de color d'una cel·la  ===========
function sobreTD(td,colortext,colorfons){
	td.style.color=colortext;
	td.style.background=colorfons;
	td.style.cursor='pointer';	
}


function foraTD(td,colortext,colorfons){
	td.style.color=colortext;
	td.style.background=colorfons;
	td.style.cursor='default';
}


// === per enllaçar tota una cel·la sense fer servir l'href ===
// === (no pots imposar el teu estil a la cel·la  si fas servir ===
// === l'href que te un estil propi al full d'estils) === 

function anarATD(direccioURL){ 
	window.open(direccioURL); 
} 

/* prova
function clickTD(td){
	td.children.tags('A')[0].click();
} 
*/


// === per obrir un pop-up clickant tota una cel·la sense fer servir l'href ===
// === (no pots imposar el teu estil a la cel·la  si fas servir ===
// === l'href que te un estil propi al full d'estils) === 

function crea_finestraTD(url,ampleURL,llargURL){
	  carta=window.open(url,'displayWindow','toolbar=0,location=0,directories=0,screenX=0,screenY=0,top=0,left=0,status=0,menubar=no,scrollbars=no,resizable=0,width=' + ampleURL + ',height=' + llargURL + '');
	  carta.focus();
}
  
function crea_finestra2TD(url,ampleURL,llargURL){
	  carta=window.open(url,'displayWindow','toolbar=0,location=0,directories=0,screenX=0,screenY=0,top=0,left=0,status=0,menubar=no,scrollbars=yes,resizable=0,width=' + ampleURL + ',height=' + llargURL + '');
     carta.focus();
}



// ======== Canviar color enllaç (prova) ========
/* micapa.style.propiedad="valor";

function canviarAtr(obj, color)
{
obj.style.color = color;
}
*/


// =============================================================
// =============================================================  
// ============= FUNCIONS D'EDU365\JS\EXERCICIS.JS =============
// =============================================================
// =============================================================


/*constructor objecte pregunta
	parametres:
	correcte(indexs dels botons radio q corresponen a les respostes correctes),
	els indexs han d'estar ordenats de menor a major
	missatge:es un array d 2 posicions,la 1º té el missatge de l'opció correcte i l'altra té el missatge de l'opció incorrect
	
	Tots els radios de la pregunta han d'estar en el mateix formulari
*/
function pregunta(correcte,missatge) {
	this.correcte=correcte;
	this.missatge=missatge;
	this.corregir=corregir;
	this.hits=0;
}

function corregir(form) {
	var i;
	var res=0;
	var trobat=1;
	var nOpcions=(form.length-1);//El botó no es compta
	var radios=form.elements;
	for(i=0;i<nOpcions;i++) {//recòrrer tots els radios
		if(radios[i].checked) {
			if(cercaBinaria(this.correcte,i)==1) {//cerca dins l'array el radio actual c
				this.hits++;
			}
			else {
				radios[i].checked=false;//inicialitza el radio incorrecte
			}
		}
	}
	if(this.missatge.length==2) {
		if(this.hits==this.correcte.length) {//tots els radio correctes
			alert(this.missatge[0]);
			res=1;
		}
		else {
			alert(this.missatge[1]);
		}
	}
	else {
		alert(this.missatge[0]+" "+this.hits +" / "+ this.correcte.length);
		if(this.hits==this.correcte.length) {
			res=1;
		}
	}
	this.hits=0;
	return res;
}

/*Constructor objecte ordre
	parametres(correcte):
	correcte=Array amb les respostes ordenats correctament,es pot pasar com array o com a llista de valors,
	Exemple b=new Array(nº elems)
			//omplir Array
			a=new ordre(b);
	missatge:es un array d 2 posicions,la 1º té el missatge de l'opció correcte i l'altra té el missatge de l'opció incorrect	
	Metodes:
		corregir(formulari);corregeix l'exercici,
		rep com a parametre el formulari on està l'exercici
	
*/
function ordre(correcte,missatge) {
	this.correcte=correcte;
	this.missatge=missatge;
	this.corregir=corregirOrd;
} 

function corregirOrd(form) {
	var i;
	var trobat=1;
	for(i=0;i<this.correcte.length;i++) {//recòrrer l'array de correctes
		form.elements[i].value=form.elements[i].value.toUpperCase();
		if(form.elements[i].value!=this.correcte[i].toUpperCase()) {//si es incorrecte inicialitza el camp de text
				trobat=0;
				form.elements[i].value="";
		}
	}
	if(trobat) {
		alert(this.missatge[0]);
	}
	else {
		alert(this.missatge[1]);
	}
}
/*	Constructor Objecte MarcarMultiple
	Parametres:
		Array amb els indexs q s'han de marcar,
		missatge:es un array d 3 posicions,la 1º té el missatge de l'opció correcte 
		la 2º té el missatge de l'opció incorrect i l'altra el missatge de control
	Metodes:
		corregir(form)=corregeix l'exercici
		control(botó),s'ha de cridar en l'event onclick del checkbox
			//Ex: <option type="checkbox" onclick="multi.control(this);">
		
	
	Atributs:
		correcte:Array amb els index q s'han d marcar
		clickats=nombre de checkboxes=

*/
function marcarMultiple(solucio,missatge) {
	this.correcte=solucio;
	this.missatge=missatge;
	this.clickats=0;
	this.corregir=corregirMultiple;
	this.control=control;
	this.maxim=this.correcte.length;
}

function control(casella) {
	if(casella.checked) {
		if(this.clickats==this.correcte.length) {
			alert(this.missatge[2]+" "+this.correcte.length);
			casella.checked=false;
		}
		else {
			this.clickats++;
		}	
	}
	else {
		this.clickats--;
	}	
}
function corregirMultiple(form) {
	var i;
	var hits=0;
	var trobat=1;
	var checks=form.elements;
	for(i=0;i<(checks.length-1)&& trobat;i++) {//recòrre tots els checksbutton
		if(checks[i].checked) {
			if(cercaBinaria(this.correcte,i)==1) {//cerca l'index actual a l'array de correctes
				hits++;
			}
			else {
				checks[i].checked=false;//reinitza el checkbutton
				this.clickats--;
			}
			if(hits==this.correcte.length) {//si tots estàn bé
				trobat=0;
			}
		}	
	}
	if(!trobat) {
		alert(this.missatge[0]);
	}
	else {
		alert(this.missatge[1]);
	}
	
}


/*
	Definició objecte selectOpcio 
	
	S'utilitza en textes q tenen espais en els que s'ha 
	d'escollir la paraula correcte d'una llista donada
	
	Parametres;
		Array amb els indexs q s'han de marcar
		missatge:es un array d 2 posicions,
		la 1º té el missatge de l'opció correcte i l'altra té el missatge de l'opció incorrect
	Atributs:
		correcte:Array pasat per parametre
	Metodes:
		corregir:corregeix l'exercici
			Parametres:formulari on está l'exercici	
*/

function selectOpcio(correcte,missatge) {
	this.correcte=correcte;
	this.missatge=missatge;
	this.corregir=corregirOpcio
}
function corregirOpcio(form) {
	var elems=form.elements.length-1;
	var i;
	var selects=form.elements;
	var hits=0;
	for(i=0;i<elems;i++) {
		if(selects[i].selectedIndex==this.correcte[i]) {
			hits++;
		}
		else {
			selects[i].selectedIndex=0;
		}
	}
	if(hits==elems) {
		alert(this.missatge[0]);
	}
	else {
		alert(this.missatge[1]);
	}
}

/*
	Definició objecte QuadreText
	Parametres;
		Array amb els les respostes correctes
	Atributs:
		correcte:Array pasat per parametre
		missatge:es un array d 2 posicions,la 1º té el missatge de l'opció correcte i l'altra té el missatge de l'opció incorrect
	Metodes:
		corregir:corregeix l'exercici
			Parametres:formulari on está l'exercici	
*/

function QuadreText(correcte,missatge) {
	var i;
	for(i=0;i<correcte.length;i++) {
		correcte[i]=correcte[i].toLowerCase();
	}
	this.missatge=missatge;
	this.correcte=correcte;
	this.corregir=corregirText;
}

function corregirText(form) {
	var i;
	var hits=0;
	for(i=0;i<form.elements.length-1;i++) {
		if(form.elements[i].value.toLowerCase()==this.correcte[i]) {
			hits++;
		}
		else {
			form.elements[i].value="";
		}
	}
	if(hits==this.correcte.length) {
		alert(this.missatge[0]);
	}
	else {
		alert(this.missatge[1]);		
	}
}
/*
	Constructor objecte fletxes
	paràmetres:
		array de strings amb les solucions: Ex:var a =new Array("2a","3b","5f")
		formulari on está localitzat l'exercici
	Atributs:
		form=formulari on està l'exercici
		correcte=l'array d'strings passat
		quadre=objecte QuadreText,que és el que corregeix amb el seu mètode corregir
		missatge:es un array d 2 posicions,la 1º té el missatge de l'opció correcte i l'altra té el missatge de l'opció incorrect
	Mètodes:
		corregir:
			corregeix l'exericici cridant al metode corregir del seu objecte QuadreText
			
			

*/
function Fletxes(correcte,formulari,missatge) {
	this.quadre=new QuadreText(correcte,missatge);
	this.form=formulari;
	this.corregir=corregirFletxes;
	this.form.elements[0].value=correcte[0];//inicialitza el primer resultat
	
}
function corregirFletxes() {
	this.quadre.corregir(this.form);
}
function initCamps(form) {
	var i;
	for(i=0;i<(form.elements.length-1);i++) {
		form.elements[i].value="";
	}
}
function newWindow(url,width,height,scrollBar) {
	carta=window.open(url, 'displayWindow', 'toolbar=0,location=0,directories=0,screenX=0,screenY=0,status=0,menubar=0,scrollbars='+scrollBar+',resizable=0,width='+width+',height=0'+height+"'");
  	carta.focus();
}

function cercaBinaria(array,elem) {
	var inici=0;
	var fi=array.length-1;
	var trobat=false;
	var mig;
	while(inici<=fi && !trobat) {
		var mig=parseInt((fi+inici)/2);
		if(array[mig]==elem) {
			trobat=true;
		}
		else {
			if(array[mig]<elem) {
				inici=mig+1;
			}
			else {
				fi=mig-1;	
			}
		}	
	}
	if(trobat) {
		return 1;
	}
	else {
		return -1;
	}
}	

