
function updateDisplayOrder( ulListId )
{
	try
	{
	var list = document.getElementById( ulListId );
	var items = list.getElementsByTagName( "li" );
	var len = items.length;
		
	var order = new Array();
		
	for( i = 0; i < len; i++ )
	{
		var html = items[i].innerHTML.toLowerCase();
		
		var idxId = html.indexOf( '.php?' );
		
		if( idxId != -1 )
		{
			var idxEqual = html.indexOf( '=', idxId );
			idxEqual++;
			var idxQuote = html.indexOf( '"', idxEqual );
			order.push( html.substring( idxEqual, idxQuote ) );
		}
		else
			order.push( items[i].id );
	}
	
	new Ajax.Request( webRoot + '/includes/UpdateDisplayOrder.php', {
		method: 'get',
		parameters: 'order=' + order.join( "," ) + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + 
			absolutePath + '&' + 'sessionVariableName=' + ulListId,
  		onSuccess: function( transport ){
		}
	});
	}
	catch( err )
	{
		alert( err );
	}
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function deleteFromOrderedList( ulListId, checkboxIdName, liIdName )
{
	var checkBoxGrp = document.getElementsByName( checkboxIdName );
	var len = checkBoxGrp.length;
	
	var idxOfCheck = 0;
	
	for( i = 0; i < len; i++ )
	{
		if( checkBoxGrp[i].checked )
			idxOfCheck = i;
	}

	var list = document.getElementById( ulListId );
	var items = list.getElementsByTagName( "li" );
	
	var html = items[idxOfCheck].innerHTML;
	
	var idxDelete = html.indexOf( checkboxIdName );
	var idxValue = html.indexOf( 'value=', idxDelete );
	var idxStartQuote = html.indexOf( '"', idxValue );
	
	if( idxStartQuote == -1 )
		idxStartQuote = idxValue + 5;
		
	idxStartQuote++;
	
	var idxEndQuote = html.indexOf( '"', idxStartQuote );
	
	if( idxEndQuote == -1 )
		idxEndQuote = html.indexOf( ' ', idxStartQuote );
		
	var temp = html.substring( idxStartQuote, idxEndQuote );
	
	var array = temp.split( ',' );
	
	var id = array[0];
	var absolutePath = array[1];
	var webRoot = array[2];
	var checkBoxName = array[3];
	var tableNameToColumnName = array[4];
	var thingBeingRemoved = array[5];
	var noDataRows = array[6].substring( 0, array[6].length - 1 );
	
	var success = deleteFromDatabase( absolutePath, webRoot, checkBoxName, tableNameToColumnName,
		thingBeingRemoved, noDataRows );
	
	if( success == 1 || typeof( success ) == "undefined" )
	{
		liIdName += "_" + id;
		
		var child = document.getElementById( liIdName );
		var parent = child.parentNode;
		
		parent.removeChild( child );
	
		if( getNumRows( checkboxIdName ) == 0 )
		{	
			// If no rows are left retrieve the name of the row to update and an integer value to 
			// determine whether the row should be made visible or invisible.
			var rows = noDataRows.split( '|' );
					
			for( i = 0; i < rows.length; i++ )
			{
				var rowNameToStatus = rows[i].split( '~' );
			
				if( rowNameToStatus[1] == "0" )
					document.getElementById( rowNameToStatus[0] ).style.display = "none";
				else
					document.getElementById( rowNameToStatus[0] ).style.display = "";
			}
		}
	}
}

function updateDatabase( absolutePath, webRoot, checkBoxName, tableNameToColumnName, value )
{
	var checkBoxGrp = document.getElementsByName( checkBoxName );
	
	var status = 0;
	
	if( checkBoxGrp[0].type == "checkbox" )
	{
		for( var i = 0; i < checkBoxGrp.length; i++ )
		{
			if( checkBoxGrp[i].checked && checkBoxGrp[i].value == value )
				status = 1;
		}
	}
	else if( checkBoxGrp[0].type == "radio" )
	{
		for( var i = 0; i < checkBoxGrp.length; i++ )
		{
			if( checkBoxGrp[i].checked )
				status = checkBoxGrp[i].value;
		}
	}
	
	new Ajax.Request( webRoot + '/includes/UpdateDatabase.php', {
		method: 'get',
		parameters: 'tableNameToColumnName=' + tableNameToColumnName + '&' + 'webRoot=' + webRoot + '&' + 
			'absolutePath=' + absolutePath + '&' + 'status=' + status,
  		onSuccess: function( transport )
		{
		}
	});
}

/*
 * Use Ajax to remove a database entry after double checking with the user. checkBoxName is used to identify the
 * checkbox (along with rowReference) if the user cancels the delete and in which case the checkbox should be unchecked.
 * tableNameToColumn is used to identify the table and the table row, thingBeingRemoved is used to customise the confirm 
 * message and noDataRows is used to make certain rows visible or invisible when there are no rows left in tableName to delete.
 */

function deleteFromDatabase( absolutePath, webRoot, checkBoxName, tableNameToColumnName, thingBeingRemoved, 
	noDataRows, headingRow )
{	
	// If the row should be deleted.
	if( confirm( "Are you sure you want to delete this " + thingBeingRemoved + "?" ))
	{
		// Using Ajax to delete the row from the database.
		new Ajax.Request( webRoot + '/includes/DeleteFromDatabase.php', {
			method: 'get',
			parameters: 'tableNameToColumnName=' + tableNameToColumnName + '&' + 'webRoot=' + webRoot + '&' + 
				'absolutePath=' + absolutePath,
  			onSuccess: function( transport )
			{
				var table;
				var rows;
				
				if( typeof( headingRow ) !== "undefined" )
				{
					var row = document.getElementById( headingRow );
					var start = row.rowIndex;
					var numRowsKey = headingRow.substring( 0, headingRow.indexOf( 'Row' ) + 3 );
					var numRows = getNumRows( numRowsKey );
					
					table = row.parentNode.parentNode;
					rows = table.rows;
					var len = rows.length;
					var end = -1;
	
					for( i = start; i < len; i++ )
					{
						if( rows[i].innerHTML.indexOf( '<td>&nbsp;</td>' ) != -1 && end == -1 )
							end = i;
					}
				
					if( end == -1 )
						end = len;
				
					for( i = start; i < end; i++ )
					{
						// Delete the table row from the HTML document.
						table.deleteRow( start );
					
						// Decrement the value of the variable that indicates how many rows are left in the table.
						numRows--;
					}
					
					if( numRows != 0 )
					{
						if( start != 0 )
						{
							start--;
						
							if( rows[start].innerHTML.indexOf( '<td>&nbsp;</td>' ) != -1 )
							{
								document.getElementById( 'contentRows' ).deleteRow( start );
								numRows--;
							}
						}
						else if( rows[start].innerHTML.indexOf( '<td>&nbsp;</td>' ) != -1 )
						{
							document.getElementById( 'contentRows' ).deleteRow( start );
							numRows--;
						}
						else if( start + 1 != rows.length )
						{
							start++;
						
							if( rows[start].innerHTML.indexOf( '<td>&nbsp;</td>' ) != -1 )
							{
								document.getElementById( 'contentRows' ).deleteRow( start );
								numRows--;
							}
						}
					}
				}
				
				for( var i = 1; i < rows.length; i++ )
				{
					if( rows[i].innerHTML.indexOf( '<td>&nbsp;</td>' ) != -1 )
					{
						table.deleteRow( i );
						numRows--;
					}
				}
				
				if( numRows <= 0 )
				{
					// If no rows are left retrieve the name of the row to update and an integer value to 
					// determine whether the row should be made visible or invisible.
					var rows = noDataRows.split( '|' );
					
					for( i = 0; i < rows.length; i++ )
					{
						var rowNameToStatus = rows[i].split( '~' );
						
						if( rowNameToStatus[1] == "0" )
							document.getElementById( rowNameToStatus[0] ).style.display = "none";
						else
							document.getElementById( rowNameToStatus[0] ).style.display = "";
					}
				}
				
				return( 1 );
			}
		});
	}
	else
	{
		var checkBoxGrp = document.getElementsByName( checkBoxName );
		var len = checkBoxGrp.length;
		
		for( i = 0; i < len; i++ )
		{
			if( checkBoxGrp[i].checked )
				checkBoxGrp[i].checked = false;
		}
		
		return( 0 );
	}
}

function getNumRows( key )
{
	key = key.toLowerCase();
	
	var contents = document.body.innerHTML.toLowerCase();
	
	var idxStartTable = contents.lastIndexOf( '<ul' );
	var idxEndTable = contents.indexOf( '</ul>', idxStartTable );
	contents = contents.substring( idxStartTable, idxEndTable );
	
	var currentIdx = 0;
	var numRows = 0;
	
	var idxDelete = contents.indexOf( key, currentIdx );
	
	while( idxDelete != -1 )
	{
		numRows++;
		currentIdx = idxDelete;
		currentIdx++;
		idxDelete = contents.indexOf( key, currentIdx );
	}
	

	return( numRows );
}

/*
 * When deleting a row from a table it is sufficient just to have the id or name of the table row since
 * the table it belongs to can be found using parentNode. The removeChild function can then be used to
 * remove the table row from the table element. However, when adding rows it is necessary to identify
 * where in the table the rows should be inserted. headingRow does just this. It also explains what
 * data follows and therefore should be displayed if data exists and not if it doesn't. Once a row is
 * removed a count of the number of rows is computed and if this is zero the appendTo/header row is no
 * longer displayed. It can easily be displayed again if new data is added. The third argument to this
 * function is used to determine how many rows and left and when the header row should no longer be displayed.
 */
 
function deleteTableRow( headingRow, rowToDelete, deleteImage )
{
	var table = document.getElementById( rowToDelete ).parentNode;
	
	// Remove the row chosen by the user by navigating to the parent of the table row, the table, and then
	// using the removeChild function.
	table.removeChild( document.getElementById( rowToDelete ) );
	
	// Calculate how many rows are left following the headingRow. Each row has a delete button which
	// is a unique id but whose id has a common part for all rows belonging to the append to row.
	
	// Initially find all images on the page.
	var images = table.getElementsByTagName( 'img' );
	var len = images.length;
	
	var count = 0;
	
	for( i = 0; i < len; i++ )
	{
		// We are only interested in delete images that belong to rows related to headingRow
		if( images[i].id.indexOf( deleteImage ) != -1 )
			count++;
	}

	// If there aren't any rows hide the headingRow row so that we are not describing data that doesn't
	// exist.
	if( count == 0 )
	{
		var row = document.getElementById( headingRow );
		row.style.display = "none";
	}
}

/*
 * Delete a picture, download or link given the parent div to which each div is appended.
 */
 
function deleteDiv( divIdToRemove, headingRow )
{
	var ul = document.getElementById( divIdToRemove ).parentNode.parentNode;
	var li = document.getElementById( divIdToRemove ).parentNode;
	
	ul.removeChild( li );
	
	var listItems = ul.getElementsByTagName( 'li' );
	
	if( listItems.length == 0 )
	{
		var row = document.getElementById( headingRow );
		var table = row.parentNode;
		
		var rowIndex = row.rowIndex;
		table.deleteRow( rowIndex );
		table.deleteRow( rowIndex );
	}
}

function addImage()
{
	var innerHTML = document.getElementById( 'downloadLink1' ).innerHTML;
	
	var idxHREF = innerHTML.indexOf( 'href' );
	var start = innerHTML.indexOf( '"', idxHREF );
	start++;
	var end = innerHTML.indexOf( '"', start );
	
	if( document.getElementById( 'cropDetails' ).value != "" )
		document.getElementById( 'cropDetails' ).value += "|";
		
	document.getElementById( 'cropDetails' ).value += innerHTML.substring( start, end );
	
	document.getElementById( 'imageContainer1' ).innerHTML = "";
	document.getElementById( 'downloadLink1' ).innerHTML = "";
	
	document.getElementById( 'selectCropRow1' ).style.display = "none";
	document.getElementById( 'addCroppedImageRow1' ).style.visibility = "hidden";
	
	var newElem = document.createElement( 'input' );
	newElem.setAttribute( 'type', 'file' );
	newElem.setAttribute( 'id', 'uploadImage' );
	newElem.setAttribute( 'name', 'uploadImage' );
	
	var remElem = document.getElementById( 'uploadImage' );
	
	remElem.parentNode.replaceChild( newElem, remElem );
	YAHOO.util.Event.on('uploadButton', 'click', uploader.carry);
	
	if( document.getElementById( 'imageCredit' ) != null )
		document.getElementById( 'imageCredit' ).value = "";
	
	if( document.getElementById( 'imageLink' ) != null )
		document.getElementById( 'imageLink' ).value = "";
	
	if( document.getElementById( 'imageTitle' ) != null )
		document.getElementById( 'imageTitle' ).value = "";
	
	if( document.getElementById( 'imageSubTitle' ) != null )
		document.getElementById( 'imageSubTitle' ).value = "";
	
	if( document.getElementById( 'imageSummaryDates' ) != null )
		document.getElementById( 'imageSummaryDates' ).value = "";
}

function deleteImage( rowId )
{
	var array = new Array();
	
	if( rowId.indexOf( ',' ) != -1 )
		array = rowId.split(',');
	else
		array[0] = rowId;
		
	for( var i = 0; i < array.length; i++ )
	{
		var row = document.getElementById( array[i] );
		var table = row.parentNode.parentNode;
		table.deleteRow( row.rowIndex );
	}
}

function selectRange()
{
	// Display the date range select elements, hide the one used for selecting individual dates and the add button
	// used to add the individual date to the list of dates to add.
	document.getElementById( 'rangeStartDate' ).style.display = "";
	document.getElementById( 'rangeEndDate' ).style.display = "";
	document.getElementById( 'rangeDays' ).style.display = "";
	document.getElementById( 'individualDate' ).style.display = "none";
	document.getElementById( 'individualDateAdd' ).style.display = "none";
	
	var startTimeHeader = document.getElementById( 'startTimeHeader' );
	
	if( startTimeHeader != null )
		startTimeHeader.style.display = "";
}

function deleteIndividualDate( headingRow, rowToDelete, deleteImage )
{
	var innerHTML = document.getElementById( rowToDelete ).innerHTML;
	var span = innerHTML.indexOf( '<span' );
	var idxStart = innerHTML.indexOf( '>', span );
	idxStart++;
	var idxEnd = innerHTML.indexOf( '<', idxStart );
	
	var char = document.getElementById( 'individualDates' ).value.substring( idxStart - 1, idxStart );
	
	if( char == "|" )
	{
		document.getElementById( 'individualDates' ).value = 
			document.getElementById( 'individualDates' ).value.replace( char, '' );
	}
	
	document.getElementById( 'individualDates' ).value = document.getElementById( 'individualDates' ).value.replace
		( innerHTML.substring( idxStart, idxEnd ), '' );
	
	deleteTableRow( headingRow, rowToDelete, deleteImage );
}

function selectDays( add )
{
	// Hide the select element used for date ranges and instead display the one used for selecting
	// individual dates.
	
	var radioGrp = document.getElementsByName( 'dateOption' );
	var value = "";
	
	for( var i = 0; i < radioGrp.length; i++ )
	{
		if( radioGrp[i].checked )
			value = radioGrp[i].value;
	}
	
	if( value == "individual" )
	{
		document.getElementById( 'rangeStartDate' ).style.display = "none";
		document.getElementById( 'rangeEndDate' ).style.display = "none";
		document.getElementById( 'individualDate' ).style.display = "";	
		document.getElementById( 'individualDateAdd' ).style.visibility = "visible";
	}
	else
	{
		document.getElementById( 'rangeStartDate' ).style.display = "";
		document.getElementById( 'rangeEndDate' ).style.display = "";
		document.getElementById( 'rangeDays' ).style.display = "";
		document.getElementById( 'individualDate' ).style.display = "none";	
		document.getElementById( 'individualDateAdd' ).style.display = "none";
	}
	
	var startTimeHeader = document.getElementById( 'startTimeHeader' );
	
	if( startTimeHeader != null )
		startTimeHeader.style.display = "";
	
	// Add is true if this function was called in response to clicking of the add button. 
	// Add is false if this function was called in response to selection of the individual dates
	// radio button.
	if( add == 1 )
	{
		// Find the selected index of day, month, hour and minute values and use these to retrieve
		// the value selected by the user.
		var idx = document.getElementsByName( "eventDateDay" )[0].selectedIndex;
		var day = document.getElementsByName( "eventDateDay" )[0].options[idx].value;
		
		idx = document.getElementsByName( "eventDateMonth" )[0].selectedIndex;
		var month = document.getElementsByName( "eventDateMonth" )[0].options[idx].value;
		
		idx = document.getElementsByName( "eventDateYear" )[0].selectedIndex;
		var year = document.getElementsByName( "eventDateYear" )[0].options[idx].value;
		
		var startHour = 0;
		var startMinutes = 0;
		var startMeridian = "am";
		
		var startTime = document.getElementById( 'startTime' );
		
		if( startTime != null && startTime.checked )
		{
			idx = document.getElementsByName( "startTimeHour" )[0].selectedIndex;
			var startHour = document.getElementsByName( "startTimeHour" )[0].options[idx].value;
		
			idx = document.getElementsByName( "startTimeMinute" )[0].selectedIndex;
			var startMinutes = document.getElementsByName( "startTimeMinute" )[0].options[idx].value;
		
			// For the purposes of displaying the added date according to how it will be displayed
			// on the front format the date with a meridian and hours 1 - 12.
			
			if( startHour >= 12 )
			{
				if( startHour != 12 )
					startHour = startHour - 12;
				
				startMeridian = "pm";
			}
		}
		
		var endHour = 0;
		var endMinutes = 0;
		var endMeridian = "am";
		
		var endTime = document.getElementById( 'startTime' );
		
		if( endTime != null && startTime.checked )
		{
			idx = document.getElementsByName( "endTimeHour" )[0].selectedIndex;
			var endHour = trim( document.getElementsByName( "endTimeHour" )[0].options[idx].value );
		
			idx = document.getElementsByName( "endTimeMinute" )[0].selectedIndex;
			var endMinutes = document.getElementsByName( "endTimeMinute" )[0].options[idx].value;
		
			// For the purposes of displaying the added date according to how it will be displayed
			// on the front format the date with a meridian and hours 1 - 12.
			
			if( endHour >= 12 )
			{
				if( endHour != 12 )
					endHour = endHour - 12;
				
				endMeridian = "pm";
			}
		}
		
		var headingRow = document.getElementById( 'newIndividualDatesBlankRow' );
		headingRow.style.display = "";
		
		headingRow = document.getElementById( 'newIndividualDatesRow' );
		headingRow.style.display = "";
		
		var numDate = 0;
		
		// Determine the number of dates to add in order to set a unique identifier/name for the delete
		// button used to dates before they are added.
		if( document.getElementById( 'individualDates' ).value != "" )
		{
			var temp = document.getElementById( 'individualDates' ).value.split( '|' );
			numDate = temp.length;
		
			document.getElementById( 'individualDates' ).value += "|";
		}	
		
		// Format the date for display.
		var individualDate = "";
		
		if( document.getElementById( 'individualDate' ).style.display == "" )
			individualDate = day + " " + month + " " + year;
		else
		{
			var idx = document.getElementsByName( "eventStartDateDay" )[0].selectedIndex;
			var day = document.getElementsByName( "eventStartDateDay" )[0].options[idx].value;
		
			idx = document.getElementsByName( "eventStartDateMonth" )[0].selectedIndex;
			var month = document.getElementsByName( "eventStartDateMonth" )[0].options[idx].value;
			
			idx = document.getElementsByName( "eventStartDateYear" )[0].selectedIndex;
			var year = document.getElementsByName( "eventStartDateYear" )[0].options[idx].value;
		
			individualDate = day + " " + month + " " + year;
			
			var idx = document.getElementsByName( "eventEndDateDay" )[0].selectedIndex;
			var day = document.getElementsByName( "eventEndDateDay" )[0].options[idx].value;
		
			idx = document.getElementsByName( "eventEndDateMonth" )[0].selectedIndex;
			var month = document.getElementsByName( "eventEndDateMonth" )[0].options[idx].value;
			
			idx = document.getElementsByName( "eventEndDateYear" )[0].selectedIndex;
			var year = document.getElementsByName( "eventEndDateYear" )[0].options[idx].value;
			
			individualDate += " to " + day + " " + month + " " + year;
		}
		
		if( startHour != 0 )
			individualDate += ', ' + startHour + "." + startMinutes + " " + startMeridian;
		
		if( endHour != 0 )
			individualDate += " to " + endHour + "." + endMinutes + " " + endMeridian;
		
		document.getElementById( 'individualDates' ).value += individualDate;
		
		var title = document.getElementById( "datesTitle" );
		
		if( title != null )
		{
			individualDate = title.value + " - " + individualDate;
			document.getElementById( 'individualDates' ).value += "~" + title.value;
		}
		
		var editor = FCKeditorAPI.GetInstance( "datesCopy" );
		
		if( editor != null )
			document.getElementById( 'individualDates' ).value += "~" + editor.GetHTML();
		
		// Create a row immediately following the header row to display the latest date to add and a delete button
		// in case the date should be deleted before it is added.
		var rowIndex = headingRow.rowIndex;
		rowIndex++;
		var table = headingRow.parentNode.parentNode;
		var row = table.insertRow( rowIndex );
		var id = 'new_dates_' + numDate;
		row.setAttribute( 'id', id );
		row.setAttribute( 'name', id ); 
	
		// First column displays the formatted date.
		var column1 = row.insertCell( 0 );
		column1.setAttribute( 'colspan', '2' );
		
		var span = column1.appendChild( document.createElement( 'span' ) );
		span.className = 'green';
		span.appendChild( document.createTextNode( individualDate ) );
		
		var aLink = document.createElement( 'a' );
		aLink.className = "rollover";
		aLink.onclick = function() { deleteIndividualDate( 'newIndividualDatesRow', id, 'newDateDeleteImage' ) };
		
		var deleteImg = document.createElement( 'img' );
		deleteImg.src = '../images/ButtonDeleteOut.png';
		deleteImg.width = "45";
		deleteImg.height = "15";
		deleteImg.border = "0";
		deleteImg.setAttribute( 'id', 'newDateDeleteImage' + numDate );
		deleteImg.setAttribute( 'name', 'newDateDeleteImage' + numDate );
		
		aLink.appendChild( deleteImg );
		
		column1.appendChild( span );
		// Add non-breaking space.
		column1.appendChild( document.createTextNode('\u00A0') );
		column1.appendChild( aLink );
	
		// Add new column to new row.
		row.appendChild( column1 );
		
		var editor = FCKeditorAPI.GetInstance( "datesCopy" );
		
		if( editor != null )
		{
			document.getElementById( 'addDates' ).checked = false;
			document.getElementById( 'datesTitle' ).value = "";
			document.getElementById( 'rangeStartDate' ).style.display = "none";
			document.getElementById( 'rangeEndDate' ).style.display = "none";
			document.getElementById( 'individualDate' ).style.display = "none";
			document.getElementById( 'individualDateAdd' ).style.display = "none";
			
			var radioGrp = document.getElementsByName( 'dateOption' );
	
			for( var i = 0; i < radioGrp.length; i++ )
			{
				if( radioGrp[i].checked )
					radioGrp[i].checked = false;
			}
		
			document.getElementById( 'selectDateOption' ).style.display = "none";
		}
	}
}

function showHideRow( rowId, checkBoxId )
{
	var array = new Array();
	
	if( rowId.indexOf( ',' ) != -1 )
		array = rowId.split( ',' );
	else
		array[0] = rowId;
	
	for( var i = 0; i < array.length; i++ )
	{
		if( document.getElementById( checkBoxId ).checked )
			document.getElementById( array[i] ).style.display = "";
		else
			document.getElementById( array[i] ).style.display = "none";
	}
}

function showHideDateSelect()
{
	if( document.getElementById( 'addDates' ).checked )
	{
		document.getElementById( 'selectDateOption' ).style.display = "";
		document.getElementById( 'individualDateAdd' ).style.visibility = "visible";
	}
	else
	{
		var radioGrp = document.getElementsByName( 'dateOption' );
	
		for( var i = 0; i < radioGrp.length; i++ )
		{
			if( radioGrp[i].checked )
				radioGrp[i].checked = false;
		}
		
		document.getElementById( 'selectDateOption' ).style.display = "none";
		document.getElementById( 'rangeStartDate' ).style.display = "none";
		document.getElementById( 'rangeEndDate' ).style.display = "none";
		document.getElementById( 'individualDate' ).style.display = "none";
		document.getElementById( 'individualDateAdd' ).style.display = "none";
		
		startTime = document.getElementById( 'startTimeHeader' );
		
		if( startTime != null )
			startTime.style.display = "none";
			
		var startTime = document.getElementById( 'startTimeRow' );
		
		if( startTime != null )
			startTime.style.display = "none";
	}
}

function getEventsByDate( absolutePath, webRoot, date, nextWeek )
{
	var parameters = 'calendarDate=' + date + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath;
	
	if( typeof( nextWeek ) !== "undefined" )
		parameters += '&' + 'nextWeek=1';
	
	new Ajax.Request( webRoot + '/includes/GetEventsByDate.php', {
		method: 'get',
		parameters: parameters,
  		onSuccess: function( transport )
		{
			array = transport.responseText.split( '\|' );
			document.getElementById( 'exhibitionsList' ).innerHTML = array[0];
			document.getElementById( 'eventsList' ).innerHTML = array[1];
			nextWeekDate = array[2];
			
			if( parameters.indexOf( 'nextWeek' ) != -1 )
			{
				document.getElementById( 'nextWeekLink' ).href = "javascript:getEventsByDate('" + absolutePath +
					"','" + webRoot + "','" + nextWeekDate + "','1')";
			}
		}
	});
}

function getNews( absolutePath, webRoot, id )
{
	new Ajax.Request( webRoot + '/includes/GetNews.php', {
		method: 'get',
		parameters: 'id=' + id + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'main_content' ).innerHTML = array[0];
			document.getElementById( 'prev_next_links' ).innerHTML = array[1];
		}
	});
}

function getCurrentExhibitions( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetCurrentExhibitions.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'firstExhibitionsList' ).innerHTML = array[0];
			document.getElementById( 'secondExhibitionsList' ).innerHTML = array[1];
			document.getElementById( 'prev_next_links' ).innerHTML = array[2];
			
			idxGetVariable = window.location.href.toString().indexOf( '?' );
			
			if( idxGetVariable != -1 )
			{
				window.location.href = window.location.href.toString().substring( 0, idxGetVariable ) + 
					"?next=" + next;
			}
			else
				window.location.href += "?next=" + next;
		}
	});
}

function getNextPage( absolutePath, webRoot, pageIdx, numPages )
{
	new Ajax.Request( webRoot + '/includes/GetNextPage.php', {
		method: 'get',
		parameters: 'numPages=' + numPages + '&' + 'pageIdx=' + pageIdx + '&' + 'webRoot=' + webRoot + '&' + 
			'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'leftHandCopy' ).innerHTML = array[0];
			document.getElementById( 'rightHandCopy' ).innerHTML = array[1];
			document.getElementById( 'prev_next_links' ).innerHTML = array[2];
		}
	});
}

function getNextFindUsPage( absolutePath, webRoot, pageIdx, numPages )
{
	new Ajax.Request( webRoot + '/includes/GetNextFindUsPage.php', {
		method: 'get',
		parameters: 'numPages=' + numPages + '&' + 'pageIdx=' + pageIdx + '&' + 'webRoot=' + webRoot + '&' + 
			'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'map_sub_content' ).innerHTML = array[0];
			document.getElementById( 'prev_next_links' ).innerHTML = array[1];
		}
	});
}

function getPastExhibitions( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetPastExhibitions.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'firstExhibitionsList' ).innerHTML = array[0];
			document.getElementById( 'secondExhibitionsList' ).innerHTML = array[1];
			document.getElementById( 'prev_next_links' ).innerHTML = array[2];
		}
	});
}

function getFutureExhibitions( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetFutureExhibitions.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'main_content' ).innerHTML = array[0];
			document.getElementById( 'prev_next_links' ).innerHTML = array[1];
		}
	});
}

function getShopItems( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetShopItems.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'main_shop_list' ).innerHTML = array[0];
			document.getElementById( 'sub_shop_list' ).innerHTML = array[1];
			document.getElementById( 'prev_next_links' ).innerHTML = array[2];
		}
	});
}

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
  var rv = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var ua = navigator.userAgent;
    var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (re.exec(ua) != null)
      rv = parseFloat( RegExp.$1 );
  }
  return rv;
}

function getEvents( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetEvents.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'firstEventsList' ).innerHTML = array[0];
			document.getElementById( 'secondEventsList' ).innerHTML = array[1];
			document.getElementById( 'prev_next_links' ).innerHTML = array[2];
			
			if(/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent) || getInternetExplorerVersion() == 8 )
		{
			h2s = document.getElementsByTagName( 'h2' );
			
			for( i = 0; i < h2s.length; i++ )
			{
				if( h2s[i].className == "firstEventsHeader" )
					h2s[i].style.width = "260px";
			}
			
			h2s = document.getElementsByTagName( 'h2' );
			
			for( i = 0; i < h2s.length; i++ )
			{
				if( h2s[i].className == "secondEventsHeader" )
					h2s[i].style.width = "260px";
			}
		}
		
		}
	});
}

function getNextEvent( absolutePath, webRoot, next, limit )
{
	new Ajax.Request( webRoot + '/includes/GetEvents.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath + '&' +
			'limit=' + limit,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'firstEventsList' ).innerHTML = array[0];
			document.getElementById( 'secondEventsList' ).innerHTML = array[1];
			document.getElementById( 'prev_next_links' ).innerHTML = array[2];
			document.getElementById( 'pageTitle' ).innerHTML = array[3];
		}
	});
}

function getPressArticles( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetPressArticles.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'pressArticlesList' ).innerHTML = array[0];
			document.getElementById( 'press_prev_next' ).innerHTML = array[1];
		}
	});
}

function getPastProjects( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetPastProjects.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'firstPastProjectList' ).innerHTML = array[0];
			document.getElementById( 'secondPastProjectList' ).innerHTML = array[1];
			document.getElementById( 'prev_next_links' ).innerHTML = array[2];
		}
	});
}

function getBrochureDownloads( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetBrochureDownloads.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'downloads_list' ).innerHTML = array[0];
			document.getElementById( 'downloads_prev_next' ).innerHTML = array[1];
		}
	});
}

function getPodcastDownloads( absolutePath, webRoot, next )
{
	new Ajax.Request( webRoot + '/includes/GetPodcastDownloads.php', {
		method: 'get',
		parameters: 'next=' + next + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			document.getElementById( 'podcasts' ).innerHTML = array[0];
			document.getElementById( 'prev_next_links' ).innerHTML = array[1];
		}
	});
}

function updateFeedbackStats( absolutePath, webRoot, questionId )
{
	var radioGrp = document.getElementsByName( 'rating' );
	
	var value = 0;
	
	for( i = 0; i < radioGrp.length; i++ )
	{
		if( radioGrp[i].checked )
			value = radioGrp[i].value;
	}
	
	if( value == 0 )
		return;
	
	new Ajax.Request( webRoot + '/includes/UpdateFeedbackStats.php', {
		method: 'get',
		parameters: 'rating=' + value + '&' + 'questionId=' + questionId + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + 
			absolutePath,
  		onSuccess: function( transport )
		{
			document.getElementById( 'question' ).style.display = "none";
			document.getElementById( 'results_link' ).style.display = "";
			
			var array = transport.responseText.split( '\|' );
			
			document.getElementById( '1' ).innerHTML = array[0] + "%";
			document.getElementById( '1' ).style.borderLeftWidth = array[1] + "pt";
			document.getElementById( '2' ).innerHTML = array[2] + "%";
			document.getElementById( '2' ).style.borderLeftWidth = array[3] + "pt";
			document.getElementById( '3' ).innerHTML = array[4] + "%";
			document.getElementById( '3' ).style.borderLeftWidth = array[5] + "pt";
			document.getElementById( '4' ).innerHTML = array[6] + "%";
			document.getElementById( '4' ).style.borderLeftWidth = array[7] + "pt";
			
			var other = document.getElementById( '5' );
			
			if( other != null )
			{
				document.getElementById( '5' ).innerHTML = array[8] + "%";
				document.getElementById( '5' ).style.borderLeftWidth = array[9] + "pt";
			}
		    
			document.getElementById( 'form_results' ).style.display = "";
		}
	});
}

function updateFutureExhibitionsPerPage( absolutePath, webRoot )
{
	var sel = document.getElementById( "futureExhibitionsPerPage" );
	var num = sel.options[sel.selectedIndex].value;
	
	new Ajax.Request( webRoot + '/includes/UpdateFutureExhibitionsPerPage.php', {
		method: 'get',
		parameters: 'num=' + num + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + 
			absolutePath,
  		onSuccess: function( transport )
		{
		}
	});

}

function getProducts( absolutePath, webRoot, order )
{
	new Ajax.Request( webRoot + '/includes/GetProducts.php', {
		method: 'get',
		parameters: 'order=' + order + '&' + 'webRoot=' + webRoot + '&' + 'absolutePath=' + absolutePath,
  		onSuccess: function( transport )
		{
			var array = transport.responseText.split( '\|' );
			
			var uls = document.getElementsByTagName( 'ul' );
			var len = uls.length;
			
			for( var i = 0; i < len; i++ )
				uls[i].innerHTML = array[i];
		}
	});
}

function nextEvents()
{
	var dtLists = document.getElementsByTagName( 'dt' );
	
	for( i = 0; i < dtLists.length; i++ )
	{
		if( dtLists[i].id.indexOf( 'previousEventHeader' ) != -1 )
			dtLists[i].style.display = "none";
		
		if( dtLists[i].id.indexOf( 'nextEventHeader' ) != -1 )
			dtLists[i].style.display = "";
	}
	
	var ddLists = document.getElementsByTagName( 'dd' );
	
	for( i = 0; i < ddLists.length; i++ )
	{
		if( ddLists[i].id.indexOf( 'previousEvent' ) != -1 )
			ddLists[i].style.display = "none";
		
		if( ddLists[i].id.indexOf( 'nextEvent' ) != -1 )
			ddLists[i].style.display = "";
	}
	
	document.getElementById( 'nextEventsLink' ).style.display = "none";
	document.getElementById( 'nextWeekLink' ).style.display = "";
}