var swapSectionClass = function(onElement, offElement, sectionElement, onClass, offClass) {
	var globalEventsTable = [];
	
	var addEvent = function() {
		function ieAddEvent(element, event, functionName) {
			element.attachEvent('on' + event, functionName);
		}
		function w3cAddEvent(element, event, functionName) {
			element.addEventListener(event, functionName, false);
		}
	
		if (typeof window.addEventListener !== 'undefined') {
			return w3cAddEvent;
		}
		else if (typeof window.attachEvent !== 'undefined') {
			return ieAddEvent;
		}
	}();
		
	function registerEvent(element, event, functionName) {
		var eventId = globalEventsTable.length+1;
		
		globalEventsTable[eventId] = new Object;
		globalEventsTable[eventId].callback = functionName;
		globalEventsTable[eventId].element = element;
		globalEventsTable[eventId].event = event;
	
		addEvent(element, event, function (e) { eventHandler(e, eventId); });
	}
	
	function eventHandler(e, eventId) {
		if (!e) {
			var e = window.event;
		}
	
		e.actualElement = globalEventsTable[eventId].element;
		
		if (globalEventsTable[eventId].event == 'mouseout') {
			e.relatedElement = (e.relatedTarget) ? e.relatedTarget : e.toElement;
		}
		else if (globalEventsTable[eventId].event == 'mouseover') {
			e.relatedElement = (e.relatedTarget) ? e.relatedTarget : e.fromElement;
		}
		
		if (!e.relatedElement) {
			e.relatedElement = new Object;
			e.relatedElement.className = '';
		}
		
		if (e.relatedElement != e.actualElement) {
			e.sourceElement = (window.event) ? e.srcElement : e.target;
			if (e.sourceElement.nodeType == 3) {
				e.sourceElement = sourceElement.parentNode;
			}
			e.triggeredByChild = false;
		
			if (e.sourceElement != e.actualElement) {
				e.triggeredByChild = isElementChildOf(e.actualElement, e.sourceElement);
			}
		
			e.sourceElement.className = (e.sourceElement.className) ? e.sourceElement.className : '';
			e.relatedElement.className = (e.relatedElement.className) ? e.relatedElement.className : '';
			e.actualElement.className = (e.actualElement.className) ? e.actualElement.className : '';
		
			globalEventsTable[eventId].callback(e);
			
			e.cancelBubble = true;
			if (e.stopPropagation) {
				e.stopPropagation();
			}
		}
	}
	
	function setSectionClass(e, className) {
	    e.className = className;
	}
	
	function setSectionOn(e) {
	    setSectionClass(sectionElement, onClass);
	}
	
	function setSectionOff(e) {
	    setSectionClass(sectionElement, offClass);
	}
	
	if(onElement) {
        registerEvent(onElement, 'click', setSectionOn);
    }
    if(offElement) {
        registerEvent(offElement, 'click', setSectionOff);
    }
};