/* ------------------ */
/*     TeaserItem     */
/* ------------------ */

function TeaserItem(eCommonRef) {
	/* title */
	this.sTitle = eCommonRef.getAttribute('name');
	/* link */
	if (eCommonRef.getAttribute('performanceref')) {
		this.sLink = getPerformanceURL(eCommonRef.getAttribute('performanceref'));
		this.sLinkTitle = sTeaserLinkPerformance;
	} else if (eCommonRef.getAttribute('categoryref')) {
		this.sLink = getCategoryURL(eCommonRef.getAttribute('categoryref'));
		this.sLinkTitle = sTeaserLinkCategory;
	}
	/* date */
	this.sDate = eCommonRef.getAttribute('date');
	/* image */
	var eImage = eCommonRef.getElementsByTagName('image')[0];
	if (eImage) 
	{
		this.sImageSrc = getContentURL(eImage.getAttribute('medium'));		
		if (!this.sImageSrc)
		{
				this.sImageSrc = getContentURL(eImage.getAttribute('small'));
		};
	}	
	
	return this;
}



/* ---------------------- */
/*     TeaserCategory     */
/* ---------------------- */

var iTeaserItemsPerPage = 5;
function TeaserCategory(eSimpleList, iCategoryNumber) {
	this.sName = eSimpleList.getAttribute('name');
	this.iCategoryNumber = iCategoryNumber;
	this.eHandlerElem = null;
	/* get teaser items */
	this.aItems = new Array();
	for (var j = 0; (eCommonRef = eSimpleList.getElementsByTagName('commonref')[j]); j++) {
		this.aItems[this.aItems.length] = new TeaserItem(eCommonRef);
	}
	/* check is this page active */
	this.bIsSelected = (eSimpleList.getAttribute('selected') == 'yes')? true : false;
	/* pages */
	this.iActivePage = 0;
	this.iPagesNum = Math.ceil(this.aItems.length / iTeaserItemsPerPage);
	this.aPages = new Array();
	return this;
}

TeaserCategory.prototype.setActive = function(iCategoryNumber) {
	if (this && this.eHandlerElem) {
		/* deactivating previous category label */
		if (iActiveTeaserCategoryNumber >= 0 && aTeaserCategories[iActiveTeaserCategoryNumber] && aTeaserCategories[iActiveTeaserCategoryNumber].eHandlerElem) {
			aTeaserCategories[iActiveTeaserCategoryNumber].eHandlerElem.className = '';
			aTeaserCategories[iActiveTeaserCategoryNumber].hidePage();
		}
		if (iCategoryNumber >= 0) iActiveTeaserCategoryNumber = iCategoryNumber;
		
		/* activating current label */
		this.eHandlerElem.className = 'selected';
		
		/* display first (last active?) page */
		this.displayPage();
	}
}

var eTeasersCurrentPage = null
var eTeasersPrevPageNumber = null
var eTeasersPrevPageArrow = null
var eTeasersNextPageNumber = null
var eTeasersNextPageArrow = null
TeaserCategory.prototype.checkPageControls = function() {
	if (this && this.aPages) {
		/* display current page number */
		if (!eTeasersCurrentPage) eTeasersCurrentPage = document.getElementById('teasersCurrentPage');
		if (eTeasersCurrentPage) eTeasersCurrentPage.innerHTML = this.iActivePage + 1;

		/* arrow and previous page number */
		if (!eTeasersPrevPageNumber) eTeasersPrevPageNumber = document.getElementById('teasersPrevPageNumber');
		if (eTeasersPrevPageNumber) eTeasersPrevPageNumber.innerHTML = (this.iActivePage > 0)? this.iActivePage : '';
		if (!eTeasersPrevPageArrow) eTeasersPrevPageArrow = document.getElementById('teasersPrevPage');
		if (eTeasersPrevPageArrow) {
			if (this.iActivePage > 0) {
				eTeasersPrevPageArrow.src = oPrevTeaserPageArrow.src;
				eTeasersPrevPageArrow.className = 'link';
			} else {
				eTeasersPrevPageArrow.src = oPrevTeaserPageDisabledArrow.src;
				eTeasersPrevPageArrow.className = '';
			}
		}
		
		/* arrow and next page number */
		if (!eTeasersNextPageNumber) eTeasersNextPageNumber = document.getElementById('teasersNextPageNumber');
		if (eTeasersNextPageNumber) eTeasersNextPageNumber.innerHTML = (this.iActivePage < this.iPagesNum - 1)? (this.iActivePage + 2) : '';
		if (!eTeasersNextPageArrow) eTeasersNextPageArrow = document.getElementById('teasersNextPage');
		if (eTeasersNextPageArrow) {
			if (this.iActivePage < this.iPagesNum - 1) {
				eTeasersNextPageArrow.src = oNextTeaserPageArrow.src;
				eTeasersNextPageArrow.className = 'link';
			} else {
				eTeasersNextPageArrow.src = oNextTeaserPageDisabledArrow.src;
				eTeasersNextPageArrow.className = '';
			}
		}
	}	
}


TeaserCategory.prototype.hidePage = function(iPageNumber) {
	if (this && this.aPages) {
		if (!iPageNumber) iPageNumber = this.iActivePage;
		if (this.aPages[iPageNumber]) {
			this.aPages[iPageNumber].style.display = 'none';
		}
	}	
}

TeaserCategory.prototype.displayPage = function(iPageNumber) {
	if (this && this.aPages) {
		if (isNaN(iPageNumber)) iPageNumber = this.iActivePage;
		else this.iActivePage = iPageNumber;
		/* build and attach page if it's not already there */
		if (!this.aPages[iPageNumber]) this.aPages[iPageNumber] = buildTeasersPage(this.iCategoryNumber, iPageNumber)
		
		/* display page */
		if (this.aPages[iPageNumber]) {
			this.aPages[iPageNumber].style.display = (document.all && !window.opera)? 'block' : 'table';
		}
		
		this.checkPageControls(iPageNumber);
	}
}


TeaserCategory.prototype.changePage = function(iNextPageNumber) {
	if (this && this.aPages && !isNaN(this.iActivePage)) {
		if (!isNaN(iNextPageNumber) && !this.aPages[iNextPageNumber]) {
			/* if there's new page number but not page - build it */
			this.aPages[iNextPageNumber] = buildTeasersPage(this.iCategoryNumber, iNextPageNumber);
		}
		if (this.aPages[iNextPageNumber]) {
			slideNextTeasersPage(this.iCategoryNumber, this.iActivePage, iNextPageNumber, 0);
		}
	}
}

var iSlideSteps = 6;
var iSlideTO = 0;
function slideNextTeasersPage(iCategory, iCurrentPage, iNextPage, iStep) {
	if (!eTeaserItemsContainer) eTeaserItemsContainer = document.getElementById('teaserItems');
	if (
		eTeaserItemsContainer && aTeaserCategories
		&& aTeaserCategories[iCategory] && aTeaserCategories[iCategory].aPages
		&& aTeaserCategories[iCategory].aPages[iCurrentPage]
		&& aTeaserCategories[iCategory].aPages[iNextPage]
	) {
		if (iStep < iSlideSteps) {
			var iStartHeight = parseInt(aTeaserCategories[iCategory].aPages[iCurrentPage].offsetHeight);
			if (iStep == 0) {
				/* initiating slide - initial height */
				eTeaserItemsContainer.style.height = iStartHeight;
				/* and class names for page tables */
				aTeaserCategories[iCategory].aPages[iCurrentPage].className = 'teaser-items changing';
				aTeaserCategories[iCategory].aPages[iCurrentPage].style.display = (document.all && !window.opera)? 'block' : 'table';
				aTeaserCategories[iCategory].aPages[iNextPage].style.top = iStartHeight;
				aTeaserCategories[iCategory].aPages[iNextPage].className = 'teaser-items changing';
				aTeaserCategories[iCategory].aPages[iNextPage].style.display = (document.all && !window.opera)? 'block' : 'table';
			}
			var iEndHeight = parseInt(aTeaserCategories[iCategory].aPages[iNextPage].offsetHeight);

			/* set container's height */
			var iContainerHeight = parseInt(((iEndHeight - iStartHeight) / iSlideSteps) * (iStep + 1) + iStartHeight);
			eTeaserItemsContainer.style.height = iContainerHeight;

			/* set top position */
			if (iCurrentPage < iNextPage) {
				/* sliding up */
				var iTop = iEndHeight - parseInt((iEndHeight / iSlideSteps) * (iStep + 1));
				aTeaserCategories[iCategory].aPages[iCurrentPage].style.top = (iStartHeight - iTop) * -1;
				aTeaserCategories[iCategory].aPages[iNextPage].style.top = iTop;
			} else {
				/* sliding down */
				var iTop = parseInt((iEndHeight / iSlideSteps) * (iStep + 1));
				aTeaserCategories[iCategory].aPages[iCurrentPage].style.top = iTop;
				aTeaserCategories[iCategory].aPages[iNextPage].style.top = (iEndHeight - iTop) * -1;
			}
			
			iSlideTO = setTimeout('slideNextTeasersPage(' + iCategory + ',' + iCurrentPage + ', ' + iNextPage + ', ' + (iStep + 1) + ')', 50);
		} else {
			/* sliding is done */
			aTeaserCategories[iCategory].aPages[iCurrentPage].className = 'teaser-items';
			aTeaserCategories[iCategory].aPages[iCurrentPage].style.display = 'none';
			aTeaserCategories[iCategory].aPages[iNextPage].className = 'teaser-items';
			eTeaserItemsContainer.style.height = 'auto';
			aTeaserCategories[iCategory].iActivePage = iNextPage;
			aTeaserCategories[iCategory].checkPageControls();
			iSlideTO = 0;
		}
	}
}



/* --------------------- */
/*     HTML building     */
/* --------------------- */

function buildTeaserCategories() {
	var eCategoriesIns = document.getElementById('teaserCategories');
	if (eCategoriesIns) {
		/* create table */
		var eTable = document.createElement('table');
		eTable.className = 'teaser-switch';
		eTable.setAttribute('cellspacing','0');
		var eTableBody = document.createElement('tbody');
		eTable.appendChild(eTableBody);

		iActiveTeaserCategoryNumber = 0

		for (var i = 0; i < aTeaserCategories.length; i++) {
			var eTableRow = document.createElement('tr');
			var eTableCell = document.createElement('td');
			var eDiv = document.createElement('div');
			eDiv.id = 'teaserCategory' + i;
			var eSpan = document.createElement('span');
			eSpan.appendChild(document.createTextNode(aTeaserCategories[i].sName));
			eDiv.appendChild(eSpan);
			eTableCell.appendChild(eDiv);
			eTableRow.appendChild(eTableCell);
			eTableBody.appendChild(eTableRow);
			aTeaserCategories[i].eHandlerElem = eDiv;

			/* check for the selected category */
			if (aTeaserCategories[i].bIsSelected) iActiveTeaserCategoryNumber = i;
		}
		
		/* append table */
		eCategoriesIns.parentNode.appendChild(eTable);
		
		/* attach event handlers */
		for (var i = 0; i < aTeaserCategories.length; i++)
			if (aTeaserCategories[i].eHandlerElem)
				aTeaserCategories[i].eHandlerElem.onclick = changeTeaserCategory;
	}
}

var eTeaserItemsContainer = null;
function buildTeasersPage(iCatNumber, iPageNumber) {
	if (!eTeaserItemsContainer) eTeaserItemsContainer = document.getElementById('teaserItems');
	if (eTeaserItemsContainer) {
		if (aTeaserCategories[iCatNumber] && aTeaserCategories[iCatNumber].aItems) {
			var eTable = document.createElement('table');
			eTable.className = 'teaser-items';
			eTable.setAttribute('cellspacing','0');
			var eTableBody = document.createElement('tbody');
			eTable.appendChild(eTableBody);
			
			/* images */
			var eImagesRow = document.createElement('tr');
			for (var i = iPageNumber * iTeaserItemsPerPage; i < (iPageNumber + 1) * iTeaserItemsPerPage; i++) {
				var eImageCell = document.createElement('td');
				if (aTeaserCategories[iCatNumber].aItems[i]) {
					if (aTeaserCategories[iCatNumber].aItems[i].sImageSrc) {
						var eLink = document.createElement('a');
						eLink.setAttribute('href', aTeaserCategories[iCatNumber].aItems[i].sLink)
						eImageCell.appendChild(eLink);
						var eImage = document.createElement('img');
						eImage.setAttribute('width', '100');
						eImage.setAttribute('height', '100');
						eImage.src = aTeaserCategories[iCatNumber].aItems[i].sImageSrc;
						
						eLink.appendChild(eImage);
					}
				}
				eImagesRow.appendChild(eImageCell);
			}
			eTableBody.appendChild(eImagesRow);
			
			/* titles */
			var eTitlesRow = document.createElement('tr');
			for (var i = iPageNumber * iTeaserItemsPerPage; i < (iPageNumber + 1) * iTeaserItemsPerPage; i++) {
				var eTitlesCell = document.createElement('td');
				if (aTeaserCategories[iCatNumber].aItems[i]) {
					/* title */
					var eTitle = document.createElement('h3');
					eTitle.appendChild(document.createTextNode(aTeaserCategories[iCatNumber].aItems[i].sTitle));
					eTitlesCell.appendChild(eTitle);
					/* date */
					if (aTeaserCategories[iCatNumber].aItems[i].sDate) {
						var eDateParagraph = document.createElement('p');
						eDateParagraph.appendChild(document.createTextNode(aTeaserCategories[iCatNumber].aItems[i].sDate));
						eTitlesCell.appendChild(eDateParagraph);
					}
					/* link */
					var eLinkParagraph = document.createElement('p');
					var eLink = document.createElement('a');
					eLink.setAttribute('href', aTeaserCategories[iCatNumber].aItems[i].sLink)
					eLink.appendChild(document.createTextNode(aTeaserCategories[iCatNumber].aItems[i].sLinkTitle))
					eLinkParagraph.appendChild(eLink);
					eTitlesCell.appendChild(eLinkParagraph);
				}
				eTitlesRow.appendChild(eTitlesCell);
			}
			eTableBody.appendChild(eTitlesRow);

			eTeaserItemsContainer.appendChild(eTable);
			return eTable;
		}
	}
}


/* -------------- */
/*     events     */
/* -------------- */

function changeTeaserCategory() {
	if (this && this.id) {
		var iCategoryNumber = parseInt(this.id.substring(14));
		if (!isNaN(iCategoryNumber) && aTeaserCategories[iCategoryNumber]) {
			aTeaserCategories[iCategoryNumber].setActive(iCategoryNumber);
		}
	}
}

function nextCategoryPage() {
	if (!iSlideTO && iActiveTeaserCategoryNumber >= 0 && aTeaserCategories[iActiveTeaserCategoryNumber]) {
		var oTeaserCategory = aTeaserCategories[iActiveTeaserCategoryNumber];
		if (oTeaserCategory.iActivePage + 1 < oTeaserCategory.iPagesNum) {
			oTeaserCategory.changePage(oTeaserCategory.iActivePage + 1);
		}
	}
}

function previousCategoryPage() {
	if (iActiveTeaserCategoryNumber >= 0 && aTeaserCategories[iActiveTeaserCategoryNumber]) {
		var oTeaserCategory = aTeaserCategories[iActiveTeaserCategoryNumber];
		if (oTeaserCategory.iActivePage > 0) {
			oTeaserCategory.changePage(oTeaserCategory.iActivePage - 1);
//			oTeaserCategory.hidePage();
//			oTeaserCategory.displayPage(oTeaserCategory.iActivePage - 1);
		}
	}
}



/* ------------ */
/*     init     */
/* ------------ */

var aTeaserCategories = new Array();
var iActiveTeaserCategoryNumber = -1;

function displayTeasers(sResponseXML) {
	for (var i = 0; (eSimpleList = sResponseXML.documentElement.getElementsByTagName('simplelist')[i]); i++) {
		aTeaserCategories[aTeaserCategories.length] = new TeaserCategory(eSimpleList, aTeaserCategories.length);
	}
	if (aTeaserCategories.length)	{
		buildTeaserCategories();
		if (iActiveTeaserCategoryNumber >= 0 && aTeaserCategories[iActiveTeaserCategoryNumber]) {
			aTeaserCategories[iActiveTeaserCategoryNumber].setActive(-1);
		}
	}
}

function displayTeasersError() {}
