Object.extend = function(destination, source) {
	for (property in source) {
		destination[property] = source[property];
	}
	
	return destination;
}

/* Accessing Object Classes */

if (!window.Element) {
	var Element = new Object();
}

Object.extend(Element, {
	addClassToElement: function(className, element) {
		if (element.className !== '') {
			element.className += ' ' + className;
		} else {
			element.className = className;
		}
	},
	
	removeClassFromElement: function(className, element) {
		var existingClassName = element.className;
		var expression = new RegExp('\\s?' + className + '\\b');
		
		if (existingClassName.indexOf(className) != -1) {
			element.className = existingClassName.replace(expression, '');
		}
	},

	classExistsInElement: function(className, element) {
		var expression = new RegExp('(^|\\s+)' + className + '(\\s+|$)');
		
		if (element.getAttributeNode('class') !== null) {
			return expression.test(element.getAttributeNode('class').value);
		} else if (element.className) {
			return expression.test(element.className);
		} else {
			return false;
		}
	}
}); 

/* Selecting Elements */

document.getElementsByClassName = function(className) {
	var candidates = document.body.getElementsByTagName('*');
	var candidate;
	var elements = new Array();
	var i, count = candidates.length;
	
	for (i = 0; i < count; i++) {
		candidate = candidates[i];
	
		if (Element.classExistsInElement(className, candidate)) {
			elements.push(candidate);
		}
	}
	
	return elements;
}

/* Event Utilities */

function addHandlerForEventToObject(procedure, event, object) {
	var oldHandler = object[event];
	
	object[event] = (typeof object[event] != 'function') ? procedure : function() { oldHandler(); procedure(); };
}

function resolveEvent(event) {
	return (!event) ? window.event : event;
}

function resolveTargetForEvent(event) {
	return (window.event) ? window.event.srcElement : event.target;
}

/* Navigational Menu Handlers */

function handleExpandableNavigationItemAction(event) {
	event = resolveEvent(event);
	var target = resolveTargetForEvent(event);
	
	while (target && target.tagName.toLowerCase() != 'li') {
		target = target.parentNode;
	}
	
	if (target == null) { return; }
	
	if (Element.classExistsInElement('contracted', target)) {
		Element.removeClassFromElement('contracted', target);
		Element.addClassToElement('expanded', target);
	} else if (Element.classExistsInElement('expanded', target)) {
		Element.removeClassFromElement('expanded', target);
		Element.addClassToElement('contracted', target);
	} else {
		Element.addClassToElement('expanded', target);
	}
	
	return false;
}

/* Global Initialization */

function UCInit() {
	// Prepare the secondary area navigation menu
	var lists = document.getElementsByClassName('secondary');
	var list;
	
	var i, count = lists.length;
	
	for (i = 0; i < count; i++) {
		list = lists[i];
		
		registerHandlersForExpandableUnorderedList(list, false);
	}
}

function registerHandlersForExpandableUnorderedList(list, includeChildren) {
	/* check ul */
	
	var items = list.childNodes;
	var item, child, isHandled;
	var i, count = items.length;
	
	for (i = 0; i < count; i++) {
		item = items[i];
		child = item.firstChild;
		isHandled = false;
		
		while (isHandled == false && child != null) {
			if (child.nodeName.toLowerCase() == 'ul') {
				isHandled = true;
				
				Element.addClassToElement('contracted', item);
			
				addHandlerForEventToObject(handleExpandableNavigationItemAction, 'onclick', item);
			} else {
				child = child.nextSibling;
			}
		}
	}
}

addHandlerForEventToObject(UCInit, 'onload', window);



/* IR Spam filter */
function isValid(textField){
	var checkFor = new Array()
	checkFor[0] = /url=/i; 
	checkFor[1] = /href=/i; 
	checkFor[2] = /!DOCTYPE/i; 
	
	var check = true;
	var i = 0;
	
	for( i=0 ; i < checkFor.length ; i++){
		if  ( textField.search(checkFor[i]) != (-1) ){
			check = false;
		}
	}
	
	return check;
}