////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//////
////// Event Management
//////
var arrayEvents				= new Array;
var currentEvent	 		= null;
var areEventsLoaded			= false;

function Event( id, areaid, startdate, enddate, name, description)
{
	//
	//
	// Member functions
	this.IsEventPast 		= IsEventPast;
	this.IsEventCurrent		= IsEventCurrent;
	this.IsEventFuture		= IsEventFuture;
	this.GetTimeLeftToEnd	= GetTimeLeftToEnd;
	this.GetTimeToStart		= GetTimeToStart;
	//
	//
	// Member variables
	this.m_id 			= id;	
	this.m_areaid 		= areaid;	
	this.m_startdate 	= new Date( Date.parse(startdate) );
	this.m_enddate 		= new Date( Date.parse(enddate) );
	this.m_name			= name;
	this.m_description	= description;
	
	arrayEvents[ id ] = this;
	
	debugInfo("Events: added event "+ this.m_name+" on " + this.m_startdate );
}

function IsEventPast()
{
	now = new Date();
	return (now > this.m_enddate);
}

function IsEventCurrent()
{
	now = new Date();
	difference1 = now-this.m_startdate;
	difference2 = now-this.m_enddate;
	return (now >= this.m_startdate) && (now <=this.m_enddate);
}

function GetTimeLeftToEnd()
{
	now = new Date();
	difference = this.m_enddate - now;
	hours 	= Math.floor(difference/(1000*60*60));
	minutes = Math.round(difference/(1000*60))-hours * 60;	
	return hours+" hours, "+minutes+" minutes";
}
function GetTimeToStart()
{
	now = new Date();
	difference = this.m_startdate - now;
	hours 	= Math.floor(difference/(1000*60*60));
	minutes = Math.round(difference/(1000*60))-hours * 60;	
	return hours+" hours, "+minutes+" minutes";
}

function IsEventFuture()
{
	now = new Date();
	return (this.m_startdate > now);
}
	
function onEventsLoaded( jsonArray )
{
debugInfo( "EVENTS onEventsLoaded"+ jsonArray );
	if ( jsonArray != null )
	{
		//
		var oObjects = eval(jsonArray);
		//
		arrayEvents				= new Array;
		//
		if ( !HasErrorProperty( oObjects) )
		{
			//
			now = new Date();
			//
			for ( var oId in oObjects)
			{
				var oObject = oObjects[oId];				
				new Event( oObject.m_id, oObject.m_areaid, oObject.m_startdate, oObject.m_enddate, oObject.m_name, oObject.m_description );				
			}
		}	
	}	
	RenderEventsByDate();
	areEventsLoaded = true;
	
}

function eventtoggle( index )
{
	state = document.getElementById("eventdetail"+index).style.display;
	if ( state == "none" )
		document.getElementById("eventdetail"+index).style.display="block";
	else
		document.getElementById("eventdetail"+index).style.display="none";
}

function RenderEventsByDate()
{
debugInfo( "EVENTS RenderEventsByDate"+ arrayEvents.length+" to render" );

	var newArray = new Array;
	// Copy in index based array
	index = 0;
	for ( var oId in arrayEvents)
	{
		var oObject = arrayEvents[oId];
		newArray[ index ] = oObject;
		index++;
	}
	//
	// Sort
	//
	for ( i=0;i<newArray.length;i++)
	{
		for ( j=i;j<newArray.length;j++)
		{
			if ( newArray[i].m_startdate < newArray[j].m_startdate )
			{
				tmp = newArray[i];
				newArray[i] = newArray[j];
				newArray[j] = tmp;
			}
		}		
	}
	//
	// Render
	//	
	html="";

	if ( canCreateEvent() )
	{	
		html+="&nbsp;<a href='javascript:createEvent()' class='eventadmin'>ADD EVENT</a>";			
		html+="<HR>";
	}
	html+="<table>";
	
	for ( i=0;i<newArray.length;i++)
	{
		oEvent = newArray[ i ];

		html+="<TR>";
		if ( oEvent.IsEventCurrent() )
			html+="<Td bgcolor='#FFFFEE'>";	
		else
		if ( i % 2 )
			html+="<Td bgcolor='#BBDDFF'>";
		else
			html+="<Td bgcolor='#AABBFF'>";
		
		
		if ( oEvent.IsEventCurrent() )
			html+="<span class='eventheaderactive'>";
		else
		if ( oEvent.IsEventCurrent() )
			html+="<span class='eventheaderactive'>";
		else
		if ( oEvent.IsEventFuture() )
			html+="<span class='eventheader'>";
		else		
			html+="<span class='eventheaderolder'>";
		
		html+="<a href='javascript:eventtoggle("+i+")'>"+oEvent.m_startdate+" "+oEvent.m_name+"</a>";
				
		html+="</span>";

		if ( canCreateEvent() )
		{
			html+="&nbsp;<a href='javascript:updateEvent("+oEvent.m_id+")' class='eventadmin'>EDIT</a>";
		}
		
		if ( canDeleteEvent() )
		{
			html+="&nbsp;<a href='javascript:deleteEvent("+oEvent.m_id+")' class='eventadmin'>DELETE</a>";			
		}
		
		html+="<div id='eventdetail"+i+"' class='eventdetail'>";
		html+="Ends on "+oEvent.m_enddate;
		html+="<BR>Description: "+oEvent.m_description;
		if ( oEvent.IsEventCurrent() )
			html+="<BR>Status: "+oEvent.GetTimeLeftToEnd()+" left";
		else
		if ( oEvent.IsEventFuture() )
			html+="<BR>Status: will start in "+oEvent.GetTimeToStart();
		//html+="<BR>Status: "+oEvent.IsEventPast()+" "+oEvent.IsEventCurrent()+" "+oEvent.IsEventFuture();
		html+="</div>";
		html+="</TD></TR>";
	}	

	html+="</table>";
		
	document.getElementById("eventmanagerdiv").innerHTML = html;
	//
	for ( i=0;i<newArray.length;i++)
	{
		oEvent = newArray[ i ];
		
		if ( oEvent.IsEventPast() || oEvent.IsEventFuture() )
			document.getElementById("eventdetail"+i).style.display="none";
	}
}

function createEventCancel()
{
	LoadAllEvents();
}

function createEventSubmit()
{
	name=document.neweventform.en.value;
	description=document.neweventform.ed.value;
	startdate=document.neweventform.es.value;
	enddate=document.neweventform.ee.value;

	url = DAOAPI_CREATEEVENTS+"&name="+escape(name)+"&description="+escape(description)+"&startdate="+startdate+"&enddate="+enddate;
	DAO( url, "onEventsLoaded", null );
}

function updateEventSubmit()
{
	id=document.updateeventform.id.value;
	name=document.updateeventform.en.value;
	description=document.updateeventform.ed.value;
	startdate=document.updateeventform.es.value;
	enddate=document.updateeventform.ee.value;

	url = DAOAPI_UPDATEEVENT+"&id="+id+"&name="+escape(name)+"&description="+escape(description)+"&startdate="+startdate+"&enddate="+enddate;
	DAO( url, "onEventsLoaded", null );
}
function createEvent()
{
	html="<form name='neweventform' method='POST'><table>";

	html+="<tr>";
	html+="<td>Start</td><td><input type='text' name='es' value='"+new Date()+"'></td>";
	html+="</tr>";

	html+="<tr>";
	html+="<td>End</td><td><input type='text' name='ee' value='"+new Date()+"'></td>";
	html+="</tr>";

	html+="<tr>";
	html+="<td>Name</td><td><input type='text' name='en' value='Event Name'></td>";
	html+="</tr>";

	html+="<tr>";
	html+="<td>Description</td><td><input type='text' name='ed' value='Event Details'></td>";
	html+="</tr>";

	html+="<tr>";
	html+="<td colspan=2><a href='javascript:createEventSubmit()'>SAVE</a> <a href='javascript:createEventCancel()'>CANCEL</a> </td>";
	html+="</tr>";

	html+="</table></form>";
	
	document.getElementById("eventmanagerdiv").innerHTML = html;
/*
	startdate = prompt("Enter the start date", new Date() );
	enddate = prompt("Enter the end date", new Date() );
	name  = prompt("Enter event short name", "Event name" );
	description  = prompt("Enter event description", "Event description" );
	if ( 
			confirm("You are about to create "+name+"\nstarting at "+startdate+"\nend on "+enddate+"\n"+description)
		)
	{
		url = DAOAPI_CREATEEVENTS+"&name="+escape(name)+"&description="+escape(description)+"&startdate="+startdate+"&enddate="+enddate;
		DAO( url, "onEventsLoaded", null );
	}
	*/
}

function updateEvent( id )
{
	startdate 	= arrayEvents[id].m_startdate;
	enddate 	= arrayEvents[id].m_enddate;
	name		= arrayEvents[id].m_name;
	description = arrayEvents[id].m_description;
	
	html="<form name='updateeventform' method='POST'><table>";

	html+="<input type='hidden' name='id' value='"+id+"'>";
	html+="<tr>";
	html+="<td>Start</td><td><input type='text' name='es' value='"+startdate+"'></td>";
	html+="</tr>";

	html+="<tr>";
	html+="<td>End</td><td><input type='text' name='ee' value='"+enddate+"'></td>";
	html+="</tr>";

	html+="<tr>";
	html+="<td>Name</td><td><input type='text' name='en' value='"+name+"'></td>";
	html+="</tr>";

	html+="<tr>";
	html+="<td>Description</td><td><input type='text' name='ed' value='"+description+"'></td>";
	html+="</tr>";

	html+="<tr>";
	html+="<td colspan=2><a href='javascript:updateEventSubmit()'>UPDATE</a> <a href='javascript:createEventCancel()'>CANCEL</a> </td>";
	html+="</tr>";

	html+="</table></form>";
	
	document.getElementById("eventmanagerdiv").innerHTML = html;
/*
	startdate = prompt("Enter the start date", new Date() );
	enddate = prompt("Enter the end date", new Date() );
	name  = prompt("Enter event short name", "Event name" );
	description  = prompt("Enter event description", "Event description" );
	if ( 
			confirm("You are about to create "+name+"\nstarting at "+startdate+"\nend on "+enddate+"\n"+description)
		)
	{
		url = DAOAPI_CREATEEVENTS+"&name="+escape(name)+"&description="+escape(description)+"&startdate="+startdate+"&enddate="+enddate;
		DAO( url, "onEventsLoaded", null );
	}
	*/
}


function deleteEvent( id )
{
	if ( confirm("Are you sure you want to delete this event ?") )
		DAO( DAOAPI_DELETEEVENT+id, "onEventsLoaded", null );
}

function LoadAllEvents()
{
	DAO( DAOAPI_GETALLEVENTS, "onEventsLoaded", null);  
}

function findEventById( id )
{
	if ( arrayEvents != null )	
	for ( var oId in arrayEvents)
	{
		var oEvent = arrayEvents[oId];
		if ( oEvent.m_id == id )
			return oEvent;
	}
	return null;
}

