(function($){
	
	$.fn.creMenu = function(options) {
		var isMethodCall = (typeof options == "string") || false;
		var args = arguments;
		
		$(this).each(function() {
			var creMenu = $(this).data("creMenu");
			if (creMenu && isMethodCall) {
				if (creMenu[options] && $.isFunction(creMenu[options])) {
					creMenu[options].apply(creMenu, $.makeArray(args).slice(1));
				}
			} else if ( !isMethodCall && !creMenu ) {
				creMenu = new $.creMenu(this, options);
				$(this).data("creMenu", creMenu);
			}
		});
		
		return this;
	};
	
	$.creMenu = function(elem, options) {
		this.elem = elem;
		this.options = $.extend( {}, $.creMenu.defaults, options );
		this.init();
	};
	
	$.extend( $.creMenu, {
		defaults: {
		},
		prototype: {
			init: function() {
				var self = this;
				
				this.currentMenu = undefined;
				this.hideTimeout = 0;
				
				this.offset = $(this.elem).offset();
				this.menu = $(">ul>li>a", this.elem);
				
				var l = -$("#header").offset().left;
				var cw = $("#header").innerWidth();
				
				this.menu = jQuery.map( this.menu, function(e) {
					var obj = {};
					
					var pl,pr,w,o;
					pl = parseInt($(e).css("paddingLeft")) || 0;
					pr = parseInt($(e).css("paddingRight")) || 0;
					w = $(e).innerWidth();
					o = $(e).offset();
					
					
					//o.left -= self.offset.left;
					//o.top -= self.offset.top;
					
					$(e).css({
						paddingLeft:0,
						paddingRight:0,
						width:w+"px",
						textAlign:"center"
					});
					
					obj.hasSubmenu = ($(e).parent().find(".submenu").length > 0);
					if (obj.hasSubmenu) {
						obj.submenu = $($(e).parent().find(".submenu")[0]);
						obj.submenu.append( $("<div></div>").addClass("r") );
						
						$(e).parent()
							.append(
								$("<div></div>").addClass("hl")
								.css({
									left:(o.left+l-8)+"px"
								})
							)
							.append(
								$("<div></div>").addClass("hr")
								.css({
									left:(o.left+l+w)+"px"
								})
							)
							.append(
								$("<div></div>").addClass("hb")
								.css({
									left:(o.left+l)+"px",
									width:w+"px"
								})
							);
							
						if (obj.submenu.length) {
							w = $(obj.submenu).innerWidth();
							if ($.browser.msie && $.browser.version < 7) {
								$(e).parent().find(".hb").remove();
								$(obj.submenu).css({display:"block"});
								w = 0;
								$("ul>li", obj.submenu).each(function(){
									w += $(this).outerWidth(true);
								});
								
								$(">ul", obj.submenu).css({width: w+"px",overflow:"hidden"});
							} else if ($.browser.msie && $.browser.version < 8) {
								
								$(obj.submenu).css({display:"block"});
								w = 0;
								$("ul>li", obj.submenu).each(function(){
									w += $(this).outerWidth(true);
								});
								
								//$(">ul", obj.submenu).css({width: w+"px"});
								$(obj.submenu).css({display:""});
							}
							
							var x = 0;
							x = cw - x - w;
							if ( x > o.left+l ) {
								x = o.left+l-40;
								x = cw - (x + w);
								$(obj.submenu).css({right:x+"px"});
							}
								
							if ($.browser.msie && $.browser.version < 7) {
								
								$(obj.submenu)
									.before($("<div></div>").addClass("submenubg")
										.append($("<div></div>").addClass("c").css({width:w+"px"}))
										.append($("<div></div>").addClass("l"))
										.append($("<div></div>").addClass("r").css({left:(w+18)+"px"}))
										.css({left: ($(obj.submenu).offset().left+l)+"px" })
									)
									.after( $("<div></div>").addClass("submenubgh").css({left:(o.left+l)+"px",width:($(e).innerWidth())+"px"}) )
									.css({backgroundImage:"none"});
									
								$(obj.submenu).find(".r").hide();
									
								$("#nav .submenubg .c, #nav .submenubg .r, #nav .submenubg .l, #nav .submenubgh").pngfix({
									sizingMethod:"scale"
								});
								
								$(obj.submenu).css({display:""});
							}
							
							
						}
						
					} else {
						obj.submenu = undefined;
					}
					obj.trigger = e;
					
					return obj;
				});
				
				for(var i=0,n=this.menu.length; i<n; i++) {
					$(this.menu[i].trigger).bind("mouseover", function(event){
						self.onMouseOver.apply(self, [this, event]);
					});
					$(this.menu[i].trigger).bind("mouseout", function(event){
						self.onMouseOut.apply(self, [this, event]);
					});
					$($(this.menu[i].trigger).parent()).bind("mouseover", function(event){
						self.onMouseOver.apply(self, [$(this).find("a")[0], event]);
					});
					$($(this.menu[i].trigger).parent()).bind("mouseout", function(event){
						self.onMouseOut.apply(self, [$(this).find("a")[0], event]);
					});
					
					if (this.menu[i].hasSubmenu) {
						$(this.menu[i].submenu).bind("mouseover", function(event){
							self.onMouseOver.apply(self, [$(this).parents("li").find("a")[0], event]);
						});
						$(this.menu[i].submenu).bind("mouseout", function(event){
							self.onMouseOut.apply(self, [$(this).parents("li").find("a")[0], event]);
						});
					}
				}
			},
			
			setHideTimeout: function() {
				this.clearHideTimeout();
				var self = this;
				this.hideTimeout = window.setTimeout(function(){
					if (self.currentMenu != undefined) {
						$(self.currentMenu).parent().removeClass("active");
						self.currentMenu = undefined;
					}
				}, 200);
			},
			
			clearHideTimeout: function() {
				if (this.hideTimeout > 0) {
					window.clearTimeout(this.hideTimeout);
				}
				this.hideTimeout = 0;
			},
			
			onMouseOver: function(elem, event) {
				this.clearHideTimeout();
				if (this.currentMenu != undefined) {
					if (this.currentMenu != elem) {
						$(this.currentMenu).parent().removeClass("active");
					}
				}
				if (!$(elem).parent().is(".active")) {
					$(elem).parent().addClass("active");
				}
				this.currentMenu = elem;
			},
			
			onMouseOut: function(elem, event) {
				this.setHideTimeout();
			}
		}
	});
	
	
	$().ready(function(){
		$("#nav").creMenu();
		if (jQuery.jScrollPane && $(".news_list_holder").length) {
			$(".news_list_holder").jScrollPane({
				scrollbarWidth:11,
				arrowSize:11,
				showArrows:true
			});
		}
		
		if ($.browser.msie && $.browser.version < 7) {
			$("img[src$=png], #nav .submenu .c, #nav .submenu .r, #nav .submenu .l").pngfix({
				sizingMethod:"scale"
			});
		}
		
		if ($.browser.msie && $.browser.version < 8) {
			$("hr").each(function(){
				$(this).wrap("<div></div>");
				$(this).parent().addClass("hr");
			});
		}
	});
	
})(jQuery);