﻿
(function($) {

	$.lightTreeview={
		toggle: function(o,speed) {
			exec(o,speed,'toggle');
		},
		close: function(o,speed) {
			exec(o,speed,'hide');
		},
		open: function(o,speed) {
			exec(o,speed,'show');
		}
	};

	function exec(o,s,act) {
		var f=$(o).parent();
		var settings=defaultSettings();
		var ico=f.find('>.'+settings.defaultNodeImg);
		flex(ico,f,{animate:isNaN(s)?100:s},act);
	}

	$.fn.lightTreeview=function(s1) {
		if(typeof(s1)=='undefined') s1 = {};
		var settings=defaultSettings();
		$.extend(settings,s1);

		this.addClass(settings.lightTreeviewClass);//为根节点设置class

		//是否启用连节线
		if(!settings.line) this.addClass(settings.treeviewNoline);

		//是否设置了风格
		if(settings.style) this.addClass(settings.stylePrefix+settings.style);

		//取节点
		var node=$('li:has(ul,ol)',this);

		//设置结尾的分枝样式
		$('li:last-child',this).addClass(settings.lastBranch);

		if(settings.collapse) {	//允许伸缩

			//设置带图标的li的连节线
			node.addClass(settings.normalNode).filter(':last-child').attr('class',settings.lastNode);

			//默认文件图标支持
			if(settings.fileico) $('li:not(:has(ul,ol))>:first-child',this).addClass(settings.fileImg);

			//默认文件夹图标支持
			if(settings.folderico) $('>:first-child',node).addClass(settings.folderOpenImg);

			//在节点中加入默认加减
			node.css('cursor','pointer').prepend("<span class='"+settings.defaultNodeImg+"'></span>").find('>ul,>ol').filter(':hidden').parent().find('>.'+settings.defaultNodeImg).addClass(settings.icoClose);
			$('>.'+settings.defaultNodeImg,node.filter(':last-child')).addClass(settings.icoNone);
			$('>ul,>ol',node.filter(':last-child')).filter(':hidden').parent().addClass(settings.nodeLastClose);
			node.find('>ul,>ol').filter(':hidden').parent().find('>.'+settings.folderOpenImg).addClass(settings.folderCloseImg);

			//绑定标题行的点击事件
			if(settings.nodeEvent)
			//查找父元素下第二个子元素
				node.find('>:nth-child(2)').click(function() {
					$(this).parent().find('>.'+settings.defaultNodeImg).trigger('click');
				});

			//绑定默认事件
			$('>.'+settings.defaultNodeImg,node).click(function() {
				var f=$(this).parent();	//当前节点
				if(settings.unique && $('>ul,>ol',f).is(':hidden')) {	//同级互斥
					var ff=$('>li:has(ul,ol)',f.parent()).not(f);	//排除当前节点的同级节点集合
					flex($('>:first-child',ff),ff,settings,'hide');
				}
				flex($(this),f,settings);
			});
		}
	};

	//缩放操作
	function flex(ico,father,settings,type) {
		var list=$('>ul,>ol',father);
		var ln=ico.filter('.'+settings.icoNone).parent();
		var ic=ico.not('.'+settings.icoNone);
		var fl=$('>.'+settings.folderOpenImg,father);
		if(type=='hide') {
			ln.addClass(settings.nodeLastClose);
			ic.addClass(settings.icoClose);
			fl.addClass(settings.folderCloseImg);
			list.slideUp(settings.animate);//换掉了hide
		}
		else if(type=='show') {
			ln.removeClass(settings.nodeLastClose);
			ic.removeClass(settings.icoClose);
			fl.removeClass(settings.folderCloseImg);
			//list.show(settings.animate);
			list.slideDown(settings.animate);//这里改成了滑动效果
		}
		else {
			ln.toggleClass(settings.nodeLastClose);
			ic.toggleClass(settings.icoClose);
			fl.toggleClass(settings.folderCloseImg);
			if($.browser.version==7)
			    list.toggle(settings.animate);
			else
			    list.slideToggle(settings.animate);//替换原有toggle效果
		}
	}

	//默认参数设置
	var defaultSettings=function() {
		return {
			collapse: true,		//允许折叠
			line: false,		//有连接线
			animate: 200,		//动画速度
			nodeEvent: true,	//响应分枝整行的事件
			unique: false,		//同级节点下是否互斥
			style: '',			//''为默认风格, 设置的风格要与css中相关class一致,风格名称不含前缀，前缀在下面stylePrefix设置
			fileico: false,		//文件图标支持
			folderico: false,	//文件夹图标支持
			
			/* zg new add */
			lightTreeviewClass: 'lightTreeview',  //tree中根ul或ol的class
			treeviewNoline: 'treeview-noline',  //没有连接线的样式
			stylePrefix:'treeview-',    //设置风格的class名称前缀，与css中保持一致
			lastBranch:'branch-last',   //最后一个分支的样式
			normalNode:'node-normal',   //设置带图标的li的连节线
			lastNode:'node-last',   //最后一个节点样式  
			fileImg:'treeview-file',    //图标样式-文件
			folderOpenImg:'treeview-folder',    //图标样式-文件夹打开
			folderCloseImg:'treeview-folder-close', //图标样式-文件夹关闭
			defaultNodeImg:'flex-ico',  //默认节点前的+ -图标 
			icoClose:'flex-close',    //收缩后的图片样式
			icoNone:'flex-none',    //没有子节点的图片
			nodeLastClose:'node-last-close'
		}
	};
})(jQuery);
