
var positionsBooked = new Array();
var lockedFrontNine = new Array();
var lockedBackNine = new Array();
var openCompPosition = new Array();
var glMemberOnlyData = new Array();
var positionData = null;
var specialData = null;
var compInfoData = null;
var adminFee = 0;

function setup()
{
	// Init variables passed from asp.net
	setupFromServer();
	
	// Setup tooltips
	tipobj = document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : "";
	document.onmousemove=positiontip;
	
	if(!restoreHistory())
	{
		// No bookings restored from history, restore from server
		for(var i = 0; i < lockedFrontNine.length; i++)
		{
			bookPosition(lockedFrontNine[i], true);
		}
		
		for(var i = 0; i < lockedBackNine.length; i++)
		{
			bookPosition(lockedBackNine[i], false);
		}
	}
}

function bookPosition(posID, isFrontNine)
{
	var posElem = ge(positionElemID(posID, isFrontNine));
	var bookedIndex = ArrIndexOf(positionsBooked, posID);
	
	if(bookedIndex == -1)
	{		
		var openCompIndex = ArrIndexOf(openCompPosition, posID);
		var glMemberOnlyDataIndex = ArrIndexOf(glMemberOnlyData, posID);
		
		if(openCompIndex != -1)
			posElem.parentNode.className = 'posLink selectedYellow';
		else if(glMemberOnlyDataIndex != -1)
			posElem.parentNode.className = 'posLink selectedBlue';			
		else
			posElem.parentNode.className = 'posLink selectedGreen';
			
		positionsBooked.push(posID);
	}
	else
	{		
		//HACK		
		var openCompIndex = ArrIndexOf(openCompPosition, posID);
		var glMemberOnlyDataIndex = ArrIndexOf(glMemberOnlyData, posID);
		
		if(openCompIndex != -1)
			posElem.parentNode.className = 'yellow';
		else if(glMemberOnlyDataIndex != -1)
			posElem.parentNode.className = 'blue';			
		else
			posElem.parentNode.className = 'green';
			
		ArrWithout(positionsBooked, posID);
	}
	
	posElem.blur();
	refreshBooking();
}

function positionElemID(posID, isFrontNine)
{
	var ret = 'pos_' + posID + '_';
	
	if(isFrontNine == true)
		ret += 'f';
	else
		ret += 'b';
	
	return ret;
}

function fourForThree(slotID)
{
	var positions = arraySelect(positionData, "SlotID", slotID);
	
	for(var i = 0; i < positions.length; i++)
	{
		if(ArrIndexOf(positionsBooked, positions[i].PositionID) == -1)
			bookPosition(positions[i].PositionID, positions[i].IsFrontNine);
	}
}

function refreshBooking()
{
	var payElem = ge('bookingPayment');
	var hdnPositionsElem = ge('hdnPositions');
	hdnPositionsElem.value = '';
	
	if(positionsBooked.length > 0)
	{
		setVis(payElem, true);
		
		var playersElem = ge('bookedPlayers');
		playersElem.innerHTML = positionsBooked.length;
		
		var priceElem = ge('bookedPrice');
		var price = 0;
		var slotCounts = new Array();
		
		var adminFeeElem = ge('bookedAdmin');
		adminFeeElem.innerHTML = formatCurrency(adminFee / 100);
		
		for(var i = 0; i < positionsBooked.length; i++)
		{
			var pos = arrayLookup(positionData, "PositionID", positionsBooked[i]);
			if(hdnPositionsElem.value.length != 0) hdnPositionsElem.value += ',';
			hdnPositionsElem.value += pos.PositionID;
			price += pos.Price;
			
			if(slotCounts[pos.SlotID])
				slotCounts[pos.SlotID]++;
			else
				slotCounts[pos.SlotID]=1;
		}
		
		// Check 4 for 3
		for(slotID in slotCounts)
		{
			if(slotCounts[slotID] == 4)
			{
				var pos = arrayLookup(positionData, "SlotID", slotID);
				
				if(pos.Is4For3)
					price = price - pos.Price;
			}
		}
		
		price += adminFee;
		
		priceElem.innerHTML = formatCurrency(price / 100);
	}
	else
		setVis(payElem, false);
		
	// Record in history
	recordHistory();
}

function showSpecialTip(specialID,compInfoID)
{
	var special = arrayLookup(specialData, "SpecialOfferID", specialID);
	var competitionInfo = arrayLookup(compInfoData, "CompetitionInfoID", compInfoID);
	var textHover = "";
	
	if(competitionInfo)
		textHover += '<div><b>' + competitionInfo.Gender + ' Open Comp: </b><br>' + competitionInfo.Description + '</div>';
	if(special)
		textHover += '<div><b>Special: </b>' + special.Offer + '</div>';			
	if(textHover != "")
		ddrivetip(textHover, '#ffffff', 300);
}

/* ============== HISTORY FUNCTIONS ==================== */

// Record current page state for history
function recordHistory()
{	
	var ids = "";
	
	for(var i = 0; i < positionsBooked.length; i++)
	{
		ids += positionsBooked[i];
		
		if (i != positionsBooked.length-1)
			ids += ",";
	}
		
	ge('historyContainer').value = ids;
}

// Restore page state from history
function restoreHistory()
{
	var cont = ge('historyContainer').value;
	var parts = cont.split(",");
	var restored = false;
	
	for(var i = 0; i < parts.length; i++)
	{
		var pos = arrayLookup(positionData, "PositionID", parts[i]);
		
		if(pos)
		{
			bookPosition(pos.PositionID, pos.IsFrontNine);
			restored = true;
		}
	}
	
	return restored;
}

/* ============== END HISTORY FUNCTIONS ==================== */

/***********************************************
* Cool DHTML tooltip script- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/

var offsetxpoint=-60 //Customize x offset of tooltip
var offsetypoint=20 //Customize y offset of tooltip
var ie=document.all
var ns6=document.getElementById && !document.all
var enabletip=false
if (ie||ns6)
var tipobj;

function ietruebody(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function ddrivetip(thetext, thecolor, thewidth){
if (ns6||ie){
if (typeof thewidth!="undefined") tipobj.style.width=thewidth+"px"
if (typeof thecolor!="undefined" && thecolor!="") tipobj.style.backgroundColor=thecolor
tipobj.innerHTML=thetext
enabletip=true
return false
}
}

function positiontip(e){
if (enabletip){
var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
//Find out how close the mouse is to the corner of the window
var rightedge=ie&&!window.opera? ietruebody().clientWidth-event.clientX-offsetxpoint : window.innerWidth-e.clientX-offsetxpoint-20
var bottomedge=ie&&!window.opera? ietruebody().clientHeight-event.clientY-offsetypoint : window.innerHeight-e.clientY-offsetypoint-20

var leftedge=(offsetxpoint<0)? offsetxpoint*(-1) : -1000

//if the horizontal distance isn't enough to accomodate the width of the context menu
if (rightedge<tipobj.offsetWidth)
//move the horizontal position of the menu to the left by it's width
tipobj.style.left=ie? ietruebody().scrollLeft+event.clientX-tipobj.offsetWidth+"px" : window.pageXOffset+e.clientX-tipobj.offsetWidth+"px"
else if (curX<leftedge)
tipobj.style.left="5px"
else
//position the horizontal position of the menu where the mouse is positioned
tipobj.style.left=curX+offsetxpoint+"px"

//same concept with the vertical position
if (bottomedge<tipobj.offsetHeight)
tipobj.style.top=ie? ietruebody().scrollTop+event.clientY-tipobj.offsetHeight-offsetypoint+"px" : window.pageYOffset+e.clientY-tipobj.offsetHeight-offsetypoint+"px"
else
tipobj.style.top=curY+offsetypoint+"px"
tipobj.style.visibility="visible"
}
}

function hideddrivetip(){
if (ns6||ie){
enabletip=false
tipobj.style.visibility="hidden"
tipobj.style.left="-1000px"
tipobj.style.backgroundColor=''
tipobj.style.width=''
}
}

