var Site = (function() {
	
	function initialise() {
		bindLinkHeadings();
		bindClearText();
		bindEventCalendar();
	}
	
	/**
	 * Bind headings for expanding and collapsing sections
	 * 
	 * @return {Boolean} false
	 */
	function bindLinkHeadings() {
		var listItems = ajil.getElementsByClassName('linkcat', 'li', document.getElementById('content')),
		headings = [],
		i = 0, x = 0,
		parent;
		
		ajil.foreach(listItems, function(listItem) {
			headings.push(listItem.getElementsByTagName('h3')[0]);
		});
		
		x = headings.length;
		
		for(i; i < x; i++) {
			headings[i].onclick = function() {
				parent = ajil.getParentNode(this, 'li');
				
				if(ajil.hasClass(parent, 'open')) {
					ajil.removeClass(parent, 'open');
					ajil.addClass(parent, 'closed');
				} else {
					ajil.removeClass(parent, 'closed');
					ajil.addClass(parent, 'open');
				}
				return false;
			}
		}
	}
	
	/** 
	 * Bind elements with a classname of "clear-text" to onfocus and onblur events.
	 * Clears the default text onfocus and restores it onblur if no value was entered.
	 * 
	 * @param {Array} [elements] 	an optional array of elements to apply the clear text
	 * 								functionality to
	 */
	function bindClearText(elements) {
		var clearTextFields = elements || ajil.getElementsByClassName('clear-text');
		
		ajil.foreach(clearTextFields, function(field) {
			field.onfocus = function() {
				if(this.value == this.defaultValue) {
					this.value = '';
				}
			}
			
			field.onblur = function() {
				if(this.value == '') {
					this.value = this.defaultValue;
				}
			}
		});
	}
	
	/* Bind our event calendar to display popup events */
	function bindEventCalendar() {
		eventCalendar = document.getElementById('eventsCalendar');
		
		if(eventCalendar != null) {
			var events = ajil.getElementsByClassName('hasEvent', 'td', eventCalendar),
			defList;
			
			ajil.foreach(events, function(event) {
				event.onmouseover = function() {
					defList = this.getElementsByTagName('dl')[0];
					
					defList.style.display = 'block';
					
					var eventLeft = 0,
					obj = defList;
					
					if(obj.offsetParent) {
						do {
							eventLeft += obj.offsetLeft;
						} while(obj = obj.offsetParent);
					}
					
					if(eventLeft < eventCalendar.offsetLeft) {
						defList.style.left = '-20px';
					}
				}
				
				event.onmouseout = function() {
					this.getElementsByTagName('dl')[0].style.display = 'none';
				}
			});
		}
	}
	
	
	return function() {
		initialise();
	}
	
})();
