﻿function PhEventManager()
{
	this.m_oAjax			= null;
	this.m_oTargetLayer		= null;
	
	this.m_oTypeFilter		= null;
	this.m_oCityFilter		= null;
	this.m_oKeywordFilter	= null;
	this.m_oStartDateFilter	= null;
	this.m_oEndDateFilter	= null;
	
	this.m_strSearchPage	= '';
	this.m_strRedirectPage	= '';
	this.m_strFilterBy		= '';
	
	this.InitObject();
}

PhEventManager.prototype.InitObject = function()
{
	this.m_oAjax = new PhAjaxJson();
}

PhEventManager.prototype.SetTargetLayer = function( target_layer )
{
	this.m_oTargetLayer = target_layer;
}

PhEventManager.prototype.SetTypeFilter = function( elm )
{
	this.m_oTypeFilter = elm;
}

PhEventManager.prototype.SetCityFilter = function( elm )
{
	this.m_oCityFilter = elm;
}

PhEventManager.prototype.SetKeywordFilter = function( elm )
{
	this.m_oKeywordFilter = elm;
}

PhEventManager.prototype.SetStartDateFilter = function( elm )
{
	this.m_oStartDateFilter = elm;
}

PhEventManager.prototype.SetEndDateFilter = function( elm )
{
	this.m_oEndDateFilter = elm;
}

PhEventManager.prototype.SetSearchPage = function( search_page )
{
	this.m_strSearchPage = search_page;
}

PhEventManager.prototype.SetRedirectPage = function( redirect_page )
{
	this.m_strRedirectPage = redirect_page;
}

PhEventManager.prototype.ResetFilters = function()
{
	this.m_oKeywordFilter.value			= '';
	this.m_oStartDateFilter.value		= '';
	this.m_oEndDateFilter.value			= '';
	this.m_oTypeFilter.selectedIndex	= 0;
	this.m_oCityFilter.selectedIndex	= 0;
}

PhEventManager.prototype.SearchByDate = function( sel_date )
{
	document.getElementsByTagName( 'body' )[0].style.cursor = 'wait';
	
	var date			= (sel_date.getMonth()+1)+'/'+sel_date.getDate()+'/'+sel_date.getFullYear();
	var query_string	= 'keywords=&start_date='+date+'&end_date='+date+'&city=%%&type=0';

	if( this.m_strRedirectPage == '' )
	{
		var me	= this;
		var cb	= function( obj ){ me.DisplayResults( obj ); };
		
		this.m_strFilterBy = '<span class="filter_by_heading">Filtered By:</span> <span class="filter_by_value">Any Type in Any City ('+date+' - '+date+')</span>';
		this.m_oAjax.SendRequest( this.m_strSearchPage, query_string, null, cb );
	}
	else
		window.location = this.m_strRedirectPage+'?'+query_string;	
}

PhEventManager.prototype.Search = function()
{
	document.getElementsByTagName( 'body' )[0].style.cursor = 'wait';
	
	var keywords	= (this.m_oKeywordFilter == null)? '' : this.m_oKeywordFilter.value;
	var start_date	= (this.m_oStartDateFilter == null)? '' : this.m_oStartDateFilter.value;
	var end_date	= (this.m_oEndDateFilter == null)? '' : this.m_oEndDateFilter.value;
	var city		= this.m_oCityFilter.value;
	var type		= this.m_oTypeFilter.value;
	
	var query_string	= 'keywords='+keywords+'&start_date='+start_date+'&end_date='+end_date+'&city='+city+'&type='+type;
	var filter			= '';
	
	if( start_date != '' && end_date == '' || end_date != '' && start_date == '' )
	{
		g_oAlertWindow.DisplayMessage( 'You must provide a start date and an end date when using the date fields.' );
		document.getElementsByTagName( 'body' )[0].style.cursor = 'default';
		return;
	}

	filter = '<span class="filter_by_heading">Filtered By:</span> ';
	filter += '<span class="filter_by_value">'+this.m_oTypeFilter.options[this.m_oTypeFilter.selectedIndex].text+' in '+this.m_oCityFilter.options[this.m_oCityFilter.selectedIndex].text;
	
	if( keywords != '' )
		filter += ' matching keyword(s) "'+keywords+'"';
	
	if( start_date != '' )
		filter += ' ('+start_date+' - '+end_date+')';
		
	if( this.m_strRedirectPage == '' )
	{
		var me = this;
		var cb = function( obj ){me.DisplayResults( obj ); };
		
		this.m_strFilterBy = filter+'</span>';
		this.m_oAjax.SendRequest( this.m_strSearchPage, query_string, null, cb );
	}
	else
		window.location = this.m_strRedirectPage+'?'+query_string;
}

PhEventManager.prototype.ClearResults = function( obj )
{
	var i = 0;
	
	for( i = this.m_oTargetLayer.childNodes.length-1; i >= 0; i-- )
		g_oClient.RemoveElement( this.m_oTargetLayer.childNodes[i] );
}

PhEventManager.prototype.DisplayResults = function( obj )
{
	var filter_by_div	= null;
	var day_div			= null;
	var day_title_div	= null;
	var day_event_div	= null;
	var day_event_link	= null;
	
	var start_date_time;
	var end_date_time;
	var desc			= '';
	
	var i = 0;
	var j = 0;
	
	this.ClearResults();
	
	filter_by_div = document.createElement( 'div' );
	filter_by_div.className = 'filter_by';
	filter_by_div.innerHTML = this.m_strFilterBy;
	
	this.m_oTargetLayer.appendChild( filter_by_div );	

	if( obj != null && obj.Dates.length > 0 )
	{
		for( i = 0; i < obj.Dates.length; i++ )
		{
			day_div = document.createElement( 'div' );
			day_div.className = 'event_day_section';
			
			day_title_div = document.createElement( 'div' );
			day_title_div.className = 'event_day_title_section';
			day_title_div.innerHTML = obj.Dates[i].date;
			
			day_div.appendChild( day_title_div );
			
			for( j = 0; j < obj.Dates[i].events.length; j++ )
			{
				start_time	= obj.Dates[i].events[j].start_time.toLowerCase();
				end_time	= obj.Dates[i].events[j].end_time.toLowerCase();
				
				desc = '('+start_time;
				
				if( start_time != end_time )
					desc += ' - '+end_time;
					
				desc += ') - '+obj.Dates[i].events[j].title;
				
				day_event_div = document.createElement( 'div' );
				day_event_div.className = 'event_day_event_section';
				//day_event_div.innerHTML = desc;
				
				day_event_link = document.createElement( 'a' );
				day_event_link.href			= 'event_details.aspx?event_id='+obj.Dates[i].events[j].id;
				day_event_link.className	= 'event_day_event_link';
				day_event_link.innerHTML	= desc;
				
				day_event_div.appendChild( day_event_link );
				day_div.appendChild( day_event_div );
			}
			
			this.m_oTargetLayer.appendChild( day_div );
		}
	}
	else
	{
		day_div = document.createElement( 'div' );
		day_div.className = 'event_day_section';
		
		day_title_div = document.createElement( 'div' );
		day_title_div.className = 'event_day_title_section';
		day_title_div.innerHTML = 'No matching events found.';
		
		day_div.appendChild( day_title_div );
		this.m_oTargetLayer.appendChild( day_div );			
	}
	
	document.getElementsByTagName( 'body' )[0].style.cursor = 'default';
}

PhEventManager.prototype.LoadEvent = function( event_id, cb )
{
	this.m_oAjax.SendRequest( 'system/data_sources/event.aspx', 'event_id='+event_id, null, cb );
}

var g_oEventManager = new PhEventManager();