(function(){
	$(document).ready(function(){
		$(".mainmenu").each(function(){
			var elem = this;
			var menuItems = [];
			var idxHover = undefined;
			var hideTimeout = 0;
			var ieFix = (jQuery.browser.msie && jQuery.browser.version < 8);
			
			var clearHideTimeout = function(){
				if (hideTimeout > 0) {
					window.clearTimeout(hideTimeout);
					hideTimeout = 0;
				}
			};
			
			var hideCurrentMenu = function(){
				if (idxHover != undefined) {
					menuItems[idxHover].current = false;
					$(menuItems[idxHover].trigger).removeClass("hover");
					$(menuItems[idxHover].submenu).hide();
					idxHover = undefined;
				}
			};
			
			var onMenuOver = function(e) {
				clearHideTimeout();
				var idx = $.data(this, "idx.mainmenu");
				if (idxHover!= undefined && idxHover == idx) return;
				
				if (idxHover != undefined) {
					hideCurrentMenu();
				}
				
				idxHover = idx;
				menuItems[idx].current = true;
				$(menuItems[idx].trigger).addClass("hover");
				$(menuItems[idx].submenu).show();
			};
			
			var onMenuOut = function(e) {
				clearHideTimeout();
				hideTimeout = window.setTimeout(function(){
					if (idxHover != undefined) {
						hideCurrentMenu();
					}
				},200);
			};
			
			var onSubMenuOver = function(e) {
				var li = $(this).parents("li");
				if (li.length){
					$(li).triggerHandler("mouseover");
				}
			};
			
			var onSubMenuOut = function(e) {
				var li = $(this).parents("li");
				if (li.length){
					$(li).triggerHandler("mouseout");
				}
			};
			
			var menuItem = function(menu) {
				var item = {};
				var trigger = $(">a",menu);
				var submenu = $(">ul", menu);
				
				if (trigger.length && submenu.length) {
					trigger = $(trigger[0]);
					submenu = $(submenu[0]);
					$(menu).unbind("mouseover.mainmenu").bind("mouseover.mainmenu", onMenuOver);
					$(menu).unbind("mouseout.mainmenu").bind("mouseout.mainmenu", onMenuOut);
					
					$(submenu).unbind("mouseover.mainmenu").bind("mouseover.mainmenu", onSubMenuOver);
					$(submenu).unbind("mouseout.mainmenu").bind("mouseout.mainmenu", onSubMenuOut);
					
					
					item = {
						trigger: trigger,
						submenu: submenu,
						selected: $(">a", menu).is(".selected"),
						current: false,
						idx: menuItems.length
					};
					
					$.data(menu, "idx.mainmenu", menuItems.length);
					
					menuItems.push(item);
					
					if (ieFix) {
						var arrs = $(">li>a", submenu);
						var maxw = 0, w = 0;
						maxw = $(submenu).innerWidth();
						
						$(">li>a", submenu).each(function(){
							w = parseInt($(this).css("paddingLeft")) || 0;
							w += parseInt($(this).css("paddingRight")) || 0;
							$(this).css("width", (maxw-w)+"px");
						});
					}
					
					//prevent dropdown to not exceed page right boundries
					if (true) {
						var borderOffset = $(menu).parents(".mainmenu").offset();
						var subMenuOffset = $(menu).offset();
						
						borderOffset.right = borderOffset.left + $(menu).parents(".mainmenu").innerWidth();
						subMenuOffset.right = subMenuOffset.left + $(submenu).innerWidth();
						
						if (subMenuOffset.right > borderOffset.right) {
							$(submenu).addClass("flushRight");
						}
					}
				}
			}
			
			$(">ul>li", elem).each(function(){
				new menuItem(this);
			});
		});
	});
	
	$(function(){
		if ($.browser.msie && $.browser.version < 7) {
			$("img[src$=png]").each(function(){
				var src = this.src;
				var el = $(this);
				var w = $(this).width();
				var h = $(this).height();
				
				$(this).attr("src", "images/blank.gif").css({
					width:w+"px",
					height:h+"px"
				});
				
				var fs = el.attr("filters");
				var alpha = "DXImageTransform.Microsoft.AlphaImageLoader";
				if (fs[alpha]) {
					fs[alpha].enabled = true;
					fs[alpha].src = src; 
					fs[alpha].sizingMethod = "crop";
				} else {
					el.css("filter", 'progid:' + alpha + '(enabled="true", sizingMethod="crop", src="' + src + '")');			
				}
			});
		}
	});
})(jQuery);
