(function () {
	var mainNav = function () {
	
		var main = {
			obj_nav: $(arguments[0])[0] || $("#nav")[0] || $("#subnav")[0],
	
			settings: {
				show_delay: 0,
				hide_delay: 0,
				_ie6: /MSIE 6.+Win/.test(navigator.userAgent),
				_ie7: /MSIE 7.+Win/.test(navigator.userAgent)
			},
	
			init: function (obj, level) {
				obj.lists = obj.children();
				obj.lists.each(function (ind, el) {
					main.handlNavElement(el);
					if ((main.settings._ie6 || main.settings._ie7) && level) {
						main.ieFixZIndex(el, ind, obj.lists.length);
					}
				});
				if (main.settings._ie6 && !level) {
					document.execCommand("BackgroundImageCache", false, true);
				}
			},
	
			handlNavElement: function (list) {
				if (list !== undefined) {
					var listElem = $(list);
					listElem.mouseover(function () {
						main.fireNavEvent(this, true);
					});
					listElem.mouseout(function () {
						main.fireNavEvent(this, false);
					});
					if ($('ul', listElem).length > 0) {
						main.init($('ul', listElem), true);
					}
				}
			},
	
			ieFixZIndex: function (el, i, l) {
				var elem = $(el);
				if (!elem.is('iframe')) {
					elem.css({"z-index": 99999});
				} else {						
					elem.unbind('mouseover');
					elem.unbind('mouseout');
				}
			},
	
			fireNavEvent: function (elm, ev) {
				var elem = $(elm);				
				if (ev) {
					elem.addClass('over');
					$('a', elem).addClass('over');
					if (elem.children().length > 1) {
						main.show(elem.children()[1]);
					}
				} else {
					elem.removeClass('over');
					$('a', elem).removeClass('over');
					if (elem.children().length > 1) {
						main.hide(elem.children()[1]);
					}
				}
			},
	
			show: function (sub_elm) {
				var elem = $(sub_elm);
				if (sub_elm.hide_time_id) {
					clearTimeout(sub_elm.hide_time_id);
				}
				sub_elm.show_time_id = setTimeout(function () {
					if (!elem.hasClass("shown-sub")) {
						elem.addClass("shown-sub");
					}
				}, main.settings.show_delay);
			},
	
			hide: function (sub_elm) {
				var elem = $(sub_elm);
				if (sub_elm.show_time_id) {
					clearTimeout(sub_elm.show_time_id);
				}
				sub_elm.hide_time_id = setTimeout(function () {
					if (elem.hasClass("shown-sub")) {
						elem.removeClass("shown-sub");
					}
				}, main.settings.hide_delay);
			}
	
		};
		if (arguments[1]) {
			main.settings = $.extend(main.settings, arguments[1]);
		}
		if (main.obj_nav) {
			main.init($(main.obj_nav), false);
		}
	};
	
	$(document).ready(function() {
		//run navigation without delays and with default id="#nav"
		//mainNav();
	
		//run navigation with delays
		mainNav("nav", { "show_delay": "100", "hide_delay": "100" });
	});
})();
