/**
 * Copyright (c) 2008 MiEnterprise Pty Ltd. All rights reserved.
 */
var hasActiveWaitList = false;
var hasWaitList = false;
var adminAskReserves = false;

function doRefresh()
{
	var url = window.location.toString();
	url = url.replace("?openManageGroups=true&","?");
	url = url.replace("#self","");
	window.location = url;
}

function closeModalboxAndRefresh()
{
	doRefresh();
	Modalbox.hide();
}

function publicBook(membershipNumber)
{
    if($$('div.cell.highlight').size() == 0)
    {
        alert('Please select a booking cell');
        return;
    }
    var params = 'doAction=BOOK_PUBLIC&isModal=true';
    if (membershipNumber != null && membershipNumber != '') {
    	params = params + '&membershipNumber=' + membershipNumber;
    }

    doModalBookingOperation('Booking ' + $$('div.cell.highlight').size() + ' Player(s)', '/members/bookings/open/makePublicBooking.msp', params, 970, 535);   
}

function lockBookingRow (bookingRowId, message) 
{
	var locked = false;
	new Ajax.Request('/members/Ajax?doAction=lockResource&bookingRowId=' + bookingRowId, 
	{
		method: 'get',
		asynchronous: false,
		onSuccess: function(transport) 
		{
			if (transport.responseText == 'false')
			{
				if (message != null)
				{
				window.alert(message);
				}
				locked = false;
			}
			else
			{
				locked = true;
			}
		},
		onFailure: function() 
		{
			// let it go through - it will get picked up by the server
			locked = true;
		}
	});
	return locked;
}

function unlockBookingRow (bookingRowId) 
{
	var locked = false;
	new Ajax.Request('/members/Ajax?doAction=unlockResource&bookingRowId=' + bookingRowId,
	{
		method: 'get',
		asynchronous: false,
		onSuccess: function(transport) 
		{
			locked = false;
		},
		onFailure: function() 
		{
			// let it go through - it will get picked up by the server
			locked = true;
		}
	});
	return locked;
}

function unlockAll () 
{
	var locked = false;
	new Ajax.Request('/members/Ajax?doAction=unlockResource',
	{
		method: 'get',
		asynchronous: false,
		onSuccess: function(transport) 
		{
			locked = false;
		},
		onFailure: function() 
		{
			// let it go through - it will get picked up by the server
			locked = true;
		}
	});
	return locked;
}

function cellsAvailable(bookingRowId)
{
	// default to 4
	var available = 4;
	new Ajax.Request('/members/Ajax?doAction=cellsAvailable&bookingRowId=' + bookingRowId,
	{
		method: 'get',
		asynchronous: false,
		onSuccess: function(transport)
		{
			available = parseInt(transport.responseText);
		},
		onFailure: function() 
		{
			// let it go through - it will get picked up by the server
			available = 4;
		}
	});
	return available;
}
function updateBookingCell(id, cell, nameCell, bookingData, kiosk)
{
	var bookingMember = getTagContent(bookingData, 'BookingMember');
	var bookingColor = getTagContent(bookingData, 'BookingColor');
	// set the text color
	var color = '#DDD';
	if(bookingColor)
	{
		color = bookingColor;
	}
	else
	{
		color='inherit';
	}
	var bookingName = getTagContent(bookingData, 'BookingName');

	nameCell.style.color = color;

	//set the name
	nameCell.update(bookingName);
	// set the handicap
	var cellHandicap=$('h_'+id);
	var handicap = getTagContent(bookingData, 'Handicap');

	if(cellHandicap && handicap && showHandicaps)
	{
		if (handicap < 0)
		{
			cellHandicap.update('[+' + (handicap * - 1) + ']');
		}
		else
		{
			cellHandicap.update('[' + handicap + ']');
		}
	}
	else
	{
		cellHandicap.update('');
	}
	
	var cellStorageLocker=$('sl_'+id);
	var storageLocker = getTagContent(bookingData, "StorageLocker");
	if(cellStorageLocker)
	{
		if (storageLocker)
		{
			cellStorageLocker.update(storageLocker);
		}
		else
		{	
			cellStorageLocker.update('');
		}
	}
	
	// set as booked
	
	var bookingRecordId = getTagContent(bookingData, 'BookingRecordId');
	if (bookingRecordId != null && bookingRecordId != '')
	{
		cell.addClassName('booked');
	}
	else
	{
		cell.removeClassName('booked');
	}

	var compCell=$('compIdentifier_'+id);
	if(compCell){
		//set the comp ids
		compCell.className = "all_comps";
		var compStatuses = getTagContent(bookingData,"CompStatuses");
		compCell.addClassName(compStatuses);
		var compScore = getTagContent(bookingData,"CompScore");
		compCell.setAttribute('compScore', compScore);
		setCellCompetitionStatus(compCell);
	}
	// set the name style and search data
	if(bookingMember!=null && bookingMember!='' && bookingMember.substring(0,3) != 'VIS')
	{
		nameCell.addClassName('memberCell');
		nameCell.removeClassName('visitorCell');
		nameCell.removeClassName('reservedCell');
	}
	else if(bookingName=="RESERVED" || bookingName=="BOOKED")
	{
		nameCell.addClassName('reservedCell');
		nameCell.removeClassName('memberCell');
		nameCell.removeClassName('visitorCell');
	}
	else
	{
		nameCell.addClassName('visitorCell');
		nameCell.removeClassName('memberCell');
		nameCell.removeClassName('reservedCell');
	}
	var cellMemberNumber=$('mn_'+id);
	if(cellMemberNumber)
	{
		if(bookingMember != null)
		{
			cellMemberNumber.update(bookingMember);
		}
		else
		{
			cellMemberNumber.update('');				
		}
	}
	
	var cellCheckedIn=$('r_'+id);
	if(cellCheckedIn)
	{
		var checkedIn = getTagContent(bookingData, "CheckedIn");
		if(checkedIn == 'true')
		{
			cellCheckedIn.update('<img src="/icons/checkedIn.gif" title="Checked In" />');
		}
		else
		{
			cellCheckedIn.update('');				
		}
	}
	
	var cellHomeClub=$('c_'+id);
	var homeClub = getTagContent(bookingData, "HomeClub");
	if(cellHomeClub)
	{
		if (homeClub)
		{
			cellHomeClub.update(homeClub);
		}
		else
		{	
			cellHomeClub.update('');
		}
	}
	
	var cellMembershipType=$('cat_'+id);
	var membershipType = getTagContent(bookingData, "MembershipType");
	if(cellMembershipType)
	{
		if (membershipType && displayMembershipType)
		{
			cellMembershipType.update(membershipType);
		}
		else
		{	
			cellMembershipType.update('');
		}
	}
	
	var cellPayment=$('p_'+id);
	var payment = getTagContent(bookingData, "Payment");
	var paymentRequired = getTagContent(bookingData, "PaymentRequired");
	if(cellPayment)
	{
		if (payment == 'true')
		{
			cellPayment.update('<img src="/icons/paid.gif" title="Paid" />');
		}
		else if (paymentRequired == 'true')
		{
			cellPayment.update('<img src="/icons/unPaid.gif" title="Payment Required" />');
		}
		else
		{
			cellPayment.update('');
		}
	}
	var cellDetails=$('d_'+id);
	var details = getTagContent(bookingData, "Details");
	if(cellDetails && details)
	{
		cellDetails.update('<img src="/icons/quote.gif" border="0" title="' + details + '" onmouseover="javascript:return escape(\''+details+'\');" />');
	}
	var cellEquipment=$('e_'+id);
	var equipment = getTagContent(bookingData, "Equipment");
	if(cellEquipment)
	{
		var numberOfCartsBooked = getTagContent(bookingData, "NumberOfCartsBooked");
		var numberOfNonCartsBooked = getTagContent(bookingData, "NumberOfNonCartsBooked");
		var updateStr = '';
		
		if (equipment == 'true' && kiosk)
		{
			if (numberOfCartsBooked > 0) 
			{
				updateStr+= '<img alt="cart" src="/icons/cart2010.png"/>x' + numberOfCartsBooked + ' ';
			}
			
			if (numberOfNonCartsBooked > 0) 
			{
				updateStr+= '<img alt="cart" src="/images/shop/trolley.gif"/>x' + numberOfNonCartsBooked;
			}
		}
		else if (equipment == 'true')
		{
			if (numberOfCartsBooked > 0) 
			{
				updateStr+= '<img alt="cart" src="/icons/cart.gif"/>x' + numberOfCartsBooked + ' ';
			}
			
			if (numberOfNonCartsBooked > 0) 
			{
				updateStr+= '<img alt="cart" src="/images/shop/trolley.gif"/>x' + numberOfNonCartsBooked;
			}
		}
		
		try
		{
			cellEquipment.update(updateStr);	
		}
		catch (e)
		{
			// strange IE error happens here - cant work out why yet!
		}
	}
	
	var cellExternallyBooked=$('s_'+id);
	if(cellExternallyBooked)
	{
		var externallyBooked = getTagContent(bookingData, "ExternallyBooked");
		var externallyBookedIcon = getTagContent(bookingData, "ExternalSourceIcon");	
		if(externallyBooked == 'true')
		{
			cellExternallyBooked.update('<img src="/icons/' + externallyBookedIcon + '" title="Booking made from GOLF Link" />');
		}
		else
		{
			cellExternallyBooked.update('');				
		}
	}
	var cellPublicCategory=$('pc_'+id);
	if(cellPublicCategory)
	{
		var publicCategory = getTagContent(bookingData, "PublicBookingNineHole");	
		if(publicCategory == 'true')
		{
			cellPublicCategory.update('&nbsp;[9H]&nbsp;');
		}
		else
		{
			cellPublicCategory.update('');				
		}
	}
}

function refreshIfErrors(transport)
{
	if (hasErrors(transport))
	{
		reloadEquipmentPage(transport);
	}
}

function updateBookingsFromTransport(transport)
{
	var bookings = getFromTransport(transport, 'Booking');
	for (var i=0; i<bookings.length; i=i+1) {
		
		var bookingRow = getTagContent(bookings[i],'BookingRow');
		var bookingOrder = getTagContent(bookings[i],'BookingOrder');
		var id = bookingRow+'_'+bookingOrder;
		var cell=$(id);
		var nameCell=$('name_'+id);
		
		if(cell && nameCell)
		{			
			var lastModified = getTagContent(bookings[i], 'LastModified');
			if (lastModified != null && lastModified != '' && lastModified != 'null')
			{
				cell.updateTime = lastModified;	
				if (lastModified > document.javascript_action.timestamp_start_time.value)
				{
					document.javascript_action.timestamp_start_time.value = lastModified;
				}
			}
			updateBookingCell(id, cell, nameCell, bookings[i]);
		}
	}
	setSessionAttributes(transport);
	updateDisplayedBookingCount();
}

function updateDisplayedBookingCount()
{
	var bookingCountDiv = $('npShowing');
	if (bookingCountDiv != null)
	{
		bookingCountDiv.innerHTML = '<p>Showing ' + $$('div.cell.booked').size() + ' bookings</p>'
	}
}

function setSessionAttributes(transport)
{
	var attributes = getFromTransport(transport, 'Attribute');
	for (var i=0; i<attributes.length; i=i+1) {
		var name = getTagContent(attributes[i],'Name');
		var value = getTagContent(attributes[i],'Value');
		setAttributeValue(name, value);
	}
}

function setAttributeValue(name, value)
{
	if (name && name == 'hasActiveWaitList')
	{
		hasActiveWaitList = (value == 'true');
	}
	if (name && name == 'hasWaitList')
	{
		hasWaitList = (value == 'true');
	}
}

function updateRowBookings(isAsynch, rowParam)
{
	new Ajax.Request('/members/Ajax?doAction=updateRowBookings&rows=' + rowParam+'&timestamp_start_time='+document.javascript_action.timestamp_start_time.value,
	{
		method: 'get',
		asynchronous: true,
		onSuccess: function(transport)
		{
			updateBookingsFromTransport(transport);
		},
		onFailure: function() 
		{
		}
	});
}
function clearCell(cellId)
{
	var cell=$(cellId)
	var cellName = $('name_'+cell.id);
	cellName.update();
	cellName.removeClassName('reservedCell');
	cellName.removeClassName('visitorCell');
	cellName.removeClassName('memberCell');
	cellName.removeClassName('publicCell');
	cellName.removeClassName('emptyCell');
	cell.removeClassName('booked');
	cell.removeClassName('pleasewait');
	cell.addClassName('boxed');

	var cellComp = $('compIdentifier_' + cell.id);
	if(cellComp){
		cellComp.className='all_comps';
		cellComp.update();
	}
	var cellR = $('r_' + cell.id);
	if(cellR) {
		cellR.update();
	}

	$('h_' + cell.id).update();
	$('c_' + cell.id).update();
	$('sl_' + cell.id).update();
	$('d_' + cell.id).update();
	$('e_' + cell.id).update();
	$('p_' + cell.id).update();
	$('s_' + cell.id).update();
	$('cat_' + cell.id).update();
}
function updateHighlightRowBookings()
{
	// use the highlighted cells to find the selected row(s)
	var cells = $$('div.cell.highlight');
	var rowIds = new Array();
	cells.each(function(item){
		var underscore = item.id.indexOf('_');
		rowIds.push(item.id.substring(0, underscore));
	});
	// remove duplicates
	rowIds = rowIds.uniq();
	var rowParam="";
	for(var i=0;i<rowIds.length;i=i+1){
		if(i!=0){
			rowParam = rowParam+",";
		}
		rowParam = rowParam+"row-"+rowIds[i];
	}
	updateRowBookings(false, rowParam);
}
function memberBookEquipment(rowId, xIndex) {
	bookCellEquipment(rowId+'_'+xIndex, false);
}
function bookCellEquipment(selectedId, isAdmin) {

	if ( selectedId == null )
	{
		return;
	}
	var underscore = selectedId.indexOf('_');
	var rowId = selectedId.substring(0, underscore-1);

	if(!lockBookingRow(rowId))
	{
		alert("Row is locked by another person");
		return;
	}
	var doAfter = doRefresh;
	unlockImmediateBookLock = function()
	{
		unlockBookingRow(rowId);
		closeHover();
	}
	if(isAdmin)
	{
		doAfter=unlockImmediateBookLock;
	}
	var url = 'BookEquipment.msp?cells=' + selectedId + '&booking_event_id=' + document.deleteForm.booking_event_id.value + '&timestamp_start_time=' + document.deleteForm.timestamp_start_time.value;
	Modalbox.show(url, {title: 'Book Equipment', width: 380, afterHide: doAfter, slideDownDuration: 0});
}

function askAboutAutomaticReserves()
{
	if (hasActiveWaitList)
	{
 		if (adminAskReserves)     
 		{
			return confirm("Allow time to be filled with reserves?");
 		}
 		return true;
	}
	return false;
}

