/*******************************************************************************
 * 
 * 系统主页
 * 
 * <pre>
 *  
 * 作者：liys
 * 邮箱:5087587@qq.com
 * 日期:2019-2-13-16:14:52
 * 版权：安徽航天信息有限公司
 * </pre>
 * 
 ******************************************************************************/
var mainPlugin=null;
;(function($, window, document, undefined) {
	
	var pluginName = "main";
	var me = null;
	var context=null;
	var ie8 = (/MSIE 8/.test(navigator.userAgent));
	var defaults = {
			key : 'id',
			parentKey : 'parentId',
			childKey : 'children',
			levelKey : 'level',
			nameKey : 'name',
			iconKey : 'icon',
			urlKey : 'defaultUrl',
			isOpenKey : 'isOpen',
			aliasKey : 'alias',
			descKey : 'desc'
		};
	
	function Plugin(element, options) {
		this.settings = $.extend({}, defaults, options);
		this._defaults = defaults;
		this._name = pluginName;
		this.init();
	};
	
	Plugin.prototype = {
		init:function(){
			mainPlugin=this;
			me=this;
			//初始化菜单
			me.initMenu();
			//初始化菜单事件
			me.initMenuEvent();
			//选项卡点击事件
			me.initMenuTabEvent();
			//菜单滚动条事件
			me.initMenuScrollEvent();
		
		},
		//初始化菜单
		initMenu:function(){
		//左侧菜单栏
			$.ajax({
				url : ctx+"/auth!getPermissionMenusOnceAll.do",
				type : 'POST',
				dataType : 'json',
				async : false,
				success : function(menus) {
					g_menus=menus;
					//获取父节点
					var html="";
					$.each(g_menus,function(i,menu){
						if(menu.name.indexOf('左边菜单')>=0){
							//查询子菜单
							var roots = me.findChildMenus(menu.id);
							$('#leftMenu').empty();
							$.each(roots, function(i, root) {
								var iconUrl = root.iconUrl?root.iconUrl : res+'\/images\/project.png';
								var secondHtml="";
								//二级目录
				                 var subRoots = me.findChildMenus(root.id);
								 var t=0;
								 var htm="";
								$.each(subRoots, function(i, subroot) {
									t++;
									var subIconUrl = subroot.iconUrl?subroot.iconUrl : res+'\/images\/cube.png';
										htm+='<li class="hover bdb1">';
										htm+='<a href="javascript:void(0)" class="dblock positionr pt8 pb8 textl pl20 vm" data-url="'+subroot.link+'" data-url="'+subroot.link+'" data-title="'+subroot.name+'" data-menuId="'+subroot.id+'">';
										htm+='<img alt="" src=\"'+subIconUrl+'\" width="20" height="20" class="dlblock vm">';
										htm+='<span class="menu-text dlblock">'+subroot.name+'</span>';
										htm+='</a>';
										htm+='</li>	';
								})      
									
								if(t>0){
									//二级目录
									secondHtml+='<ul class="submenu positionr">';
									secondHtml+=htm;
									//二级目录闭合
									secondHtml+='</ul>';
								}
								var firstHtml='<li class="hover dblock positionr bdb1 positionr">';
								//一级目录
								if(root.link=="#"){
									firstHtml+='<a href="javascript:void(0)" class="dblock pt2 pb2 overFont textc fc f13"  style="padding-left:0;padding-right:0;">';
								}else{
									firstHtml+='<a href="javascript:void(0)" class="dblock pt2 pb2 overFont textc fc f13" data-url="'+root.link+'" data-title="'+root.name+'"  data-menuId="'+root.id+'"  style="padding-left:0;padding-right:0;">';
								}
								
								firstHtml+='<img alt="" src=\"'+iconUrl+'\" width="20" height="20">';
								firstHtml+='<span class="menu-text dblock mt5">'+root.name+'</span>';
								firstHtml+='</a>';
								if(t>0){
									firstHtml+='<b class="arrow"></b>';
								}
							  firstHtml+=secondHtml;
							  //一级目录闭合
							  firstHtml+='</li>';
				                 html +=firstHtml;
							})
							$('#leftMenu').html(html);
						}
						
					}) 
				}
			})
		},
		//查找子节点
		findChildMenus:function(pid){
			var children = [];
			if(!pid) {
				return "";
			}
			$.each(g_menus,function(i,menu){
				if(menu.parentId && menu.parentId == pid) {
					children.push(menu);
				}
			}) 
			return children;
		},
		//绑定菜单事件
		initMenuEvent:function(){
			//左侧菜单栏
			$('#leftMenu li a').on("click", function(e) {
				// 为点击菜单绑定事件
				var self = $(this);
				var opts = self.data();
				$(this).parent().addClass("active");
				$(this).parent().siblings("li").removeClass("active");
				me.addTab(opts);
			});
		},
		//添加选项卡
		addTab:function(options){
			var title=options.title;
			var url=options.url;
			var menuId=options.menuid;
		
			var baseUrl = options.baseUrl ? options.baseUrl : ctx;
			if (url == undefined || $.trim(url).length == 0)
				return false;
			//处理带http
			if(url.indexOf("http:")==0 || url.indexOf("https:")==0){
           	    baseUrl ="";
			}
			
			//判断选项卡是否存在
			if(!me.isTabExists(menuId)){
				//添加选项卡
				var str = '<a href="javascript:void(0);" class="active J_menuTab dblock fl bdrc pt7 pb6 pl15 pr15"  data-toggle="context" data-menuId="'
					+ menuId+ '" data-url="'+ url+ '" data-title="'+ title+ '" >'
					+ title
					+ ' <i class="fa fa-times-circle"></i></a>';
				$('.J_menuTab').removeClass('active');
	
				me.createIframe({
					menuId : menuId,
					url : baseUrl + url
				});
				// 添加选项卡
				$('.J_menuTabs .page-tabs-content').append(str);
				me.scrollToTab($('.J_menuTab.active'));
			}else{
				//选项卡存在
				this.load($('.J_iframe[data-menuid="' + menuId + '"]'))
			}
			
		},
		//重新加载
		load : function(target, url) {
			if (!url)
				url = target.attr('src');
			// 显示loading提示
			var loading = DialogUtil.load(0, {
				shade : 0
			});
			alert($(target).parent().html());
			target.attr('src', url).load(function() {
				// 关闭loading提示
				DialogUtil.close(loading);
//				me.initContextmenu();
			});
			me.showActiveTab();
		},
	
		 //判断选项卡是否存在,并切换到对应的id
		isTabExists:function(menuId){
			var flag = false;
			//循环所有选项卡
			$('.J_menuTab').each(function(){
				if ($(this).data('menuid') == menuId) {
					flag=true;
					//显示对应界面
					if (!$(this).hasClass('active')) {
						$(this).addClass('active').siblings('.J_menuTab').removeClass('active');
						me.scrollToTab(this);
					}
					// 显示tab对应的内容区
					$('.J_mainContent .J_iframe').each(function() {
						if ($(this).data('menuid') == menuId) {
							$(this).show().siblings('.J_iframe').hide();
						}
					});
					return flag;
					
				}
			})
			return flag;
		},
		// 计算元素集合的总宽度
		calSumWidth : function(elements) {
			var width = 0;
			$(elements).each(function() {
				width += $(this).outerWidth(true);
			});
			return width;
		},
		// 滚动到指定选项卡
		scrollToTab : function(element) {
			var marginLeftVal = me.calSumWidth($(element).prevAll()), marginRightVal = me
					.calSumWidth($(element).nextAll());
			// 可视区域非tab宽度
			var tabOuterWidth = me.calSumWidth($(".content-tabs").children()
					.not(".J_menuTabs"));
			// 可视区域tab宽度
			var visibleWidth = $(".content-tabs").outerWidth(true)
					- tabOuterWidth;
			// 实际滚动宽度
			var scrollVal = 0;
			if ($(".page-tabs-content").outerWidth() < visibleWidth) {
				scrollVal = 0;
			} else if (marginRightVal <= (visibleWidth
					- $(element).outerWidth(true) - $(element).next()
					.outerWidth(true))) {
				if ((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) {
					scrollVal = marginLeftVal;
					var tabElement = element;
					while ((scrollVal - $(tabElement).outerWidth()) > ($(
							".page-tabs-content").outerWidth() - visibleWidth)) {
						scrollVal -= $(tabElement).prev().outerWidth();
						tabElement = $(tabElement).prev();
					}
				}
			} else if (marginLeftVal > (visibleWidth
					- $(element).outerWidth(true) - $(element).prev()
					.outerWidth(true))) {
				scrollVal = marginLeftVal - $(element).prev().outerWidth(true);
			}
			$('.page-tabs-content').animate({
				marginLeft : 0 - scrollVal + 'px'
			}, "fast");
			//关闭选项卡右键菜单
			me.closedTabRightEvent();
		},
		//创建iframe
		createIframe:function(opts){
			var height = ie8 ? me.flexFrameHeight() : '100%';
			// 添加选项卡对应的iframe
			var str1 = '<iframe class="J_iframe"   name="iframe_' + opts.menuId
					+ '" width="100%" height="' + height + '" src="' + opts.url
					+ '" frameborder="0" data-menuId="' + opts.menuId
					+ '" seamless></iframe>';
			$('.J_mainContent').find('iframe.J_iframe').hide();
			$('.J_mainContent').append(str1);

			// 显示loading提示
			var loading = DialogUtil.load(0, {
				shade : 0
			});
			$('.J_mainContent iframe:visible').load(function() {
				// iframe加载完成后隐藏loading提示
				DialogUtil.close(loading);
//				me.initContextmenu();
			});
		},
		load: function(target, url) {
			if (!url)
				url = target.attr('src');
			// 显示loading提示
			var loading = DialogUtil.load(0, {
				shade : 0
			});
			target.attr('src', url).load(function() {
				// 关闭loading提示
				DialogUtil.close(loading);
//				me.initContextmenu();
			});
		},
		//鼠标事件
		initMenuTabEvent:function(){
			// 为点击菜单绑定事件
			$(document).on("click",'.J_menuTab', function(e) {
				var self = $(this);
				var opts = self.data();
				$(this).addClass("active").siblings("a").removeClass("active");
				me.addTab(opts);
			});
			//阻止默认事件
			$(document).on("contextmenu",'.J_menuTab', function() {
				   return false;
			});
			//选项卡右击事件
			$(document).on("mousedown",'.J_menuTab', function(e) {
		     if (3 == e.which) {
		    	 //记忆选中选项卡
		    	 context=this;
		    	 var menuId=$(this).data("menuid");
		    		me.isTabExists(menuId);
		    		var  left=$(this).offset().left+40;
		    		$('#context-menu').css("left",left);
		    		$('#context-menu').show();
	            } 
			});
			//绑定左滑 右滑事件
			// 左移按扭
			$('.J_tabLeft').on('click', function() {
				me.scrollTabLeft();
			});

			// 右移按扭
			$('.J_tabRight').on('click', function() {
				me.scrollTabRight();
			});
			//删除事件冒泡
			$(document).on('click', '.J_menuTab i', function() {
				   return false;
			});
			// 关闭tab
			$('.J_menuTabs').on('click', '.J_menuTab i', me.closeTab);
			// 关闭其他tab
			$('.J_tabCloseOther').on('click', me.closeOtherTabs);
			//
			$('.J_tabShowActive').on('click', me.showActiveTab);
			// 关闭全部
			$('.J_tabCloseAll').on('click', me.closeAllTabs);
			
			//监听选项卡右键出发事件
			$('.dropdown-menu li a').on('click', me.tabRinghtClickEvent);
			
		},
		//选项卡右键触发事件
		tabRinghtClickEvent:function(){
			 var action =$(this).data("action");
			 var self = $(context);
			 switch (action) {
				case "tab-refresh":// 刷新
					me.refreshTab(self);
					break;
				case "tab-close":// 关闭
					me.closeCurTab(self);
					break;
				case "tab-close-all":// 所有
					me.closeAllTabs();
					break;
				case "tab-close-other":
					me.closeOtherTabs();
					break;
				case "tab-close-right":
					me.closeRightLeftTabs(self, true);
					break;
				case "tab-close-left":
					me.closeRightLeftTabs(self, false);
					break;
				case "tab-exit":
					break;
				}
			//关闭右键 
			 me.closedTabRightEvent();
			 
		},
		
		//菜单滚动条事件
		initMenuScrollEvent:function(){
			$(window).load(function(){
				$(".menuScroll").mCustomScrollbar({
					scrollInertia:50
				});
			});
			
			//hover事件
			$(".menuScroll").hover(function(){
				$(this).addClass("plussScroll");
			},function(){
				$(this).removeClass("plussScroll");
			})
			
		},
		closeRightLeftTabs : function(self, flag) {
			if (!$(self).hasClass('active'))
				return;
			var $this = $(self), currentWidth = $this.width(), tabs;
			if (flag)// 右边
				tabs = $this.nextAll('.J_menuTab');
			else
				tabs = $this.prevAll('.J_menuTab');
			// 当前元素后面有同辈元素，使后面的所有元素删除
			if (tabs.size() > 0) {
				tabs.each(function() {
					if ($(this).data('menuid') == 'home')
						return false;
					$(this).remove();
				});
				var marginLeftVal = parseInt($('.page-tabs-content').css(
						'margin-left'));
				if (marginLeftVal < 0) {
					$('.page-tabs-content').animate({
						marginLeft : (marginLeftVal + currentWidth) + 'px'
					}, "fast");
				}
				// 移除tab对应的内容区
				$('.J_mainContent .J_iframe').each(function() {
					var $that = $(this), curId = $that.data('menuid');
					if (curId == 'home')
						return true;
					tabs.each(function() {
						if (curId == $(this).data('menuid')) {
							$that.remove();
							return false;
						}
					});
				});
			}
		},
		// 刷新iframe
		refreshTab : function(self) {
			
			var tab;
			if (self)
				tab = $(self);
			else {
				tab = this.getActivemenuTab();
			}
			me.load($('.J_iframe[data-menuid="' + tab.data('menuid') + '"]'));
		},
		closeCurTab : function(self) {
			var $this = $(self), closeTabId = $this.data('menuid'), currentWidth = $this
					.width();
			if (closeTabId == 'home')
				return;
		
			// 当前元素处于活动状态
			if ($this.hasClass('active')) {

				// 当前元素后面有同辈元素，使后面的一个元素处于活动状态
				if ($this.next('.J_menuTab').size()) {

					var activeId = $this.next('.J_menuTab:eq(0)').data('menuid');
					$this.next('.J_menuTab:eq(0)').addClass('active');

					$('.J_mainContent .J_iframe').each(function() {
						if ($(this).data('menuid') == activeId) {
							$(this).show().siblings('.J_iframe').hide();
							return false;
						}
					});

					var marginLeftVal = parseInt($('.page-tabs-content').css(
							'margin-left'));
					if (marginLeftVal < 0) {
						$('.page-tabs-content').animate({
							marginLeft : (marginLeftVal + currentWidth) + 'px'
						}, "fast");
					}

					// 移除当前选项卡
					$this.remove();

					// 移除tab对应的内容区
					$('.J_mainContent .J_iframe').each(function() {
						if ($(this).data('menuid') == closeTabId) {
							$(this).remove();
							return false;
						}
					});
				}

				// 当前元素后面没有同辈元素，使当前元素的上一个元素处于活动状态
				if ($this.prev('.J_menuTab').size()) {
					var activeId = $this.prev('.J_menuTab:last').data('menuid');
					$this.prev('.J_menuTab:last').addClass('active');
					$('.J_mainContent .J_iframe').each(function() {
						if ($(this).data('menuid') == activeId) {
							$(this).show().siblings('.J_iframe').hide();
							return false;
						}
					});

					// 移除当前选项卡
					$this.remove();

					// 移除tab对应的内容区
					$('.J_mainContent .J_iframe').each(function() {
						if ($(this).data('menuid') == closeTabId) {
							$(this).remove();
							return false;
						}
					});
				}
			}
			// 当前元素不处于活动状态
			else {
				// 移除当前选项卡
				$this.remove();
				// 移除相应tab对应的内容区
				$('.J_mainContent .J_iframe').each(function() {
					if ($(this).data('menuid') == closeTabId) {
						$(this).remove();
						return false;
					}
				});
				// 激活当前
				me.scrollToTab($('.J_menuTab.active'));
			}
		},
		// 关闭选项卡菜单
		closeTab : function() {
			me.closeCurTab($(this).parents('.J_menuTab'));
		},
		// 关闭其他选项卡
		closeOtherTabs : function() {
			$('.page-tabs-content').children("[data-menuid]").not(":first").not(
					".active").each(function() {
				$('.J_iframe[data-menuid="' + $(this).data('menuid') + '"]').remove();
				$(this).remove();
			});
			$('.page-tabs-content').css("margin-left", "0");
		},
		// 滚动到已激活的选项卡
		showActiveTab : function() {
			me.scrollToTab($('.J_menuTab.active'));
		},
		//关闭所有选项卡
		closeAllTabs : function() {
			$('.page-tabs-content').children("[data-menuid]").not(":first").each(
					function() {
						$('.J_iframe[data-menuid="' + $(this).data('menuid') + '"]')
								.remove();
						$(this).remove();
					});
			$('.page-tabs-content').children("[data-menuid]:first").each(
					function() {
						$('.J_iframe[data-menuid="' + $(this).data('menuid') + '"]')
								.show();
						$(this).addClass("active");
					});
			$('.page-tabs-content').css("margin-left", "0");
		},
		/**
		 * 查看右侧隐藏的选项卡
		 */
		scrollTabLeft : function() {
			var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css(
					'margin-left')));
			// 可视区域非tab宽度
			var tabOuterWidth = me.calSumWidth($(".content-tabs").children()
					.not(".J_menuTabs"));
			// 可视区域tab宽度
			var visibleWidth = $(".content-tabs").outerWidth(true)
					- tabOuterWidth;
			// 实际滚动宽度
			var scrollVal = 0;
			if ($(".page-tabs-content").width() < visibleWidth) {
				return false;
			} else {
				var tabElement = $(".J_menuTab:first");
				var offsetVal = 0;
				while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) {// 找到离当前tab最近的元素
					offsetVal += $(tabElement).outerWidth(true);
					tabElement = $(tabElement).next();
				}
				offsetVal = 0;
				if (me.calSumWidth($(tabElement).prevAll()) > visibleWidth) {
					while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth)
							&& tabElement.length > 0) {
						offsetVal += $(tabElement).outerWidth(true);
						tabElement = $(tabElement).prev();
					}
					scrollVal = me.calSumWidth($(tabElement).prevAll());
				}
			}
			$('.page-tabs-content').animate({
				marginLeft : 0 - scrollVal + 'px'
			}, "fast");
		},
		// 查看右侧隐藏的选项卡
		scrollTabRight : function() {
			var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css(
					'margin-left')));
			// 可视区域非tab宽度
			var tabOuterWidth = me.calSumWidth($(".content-tabs").children()
					.not(".J_menuTabs"));
			// 可视区域tab宽度
			var visibleWidth = $(".content-tabs").outerWidth(true)
					- tabOuterWidth;
			// 实际滚动宽度
			var scrollVal = 0;
			if ($(".page-tabs-content").width() < visibleWidth) {
				return false;
			} else {
				var tabElement = $(".J_menuTab:first");
				var offsetVal = 0;
				while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) {// 找到离当前tab最近的元素
					offsetVal += $(tabElement).outerWidth(true);
					tabElement = $(tabElement).next();
				}
				offsetVal = 0;
				while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth)
						&& tabElement.length > 0) {
					offsetVal += $(tabElement).outerWidth(true);
					tabElement = $(tabElement).next();
				}
				scrollVal = me.calSumWidth($(tabElement).prevAll());
				if (scrollVal > 0) {
					$('.page-tabs-content').animate({
						marginLeft : 0 - scrollVal + 'px'
					}, "fast");
				}
			}
		},
		//关闭右键菜单
		closedTabRightEvent:function(){
			$('#context-menu').hide();
		}	
	};
	
	
	$.fn[pluginName] = function(options) {
		return this.each(function() {
			if (!$.data(this, "plugin_" + pluginName)) {
						$.data(this, "plugin_" + pluginName, new Plugin(this,
								options));
					}
				});
	};
	
})(jQuery, window, document);

//程序入口
$(function(){
	$("body").main();
})
