// JavaScript Document
// (C) Qualitum, S.L. 2007 
// www.qualitum.es
// Versió 2.0

// Variables per centrar o no les capes
var ampladaX = -1;	// Les inicialitzem a -1. Després calcularem segons els noms de les capes
var alsadaY = -1;	// i si no s'han de centrar seran 0, i si cal centrar, tindran les dimensions que ocupen les capes
var topDarrer = 0;	// Posició actual del 'quadre' que abarca les capes a centrar
var leftDarrer = 0;

function mides() {
	// Mesura el 'quadre' que abarca les capes Z i dona la seva posició actual
	// Agafem les capes
	var capes=document.getElementsByTagName("div");
	var c, cTop, cLeft, cAlt, cAmple;
	cTop = '9999px'; cLeft = '9999px'; cAlt = 0; cAmple = 0;
	ampladaX = 0; alsadaY = 0;
	for (var i=0; i<capes.length; i++) {
		 c = capes[i];
		// Si té CX i no XX ó RX, es que s'ha de tenir en compte per la grandària
		if (c.id.indexOf('CX') > -1 && c.id.indexOf('XX') == -1 && c.id.indexOf('RX') == -1) {
			if (restaPx(cLeft, c.style.left) > 0)
				cLeft = c.style.left;
			if (sumaPx(c.style.left, c.style.width) > cAmple)
				cAmple = sumaPx(c.style.left, c.style.width);
		}
		// Ajusta alt si s'ha de centrar perquè té CY i no YY ó RY
		if (c.id.indexOf('CY') > -1 && c.id.indexOf('YY') == -1 && c.id.indexOf('RY') == -1) {
			if (restaPx(cTop, c.style.top) > 0)
				cTop = c.style.top;
			if (sumaPx(c.style.top, c.style.height) > cAlt)
				cAlt = sumaPx(c.style.top, c.style.height);
		}
	}
	// Ho passem a les variables globals
	leftDarrer = cLeft;
	topDarrer = cTop;
	if (cAmple > 0)
		ampladaX = restaPx(cAmple, cLeft);
	if (cAlt > 0)
		alsadaY = restaPx(cAlt, cTop);
}
function restaPx(a, b) {
	// Resta dues quantitats encara que alguna tingui 'px' al darrera
	return (parseInt(a) - parseInt(b));
}
function sumaPx(a, b)  {
	// Suma dues quantitats encara que alguna tingui 'px' al darrera
	return (parseInt(a) + parseInt(b));
}
function centraPx(pagina, quadre, actual, capa) {
	// Rep dimensions de la pàgina i del quadre, el lloc actual del quadre i el offset actual de la capa
	// Centrem el quadre i després afegim el offset de capa
	var res = Math.floor(restaPx(pagina, quadre)/2);
	if (res > 0)
		return (res + restaPx(capa, actual));
	else
		return (restaPx(capa, actual));
}
function mostraCapes(siono) {
	// Mostra (siono: true) o amaga (siono: false) les capes que tinguin CX, CY, XX o YY
	var estat;
	var obj;

	if (siono)
		estat = 'visible';
	else
		estat = 'hidden';
	var capes=document.getElementsByTagName("div");
	for (var i=0; i<capes.length; i++) {
		if (capes[i].id.indexOf('CX') > -1 || capes[i].id.indexOf('CY') > -1 || capes[i].id.indexOf('XX') > -1 || capes[i].id.indexOf('YY') > -1 || capes[i].id.indexOf('RX') > -1 || capes[i].id.indexOf('RY') > -1 || capes[i].id.indexOf('KK') > -1)
			capes[i].style.visibility = estat;
	}

}
function canvi() {
	// Calculem les dimensions del quadre de les capes i la seva posició actual
	mides();
	// Calculem l'alçada i l'amplada de la finestra del explorador
	var pagAlt, pagAlt2=-1;
	var pagAmp, pagAmp2=-1;
	var cops=1;
	if (window.innerHeight) {
		pagAlt = window.innerHeight;	// Mozilla
		pagAmp = window.innerWidth;
	}
	else {
		pagAlt = document.body.clientHeight;	// Explorer
		pagAmp = document.body.clientWidth;
	}
	// Si no coincideixen les mides abans i després ho repetim
	while ((pagAlt2 != pagAlt || pagAmp != pagAmp2) && cops < 4) {
		// Mirem si tenim poc espai per mostrar-ho tot i posem barres de scroll o no. Això evita un error de Explorer si hi ha barres per defecte
		if (pagAlt < alsadaY || pagAmp < ampladaX)
			document.getElementsByTagName("body")[0].style.overflow = "auto";
		else
			document.getElementsByTagName("body")[0].style.overflow = "hidden";
		// Agafem les capes
		var capes=document.getElementsByTagName("div");
		var c, cTop, cLeft;
		// Ocultem les capes mentre les movem
//mostraCapes(false);
		for (var i=0; i<capes.length; i++) {
			 c = capes[i];
			 if (c.id.length > 0) {
				 cTop = c.style.top;
				 cLeft = c.style.left;
				// Ajusta Top si s'ha de centrar en Y o bé si després tenim que fer Reverse Y després
				if (alsadaY > 0 && (c.id.indexOf('CY') > -1 || c.id.indexOf('RY') > -1)) {
					c.style.top = '' + centraPx(pagAlt, alsadaY, topDarrer, cTop) + 'px';
				}
				// Ajusta Left si s'ha de centrar en X o si s'ha de fer Reverse X després
				if (ampladaX > 0 && (c.id.indexOf('CX') > -1 || c.id.indexOf('RX') > -1)) {
					c.style.left = '' + centraPx(pagAmp, ampladaX, leftDarrer, cLeft) + 'px';
				}
				// Ajusta ample si s'ha d'allargar perquè té XX a la amplada de la finestra o del quadre (el que sigui més gran)
				if (c.id.indexOf('XX') > -1) {
					if (restaPx(pagAmp, cLeft) > 0)
						c.style.width = '' + Math.max(restaPx(pagAmp, c.style.left), restaPx(ampladaX, c.style.left)) + 'px';
					else
						c.style.width = '0px';
				}
				// Ajusta ample i Left si s'ha d'allargar inversament perquè té RX
				if (c.id.indexOf('RX') > -1) {
					c.style.width = '' + sumaPx(c.style.width, c.style.left) + 'px';
					c.style.left = '0px';
				}
				// Ajusta alt si s'ha d'allargar perquè té YY a la alçada de la finestra o del quadre (la que sigui més gran)
				if (c.id.indexOf('YY') > -1) {
					cAlt = c.style.height;
					if (restaPx(pagAlt, cTop) > 0)
						c.style.height = '' + Math.max(restaPx(pagAlt, c.style.top), restaPx(alsadaY, c.style.top)) + 'px';
					else
						c.style.height = '0px';
				}
				// Ajusta alt i Top si s'ha d'allargar inversament perquè té RY
				if (c.id.indexOf('RY') > -1) {
					c.style.height = '' + sumaPx(c.style.height, c.style.top) + 'px';
					c.style.top = '0px';
				}
			}
		}
		pagAlt2 = pagAlt;
		pagAmp2 = pagAmp;
		if (window.innerHeight) {
			pagAlt = window.innerHeight;	// Mozilla
			pagAmp = window.innerWidth;
		}
		else {
			pagAlt = document.body.clientHeight;	// Explorer
			pagAmp = document.body.clientWidth;
		}
		cops++;
	}
	mostraCapes(true);
}