// gCarsl
// BETA caroussel jscript by Ganesha
// www.ganeshaproduccions.com
//

// constructor:
//
// @param 	gCarslContainer:string 				Identificador del elemento html que contiene los items
// @param 	gCarslClassName:string 				Clase CSS que identifica los items
// @param 	gCarslLftBut						Identificador del botón izquierdo/superior
// @param	gCarslRgtBut						Identificador del botón derecho/inferior
// @param	gCarslItemCSSClassName:string		Clase CSS que se aplicará (si existe) a la capa padre de las pestañas
// @param	gCarslCounter:string				BBVA: Id del tag que mostrará la paginación actual
// @param	gCarslTotal:Number					BBVA: Número total de ítems en la paginación
// @param	gCarslInc:Number					BBVA: Incremento de ítems en la paginación
//
// @method	switchItem(item:number)				Activa el item con el índice especificado (0...)
// @method  nextItem()							Activa el siguiente item
// @method  premItem()							Activa el item anterior
//
// @attrib	items:array							Referencias a los items de contenido
// @attrib	currentItem:number					Índice del item activo
// @attrib	itemsContainer:htmlElement			Referencia al contenedor de los blocks
// @attrib	containerSize:number				Número de elementos enteros que se ven cada vez
//

var gCarslContainer = new Array ();

function gCarsl (gCarslCont, gCarslClassName, gCarslLftBut, gCarslRgtBut, gCarslItemCSSClassName, gCarslCounter, gCarslTotal, gCarslInc) {
	var self = this;
	this.lftBut = document.getElementById(gCarslLftBut);
	this.rgtBut = document.getElementById(gCarslRgtBut);
	this.isPlaying = false;
	this.items = new Array ();
	this.height = new Array ();
	if (gCarslCounter) {
		this.gCarslCounter=gCarslCounter;
		this.gCarslTotal=gCarslTotal;
		this.gCarslInc=gCarslInc;
	}
	this.nextItem = function () {
		var target = this.currentItem == this.items.length - this.containerSize ? 0 : this.currentItem + this.containerSize;
		this.switchItem (target);
	}
	this.prevItem = function () {
		var target = this.currentItem == 0 ? this.items.length - this.containerSize : this.currentItem - this.containerSize;
		this.switchItem (target);
	}
	this.switchItem = function (item) {
		if (isNaN(item)) {
			for (var a in this.items) {
				if (this.items[a] == item) var itemIndex = a;
			}
		} else {
			var itemIndex = item;
		}
		if (itemIndex != this.currentIndex && !this.isPlaying) {
			if (isNaN(this.currentItem)) {
				this.currentItem = itemIndex;
				this.lftBut.style.display = 'none';
			} else {
				gCarslTransition (itemIndex,self);
			}
		}
		this.lftBut.blur();
		this.rgtBut.blur();
	}
	this.update = function () {
		var dummy;
		for (var a in document.getElementById(gCarslCont).getElementsByTagName('li')) {
			if (!isNaN(a) && document.getElementById(gCarslCont).getElementsByTagName('li')[a].className == gCarslClassName) {
				dummy = document.getElementById(gCarslCont).getElementsByTagName('li')[a];
			} 
		}
		dummy.style.float = 'left';
		this.items.push(dummy);
		this.height.push(dummy.offsetHeight);
		this.itemsContainer.style.width = 10000 + this.items.length * dummy.offsetWidth + 'px';
		//document.getElementById(gCarslCont).style.height = document.getElementById(gCarslCont).offsetHeight > dummy.offsetHeight ? document.getElementById(gCarslCont).offsetHeight + 'px'  : dummy.offsetHeight + 'px';
		this.containerSize = Math.floor(document.getElementById(gCarslCont).offsetWidth/dummy.offsetWidth);
		if (this.currentItem > 0) {
			this.lftBut.style.display = 'block';
		} else {
			this.lftBut.style.display = 'none';
		}
		if (this.currentItem < this.items.length - this.containerSize) {
			this.rgtBut.style.display = 'block';
		} else {
			this.rgtBut.style.display = 'none';
		}
	}
	document.getElementById(gCarslCont).style.position = 'relative';
	document.getElementById(gCarslCont).style.overflow = 'hidden';
	this.itemsContainer = document.createElement('div');
	this.itemsContainer.id = 'gCarslItemContainer' + gCarslContainer.length;
	this.itemsContainer.style.position = 'absolute';
	if (gCarslItemCSSClassName) this.itemsContainer.className = gTabBlockCSSClassName;
	var dummyHeight;
	var dummyCount = 0;
	for (var a in document.getElementById(gCarslCont).getElementsByTagName('li')) {
		if (!isNaN(a) && document.getElementById(gCarslCont).getElementsByTagName('li')[a].className == gCarslClassName) {
			this.items.push(document.getElementById(gCarslCont).getElementsByTagName('li')[a]);
			if (a == 0) {
				this.items[0].parentNode.insertBefore(this.itemsContainer,this.items[0]);
				dummyHeight = this.items[0].offsetHeight;
			}
			this.itemsContainer.appendChild (this.items[dummyCount]);
			this.items[dummyCount].style.float = 'left';
			dummyHeight = this.items[dummyCount].offsetHeight > dummyHeight ? this.items[dummyCount].offsetHeight : dummyHeight;
			this.height[dummyCount] = this.items[dummyCount].offsetHeight;
			dummyCount++;
		} 
	}
	this.itemsContainer.style.width = 10000 + this.items.length * this.items[0].offsetWidth + 'px';
	//while (this.itemsContainer.offsetHeight > this.items[0].offsetHeight) this.itemsContainer.style.width = this.itemsContainer.offsetWidth + 1 + 'px';
	document.getElementById(gCarslCont).style.height = dummyHeight + 'px';
	this.containerSize = Math.floor(document.getElementById(gCarslCont).offsetWidth/this.items[0].offsetWidth);
	this.lftBut.onclick = function () {
		self.prevItem();
		return false;
	}
	this.rgtBut.onclick = function () {
		self.nextItem();
		return false;
	}
	if (this.items.length <= this.containerSize) this.rgtBut.style.display = 'none';
	this.switchItem(0);
	gCarslContainer.push(this);
}

function gCarslTransition (newItem,carItems) {
	var targetPos = - newItem * carItems.items[carItems.items.length-1].offsetWidth;
	var dir;
	if (targetPos < carItems.itemsContainer.offsetLeft) {
		dir = -1;
	} else if (targetPos > carItems.itemsContainer.offsetLeft) {
		dir = 1;
	} else {
		dir = 0;
	}		
	if (!carItems.isPlaying) {
		carItems.currentItem = newItem;
		if (carItems.currentItem > 0) {
			carItems.lftBut.style.display = 'block';
		} else {
			carItems.lftBut.style.display = 'none';
		}
		if (carItems.currentItem < carItems.items.length - carItems.containerSize) {
			carItems.rgtBut.style.display = 'block';
		} else {
			carItems.rgtBut.style.display = 'none';
		}
		if (carItems.gCarslCounter) {
			var dummyItems = ((carItems.currentItem*carItems.gCarslInc)+carItems.gCarslInc) > carItems.gCarslTotal ? carItems.gCarslTotal : ((carItems.currentItem*carItems.gCarslInc)+carItems.gCarslInc);
			document.getElementById(carItems.gCarslCounter).innerHTML = 1+carItems.gCarslInc*carItems.currentItem+'-'+dummyItems+' de '+carItems.gCarslTotal;
		}
	}
	carItems.isPlaying = true;
	if ((dir == 0) || (dir < 0 && carItems.itemsContainer.offsetLeft <= targetPos + 2) || (dir > 0 && carItems.itemsContainer.offsetLeft >= targetPos - 2)) {
		carItems.itemsContainer.style.left = targetPos + 'px';
		carItems.currentItem = newItem;
		carItems.isPlaying = false;
		if (carItems.currentItem > 0) {
			carItems.lftBut.style.display = 'block';
		} else {
			carItems.lftBut.style.display = 'none';
		}
		if (carItems.currentItem < carItems.items.length - carItems.containerSize) {
			carItems.rgtBut.style.display = 'block';
		} else {
			carItems.rgtBut.style.display = 'none';
		}
	} else {
		carItems.itemsContainer.style.left = (dir*3) + carItems.itemsContainer.offsetLeft + (targetPos - carItems.itemsContainer.offsetLeft) / 3 + 'px';
		setTimeout (function () {gCarslTransition(newItem,carItems)},10);
	}
}