function mm_preloadImages(){ //v3.0";
   var d=document;
   if(d.images){
      if(!d.MM_p){
      	d.MM_p=new Array();
      }
      var i,j=d.MM_p.length,a=mm_preloadImages.arguments;
      for(i=0; i<a.length; i++){
         if (a[i].indexOf("#")!=0){
            d.MM_p[j]=new Image();
            d.MM_p[j++].src=a[i];
         }
      }
   }
}

function mm_findObj(n, d) { //v4.01
   var p,i,x;
   if(!d){
   	d=document;
   }
   if((p=n.indexOf("?"))>0&&parent.frames.length) {
      d=parent.frames[n.substring(p+1)].document;
      n=n.substring(0,p);
   }
   if(!(x=d[n])&&d.all){
   	x=d.all[n];
   }
   for (i=0;!x&&i<d.forms.length;i++){
   	x=d.forms[i][n];
   }
   for(i=0;!x&&d.layers&&i<d.layers.length;i++){
   	x=mm_findObj(n,d.layers[i].document);
   }
   if(!x && d.getElementById){
   	x=d.getElementById(n);
   }
   return x;
}

function mm_validateForm() { //v4.0
   var i,p,q,nm,test,num,min,max,errors='',args=mm_validateForm.arguments;
   for (i=0; i<(args.length-2); i+=3) {
      test=args[i+2];
      val=mm_findObj(args[i]);
      if (val) {
         nm=val.name;
         if ((val=val.value)!="") {
            if (test.indexOf('isEmail')!=-1) {
               p=val.indexOf('@');
               if (p<1 || p==(val.length-1)){
               	errors+='- '+nm+' heu de posar una adreça correcta.\n';
               }
            } else if (test!='R') {
               num = parseFloat(val);
               if (isNaN(val)){
               	errors+='- '+nm+' Ha de ser un número.\n';
               }
               if (test.indexOf('inRange') != -1) {
                  p=test.indexOf(':');
                  min=test.substring(8,p);
                  max=test.substring(p+1);
                  if (num<min || max<num){
                  	errors+='- '+nm+' ha de ser un número entre '+min+' i '+max+'.\n';
                  }
               }
            }
         } else if (test.charAt(0) == 'R'){
         	errors += '- '+nm+' \n';
         }
      }
   }
   if (errors){ alert(' Falten les següents dades:\n'+errors);}
   document.dadesCorrectes = (errors == '');
}

/* Funció que valida que el paràmetre 'parametre' (que ha de ser un radiobutton) estigui 
* seleccionat.
* 
* @param formulari objecte de la classe formulari que conté les dades del formulari que crida aquesta 
* funció.
* 
* @param parametre string amb el nom del paramtre (del tipus radiobutton) que es vol verificar si està 
* seleccionat o no.
*
* @param missatgeDError missatge d'error que apareixerà per pantalla en cas de no estar ben omplert el 
* formulari.
*/
function validar_radiobutton_seleccionat(formulari,parametre,missatgeDError){
   var radio=0;

   for(var i=0; i<formulari.elements.length; i++){ //Comencem un recorregut sobre tots els elements del 
                                                   //formulari
      if(formulari.elements[i].name==parametre){   //Si trobem un element amb el mateix nom que el que 
                                                   //busquem, llavors:
         if (formulari.elements[i].checked == true ){ //Verifiquem si està checkejat, i si ho està 
                                                      //llavors:
            radio=1;
            break;   //Amb que trobem només 1 dels elements buscats chequejats ja en tenim prou => sortim 
                     //del recorregut (sortim del for).
         }
      }
   }

   if (radio==0){   //En cas que cap element de la llista estigui seleccionat, llavors:
      alert(missatgeDError);   //Mostrem missatge d'error
      //return false;
      document.dadesCorrectes=false;
   }else{ document.dadesCorrectes=(document.dadesCorrectes&&true);}
}


/*
* Funció que valida que el paràmetre 'parametre' (que ha de ser un select) estigui 
* seleccionat correctament.
* 
* @param formulari objecte de la classe formulari que conté les dades del formulari que crida aquesta 
* funció.
* 
* @param parametre string amb el nom del paramtre (del tipus select) que es vol verificar si està 
* ben seleccionat o no.
*
* @param missatgeDError missatge d'error que apareixerà per pantalla en cas de no estar ben omplert el 
* formulari.
*
* @param valorNoAcceptat valor del select que en cas de ser el seleccionat mostrarà el missatge d'error
* i farà que la funció retirni false.
*/
function validar_select_ben_seleccionat(formulari,parametre,missatgeDError,valorNoAcceptat){
   if(!(formulari[parametre].value && formulari[parametre].value!=valorNoAcceptat 
   && (formulari[parametre].type=='select-one'||formulari[parametre].type=='select-multiple'))){
   /*En cas que cap element de la llista estigui seleccionat o el que estigui seleccionat sigui invalid, llavors:*/
      alert(missatgeDError);   //Mostrem missatge d'error
      document.dadesCorrectes=false;
   }else{ document.dadesCorrectes=(document.dadesCorrectes&&true);}
}

/*
* Funció que valida que el select amb identificador=id estigui 
* seleccionat correctament.
* 
* @param id string amb l'id del select que es vol verificar si està 
* ben seleccionat o no.
*
* @param missatgeDError missatge d'error que apareixerà per pantalla en cas de no estar ben omplert el 
* formulari.
*
* @param valorNoAcceptat valor del select que en cas de ser el seleccionat mostrarà el missatge d'error
* i farà que la funció retirni false.
*/
function validar_select_ben_seleccionat_per_id(id,missatgeDError,valorNoAcceptat){
   if(!(ob(id).value && ob(id).value!=valorNoAcceptat 
   && (ob(id).type=='select-one'||ob(id).type=='select-multiple'))){
   /*En cas que cap element de la llista estigui seleccionat o el que estigui seleccionat sigui invalid, llavors:*/
      alert(missatgeDError);   //Mostrem missatge d'error
      document.dadesCorrectes=false;
   }else{ document.dadesCorrectes=(document.dadesCorrectes&&true);}
}


/*
* Funció que valida que el textBox 'nomTextArea' estigui omplert.
* 
* @param formulari objecte de la classe formulari que conté les dades del formulari que crida aquesta 
* funció.
* 
* @param nomTextArea string amb el nom textarea que es vol verificar si està omplert o no.
*
* @param missatgeDError missatge d'error que apareixerà per pantalla en cas de no estar ben omplert el 
* formulari.
*/
function validar_textarea_omplert(formulari,nomTextArea,missatgeDError){
   var text=0;
   
   for(var i=0; i<formulari.elements.length; i++){ //Comencem un recorregut sobre tots els elements del 
                                                   //formulari
      if(formulari.elements[i].name==nomTextArea){  //Si trobem un element amb el mateix nom que el 
                                                   //textarea que busquem, llavors:
         if (formulari.elements[i].value != "" ){ //Verifiquem si està està buit o no, i si no ho està 
                                                   //llavors:
            text=1;
            break;   //1 cop trobat el textarea desitjat ja no pot haver cap altre element del formulari 
                     //amb el mateix nom, per tant ja no fa falta seguir fent la cerca => sortim 
                     //del recorregut (sortim del for).
         }
      }
      
   }
   
   if (text==0){   //En cas que el textarea desitjat no estigui omplert, llavors:
      alert(missatgeDError);   //Mostrem missatge d'error
      document.dadesCorrectes=false;
   }else{ document.dadesCorrectes=(document.dadesCorrectes&&true);}
}



/*Funció JavaScript que simplement porta a la part visible de la pantalla l'objecte DOM que té id=idObj.
*/
function vineDins(idObj){
   ob(idObj).className='dins';
}

/*Funció JavaScript que simplement porta a la part visible de la pantalla del document pare l'objecte DOM que té id=idObj.
*/
/*function pvineDins(idObj){
   //var estil=parent.document.getElementById(idObj).style;
   //estil.display='inline';
   pob(idObj).className='dins';
}*/

/*Funció JavaScript que simplement porta fora de la part visible de la pantalla l'objecte DOM que té id=idObj.
*/
function vesFora(idObj){
   //var estil=document.getElementById(idObj).style;
   //estil.display='none';
   ob(idObj).className='fora';
}

/*Funció JavaScript que simplement porta fora de la part visible de la pantalla del document pare l'objecte DOM que té id=idObj.
*/
/*function pvesFora(idObj){
   //var estil=parent.document.getElementById(idObj).style;
   //estil.display='none';
   pob(idObj).className='fora';
}*/

/*Funció JavaScript que defineix el número de ítems i el seu contingut de la barra d'eines dels estilsUB.
*
* Els arguments han d'anar agrupats en parelles (TextVisualitzatAlItem,urlOnApunta)+ 1 (on aquest últim
* argument és el path relatiu a l'arrel de l'aplicació.
*
* Exemple: escriuItemsBE("Condicions generals dels serveis", "http://www.ub.es/iub/pau/serveis.htm",
*                        "InformàticaUB","http://www.ub.edu/iub", "IniciUB", "http://www.ub.edu",
*                        "<?=$pathArrel?>")
*/
function escriuItemsBE(){
   var head="<table border='0' cellpadding='0' cellspacing='0'><tr>";
   var args=escriuItemsBE.arguments;
   var pathArrel=args[args.length-1];
   var body="";
   for(var i=0; i<args.length-2; i=i+3){
      body+="<td><a href='"+args[i+1]+"' title='"+args[i+2]+"' class='boto_barra_inactiu'>"+args[i]+"</a></td>";
   }
   var foot="<td><img src='http://www.ub.edu/estils_ub/css_img/espai.gif' alt='Imatge de diagramaci&oacute;' height='22' width='8'></td></tr></table>";
   var span=head+body+foot;
   ob('itemsBarraEines').innerHTML=span;
}


/*Funció JavaScript que defineix el número de pestanyes i el seu contingut del menú horitzontal dels estilsUB.
*
* Els arguments han d'anar agrupats en parelles (TextVisualitzatAlaPestanya,urlOnApunta) + 1 (on aquest últim
* argument és el path relatiu a l'arrel de l'aplicació.
*
* Exemple: escriuMH("PAS, PDI i Externs", '', "Tècnics", "../tecnic", "Empreses externes",
*                   "<?=$pathArrel?>/moduls/empext", "<?=$pathArrel?>");
*
* Si hi ha una pestanya que no apunta enlloc (url='') aquesta pestanya estarà sel·leccionada.
*/
function escriuMH(){
   var head="<table summary='menu horitzontal' align='center' border='0' cellpadding='0' cellspacing='0' width='100%'><tr>";
   var foot="<tr><td colspan='4'><img src='http://www.ub.edu/estils_ub/css_img/espai.gif' alt='Imatge de diagramaci&oacute;' height='1' width='725'></td></tr></table>";
   var args=escriuMH.arguments;
   var pathArrel=args[args.length-1];
   
   var nitems=(args.length-1)/2;
   var nitemsrestants=nitems%4;
   var nfilesde4=(nitems-nitemsrestants)/4;
   
   var nitem;/*Número d'ítem*/
   var esFilaInferior=false;
   var body="";
   var bodyFilaInferior='';
   var bodyFila="";
   var j;
   for(var i=1;i<=nfilesde4;i++){/*Files de 4 elements*/
   	bodyFila=head;
   	
   	for(j=1;j<=4;j++){
   		if(args[8*i+2*j-9]!=''){
   			bodyFila+="<td class='cella_menub1-ho'><a href=\"javascript:document.location.replace('"+args[8*i+2*j-9]+"')\" class='font_menu1_enll'>"+args[8*i+2*j-10]+"</a></td>";
   		}else{
   			bodyFila+="<td class='cella_menub2-ho' name='pestanyaSeleccionada'><span class='font_submenu1_enll'>"+args[8*i+2*j-10]+"</span></td>";
   			esFilaInferior=true;   			
   		}
   	}
   	
   	bodyFila+=foot;
   	
   	if(esFilaInferior){
   		bodyFilaInferior=bodyFila;
   		esFilaInferior=false;
   	}else{
   		body+=bodyFila;
   	}
   }
   
   if(nitemsrestants>0){
		bodyFila=head;
   	
   	for(j=nitemsrestants;j>=1;j--){/*Si n'hi ha, fila d'ítems restants*/
   		if(args[args.length-j*2]!=''){
   			bodyFila+="<td class='cella_menub1-ho'><a href=\"javascript:document.location.replace('"+args[args.length-j*2]+"')\" class='font_menu1_enll'>"+args[args.length-j*2-1]+"</a></td>";
   		}else{
   			bodyFila+="<td class='cella_menub2-ho' name='pestanyaSeleccionada'><span class='font_submenu1_enll'>"+args[args.length-j*2-1]+"</span></td>";
   			esFilaInferior=true;
   		}
   	}
   	
   	bodyFila+=foot;
   	
   	if(esFilaInferior){
   		bodyFilaInferior=bodyFila;
   		esFilaInferior=false;
   	}else{
   		body+=bodyFila;
   	}
   }
   

   body+=bodyFilaInferior;
   var span=body;
   ob('menuHoritzontal').innerHTML=span;
}

/*Funció JavaScript que defineix el número de pestanyes i el seu contingut del submenú horitzontal dels estilsUB.
*
* Els arguments han d'anar agrupats en parelles (TextVisualitzatAlaPestanya,urlOnApunta) + 1 (on aquest últim
* argument és el path relatiu a l'arrel de l'aplicació.
*
* Exemple: escriuMH("PAS, PDI i Externs", '', "Tècnics", "../tecnic", "Empreses externes",
*                   "<?=$pathArrel?>/moduls/empext", "<?=$pathArrel?>");
*
* Si hi ha una pestanya que no apunta enlloc (url='') aquesta pestanya estarà sel·leccionada.
*/
function escriuSubMH(){
   
   var head="<table summary='submenu horitzontal' align='center' border='0' cellpadding='0' cellspacing='0' width='100%'><tr valign='bottom'><td><table summary='submenu horitzontal' align='center' border='0' cellpadding='0' cellspacing='3' width='100%'>";
   var args=escriuSubMH.arguments;
   var pathArrel=args[args.length-1];
   var body="";
   for(var i=0; i<args.length-2; i=i+2){
      if(args[i+1]==''){
         body+="<td class='cella_menub2-ho'><span class='font_submenu1_enll'>"+args[i]+"</span></td>";
      }else{
         body+="<td class='cella_menub1-ho'><a href='"+args[i+1]+"' class='font_menu1_enll'>"+args[i]+"</a></td>";
      }
   }
   var foot="<tr><td colspan='4'><img src='http://www.ub.edu/estils_ub/css_img/espai.gif' alt='Imatge de diagramaci&oacute;' height='1' width='725'></td></tr></table></td></tr></table>";
   var span=head+body+foot;
   ob('menuHoritzontal2').innerHTML=span;
}

/* Funció que oculta tots els tags 'DIV' que tenen un atribut 'TIPUS'=tipusConjunt.
*/
function ocultaDivTipus(tipusConjunt){
   var divs=document.getElementsByTagName('div');
   for(var i in divs){
      var atributs=divs[i].attributes;
      if(atributs!=null){
         if(atributs.length!=null){
            for(var j=0; j<atributs.length;j++){
               if(atributs[j].nodeName=='tipus' && atributs[j].value==tipusConjunt){
                  divs[i].className='fora';
               }
            }
         }
      }
   }
}

/* Funció que oculta tots els tags=tag que tenen un atribut 'TIPUS'=tipusConjunt.
*/
function ocultaTagTipus(tag,tipusConjunt){
   var tags=document.getElementsByTagName(tag);
   for(var i in tags){
      var atributs=tags[i].attributes;
      if(atributs!=null){
         if(atributs.length!=null){
            for(var j=0; j<atributs.length;j++){
               if(atributs[j].nodeName=='tipus' && atributs[j].value==tipusConjunt){
                  tags[i].className='fora';
               }
            }
         }
      }
   }
}

/* Funció que mostra tots els tags 'DIV' que tenen un atribut 'TIPUS'=tipusConjunt.
*/
function mostraDivTipus(tipusConjunt){
   var divs=document.getElementsByTagName('div');
   for(var i in divs){
      var atributs=divs[i].attributes;
      if(atributs!=null){
         if(atributs.length!=null){
            for(var j=0; j<atributs.length;j++){
               if(atributs[j].nodeName=='tipus' && atributs[j].value==tipusConjunt){
                  divs[i].className='dins';
               }
            }
         }
      }
   }
}

/* Funció que mostra tots els tags=tag que tenen un atribut 'TIPUS'=tipusConjunt.
*/
function mostraTagTipus(tag,tipusConjunt){
   var tags=document.getElementsByTagName(tag);
   for(var i in tags){
      var atributs=tags[i].attributes;
      if(atributs!=null){
         if(atributs.length!=null){
            for(var j=0; j<atributs.length;j++){
               if(atributs[j].nodeName=='tipus' && atributs[j].value==tipusConjunt){
                  tags[i].className='dins';
               }
            }
         }
      }
   }
}

/* Funció que estableix a la classe d'estils 'classe' tots els tags=tag que 
*tenen un atribut 'TIPUS'=tipusConjunt.
*/
function classificaTagTipus(tag,tipusConjunt,classe){
   var tags=document.getElementsByTagName(tag);
   for(var i in tags){
      var atributs=tags[i].attributes;
      if(atributs!=null){
         if(atributs.length!=null){
            for(var j=0; j<atributs.length;j++){
               if(atributs[j].nodeName=='tipus' && atributs[j].value==tipusConjunt){
                  tags[i].className=classe;
               }
            }
         }
      }
   }
}

/* Funció que retorna els id's de tots els elements amb nom=nom
*/
function getIdsElements(nom){
   var elements=document.getElementsByName(nom);
   var ids;
   for(var i in elements){
      var atributs=tags[i].attributes;
      if(atributs!=null){
         if(atributs.length!=null){
            for(var j=0; j<atributs.length;j++){
               if(atributs[j].nodeName=='tipus' && atributs[j].value==tipusConjunt){
                  tags[i].className=classe;
               }
            }
         }
      }
   }
}

function itemMenu(idApartat,idItemMenu,idSubMenus){
   if(ob(idItemMenu).className=='cella_menu2'){
      vesFora(idApartat);
      ob(idItemMenu).className='cella_menu1';
      vesFora(idSubMenus);
      vineDins('presentacioMAIUB');
   }else{
      var subApartatDins=false;
      if(idSubMenus!='' && ob(idSubMenus).className=='dins'){
      	subApartatDins=true;
      }
      ocultaDivTipus('apartat');
      ocultaDivTipus('subApartat');
      ocultaDivTipus('subMenu');
      classificaTagTipus('td','itemMenu','cella_menu1');
      classificaTagTipus('td','itemSubMenu','cella_submenu1');
      if(idSubMenus!='' && subApartatDins){
         vineDins('presentacioMAIUB');
         vesFora(idSubMenus);
      }else{
         vesFora('presentacioMAIUB');
         ob(idItemMenu).className='cella_menu2';
         mostraDivTipus('presentacioApartat');
         vineDins(idSubMenus);
      }
      vineDins(idApartat);
   }
   return false;
}

function itemSubMenu(idSubApartat,idItemSubMenu){
   /*if(document.getElementById(idItemSubMenu).className=='cella_submenu2'){
      vesFora(idSubApartat);
      document.getElementById(idItemSubMenu).className='cella_submenu1';

   }else{*/
      ocultaDivTipus('presentacioApartat');
      ocultaDivTipus('subApartat');
      classificaTagTipus('td','itemMenu','cella_menu1');
      classificaTagTipus('td','itemSubMenu','cella_submenu1');
      ob(idItemSubMenu).className='cella_submenu2';
      vineDins(idSubApartat);
   //}
   return false;
}

function getPosicioY(id){
   if(ob(id)!=null){
      obj=ob(id);
      posicioY=obj.offsetTop;
      while(obj.offsetParent!=null){
         obj=obj.offsetParent;
         posicioY=posicioY+obj.offsetTop;
      }
      return posicioY;
   }
}

/*function getPPosicioY(id){
   if(pob(id)){
      obj=pob(id);
      posicioY=obj.offsetTop;
      while(obj.offsetParent!=null){
         obj=obj.offsetParent;
         posicioY=posicioY+obj.offsetTop;
      }
      return posicioY;
   }
}*/

function focalitza(id){
   if(ob(id)){
      posicioY=getPosicioY(id);
      window.scrollTo(1,posicioY);
   }
}

/*function pfocalitza(id){
   if(pob(id)){
      posicioY=getPPosicioY(id);
      parent.window.scrollTo(1,posicioY);
   }
}*/

/*Funció que fa un increment d'scroll gradual per posicionar adalt de tot de la finestra l'objecte desitjat. El paràmetre posicioYRelativa_EventOrigen sempre ha de ser event.clientY o 0. El paràmetre idOrigen ha de ser l'id de l'objecte on es produeix l'event inicial (se sol poder escriure com this.id). El idDestí l'id de l'objecte que quedarà just a la part de dalt de tot de la finestra. E el paràmetre "pas" és el pas a la que es fa l'scroll (com més gran, més ràpid).
*/
function focalitzaGradualment(posicioYRelativa_EventOrigen,idOrigen,idDesti,pas){
	var i;
   if(ob(idOrigen) && ob(idDesti)){
      if(pas==''){ pas=3;}
      posicioYAbsoluta_ObjecteOrigen=getPosicioY(idOrigen);
      posicioY_OrigenScroll=posicioYAbsoluta_ObjecteOrigen-posicioYRelativa_EventOrigen;
      posicioY_DestiScroll=getPosicioY(idDesti);
      if(posicioY_OrigenScroll<posicioY_DestiScroll){
         for(i=posicioY_OrigenScroll;i<=posicioY_DestiScroll;i=i+pas){
            window.scrollTo(1,i);
         }
      }else{
         for(i=posicioY_OrigenScroll;i>=posicioY_DestiScroll;i=i-pas){
            window.scrollTo(1,i);
         }
      }
   }
}

/*function pfocalitzaGradualment(posicioYRelativa_EventOrigen,idOrigen,idDesti,pas){
	var i;
   if(pob(idOrigen) && pob(idDesti)){
      if(pas==''){pas=3;}
      posicioYAbsoluta_ObjecteOrigen=getPPosicioY(idOrigen);
      posicioY_OrigenScroll = posicioYAbsoluta_ObjecteOrigen - posicioYRelativa_EventOrigen;
      posicioY_DestiScroll=getPPosicioY(idDesti);
      if(posicioY_OrigenScroll<posicioY_DestiScroll){
         for(i=posicioY_OrigenScroll;i<=posicioY_DestiScroll;i=i+pas){
            parent.window.scrollTo(1,i);
         }
      }else{
         for(i=posicioY_OrigenScroll;i>=posicioY_DestiScroll;i=i-pas){
            parent.window.scrollTo(1,i);
         }
      }
   }
}*/

function ob(idObj){
   if(document.getElementById(idObj)){
      return document.getElementById(idObj);
   }else{ return false;}
}

/*function pob(idObj){
   if(parent.ob(idObj)){
      return parent.document.getElementById(idObj);
   }else{ return false;}
}*/

/*function validaData(obj){
   data=cal_prs_date1(obj.value);
   if(data){
      if(document.dataCorrecta==null) document.dataCorrecta=true;
      return true;
   }else{
      obj.focus();
      return false;
   }
   
}*/

function comparaStringsDates(data1_str,data2_str){
   data1 = data1_str.split('-');
   data2 = data2_str.split('-');
   
   if(data1.length==3 && data2.length==3){
      for(var i=0;i<3;i++){
         //Convertim els strings a ints:
         data1[i]=data1[i]*1;
         data2[i]=data2[i]*1;
      }
      if(data1[2]<data2[2]){
         return 2;
      }else if(data1[2]>data2[2]){
         return 1;
      }else{
         if(data1[1]<data2[1]){
            return 2;
         }else if(data1[1]>data2[1]){
            return 1;
         }else{
            if(data1[0]<data2[0]){
               return 2;
            }else if(data1[0]>data2[0]){
               return 1;
            }else{
               return 3;
            }
         }
      }
   }else return -1;
}

function datesIniciFinalCorrectes(objInici,objFinal,objx){
   data1=objInici.value;
   data2=objFinal.value;
   if(objx.value!='' && cal_prs_date1(objx.value) && data1!='' && data2!=''){
      switch (comparaStringsDates(data1,data2)){
         case -1:
            return false;
         break;
         case 1:
            alert("Error: La data d'instal·lació del software ha de ser anterior a la "+
            "de desintal·lació");
            return false;
         break;
         case 2:
         case 3:
            return true;
         break;
         default : 
            return false;
      }
   }else return false;
}

/*function executaQuanEsPugui(refAfuncio){
   timeout=500;
   if(document.continua==null || !document.continua){
   	aux = function(){
   		executaQuanEsPugui(refAfuncio);
   	}
      setTimeout(aux,timeout);
   }else{
      setTimeout(refAfuncio,timeout);
   }
}*/

function iniciaAvisEspera(){
	finalitzaAvisEspera();
	var doc=document;
	doc.mostraAvisos=true;
	if(!doc.zIndex){
		doc.zIndex=100;
	}else doc.zIndex++;
	if(esIE()){
		var iFrame = document.createElement("iframe");
		iFrame.id="iFrameAuxIEAvisEspera";
		iFrame.name="iFrameAuxIEAvisEspera";
		iFrame.setAttribute("scrolling","no");
		iFrame.setAttribute("frameborder","0");
		iFrame.className="avisEspera";
		iFrame.style.border="none";
		iFrame.style.display="block";
		doc.body.appendChild(iFrame);
	}
	
	var div=document.createElement("div");
	div.id='divAvisEspera';
	div.className='avisEspera';
	div.innerHTML="Un moment si us plau.<br>Carregant dades...";
	
	//Dades Inicials:
	if(!doc.FVerd){
		doc.FRoig=100;
		doc.FVerd=200;
		doc.FBlau=200;		
		div.style.backgroundColor="rgb("+doc.FRoig+","+doc.FVerd+","+doc.FVerd+")";
		doc.creix=false;
	}
	div.style.zIndex=doc.zIndex+10000;
	document.body.appendChild(div);
	
	if(esIE()){
		var iFrame=ob('iFrameAuxIEAvisEspera');
		iFrame.style.left =div.style.left;
		iFrame.style.top =div.style.top;
		iFrame.style.width =div.offsetWidth;
		iFrame.style.height =div.offsetHeight;
	}
	
	
	//aux=function(e){
	//	var ev;
	//	if(document.all){//Per IE:
	//		ev=event;
	//	}else{//Per Firefox:
	//		ev=e;
	//	}
	//	document.MouseX=ev.clientX;
	//	document.MouseY=ev.clientY;
	//}
	//document.onmousemove=aux;
	//document.MouseX=-1000;
	//document.MouseY=-1000;
	
	
	mostraAvisEspera(div);
}

function mostraAvisEspera(div){	
	div.style.backgroundColor="rgb("+document.FRoig+","+document.FVerd+","+document.FVerd+")";
		
	if(document.incrColor){
		document.FVerd=document.FVerd+1;
	}else{
		document.FVerd=document.FVerd-1;
	}
	
	if(document.FVerd>=200) document.incrColor=false;
	if(document.FVerd<=150) document.incrColor=true;
	
	aux=function(){
		mostraAvisEspera(div);
	}
	if(document.mostraAvisos) setTimeout(aux,50);
}

function finalitzaAvisEspera(){
	document.mostraAvisos=false;
	if(ob('iFrameAuxIEAvisEspera')) document.body.removeChild(ob('iFrameAuxIEAvisEspera'));
	if(ob('divAvisEspera')) document.body.removeChild(ob('divAvisEspera'));
}

function onclickEditaElement(idElement,alturaDiv){
	ob('divElements').style.height=alturaDiv;
	ocultaDivTipus('campNoEditable_'+idElement);
	vesFora('butoOptimitzarVista_'+idElement);
	mostraDivTipus('campEditable_'+idElement);
}

/**
 * Funció general per tractar el que es rep.
 */
function processaHTTP_Request(HTTP_Request,obj,accioPreEnviament,accioPreProcessament,accioPostProcessament,
funcionalitat){
	if (HTTP_Request.readyState == 4) {
		if(typeof(accioPreProcessament)=='function') accioPreProcessament();
		finalitzaAvisEspera();
		if (HTTP_Request.status == 200) {
			if(funcionalitat=="innerHTML"){
				obj.innerHTML=HTTP_Request.responseText;
			}else if(funcionalitat=="alert"){
				alert(HTTP_Request.responseText);
			}else if(funcionalitat=="eval"){
				eval(HTTP_Request.responseText);
			}
			if(typeof(accioPostProcessament)=='function') accioPostProcessament();
		} else {
			alert('Hi ha hagut un problema amb la sol·licitud.');
		}
	}else{
		if(typeof(accioPreEnviament)=='function') accioPreEnviament();
	}

}

/**
 * Funció per enviar el que es rep a un inner text d'un objecte del document
 */
function processaHTTP_RequestResponseTextToInnerHTML(HTTP_Request,obj,accioPreEnviament,accioPreProcessament,
accioPostProcessament){
	processaHTTP_Request(HTTP_Request,obj,accioPreEnviament,accioPreProcessament,accioPostProcessament,'innerHTML');
}

/**
 * Funció per evaluar el que es rep (se sobrentén que és codi javascript)
 */
function processaHTTP_RequestEvalResponseText(HTTP_Request,accioPreEnviament,accioPostProcessament){
	processaHTTP_Request(HTTP_Request,null,accioPreEnviament,null,accioPostProcessament,'eval');
}

/**
 * Funció per enviar el que es rep a un alert
 */
function processaHTTP_RequestAlertResponseText(HTTP_Request,accioPreEnviament,accioPostProcessament){
	processaHTTP_Request(HTTP_Request,null,accioPreEnviament,null,accioPostProcessament,'alert');
}

function onclickDesfesEditaElement(idElement){
	ob('divElements').style.height='300px';
	ocultaDivTipus('campEditable_'+idElement);
	mostraDivTipus('campNoEditable_'+idElement);
	vineDins('butoOptimitzarVista_'+idElement);
}


function blinkBGColor(color1,color2,refresc,obj){
	estil=obj.style;
	if(obj.colorBackGroundObj==color1){
		estil.backgroundColor=color2;
		obj.colorBackGroundObj=color2
	}else{
		estil.backgroundColor=color1;
		obj.colorBackGroundObj=color1;
	}
	
	aux=function(){blinkBGColor(color1,color2,refresc,obj)}
	setTimeout(aux,refresc);
}

function formataDecimal(decimal,nombreDecimals){
    var aux = Math.pow(10,nombreDecimals);
    return parseInt(decimal*aux,10)/aux;
}

function enviaDades(urlDesti,nomFuncioProcessadoraDades,metodeRetorn,hashDades){
	if(metodeRetorn!='plain' && metodeRetorn!='html' && metodeRetorn!='javascript'){
		metodeRetorn='plain';
	}
	if(hashDades!=null){
		dojo.io.bind ({
			url: urlDesti,
			load: nomFuncioProcessadoraDades,
			error: function(type, error){alert('ERROR: '+error);},
			mimetype: "text/"+metodeRetorn,
			method: "POST",
			content: hashDades
		});
	}else{/*Per enviar formularis*/
		dojo.io.bind ({
			url: urlDesti,
			load: nomFuncioProcessadoraDades,
			error: function(type, error){alert('ERROR: '+error);},
			mimetype: "text/"+metodeRetorn,
			method: "POST"
		});
	}
}

function enviaDadesForm(urlDesti,nomFuncioProcessadoraDades,metodeRetorn,idForm){/*TODO:millorar*/
	formulari=ob(idForm);
	vectElementsFormulari=formulari.elements;
	var hashDades= new Object();
	for(var i=0;i<vectElementsFormulari.length;i++){
		element=vectElementsFormulari[i];
		if(element.type=='text' || 
			element.type=='hidden' ||
			element.type=='radio' ||
			element.type=='checkbox' ||
			element.type=='submit' ||
			element.type=='password'){
			hashDades[element.name]=element.value;
		}		
	}
	enviaDades(urlDesti,nomFuncioProcessadoraDades,metodeRetorn,hashDades);
}

//Ajax: http://developer.mozilla.org/ca/docs/AJAX:Primers_passos
function makeRequestComplert(objPerEnviar,url,metodeSolicitud,metodeAsincron,funcioProcessadora){
	var doc=document;
	doc.HTTP_Request = false;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		doc.HTTP_Request = new XMLHttpRequest();
		if (doc.HTTP_Request.overrideMimeType) {
			doc.HTTP_Request.overrideMimeType('text/xml');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			doc.HTTP_Request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				doc.HTTP_Request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	
	if (!doc.HTTP_Request) {
		alert("S'abandona :( No es pot crear una instància d'XMLHTTP");
		return false;
	}
	
	doc.HTTP_Request.onreadystatechange = function() {funcioProcessadora(doc.HTTP_Request) };
		
	doc.HTTP_Request.open(metodeSolicitud, url, metodeAsincron);//Això canvia l'estat de doc.HTTP_Request de 0 a 1 (de no inicialitzat a carregant dades)
	if(metodeSolicitud=='POST') doc.HTTP_Request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	var paramString=null;
	if("object"==typeof(objPerEnviar)){
		paramString='';
		var esPrimer=true;
		for(property in objPerEnviar){
			if(esPrimer){
				paramString+=property+"="+objPerEnviar[property];
				esPrimer=false;
			}else	paramString+="&"+property+"="+objPerEnviar[property];
		}
	}
	
	doc.HTTP_Request.send(paramString);
	iniciaAvisEspera();
}

/**
 * @param url URL absoluta o relativa però sempre en el mateix domini
 * @param objectePerEnviar Objecte definit com obj={param1:val1,param2:val2,...}
 * @param funcioProcessadora Funció que ha de tenir 1 únic argument que és 1 string i que s'ha 
 * d'encarregar de processar el que arribi des del servidor, que sempre retorna com 
 * HTTP_Request.responseText, és dir, un sol string. (Si és codi javascript que s'ha d'evaluar s'haurà
 * d'executar eval(HTTP_Request.responseText).
 */
function makeRequest(url,objPerEnviar,funcioProcessadora) {
	return makeRequestComplert(objPerEnviar,url,'POST',true,funcioProcessadora);
}

function getVectValorsSeleccionats(idSelect){
	opts=ob('selectUnitats').options;
	var vectValorsSeleccionats=new Array();
	var j=0;
	for(var i=0;i<opts.length;i++){
		if(opts[i].selected){
			vectValorsSeleccionats[j]=opts[i].value;
			j++;
		}
	}
	return vectValorsSeleccionats;
}

/**
 * Funció que retorna el valor sel·leccionat d'una col·lecció de radiobuttons
 */
function getValorRadioButtonsPerNom(nomRadios){
	var radios=document.getElementsByName(nomRadios);
	for(var i=0; i<radios.length; i++){
		if (radios[i].checked){
			return radios[i].value;
		}
	}
}

/**
 * Funció que estableix les variables del document mouse.XPos i mouseYPos amb la posició absoluta en pixels
 * del mouse
 */
/*function setPosicioMouse(e){
	if(document.all){//Per IE:
		document.mouseXPos=event.clientX;
		document.mouseYPos=event.clientY;
	}else{//Per Firefox:
		document.mouseXPos=e.clientX;
		document.mouseYPos=e.clientY;
	}
}*/

/**
 * Funció que retorna true si el navegador és de la familia de Internet explorer, false en cas contrari
 */
function esIE(){
	return ( navigator.appName=="Microsoft Internet Explorer" );
}

/**
 * Funció que mostra un div com si fos una finestra. És necessaria, sobretot, per visualitzar els divs
 * flotants en IE
 */
/*function mostraDivEnFinestra(idDiv){
	var div=ob(idDiv);
	div.className='finestra';
	if(esIE()){
		var iFrame = document.createElement("IFRAME");
		iFrame.setAttribute("src","http://pau.ub.edu/desenv/maiubAlfa/enblanc.html");
		iFrame.setAttribute("id","iFrameAuxIEAvisEspera");
		
		iFrame.style.position="absolute";
		iFrame.style.left =div.offsetLeft + 'px';
		iFrame.style.top =div.offsetTop + 'px';
		iFrame.style.width =div.offsetWidth + 'px';
		iFrame.style.height =div.offsetHeight + 'px';
		
		document.body.appendChild(iFrame);
	}
}*/

function ocultaDivEnFinestra(){
	var iFrame=ob('iFrameAuxIEAvisEspera');
	if(iFrame) document.body.removeChild(iFrame);
}

function resaltaXPerTancarDivFinestra(id){
	ob(id).className='titol_taula1_X';
}

function desResaltaXPerTancarDivFinestra(id){
	ob(id).className='titol_taula1';
}

function tancaDivFinestra(idDiv){
	if(ob('iFrameAuxIE'+idDiv)) document.body.removeChild(ob('iFrameAuxIE'+idDiv));
	if(ob(idDiv)) document.body.removeChild(ob(idDiv));
	ob('divBody').className='';
}

function estableixMovibleDivFinestra(ev,divFinestra){
	//Coordenades origen divFinestra:
	var Xdf0= divFinestra.offsetLeft;
	var Ydf0= divFinestra.offsetTop;
	
	//Coordenades event ev (pot ser qualsevol, per exemple onclick, onmousedown,etc...):
	var Xe= ev.clientX;
	var Ye= ev.clientY;
	
	var estil= divFinestra.style;
	
	var onmousemoveFunction=function(e){
		var eventOnmousemove;
		if(document.all){//Per IE:
			eventOnmousemove= event;
		}else{//Per Firefox:
			eventOnmousemove= e;
		}
		
		//Coordenades nova posició després de moure el mouse (event onmousemove):
		var Xmm= eventOnmousemove.clientX;
		var Ymm= eventOnmousemove.clientY;
		
		//Coordenades noves divFinestra:
		var Xdf1= Xdf0+Xmm-Xe;
		var Ydf1= Ydf0+Ymm-Ye;
		
		estil.left=Xdf1;
		estil.top=Ydf1;
		if(!document.zIndex){
			document.zIndex=100;
		}else document.zIndex++;
		estil.zIndex=document.zIndex;
		
		if(esIE()){
			var iFrame=doc.getElementById('iFrameAuxIE'+divFinestra.id);
			if(iFrame!=null){
				iFrame.style.left =estil.left;
				iFrame.style.top =estil.top;
				iFrame.style.width =divFinestra.offsetWidth;
				iFrame.style.height =divFinestra.offsetHeight;
			}
		}
	};
	document.onmousemove=onmousemoveFunction;
}

function obreDivFinestra(idDiv){
	if(!document.xDivFinestra){
		document.xDivFinestra=25;
		document.yDivFinestra=100;
	}else{
		document.xDivFinestra+=15;
		document.yDivFinestra+=15;
	}
	if(document.xDivFinestra>=480) document.xDivFinestra=25;
	if(document.yDivFinestra>=600) document.xDivFinestra=100;
	
	var x=document.xDivFinestra;
	var y=document.yDivFinestra;

	if(!ob(idDiv)){
			if(esIE()){
				var iFrame = document.createElement('iframe');
				iFrame.id='iFrameAuxIE'+idDiv;
				iFrame.name='iFrameAuxIE'+idDiv;
				iFrame.setAttribute('scrolling','no');
				iFrame.setAttribute('frameborder','0');
				iFrame.className='finestraFlotant';
				iFrame.style.border='none';
				iFrame.style.display='block';
				iFrame.style.left=x;
				iFrame.style.top=y;
				document.body.appendChild(iFrame);
			}
			
			var div=document.createElement('div');
			div.id=idDiv;
			div.className='finestraFlotant';
			div.style.left=x;
			div.style.top=y;
			document.body.appendChild(div);
			
			if(esIE()){
				iFrame.style.width =div.offsetWidth;
				iFrame.style.height =div.offsetHeight;
			}
		}
}

function recarregaFitxaHardware(HTTP_Request,idDiv,accioFinal){
	var accioPreProcessament=function(){
		obreDivFinestra(idDiv);
	}
	var accioPostProcessament=function(){
		var div=ob(idDiv);
		div.innerHTML=HTTP_Request.responseText;
		if(accioFinal!=null) accioFinal();
	}
	processaHTTP_Request(HTTP_Request,null,null,accioPreProcessament,accioPostProcessament,null);
}

function onclickMostraFitxaHardware(idHardware,formAction,mode,accioFinal){
	var obj= new Object();
	obj.idHardware=idHardware;
	obj.name=idHardware;
	obj.formAction=formAction;
	obj.accio='mostraFitxaHardware';
	obj.mode=mode;

	function recarregaFitxaHardwareAux(HTTP_Request){
		var idDiv='divFinestraFitxaHardware_'+obj.idHardware;
		recarregaFitxaHardware(HTTP_Request,idDiv,accioFinal);
	}
	makeRequest(formAction,obj,recarregaFitxaHardwareAux);
}

function verificarIdsPAU(ids,url,_accio,funcioProcessadora){
	obj={
		idsPAU:ids,
		accio:_accio
	};	
	makeRequest(url,obj,funcioProcessadora);
}


/*function recarregaFitxaOrdina_<?=$id?>(HTTP_Request){
		processaHTTP_RequestResponseTextToInnerHTML(HTTP_Request,ob('spanOrdinador_<?=$id?>'),null,null,null);
	};
	makeRequest('<?="$urlAbsArrel/"._MODUL_GESTIO_FITXES_PATH_?>/index.php',objOrdina,recarregaFitxaOrdina_<?=$id?>);
	
	function verificarDades(HTTP_Request){
		document.mac_hard_<?=$id?>_verificada=false;
		document.ip_hard_<?=$id?>_verificada=false;
		accioInici=function(){
			ob('botoSubmitFitxaOrdina_<?=$id?>').disabled=true;
		};
		accioFinal=function(){
			if(document.ip_hard_<?=$id?>_verificada && document.ip_hard_<?=$id?>_verificada)
				ob('botoSubmitFitxaOrdina_<?=$id?>').disabled=false;
			onclickMostraFitxaHardware(ev,objOrdina.id,formAction,mode);
		};
		processaHTTP_RequestEvalResponseText(HTTP_Request,accioInici,accioFinal);
	};
			
	onclickDesaDadesOrdina(objOrdina,'<?="$urlAbsArrel/"._MODUL_GESTIO_FITXES_PATH_?>/index.php','desaFitxaHardware',
	event,'<?=$formAction?>','<?=$mode?>',verificarDades);
	*/

/*function verificaMAC(nomDocVariable,mac,url){
	var obj= new Object();
	obj.nomDocVariable=nomDocVariable;
	obj.mac=mac;
	obj.accio='verificaMAC';
	function funcioProcessadora(HTTP_Request){
		eval("document."+nomDocVariable+"=false;");
		processaHTTP_RequestEvalResponseText(HTTP_Request,null,null);
	}
	makeRequestComplert(obj,url,'POST',false,funcioProcessadora);
}*/

function verificaMAC(id,mac,url,accioFinal){
	var obj= new Object();
	obj.mac=mac;
	obj.id=id;
	obj.accio='verificaMAC';
	
	function funcioProcessadora(HTTP_Request){
		accioInici=function(){
			eval('document.mac_'+mac+'_verificada=false;');
		}
		processaHTTP_RequestEvalResponseText(HTTP_Request,accioInici,accioFinal);
	}
	makeRequest(url,obj,funcioProcessadora);	
}

function verificaIP(id,ip,url,accioFinal){
	var obj= new Object();
	obj.ip=ip;
	obj.id=id;
	obj.accio='verificaIP';
	
	function funcioProcessadora(HTTP_Request){
		accioInici=function(){
			eval('document.ip_'+ip.replace( /\./g, '_')+'_verificada=false;');
		}
		processaHTTP_RequestEvalResponseText(HTTP_Request,accioInici,accioFinal);
	}
	makeRequest(url,obj,funcioProcessadora);	
}

function desaDadesOrdina(objOrdina,url,accioFinal){
	var obj= new Object();
	obj=objOrdina;
	obj.accio='desaFitxaHardware';
	
	function funcioProcessadora(HTTP_Request){
		processaHTTP_RequestEvalResponseText(HTTP_Request,null,accioFinal);
	}
	makeRequest(url,obj,funcioProcessadora);
}

function onclickDesaDadesOrdina(x,y,objOrdina,url,mode){
	var mac = objOrdina.mac;
	var ip = objOrdina.ip;
	var id=objOrdina.id;
	function funcAux(obj){
		return obj;
	}
	eval('document.eventXOnclickDesaDadesOrdina_'+id+'=funcAux(x);');
	eval('document.eventYOnclickDesaDadesOrdina_'+id+'=funcAux(y);');
	var ipJaVerificada=eval('document.ip_'+ip.replace( /\./g, '_')+'_verificada');
	if(ipJaVerificada) objOrdina.ipJaVerificada=ipJaVerificada;
	
	//accioFinalVerificacioMac=function(){
		//var missatgeCancelacio='Acció de desar dades cancel·lada';
		//var dacordAmbEditarMac=eval('document.mac_'+mac+'_verificada');		
		//if(dacordAmbEditarMac){
			
			
			
		//TODO inici:	
			
			
			//accioFinalVerificacioIp=function(){
				//var dacordAmbEditarIp=eval('document.ip_'+ip.replace( /\./g, '_')+'_verificada');
				//if(dacordAmbEditarIp) {
					//accioFinalDesaDadesOrdina=function(){
						//onclickMostraFitxaHardware(ev,id,url,mode);
					//}
					desaDadesOrdina(objOrdina,url,null);
				//}else {
					//alert(missatgeCancelacio);
				//}
			//}
			//verificaIP(id,ip,url,accioFinalVerificacioIp);
		
		
		
		//TODO fi:
		
		
		
		
		
		
		//}else alert(missatgeCancelacio);
	//}
	//verificaMAC(id,mac,url,accioFinalVerificacioMac);	
}

function onclickDesaDadesImpr(x,y,objOrdina,url,mode){
	alert("ERROR: Funcionalitat encara no implementada");//TODO
}

function alert2(missatge){	
	var doc=document;
	if(!doc.zIndex){
		doc.zIndex=100;
	}else doc.zIndex++;
	
	if(esIE()){
		var iFrame = document.createElement("iframe");
		iFrame.id="iFrameAuxIEdivAlert_"+zIndex;
		iFrame.name="iFrameAuxIEdivAlert";
		iFrame.setAttribute("scrolling","no");
		iFrame.setAttribute("frameborder","0");
		iFrame.className="finestraFlotant";
		iFrame.style.border="none";
		iFrame.style.display="block";
		doc.body.appendChild(iFrame);
	}
	
	var div=document.createElement("div");
	var zIndex=doc.zIndex;
	div.id='divAlert_'+zIndex;
	div.className='finestraFlotant finestraError';
	div.style.zIndex=doc.zIndex;
	
	var html="<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"background-color:#ffffff;\">"+
"<tr onmouseout=\"document.onmousemove='';\">"+
"	<td class=\"titol_taula1\" colspan='2' onmousedown=\"var divFinestra=ob('divAlert_"+zIndex+"');"+
"		estableixMovibleDivFinestra(event,divFinestra);\" 	onmouseup=\"document.onmousemove=''\""+
"	>"+
"	  	ATENCIÓ!!"+
"	</td>"+
"   <td class=\"titol_taula1\" id=\"divAlertX_"+zIndex+"\" onmouseover=\"resaltaXPerTancarDivFinestra('divAlertX_"+zIndex+"');\""+ 
"   onmouseout=\"desResaltaXPerTancarDivFinestra('divAlertX_"+zIndex+"');\" "+
"   style=\"padding-right: 5px;cursor:default;text-align:right\" "+
"   onclick=\"var divFinestra=ob('divAlert_"+zIndex+"');"+
"      tancaDivFinestra(divFinestra.id);"+
"   \">X</td>"+
"</tr><tr><td colspan=2 style=\"background-color:rgb(220,0,0)\">"+missatge+
"</td><td class=\"cella_taula2\" style=\"border-left-width: 0px;background-color: rgb(220,0,0);\">&#160;</td></tr></table>";
	
	div.innerHTML=html;
	document.body.appendChild(div);

	var estil=div.style;
	if(esIE()){
		iFrame.style.left =estil.left;
		iFrame.style.top =estil.top;
		iFrame.style.width =div.offsetWidth;
		iFrame.style.height =div.offsetHeight;
	}
}

function mostraResultatCerca(HTTP_Request){
	processaHTTP_RequestResponseTextToInnerHTML(HTTP_Request,ob('resultatCerca'),null,null,null);
}

function mostraResultatCercaFlotant(HTTP_Request){
	//processaHTTP_RequestResponseTextToInnerHTML(HTTP_Request,ob('resultatCerca'),null,null,null);
	accioPreEnviament=null;
	accioPostProcessament=null;
	processaHTTP_RequestEvalResponseText(HTTP_Request,accioPreEnviament,accioPostProcessament);
}