/* string constants */
var sTableHeaderDate = 'Дата';
var sTableHeaderTime = 'Время';
var sTableHeaderPerformance = 'Мероприятие';
var sTableHeaderHallName = 'Место проведения';
var sTableHeaderAddress = 'Адрес';


var aPerformanceMonthNames = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'];
var aPerformanceWeekDayNames = ['воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота'];


/*---------------------------*/
/*     Display functions     */
/*---------------------------*/

function createTableHeader(aColumnNames) {
	
	var eRow = document.createElement('tr');
	for (var i = 0; i < aColumnNames.length; i++) {
		var eCell = document.createElement('th');
		eCell.appendChild(document.createTextNode(aColumnNames[i]));
		eRow.appendChild(eCell);
	}
	return eRow;
}

function createPerformancesRow(oPerformance, sDate, eDateCell) {
	var eRow = document.createElement('tr');

		/* date */
	var sPerfDate = String(oPerformance.iYear) + String(oPerformance.iMonth) + String(oPerformance.iDay);
	if (sPerfDate == sDate) {
		if (eDateCell) {
			var iRowSpan = parseInt(eDateCell.getAttribute('rowspan'));
			if (isNaN(iRowSpan)) iRowSpan = 1;
			iRowSpan++;
			eDateCell.rowSpan = iRowSpan;
		}
	} else {
		sDate = sPerfDate;
		var eNewDateCell = document.createElement('td');
			/* day and month */
		eNewDateCell.appendChild(document.createTextNode(oPerformance.iDay + ' ' + aPerformanceMonthNames[oPerformance.iMonth] + ','));
			/* day of the week */
		var dtCurrent = new Date(oPerformance.iYear, oPerformance.iMonth, oPerformance.iDay);
		var iWeekDay = dtCurrent.getDay();
		eNewDateCell.appendChild(document.createElement('br'));
		eNewDateCell.appendChild(document.createTextNode(aPerformanceWeekDayNames[iWeekDay]));
		eRow.appendChild(eNewDateCell);
		eDateCell = eNewDateCell;
	}

		/* time */
	var eTimeCell = document.createElement('td');
	eTimeCell.appendChild(document.createTextNode(oPerformance.sTime));
	eRow.appendChild(eTimeCell);
		/* performance */
	var ePerformanceCell = document.createElement('td');
	var eLink = document.createElement('a');
	var ePictire = document.createElement('img');	
	ePictire.src = getWebContent("/images/tip_blanka.gif");
//	ePictire.height = 8;
//	ePictire.width = 8;
	
	
	eLink.setAttribute('href', getPerformanceURL(oPerformance.sID));
	
	eLink.appendChild(document.createTextNode(oPerformance.sName));
	
	ePerformanceCell.appendChild(eLink);
	
	

	ePerformanceCell.innerHTML = ePerformanceCell.innerHTML + '&nbsp;&nbsp;';
	if (oPerformance.sETicket == 'true')
	{
		ePerformanceCell.appendChild(ePictire);		
	}
	
	
	eRow.appendChild(ePerformanceCell);
		/* hall */
	var eHallCell = document.createElement('td');
	eHallCell.className = 'place';
	var eHallLink = null;
	if (aHalls[oPerformance.sHallID]) {
		var eHallLink = document.createElement('span');
		eHallLink.className = 'pseudo-link';
		eHallLink.appendChild(document.createTextNode(aHalls[oPerformance.sHallID].sName));
		eHallLink.onclick = function(){ displayPerformancesByHall(oPerformance.sHallID) };
		eHallCell.appendChild(eHallLink);
	}
	eRow.appendChild(eHallCell);
		/* address */
	var eAddressCell = document.createElement('td');
	eAddressCell.className = 'address';
	if (aHalls[oPerformance.sHallID]) {
		eAddressCell.appendChild(document.createTextNode(aHalls[oPerformance.sHallID].sAddress));
	}
	eRow.appendChild(eAddressCell);

	return [eRow, sDate, eDateCell];
}

function displayPerformancesByDate() {
	if (ePerormancesPlaceholder) {
		if (oPaginator) oPaginator.showControls();

		var eTable = document.createElement('table');
		eTable.setAttribute('cellspacing', '0');
		eTable.className = 'events';
		var eTBody = document.createElement('tbody');
		eTable.appendChild(eTBody);

		/* table header */
		var eTHeadRow = createTableHeader([sTableHeaderDate, sTableHeaderTime, sTableHeaderPerformance, sTableHeaderHallName, sTableHeaderAddress]);
		eTBody.appendChild(eTHeadRow);
		
		/* performances */
		var sDate = null;
		var eDateCell = null;
		for (var i = 0; i < aPerformances.length; i++) {
			var bShowPerformance = false;
			if (aPerformanceWeeks && oPaginator && aPerformanceWeeks[oPaginator.iCurrentPage]) {
				if (aPerformances[i].iWeek == aPerformanceWeeks[oPaginator.iCurrentPage]) bShowPerformance = true;
			} else bShowPerformance = true;
			if (bShowPerformance) {
				aPerformanceRow = createPerformancesRow(aPerformances[i], sDate, eDateCell)
				if (aPerformanceRow[0]) eTBody.appendChild(aPerformanceRow[0]);
				sDate = aPerformanceRow[1];
				eDateCell = aPerformanceRow[2];
			}
		}
		
		if (ePerformancesTable) ePerformancesTable.parentNode.removeChild(ePerformancesTable);
		ePerormancesPlaceholder.parentNode.insertBefore(eTable, ePerormancesPlaceholder.nextSibling);
		ePerformancesTable = eTable;

		if (eAllPerformancesLink) eAllPerformancesLink.className = 'pseudo-link selected';
		if (eAllHallsLink) eAllHallsLink.className = 'pseudo-link';
		sCurrentTable = 'performances';
	}
}


/* Performances by Hall */

function createHallPerformancesRow(oPerformance, sDate, eDateCell) {
	var eRow = document.createElement('tr');

		/* date */
	var sPerfDate = String(oPerformance.iYear) + String(oPerformance.iMonth) + String(oPerformance.iDay);
	if (sPerfDate == sDate) {
		if (eDateCell) {
			var iRowSpan = parseInt(eDateCell.getAttribute('rowspan'));
			if (isNaN(iRowSpan)) iRowSpan = 1;
			iRowSpan++;
			eDateCell.rowSpan = iRowSpan;
		}
	} else {
		sDate = sPerfDate;
		var eNewDateCell = document.createElement('td');
			/* day and month */
		eNewDateCell.appendChild(document.createTextNode(oPerformance.iDay + ' ' + aPerformanceMonthNames[oPerformance.iMonth] + ','));
			/* day of the week */
		var dtCurrent = new Date(oPerformance.iYear, oPerformance.iMonth, oPerformance.iDay);
		var iWeekDay = dtCurrent.getDay();
		eNewDateCell.appendChild(document.createElement('br'));
		eNewDateCell.appendChild(document.createTextNode(aPerformanceWeekDayNames[iWeekDay]));
		eRow.appendChild(eNewDateCell);
		eDateCell = eNewDateCell;
	}

		/* time */
	var eTimeCell = document.createElement('td');
	eTimeCell.appendChild(document.createTextNode(oPerformance.sTime));
	eRow.appendChild(eTimeCell);
		/* performance */
	var ePerformanceCell = document.createElement('td');
	var eLink = document.createElement('a');
	eLink.setAttribute('href', getPerformanceURL(oPerformance.sID));
	eLink.appendChild(document.createTextNode(oPerformance.sName));
	ePerformanceCell.appendChild(eLink);
	eRow.appendChild(ePerformanceCell);

	return [eRow, sDate, eDateCell];
}


function displayPerformancesByHall(sHallID) {
	
	if ((sCurrentTable != 'hall' + sHallID) && aHalls[sHallID] && ePerormancesPlaceholder) {
		if (oPaginator) oPaginator.hideControls();

		var eTable = document.createElement('table');
		eTable.setAttribute('cellspacing', '0');
		eTable.className = 'events';
		var eTBody = document.createElement('tbody');
		eTable.appendChild(eTBody);

		/* table header */
		var eTHeadRow = createTableHeader([sTableHeaderHallName, sTableHeaderDate, sTableHeaderTime, sTableHeaderPerformance]);
		eTBody.appendChild(eTHeadRow);
		
		/* performances */
		var sDate = null;
		var eDateCell = null;
		var iPerformancesShown = 0;
		var eFirstRow = null;
		for (var i = 0; i < aPerformances.length; i++) {
			if (aPerformances[i].sHallID == sHallID) {
				aPerformanceRow = createHallPerformancesRow(aPerformances[i], sDate, eDateCell)
				if (aPerformanceRow[0]) {
					if (!eFirstRow) eFirstRow = aPerformanceRow[0];
					eTBody.appendChild(aPerformanceRow[0]);
					sDate = aPerformanceRow[1];
					eDateCell = aPerformanceRow[2];
					iPerformancesShown++;
				}
			}
		}
		
		/* hall info cell */
		if (eFirstRow) {
			var eHallInfo = document.createElement('td');
			eHallInfo.className = 'current-place';
			eHallInfo.rowSpan = iPerformancesShown;
				/* hall name */
			var eHallName = document.createElement('h2');
			eHallName.appendChild(document.createTextNode(aHalls[sHallID].sName));
			eHallInfo.appendChild(eHallName);
				/* address */
			var eHallAddress = document.createElement('p');
			eHallAddress.className = 'address';
			eHallAddress.appendChild(document.createTextNode(aHalls[sHallID].sAddress));
			eHallInfo.appendChild(eHallAddress);
			eFirstRow.insertBefore(eHallInfo, eFirstRow.childNodes[0]);
		}

		if (ePerformancesTable) ePerformancesTable.parentNode.removeChild(ePerformancesTable);
		ePerormancesPlaceholder.parentNode.insertBefore(eTable, ePerormancesPlaceholder.nextSibling);
		ePerformancesTable = eTable;

		if (eAllPerformancesLink) eAllPerformancesLink.className = 'pseudo-link';
		if (eAllHallsLink) eAllHallsLink.className = 'pseudo-link';
		sCurrentTable = 'hall' + sHallID;
	}
}


/* Halls */

function createHallsRow(oHall) {
	var eRow = document.createElement('tr');
		/* hallname */
	var eHallCell = document.createElement('td');
	eHallCell.className = 'place';
	var eHallLink = document.createElement('span');
	eHallLink.className = 'pseudo-link';
	eHallLink.appendChild(document.createTextNode(oHall.sName));
	eHallLink.onclick = function(){ displayPerformancesByHall(oHall.sID) };
	eHallCell.appendChild(eHallLink);
	eRow.appendChild(eHallCell);
		/* address */
	var eHallCell = document.createElement('td');
	eHallCell.className = 'address';
	eHallCell.appendChild(document.createTextNode(oHall.sAddress));
	eRow.appendChild(eHallCell);

	return eRow;
}

function displayHalls() {
	if (sCurrentTable != 'halls' && ePerormancesPlaceholder) {
		if (oPaginator) oPaginator.hideControls();

		var eTable = document.createElement('table');
		eTable.setAttribute('cellspacing', '0');
		eTable.className = 'places';
		var eTBody = document.createElement('tbody');
		eTable.appendChild(eTBody);

		/* table header */
		var eTHeadRow = createTableHeader([sTableHeaderHallName, sTableHeaderAddress]);
		eTBody.appendChild(eTHeadRow);

		/* halls */
		for (var i in aHalls) {
			var eHallRow = createHallsRow(aHalls[i]);
			eTBody.appendChild(eHallRow);
		}

		if (ePerformancesTable) ePerformancesTable.parentNode.removeChild(ePerformancesTable);
		ePerormancesPlaceholder.parentNode.insertBefore(eTable, ePerormancesPlaceholder.nextSibling);
		ePerformancesTable = eTable;
		
		if (eAllPerformancesLink) eAllPerformancesLink.className = 'pseudo-link';
		if (eAllHallsLink) eAllHallsLink.className = 'pseudo-link selected';
		sCurrentTable = 'halls';
	}
}



/*--------------*/
/*     init     */
/*--------------*/

var aPerformances = new Array();
var aHalls = new Array();
var ePerormancesPlaceholder = null;
var ePerformancesTable = null;

var eAllPerformancesLink = null;
var eAllHallsLink = null;
var sCurrentTable = '';

function displayPerformances(sResponseXML) {
	if (sResponseXML && window.initPerformancesData) {
		initPerformancesData(sResponseXML);

		/* key page elements */
		ePerormancesPlaceholder = document.getElementById('performancesPlaceholder');
		eAllPerformancesLink = document.getElementById('events-link');
		if (eAllPerformancesLink) eAllPerformancesLink.onclick = displayPerformancesByDate;
		eAllHallsLink = document.getElementById('places-link');
		if (eAllHallsLink) eAllHallsLink.onclick = displayHalls;
		
		/* build initial table */
		if (ePerormancesPlaceholder) {
			displayPerformancesByDate();
		}
		if (oPaginator) oPaginator.displayFunction = displayPerformancesByDate;
	}
}
