var addUniversalEvent = function () {
	if (typeof document.addEventListener !== 'undefined') {
		if (/WebKit|Khtml/i.test(navigator.userAgent)) {
			return safariAddEvent
		}
		return w3cAddEvent;
	}
	else if (typeof document.attachEvent !== 'undefined') {
		return ieAddEvent;
	}
	else {
		return function() {};
	}
	
	function w3cAddEvent(element, event, callback, use_capture) {
		element.addEventListener(event, callback, use_capture);
	}
	
	function safariAddEvent(element, event, callback, use_capture) {
		if (event == 'DOMContentLoaded') {
			var domLoadedTimer = setInterval(function() {
				if (/loaded|complete/i.test(document.readyState)) {
					clearInterval(domLoadedTimer);
					callback();
				}
			}, 10);
		}
		else {
			element.addEventListener(event, callback, use_capture);
		}
	}
	
	function ieAddEvent(element, event, callback, use_capture) {
		if (event == 'DOMContentLoaded') {
			var tempElement = document.createElement('document:ready');
			var domLoadedTimer = setInterval(function() {
				if (/loaded|complete/i.test(document.readyState)) {
					try {
						tempElement.doScroll('left');
						
						clearInterval(domLoadedTimer);
						callback();
						
						tempElement = null;
						domLoadedtimer = null;
					}
					catch (exception) {
					}
				}
			}, 10);
		}
		else {
			var ieHelper = function(e) {
				e.target = e.srcElement;
				if (event == 'mouseover') {
					e.relatedTarget = e.fromElement;
				}
				else if (event == 'mouseout') {
					e.relatedTarget = e.toElement;
				}
				
				e.preventDefault = function () {
					e.returnValue = false;
				};
				e.stopPropagation = function() {
					e.cancelBubble = true;
				};
				
				callback.call(element, e);
				
				e.target = null;
				e.relatedTarget = null;
				e.preventDefault = null;
				e.stopPropagation = null;
				e = null;
			}
			
			element.attachEvent('on' + event, ieHelper);
			
			ieHelper = null;
		}
	}
}();


var dropDownMenu = function(triggerClass, activeTriggerClass, menuClass, hiddenMenuClass) {
	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 getElementsByClassName(element, className, callback) {
		var elements = [];
	
		while (element) {
			if (element.className && element.className.lastIndexOf(className) != -1) {
				elements.push(element);
				callback(element);
			}
			if (element.hasChildNodes()) {
				elements = elements.concat(getElementsByClassName(element.firstChild, className, callback));
			}
			element = element.nextSibling;
		}
		return elements;
	}
	
	function isElementChildOf(sourceElement, childElement) {
		if (sourceElement === childElement) {
			return false;
		}
		while (childElement && childElement !== sourceElement) {
			childElement = childElement.parentNode;
		}
		return childElement === sourceElement;
	}
	
	function checkParentForClass(sourceElement, className) {
		while (sourceElement) {
			if (sourceElement.className && sourceElement.className.lastIndexOf(className) != -1) {
				return true;
			}
			sourceElement = sourceElement.parentNode;
		}
		return false;
	}
	
	function getSiblingByClassName(element, className) {
		var elements = [];
		while (element) {
			if (element.className && element.className.lastIndexOf(className) != -1) {
				return element;
			}
			if (element.hasChildNodes()) {
				elements.push(element.firstChild);
			}
			element = element.nextSibling;
		}
		for (var i = 0; i < elements.length; ++i) {
			element = getSiblingByClassName(elements[i], className);
			if (element.className && element.className.lastIndexOf(className) != -1) {
				return element;
			}
		}
		return false;
	}
	
	function switchDropdownMenus(e) {
		if (e.relatedElement.className.lastIndexOf(menuClass) == -1 
				&& !checkParentForClass(e.relatedElement, menuClass)
				&& e.relatedElement.className.lastIndexOf(activeTriggerClass) == -1) {
			hideAllDropdownMenus();
		}
	}
	
	function hideDropdownMenus(e) {
		if ((e.relatedElement.className.lastIndexOf(menuClass) == -1
				&& !isElementChildOf(e.actualElement, e.relatedElement)
				&& !e.triggeredByChild)
			|| (!isElementChildOf(e.actualElement, e.relatedElement) && e.triggeredByChild)) {
			hideAllDropdownMenus();
		}
	}
	
	function displayDropdownMenus(e) {
		var siblingElement = getSiblingByClassName(e.actualElement.nextSibling, hiddenMenuClass);
		if (siblingElement) {
			siblingElement.className = siblingElement.className.replace(new RegExp(hiddenMenuClass+"\\b"), menuClass);
			if (e.actualElement.className && e.actualElement.className.lastIndexOf(activeTriggerClass) == -1) {
				e.actualElement.className += ' '+activeTriggerClass;
			}
		}
	}
	
	function hideAllDropdownMenus() {
		var elements = getElementsByClassName(document, menuClass, function (element) {
			element.className = element.className.replace(new RegExp(menuClass+"\\b"), hiddenMenuClass);
		});
		
		elements = getElementsByClassName(document, activeTriggerClass, function (element) {
			element.className = element.className.replace(new RegExp(" "+activeTriggerClass+"\\b"), "");
		});
	}
	
	var elements = getElementsByClassName(document, triggerClass, function(element) {
		registerEvent(element, 'mouseover', displayDropdownMenus);
		registerEvent(element, 'mouseout', switchDropdownMenus);
	});
	
	elements = getElementsByClassName(document, hiddenMenuClass,function(element) {
		registerEvent(element, 'mouseout', hideDropdownMenus);
	});
};


function documentReady () {
	
	// initialize dropdowns
	dropDownMenu('main_nav_buttons', 'main_nav_buttons_hover', 'nav_drop', 'nav_drop_hidden');
	
	//rewrite this to be a more sane system of flash replacement

};

// jquery accordian
$(document).ready(function() {
	documentReady();

	$(".firstlevel").mouseover(function() {
		if (this.parentNode.className != "active_accordion")
		//$(this).css("background-color", "#ebedea");
		//$(this).parent().css("background-image", "url(../img/bar.gif)");
		$(this).parent().addClass("hover_accordion");
		return false;
	});
	
	
	$(".firstlevel").mouseout(function() {
		//$(this).parent().css("background", "none");
			$(".hover_accordion").removeClass();
		return false;
	});

	$(".firstlevel").click(function() {
		if (this.parentNode.className != "active_accordion") {
			$(".active_accordion").removeClass();
			$(".inner_nav").slideUp('normal')
			$(".inner_nav", this.parentNode).slideDown('normal');
			this.parentNode.className = "active_accordion";
		}
		else {
			$(".active_accordion").removeClass();
			$(".inner_nav").slideUp('normal');
			
		}
		return false;
	});
	
	if ($(".firstlevel").length == 1) {
		$(".firstlevel").click();
	}
});

function showForm() {
	var formid = "#" + document.getElementById('quotes_dropdown').value + "_form";
	//alert(document.getElementById('quotes_dropdown').getElementsByTagName('option').length);
	
	$(".quotes_form").hide();
	$(formid).show();
	
}
