/**
 * @author: RB
 * @date: 30-01-2009
 * @version: 1.0
 * 
 * @fileoverview:
 * Contains functionality required for the ACE search page
 * 
 */



// ------------ Postback Functionality --------------------------
function doMonthPostback(hElId, value, e) {
	
	var et = getEventTarget(e);
	
	var monthList = document.getElementById('monthlist');
	
	var as = monthList.getElementsByTagName('a');
	
	for (var i = 0; i < as.length; i++) {
		as[i].className = '';
	}
	
	et.className = 'here';
	
	var subjectFilter = document.getElementById('subjectfilter');
	var slContainer = subjectFilter.getElementsByTagName('div')[0];
	var topicFilter = document.getElementById('topicfilter');
	var tlContainer = topicFilter.getElementsByTagName('div')[0];
	var categoryFilter = document.getElementById('categoryfilter');
	var clContainer = categoryFilter.getElementsByTagName('div')[0];
	
	// need to scroll scrollable filter columns back to the top otherwise loader won't be viewable
	subjectFilter.scrollTop = 0;
	topicFilter.scrollTop = 0;
	
	displayLoader(slContainer, 'green');
	displayLoader(tlContainer, 'orange');
	displayLoader(clContainer, 'yellow');
	
	return doAcePostback('month', hElId, value);
}


function doSubjectPostback(hElId, value, e) {
	
	var et = getEventTarget(e);
	
	var subjectList = document.getElementById('subjectlist');
	
	var as = subjectList.getElementsByTagName('a');
	
	for (var i = 0; i < as.length; i++) {
		as[i].className = '';
	}
	
	et.className = 'here';
	
	var topicFilter = document.getElementById('topicfilter');
	var tlContainer = topicFilter.getElementsByTagName('div')[0];
	var categoryFilter = document.getElementById('categoryfilter');
	var clContainer = categoryFilter.getElementsByTagName('div')[0];
	
	// need to scroll scrollable filter columns back to the top otherwise loader won't be viewable
	topicFilter.scrollTop = 0;
	
	displayLoader(tlContainer, 'orange');
	displayLoader(clContainer, 'yellow');
	
	return doAcePostback('subject', hElId, value);
}


function doTopicPostback(hElId, value, e) {
	
	var et = getEventTarget(e);
	
	var monthList = document.getElementById('topiclist');
	
	var as = monthList.getElementsByTagName('a');
	
	for (var i = 0; i < as.length; i++) {
		as[i].className = '';
	}
	
	et.className = 'here';
	
	var categoryFilter = document.getElementById('categoryfilter');
	var clContainer = categoryFilter.getElementsByTagName('div')[0];
	
	displayLoader(clContainer, 'yellow');
	
	return doAcePostback('topic', hElId, value);
}


function doCategoryPostback(hElId, value, anchor) {
	
    if (anchor) {
        window.location.href = '#' + anchor;
    }
	
	var el = document.getElementById('cat' + value + 'Loader');
	
	displayLoader(el, 'blue');
	
	return doAcePostback('category', hElId, value);
}


function displayLoader(el, colour) {
	
	var img = document.createElement('img');
	img.src = 'images/loaders/loader_' + colour + '.gif';
	
	el.innerHTML = '';
	
	el.appendChild(img);
}


/**
 * getEventTarget
 *
 * gets the target element of the event
 * 
 * @param e: object: the event
 * 
 * @return object: the target element of the event
 * 
 */
function getEventTarget(e) {

	if (e.target) {
		et = e.target;
	}
	else if (e.srcElement) {
		et = e.srcElement;
	}
	
	// Safari bug
	if (et.nodeType == 3)
		et = et.parentNode;
		
	return et;
}


// ------------ List Scroller Functionality ---------------------- 
EfScroller = function(scrollElementId) {
	
	var scrollEl = document.getElementById(scrollElementId);
	
	if (scrollEl) {
		
		// remove the scroll bars
		scrollEl.className += ' noscroll';
		
		this.scrollEl = scrollEl;
		this.gotElement = true;
	}
	else {
		this.gotElement = false;
	}
}


EfScroller.prototype.scrollUp = function() {
	
	var scroller = this;
	
	doScrollUp();
	
	function doScrollUp() {
		
		scroller.scrollEl.scrollTop = scroller.scrollEl.scrollTop - 2
		scroller.time = setTimeout(doScrollUp, 10);
	}
}


EfScroller.prototype.scrollDown = function() {
	
	var scroller = this;
	
	doScrollDown();
	
	function doScrollDown() {
		
		scroller.scrollEl.scrollTop = scroller.scrollEl.scrollTop + 2
		scroller.time = setTimeout(doScrollDown, 10);
	}
}


EfScroller.prototype.scrollToTop = function() {
	
	this.scrollEl.scrollTop = 0;
}


EfScroller.prototype.scrollToBottom = function() {
	
	this.scrollEl.scrollTop = this.scrollEl.scrollHeight;
}


EfScroller.prototype.stopScroll = function() {
	
	if (this.time) clearTimeout(this.time);
}


// --------------- notify ScriptManager that script has loaded --------------------
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();