/**
 * @author: RB
 * @date: 13-02-2008
 * @version: 1.0
 * 
 * @fileoverview:
 * Contains global javascript functionality for event finder
 * 
 */

// get a global instance of the page request manager
var prm = Sys.WebForms.PageRequestManager.getInstance();


// -------------- My Events functionality -----------------
var myEventsChanged = true;


function fixMyEventsHeight() {
	
	var containerEl = document.getElementById('work1');
	containerEl.style.height = String(containerEl.offsetHeight) + 'px';
}


function unfixMyEventsHeight() {
	
	var containerEl = document.getElementById('work1');
	containerEl.style.height = 'auto';
}


function switchMyEvents() {
	
	// hide the current list
	var el = document.getElementById('myevtbl');
	if (el) el.style.display = 'none';
	
	if ((current !== '1') && myEventsChanged) {
		
		showMyEventsLoading();
		
		workSwitch(1);
		
		fixMyEventsHeight();
		
		RHSEventFinderV2.WebServices.AjaxServices.GetMyEventsCookies(displayMyEvents, switchMyEventsError);
	}
	else {
		Effect.Appear('myevtbl');
		workSwitch(1);
	}
}


function showMyEventsLoading() {
	
	var loadingEl = document.createElement('div');
	loadingEl.id = 'mydetailsloading';
	loadingEl.className = 'resultsloading';
	
	var containerEl = document.getElementById('work1');
	containerEl.appendChild(loadingEl);
	
	var imgEl = document.createElement('img');
	imgEl.src = './images/loaders/loader_blue.gif';
	imgEl.alt = 'Opening My Events...';
	loadingEl.appendChild(imgEl);
}


function hideMyEventsLoading() {
	
	var containerEl = document.getElementById('work1');
	var loadingEl = document.getElementById('mydetailsloading');
	containerEl.removeChild(loadingEl);
}


function displayMyEvents(result, userContext) {
	
	// hide the loading indicator
	// NB. In order for this to not completely mess up the page layout in ie6 the loader needs to be removed
	// before any manipulation of the table
	hideMyEventsLoading();
	
	var results = JSON.parse(result);
	
	var myEventsEl = document.getElementById('myevtbl');
	
	// clear the current table
	var numRows = myEventsEl.rows.length;
	
	for (var i = 0; i < numRows; i++) {
		myEventsEl.deleteRow(-1);
	}
	
	if (results.length > 0) {
		
		for (var i = 0; i < results.length; i++) {
			
			var tr = myEventsEl.insertRow(i);
			var td1 = tr.insertCell(0);
			var td2 = tr.insertCell(1);
			
			var eventDesc = results[i].eventDesc;
			if (eventDesc.length > 50) eventDesc = eventDesc.substring(0, (eventDesc.length - 4)) + '...';
			
			var eventVenue = results[i].eventVenue;
			if (eventVenue.length > 20) eventVenue = eventVenue.substring(0, (eventVenue.length - 4)) + '...';
			
			// eventRecommended property wasn't always added to the cookie
			if (!results[i].eventRecommended) results[i].eventRecommended = 'false';
			
			td1.innerHTML += '<a href="details.aspx?id=' + results[i].eventId + '&r='
						  + (results[i].eventRecommended == 'true' ? 'true' : 'false') + '" class="myevent'
						  + (results[i].eventRecommended == 'true' ? ' starred' : '') + '">' + eventDesc + ' | '
						  + results[i].eventStartDate + ' | '
						  + eventVenue + '</a>';
			
			// add the remove from my events button
			td2.innerHTML += '<a href="#" title="Remove from My Events" class="myeventsbl" onclick="removeMyEvent(' + results[i].eventId + '); return false;">-</a>';
		}
		
		// show the results
		Effect.Appear('myevtbl');
		
		// make sure the container isn't fixed height anymore
		setTimeout(unfixMyEventsHeight, 500);
		
		myEventsChanged = false;
	}
	else {
		workSwitch(1);
	}
}


function switchMyEventsError(result) {
	
	alert('oops: ' + result.get_message());
}


function addMyEvent(id, recommended) {
	
	// is the My Events Section currently open
	var myEventsOpen = (current === '1');
	
	// show the loading indicator
	var loadingEl = document.getElementById('lind');
	
	var imgEl = document.createElement('img');
	imgEl.id = 'myeventsloading';
	imgEl.src = './images/loaders/loader_blue.gif';
	imgEl.alt = 'Adding Event...';
	loadingEl.appendChild(imgEl);
	
	// hide my events count
	Effect.Fade('myeventsnum');
	
	if (myEventsOpen) {
		// fix the height
		fixMyEventsHeight();
		Effect.Fade('myevtbl');
	}
	
	setTimeout(addAndUpdate, 1000);
	
	
	function addAndUpdate() {
		
		var callback;
		
		// if My Events are currently open / displayed
		if (myEventsOpen) {
			showMyEventsLoading();
			callback = updateOpenMyEvents;
		}
		else {
			callback = updateMyEvents
		}
		
		var rec = (recommended === 'true' ? 'true' : 'false');
		
		RHSEventFinderV2.WebServices.AjaxServices.AddMyEventCookie(id, rec, callback, addMyEventError);
	}
}


function removeMyEvent(id) {
	
	// show the loading indicator
	var loadingEl = document.getElementById('lind');
	
	var imgEl = document.createElement('img');
	imgEl.id = 'myeventsloading';
	imgEl.src = './images/loaders/loader_blue.gif';
	imgEl.alt = 'Removing Event...';
	loadingEl.appendChild(imgEl);
	
	// hide my events count
	Effect.Fade('myeventsnum');
	
	// fix the height
	fixMyEventsHeight();
	Effect.Fade('myevtbl');
	
	setTimeout(removeAndUpdate, 1000);
	
	function removeAndUpdate() {
		
		showMyEventsLoading();
		
		RHSEventFinderV2.WebServices.AjaxServices.RemoveMyEventCookie(id, updateOpenMyEvents, addMyEventError);
	}
}


function clearMyEvents() {
	
	if (!confirm('Are you sure you want to clear your My Events?')) {
		return false;
	}
	
	// is the My Events Section currently open
	var myEventsOpen = (current === '1');
	
	// show the loading indicator
	var loadingEl = document.getElementById('lind');
	
	var imgEl = document.createElement('img');
	imgEl.id = 'myeventsloading';
	imgEl.src = './images/loaders/loader_blue.gif';
	imgEl.alt = 'Adding Event...';
	loadingEl.appendChild(imgEl);
	
	// hide my events count
	Effect.Fade('myeventsnum');
	
	if (myEventsOpen) {
		// fix the height
		fixMyEventsHeight();
		Effect.Fade('myevtbl');
	}
	
	setTimeout(clearAndUpdate, 1000);
	
	
	function clearAndUpdate() {
		
		var callback;
		
		// if My Events are currently open / displayed
		if (myEventsOpen) {
			showMyEventsLoading();
			callback = updateClearedOpenMyEvents;
		}
		else {
			callback = updateClearedMyEvents
		}
		
		RHSEventFinderV2.WebServices.AjaxServices.DeleteMyEventsCookies(callback, addMyEventError);
	}
}


function updateClearedMyEvents(result, userContext) {
	
	var el = document.getElementById('myeventsnum');
	el.innerHTML = 0;
	
	var myEventsEl = document.getElementById('myevtbl');
	
	// clear the current table
	var numRows = myEventsEl.rows.length;
	
	for (var i = 0; i < numRows; i++) {
		myEventsEl.deleteRow(-1);
	}
	
	myEventsEl.style.display = 'none';
	
	// hide the loading indicator
	var loadingEl = document.getElementById('lind');
	var imgEl = document.getElementById('myeventsloading');
	loadingEl.removeChild(imgEl);
	
	// show the results
	Effect.Appear('myeventsnum');
	
	myEventsChanged = true;
}


function updateClearedOpenMyEvents(result, userContext) {
	
	hideMyEventsLoading();
	workSwitch(1);
	updateClearedMyEvents(result, userContext);
}


function updateMyEvents(result, userContext) {
	
	var el = document.getElementById('myeventsnum');
	el.innerHTML = result;
	
	// hide the loading indicator
	var loadingEl = document.getElementById('lind');
	var imgEl = document.getElementById('myeventsloading');
	loadingEl.removeChild(imgEl);
	
	// show the results
	Effect.Appear('myeventsnum');
	
	myEventsChanged = true;
}


function updateOpenMyEvents(result, userContext) {
	
	updateMyEvents(result, userContext);
	
	RHSEventFinderV2.WebServices.AjaxServices.GetMyEventsCookies(displayMyEvents, switchMyEventsError);
}


function addMyEventError(result) {
	
	alert('oops: ' + result.get_message());
}


// --------------- notify ScriptManager that script has loaded --------------------
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
