// JavaScript Document
// by bagul.net


function docId(id){
	return document.getElementById(id);	
}

function inspector(elem1) {
	var elem = docId(elem1);
	inspecciona(elem);
}

function inspecciona(el) {
	var str ="";
	for (var i in el){
	str+=i + ": " + el.getAttribute(i) + "\n";
	}
	alert(str);
}


//Limita entrada màxima caracters en un textarea
function maximText(text,maxlong,maxcol) { 
	  var in_value, out_value;
	  if (text.value.length > maxlong) { 
		in_value = text.value; 
		out_value = in_value.substring(0,maxlong); 
		text.value = out_value; 
		return false; 
	  } 
	  return true; 
} 


// Disminueix a la dta dimensions de finestra
function Efecte1 (elem, velocitat) {
	var eledins = document.getElementById(elem)
	eledins.style.width = eledins.offsetWidth+"px";
	
	idinterval = setInterval(function() {
		var proces = eledins.style.width;
		proces = Number(proces.substring(0, proces.lastIndexOf("px")));
		proces = proces - velocitat;
		eledins.style.width = proces+"px";
		if (proces < 1) {eledins.setAttribute("class", "amaga"); window.clearInterval(idinterval); Efecte2("mnuApartats", 4, 410); };
	},20);
}

//augmenta a l'esquerra dimensions de finstra
function Efecte2 (elem, velocitat, maxim) {
	var ele = document.getElementById(elem)
	var proces = 0;
	var clasoriginal = ele.className;
	var clasnova = "percodi1";
	ele.className = clasnova;
	if (ele.offsetWidth < maxim) { maxim = ele.offsetWidth; }
	ele.className = clasoriginal;
	
	idinterval = setInterval(function() {
		proces = proces + velocitat;
		if (proces >= maxim) {window.clearInterval(idinterval); ele.setAttribute("class", "ruta"); proces = maxim; ele.style.width = " "; }
		ele.style.width = proces+"px";
	},1);

}

// Asigna una clase a cada element
function Clase(elem1, elem2, clase1, clase2){
	if(docId(elem1)){ docId(elem1).className = clase1;}
	if(docId(elem2)){ docId(elem2).className = clase2;}
}


// Mostra o amaga contenidor segons moviment mouse
function ClasexAltre (onmou, objectiu, clase){
	if (docId(onmou).onmouseover) {docId(objectiu).className = clase; } //pren clase destinada a mouseOver
	if (docId(onmou).onmouseout)  {docId(objectiu).className = clase; } //pren clase destinada a mouseOut
}


// Mostra o amaga contenidor segons moviment mouse, però tornat valor anterior a un que volem excloure
// La segona condició evita canvi si és l'elment a excloure
// Diferenciar els events de mouse ens permet, si fos necessari, altre clases i per tant, efectes diferents.
function ClasexAltres (onmou, objectiu, exclou, clase, claseinvers){
	if ((docId(onmou).onmouseover) && (objectiu != exclou)) { 
		docId(objectiu).className = clase; //pren clase destinada a mouseOver
		docId(exclou).className = claseinvers;
	}
	if ((docId(onmou).onmouseout) && (objectiu != exclou)) {
		docId(objectiu).className = clase; //pren clase destinada a mouseOut
		docId(exclou).className = claseinvers;
	}
}

function bgImatge(onmou, objectiu, img1, img2) { 
	if (docId(onmou).onmouseover) {docId(objectiu).style.backgroundImage = "url("+img2+")"; } //pren imatge fons destinada a mouseOver
	if (docId(onmou).onmouseout) {docId(objectiu).style.backgroundImage = "url("+img1+")"; } //pren imatge fons destinada a onmouseOut
	
}


function mostra(id){
	if(docId(id)){
		layer=docId(id);
		layer.style.display='block';
		layer.style.visibility='visible';
	}
}

function amaga(id,parametre,maxim){
	if(docId(id) && parametre == maxim){
		layer=docId(id);
		layer.style.display='none';
		layer.style.visibility='hidden';
	}
}

// Crida animació boing en arxiu pantalla
function Boing(targetElement, duration, from, to, toggle, onmou){
	//abans de cridar la funció que genera l'efecte:
	 //Comprova el moviment realitzat pel mouse, que la var. onmou recull amb l'id corresponent...
	 //si a més coincideix amb que encara estem en el punt de partida, executa animació, pel contario no l'executa i evita tremolós.
	if ((docId(onmou).onmouseover) && (docId(onmou).offsetHeight == parseFloat(from))) {new pantalla.Effect.DoBlind(targetElement, {duration: duration, from: from, to: to, toggle: toggle});}
	if ((docId(onmou).onmouseout) && (docId(onmou).offsetHeight == parseFloat(from)))  {new pantalla.Effect.DoBlind(targetElement, {duration: duration, from: from, to: to, toggle: toggle});}
}

// Crida animació boing en arxiu pantalla en fer clic
function Boing2(targetElement, duration, from, to, toggle, onmou){
	//abans de cridar la funció que genera l'efecte:
	 //Comprova el moviment realitzat pel mouse, que la var. onmou recull amb l'id corresponent...
	 //si a més coincideix amb que encara estem en el punt de partida, executa animació, pel contario no l'executa i evita tremolós.
	if ((docId(onmou).onclick) && (docId(onmou).offsetHeight == parseFloat(from))) {new pantalla.Effect.DoBlind(targetElement, {duration: duration, from: from, to: to, toggle: toggle});}
}

function showHide(id){
	if(docId(id)){
		layer=docId(id);
		if(layer.style.display=='none'){
			layer.style.display='block';
			layer.style.visibility='visible';
		}else{
			layer.style.display='none';
			layer.style.visibility='hidden';
		}
	}
	hideAll(id);
}

function hideAll(id){// 'hide' all open except id
	posLayers=new Array('error','error_c','remember','notif','warning','warning_c');
	for(i=0;i<posLayers.length;i++){ //close possible layers open by server or client
		if(posLayers[i]!=id && docId(posLayers[i])){
			docId(posLayers[i]).style.display='none';
		}
	}
	
}


function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}


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;
}


// Crida a funció en l'arxiu de pantalla
function MM_effectBlind(targetElement, duration, from, to, toggle, permet){
		if (permet == 0) {
		//amb els altres paràmetres demanem efecte amunt o avall 
		new pantalla.Effect.DoBlind(targetElement, {duration: duration, from: from, to: to, toggle: toggle});
		}
}


function ClockRunData(){//Obté nom d'element on lleçarem el rellotge
	NomElement = ClockRunData.arguments[0]
	ClockRun() //Crida a la funció per generar rellotge
}
function ClockRun(){ //Rellotge a temps real

	var AraMateix = new Date() 
   	var Hora = AraMateix.getHours() 
   	var Minuts = AraMateix.getMinutes() 
   	var Segons = AraMateix.getSeconds() 

   	str_Segons = new String (Segons) 
   	if (str_Segons.length == 1) 
      	 Segons = "0" + Segons 

   	str_Minuts = new String (Minuts) 
   	if (str_Minuts.length == 1) 
      	 Minuts = "0" + Minuts 

   	str_Hora = new String (Hora) 
   	if (str_Hora.length == 1) 
      	 Hora = "0" + Hora 

   	var FormatClock = Hora + " : " + Minuts + " : " + Segons 
	document.getElementById(NomElement).firstChild.nodeValue = FormatClock

   	setTimeout("ClockRun()",1000)
}

//Validació de formularis
function validaFrm() { 
	if (document.getElementById){
		var x,i,p,q,ttl,nm,test,num,lng,str,min,max,errors='',primererror=false,chkerr,campcheck, args=validaFrm.arguments;
		for (i=0; i<(args.length-2); i+=3) {
			test=args[i+2]; camp=document.getElementById(args[i]);
			if (camp) {
				ttl=camp.parentNode.title; nm=camp.name; 
				if ((valor=camp.value)!=""){  //Si el valor del camp no es zero...
					if (test.indexOf('isEmail')!=-1) { //Si el valor del camp no es zero... És un mail?
						p=valor.indexOf('@');
						if (p<1 || p==(valor.length-1)) {
							errors+='- \"'+ttl+'\" ha de contenir una adreça de correu electrònic vàlida.\n\n'; camp.parentNode.style.borderBottomColor="#AF0917";
							if (primererror == false) {primererror = true; camp.focus()}; //Si és el primer error detectat, situa allà el focus
						}
					}
					else if (test.indexOf('isCheck')!=-1) { //Si el valor del camp no es zero i no és un mail... És un camp de Check?
						p=test.indexOf(':'); //posició a partir de la qual s'indica el nombre de checks per comprovar
						lng=test.substring(p+1); //nombre de checks a comprovar
						str=(camp.id); str=str.substring(0,(str.length-1)) //extraiem del camp, el nom de l'id, sense nombre al darrera
							chkerr=true; //Supossem que no hi ha cap check activat
							for (x=1; x<=lng; x++){ //Entre tots el cheks del mateix nom d'id
								campcheck=document.getElementById(str+x);
								if (campcheck && campcheck.checked) {chkerr=false;} //Si algun d'ells està checkejat, no provocarem l'error
							}
							if (chkerr) { //si cap d'ells està checkejat
								errors += '- \"'+ttl+'\" no pot quedar sense selecció.\n\n'; camp.parentNode.style.borderBottomColor="#AF0917";
								if (primererror == false) {primererror = true; camp.focus()}; //Si és el primer error detectat, situa allà el focus
							}
					}
					else if (test.indexOf('isMyEmail')!=-1) { //Si el valor del camp no es zero i no és cap altre de les anteriors possibilitats... És un camp per confirmar mail?
						p=test.indexOf(':'); //posició a partir de la qual s'indica l'id del camp que conté el mail a comprovar.
						str=test.substring(p+1); //id del camp que conté el mail a comprovar.
						campcheck=document.getElementById(str);
						if (campcheck) { //si existeix el camp a comprovar
							campcheck= campcheck.value ; str= camp.value;
							if (str.match(campcheck) != str) { //Si els camps no coincideixen
								errors += '- \"'+ttl+'\" les adreçes de correu electrònic no coincideixen.\n\n'; camp.parentNode.style.borderBottomColor="#AF0917";
								if (primererror == false) {primererror = true; camp.focus()}; //Si és el primer error detectat, situa allà el focus
							}
						}
					} 
					else if (test!='R') { //Si el valor del camp no es zero, no és un mail i no es tipus obligatori, (R)... ha de ser un nombre, (NisNum)
						num = parseFloat(valor);
						if (isNaN(valor)) errors+='- '+ttl+' ha de ser un nombre.\n\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+='- '+ttl+' ha de contenir un nombre entre '+min+' i '+max+'.\n\n'; camp.parentNode.style.borderBottomColor="#AF0917";
							  if (primererror == false) {primererror = true; camp.focus()}; //Si és el primer error detectat, situa allà el focus
						  }
						}
					} 
				} 
				else if (test.charAt(0) == 'R') { //Si el camp està buit i és obligatori
					errors += '- \"'+ttl+'\" ha de ser emplenat.\n\n'; camp.parentNode.style.borderBottomColor="#AF0917";
					if (primererror == false) {primererror = true; camp.focus()}; //Si és el primer error detectat, situa allà el focus
				}
			}
		}
		if (errors) alert("El formulari no s'ha complimentat correctament.\nHem trobat els següents Errors:\n\n"+errors); //Convertint aquesta línia en comentari evitem finestra d'errors//
		errorsvalidaFrm = (errors == '');
	}
}

//Restaura el color de la línia de subrratllat que marca la funció validaFrm
function ClaseReset(elem1){
	elem1.parentNode.style.borderBottomColor="#C2C4A8";/* Clr G3 */ 
}


function hola(missatge){
	alert (missatge)
}
	

