﻿/*
ebm ui包整合jQueryUI一些常用的控件


Depends
	jquery.js         	//jQuery1.3.2包
	jquery-ui-1.7.2.custom.min.js  //jQuery ui包
	jquery.contextMenu.js //右键菜单包
	util.js         	//基础包
	
	//树控件3个核心包
<script type="text/javascript" src="../js/jquery.cookie.js"></script>
<script type="text/javascript" src="../js/jquery.treeview.js"></script>
<script type="text/javascript" src="../js/jquery.treeview.editable.js"></script>
	 
*/
;(function($){
	var ui = {
		ui:{
			//编译入口
			compile:function(par){
					if(!par)par=$("body");
					//tabs	
					$(".ebm_tabs",par).each(function(i,n){
						$.ebm.ui.tabs(n);
					});
					//radio	
					$(".ebm_radio",par).each(function(i,n){
						alert("22");
						$.ebm.ui.radio(n);
					});	
					//file	
					$(".ebm_file",par).each(function(i,n){
						$.ebm.ui.file(n);
					});	
					//editTable
					$(".ebm_editTable",par).each(function(i,n){
						$.ebm.ui.editTable(n);
					});
					
					//edit
					$(".ebm_edit",par).each(function(i,n){
						var $n = $(n),o = $n.attr("option");
						if(o)o = $.ebm.util.jsonToObj(o);
						else o = {};
						o.id = $n.attr("id");
						var parm = {
							id:'',
							tools:'full',
							upLinkUrl:ACT.uf,
							upLinkExt:'txt,doc,docx,rar,pdf',
							upImgUrl:ACT.uf,
							upImgExt:'jpg,jpeg,gif,png',
							upFlashUrl:ACT.uf,
							upFlashExt:'swf',									
							upMediaUrl:ACT.uf,
							upMediaExt:'avi'
						}
						$.extend( parm, o );
						$.ebm.ui.edit( parm );	
					})
					
			},
			/*
				tabs标签页
					selected:     默认显示的标签页 从0开始
					event：       切换标签页事件 默认为点击切换click
					tabsselect:   标签页切换时执行的事件
					fx:{}         标签页内容切换效果 opacity:''表示逐渐淡出淡入
					sortable:     标签头是否可以排序拖动boolean
					collapsible:  双击标签头是否显示隐藏标签内容
				  ajaxOptions:{}控制是否异步加载标签页内容
				  spinner:      标签页内容加载时显示的提示内容
				  defaultSize:  标签默认大小
				  dir:          标签走向 level 横向 ,vertical竖向
				  
				e.g:
				<div id="testTabs" class="ebm_tabs" style="font-size: 62.5%;width:50%"
				option = "{collapsible:true,ajaxOptions:{async:'true'},spinner:'页面加载中...',
					fx:{opacity:''},tabsselect:aaa,sortable:true,selected:1,event:'click'   } ">
				
				
				依据下列样式设定
				<div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs">
				   <ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
				     <li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active"><a href="#tabs-1">Nunc tincidunt</a></li>
				     <li class="ui-state-default ui-corner-top"><a href="#tabs-2">Proin dolor</a></li>..
				   <div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="tabs-1">
				      <p>Tab one content goes here.</p>
				   </div>
				    ...
				</div>
			
			*/
			// o为html对象
			tabs:function(o){
				var a = $.extend({
					selected:'',
					sortable:false,
					tabsselect:function(event,ui){},
					tabsClass:'',
					axis:'x',
					corner:'',//圆角 option="{corner:'round tl,tr 10px'}"
					defaultSize:'100',//水平(level)tabs为标签头width,竖型(vertical)tabs为标签头height
					dir:'level'
				},$.ui.tabs.defaults);
				var fn = [];
				var att = $.ebm.util.jsonToObj($(o).attr("option"));
				for(var i in a){
					if(att && att[i] != undefined){
						if(typeof a[i] == 'function'){
							fn.push({ name:i, value:att[i] })	
						}else{
							a[i] = att[i];			
						}
					}	
				}
				if(a.tabsClass){
					$(o).addClass( a.tabsClass );	
				}
				
   			var t = $(o).tabs(a);
   			$(o).data("selfJsObj",t);
   			if(a.tabsClass){
   				$(".ui-tabs-nav, .ui-tabs-nav > *") 
			 			.removeClass("ui-corner-all ui-corner-top") 
			  		.addClass("ui-corner-bottom");
			  	$(o).removeClass("ui-widget-content").children("ul").removeClass("ui-widget-header");
			  	$(".ui-tabs > *").removeClass("ui-tabs-selected");	
			  }
				$(o).children('.ui-tabs-nav').children("li").each(function(i,v){
					if(a.dir == "level"){
						$(v).children().width(a.defaultSize+"px");		
					}else if(a.dir == "vertical"){
						$(v).children().height(a.defaultSize);			
					}
					
				})
   			$.each(fn, function(i, v){
   				$(o).bind(v['name'], function(event, ui) {
   					try{
   						v['value'].call(v['value'],event,ui);
   					}catch(e){
   						alert(e.message);
   					}
	   			})	
   			})
   			if(a.sortable){
   				$(o).find(".ui-tabs-nav").sortable({axis:a.axis});	
   			}
   			if(a.corner){
   				$(o).find(".ui-tabs-nav li").each(function(i,v){
   					$(v).corner(a.corner);	
   				})
   			} 						
			},
			/*
				dialog弹出层
					  autoOpen:true,   //是否默认打开
						buttons:{"close":function(){ $(this).dialog("close")}},   //底部显示按钮
						closeOnEscape:true,    //按esc键关闭
						dialogClass:'alert',   //窗口样式
						draggable:true,         //是否允许拖动
						height:200,             //窗口高度
						width:300,             //窗口宽度
						hide:'fold',            //隐藏效果 效果'blind', 'bounce', 'clip', 'drop', 'explode', 'fold', 'highlight', 'puff', 'pulsate', 'scale', 'shake', 'size', 'slide', 'transfer'
						show:'explode',         //显示效果
						maxHeight:500,				    //窗口最大高度	
						maxWidth:600,       	     //窗口最大宽度
						minHeight:200,				    //窗口最小高度	    默认150
						minWidth:300,       	     //窗口最小宽度     默认150
						modal:true,                //是否开启遮罩层
						position:[100,200],         //默认显示的位置 
						resizable:true,             //是否允许改变大小
						stack:false,                 //是否允许堆叠
						title:'窗口标题1',           //窗口标题
						zIndex:1001,                    //窗口层叠等级  默认1000
						beforeclose:function(){window.status = "close"},    //关闭前事件
						open:function(e, ui){window.status = "open"},       //打开事件
						focus:function(e, ui){},     //获得焦点事件
						dragStart:function(e, ui){window.status = 'dragStart'}, //开始拖动
						drag:function(e, ui){window.status = 'drag'},  //拖动事件
						dragStop:function(e, ui){window.status = 'dragStop'},  //拖动停止事件
						resizeStart:function(e, ui){window.status = 'resizeStart'}, //开始改变大小
						resize:function(e, ui){window.status = 'resize'},  //改变大小
						resizeStop:function(e, ui){window.status = 'resizeStop'},  //改变大小停止事件          
						close:function(e, ui){window.status = 'close'}  //关闭窗口事件 
				e.g:
					<div id="dialog" class="ebm_dialog" option="{title:'我是默认窗体',hide:'explode'}" style="font-size: 62.5%;">
						<span>显示的对话窗口</span>
					</div>
				
				依据下列样式设定  标题头样式图片为	ui-widget-header里设定
				<div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-draggable ui-resizable">
				   <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
				      <span id="ui-dialog-title-dialog" class="ui-dialog-title">Dialog title</span>
				      <a class="ui-dialog-titlebar-close ui-corner-all" href="#"><span class="ui-icon ui-icon-closethick">close</span></a>
				   </div>
				   <div style="height: 200px; min-height: 109px; width: auto;" class="ui-dialog-content ui-widget-content" id="dialog">
				      <p>Dialog content goes here.</p>
				   </div>
				</div>
				
			*/
			// s保存位置默认temp_dialog
			dialog:function($o, s){
				if(!s){s = "ui_dialog_temp"}
				if($.ebm.util.temp(s)){
					$.ebm.util.temp(s).dialog("open");
					return;
				}
				var a = $.extend( {} ,$.ui.dialog.defaults );
				a.modal = true;//默认开启遮罩层
				$.extend(a,$.ebm.util.jsonToObj($o.attr("option")));
				var fn = [];
				$.each(a,function(i,v){
					if( typeof v == "function" ){
						fn.push({ name:i, value:v });
					}
				})
				var dialog = $o.dialog(a);	
				$.ebm.dataCompile.compile();	
				$.ebm.ui.compile();	
				dialog.data("data",{ele:$o});
				dialog.bind("dialogclose",function(e,ui){
					$(this).data("data").ele.remove();
					$.ebm.util.temp(s,null);
				})
				$o.parent().find(".ui-dialog-titlebar-close").bind("click.dialog",function(){
					//$o.dialog("close").dialog("destroy");
					//$.ebm.util.temp(s,null);	
				})
				if(!a.dragStart)$o.dialog("option",'dragStart',function(){});//每次拖动时防止层高度改变
				$o.data("selfJsObj",dialog);
				$.each(fn, function(i, v){
   				$o.bind(v['name'], function(event) {
	   				v['value'](event);
	   			})	
 				})
				$.ebm.util.temp(s, dialog);
				//($).ebm.dataCompile.compile();	
   			return dialog;
			},
			/*
				根据页面url和option参数弹出层
				
				e.g:
					$.ebm.ui.showDialog("ui.dialogShow.html",
						{dialogClass:'alert1',width:200,height:300,title:'窗口1111',show:'explode'});	
			*/
			showDialog:function(url,option,s){
				var page = $.get(url);
				$.ajax.text = page.responseText;
				var d = document.createElement("div")
						$d = $(d);
				$d.attr("option",$.ebm.util.objToJson(option))
					.html(page.responseText);
				//($).ebm.dataCompile.compile();	
				return this.dialog($d,s);	
			},
			//关闭窗体
			closeDialog:function(s){
				if(!s)s = "ui_dialog_temp";
				var t = ($).ebm.util.temp(s);
				if(t)t.dialog("close").dialog("destory");	
			},
			contextMenuByParm:function(arr,parm){
				if(!parm.id)return;
				if(!parm.theme)parm.theme='vista';
				if(!parm.key)parm.key='right';
				/*
					将传入的对象数组 [{name:xxx,onclick:xxx...},{...}]转化为 [{xxx:{name:xxx,...}},{xxx:{}}..]
				*/
				var d = $.ebm.util.toKeyObj(arr,'name');
				var newArr=[];
				for(var a in d){
					var o={};
					o[a] = d[a];
					newArr.push(o);	
				}
				$('#'+parm.id).contextMenu(newArr,parm);	
			},
			/*
			显示提示标签
			  content:提示内容,
			  time:提示显示时间 默认1500毫秒,
			  save:保存位置 默认ui_tip_temp,
			  f:是否不自动关闭
			*/
			showTip:function(content,time,save,f){
				if(!save)save = "ui_tip_temp";
				if($.ebm.util.temp(save)){
					var $s = $.ebm.util.temp(save);
					$s.children(".ebm-ui-tip-title").html(content)
					if(!f){
						setTimeout(function(){
							$s.dialog("close").dialog("destory");
							$.ebm.util.temp(save,null);		
						},time?time:1500)	
					}
					return;	
				}
				var tip = document.createElement("div"),
						$tip = $(tip),
						loadImg = document.createElement("div"),
						$loadImg = $(loadImg),
						t = document.createElement("div"),
						$t = $(t);
				$tip.addClass("ebm-ui-tip-content").append($loadImg).append($t).appendTo("body");
				$loadImg.addClass("loading");
				$t.addClass("ebm-ui-tip-title").html(content);
				//alert( $tip == $tip.parent().parent().end().end() )
				$tip.dialog({dialogClass:'ebm-ui-tip-bule',modal:true,resizable:false}).removeClass("ui-widget-content ui-dialog-content")
						.parent().removeClass("ui-widget-content ui-corner-all ui-draggable ui-resizable ui-widget ui-dialog")
						.removeAttr("style").css({display:'block',position:'absolute',zIndex:'9999'})
						.children(".ui-dialog-titlebar").remove().end().end()
						.width( $t.width()+50 ).css({minHeight:'26px'});
				$(".ui-widget-overlay").width( $(document).width() ).css({background:'#EDEDED'});
				var t = $(document).height()/2 - 20,
						l = $(document).width()/2 - $t.width()/2 - 30;
				$tip.parent().css({top:t,left:l});
				($).ebm.util.temp(save,$tip);		
				if(!f){
					setTimeout(function(){
						$tip.dialog("close").dialog("destory");
						$.ebm.util.temp(save,null);		
					},time?time:1500)	
				}
			},
			/*
				关闭提示标签
				 save:标签保存位置
			*/
			closeTip:function(save){
				if(!save)save = "ui_tip_temp";
				var t = ($).ebm.util.temp(save);
				if(t){
					t.dialog("close").dialog("destory");
					($).ebm.util.temp(save,null);		
				}	
			},
			/*
				树控件
			*/
			tree:function(treeParm){
				var parm = {
					id:'',                        //树容器ID
					type:'edit',									  //树类型， edit:可编辑树,view:只读树
					dsFunc:function(){return null;},//树ds源
					async:false,                    //是否异步
					callback:{}						          //回调函数
				}
				$.extend(parm,treeParm);
				var treeObj = '';
				if(parm.id){
					if(parm.type == 'edit'){
						treeObj = $('#'+parm.id).treeEdit(parm);	
					}else if(parm.type == 'view'){
						treeObj = $('#'+parm.id).treeView(parm);	
					}	
				}
				return treeObj;
			},
			/*
				radio单选框控件
			*/
			radio:function(n){
				var cfg = $.ebm.util.jsonToObj($(n).attr("option"));
				if(cfg){
					cfg.ele = $(n);
					$.radio.create(cfg);
				}else{
					this.showTip("缺少radio配置信息",3000);	
				}
			},
			/*
				file文件上传域 
			*/
			file:function(cfg){
				
			},
			file_async:function($f){
				//file	
				var f = $(".ebm_file",$f);		
				if(f.length > 0){
					
					f.each(function(i,n){
						if( $(n).attr("id")==undefined )return true;
						$.ebm.util.temp("upload_file",0);//重置上传标识 upload_file: 1:无上传文件 2:上传成功 3:上传失败
						//两个文件同时上传缺少同步操作
						$.file.create( $(n) );
						
						//console.info(22);
						
					})
					
					
					
				}else{
					$.ebm.util.temp("upload_file",1);
				}				
				/*
				if(f.length > 0){
					var ids = [],fileConfig = [],rename = [],size = [],status = [];
					f.each(function(i,n){
						var o = $.ebm.util.jsonToObj( $(n).attr("option") );
							if(o && o.async == 1 ){
							}else{
								if( $(n).attr("id")==undefined )return;
								ids.push( $(n).attr("id") );
								if( o && o.fileConfig ){
									fileConfig.push( o.fileConfig );	
								}else{
									fileConfig.push('*');	
								}
								if( o && o.rename ){
									rename.push( o.rename );	
								}else{
									rename.push('*');	
								}
								if( o && o.size ){
									size.push( o.size );	
								}else{
									size.push('*');	
								}
								if(o && o.fk && $("#"+o.fk) ){
									status.push(2);	
								}else{
									status.push(1);	
								}	
							}	
					});	
					var c = {
						id:ids.join("|"),
						fileConfig:fileConfig.join("|"),
						rename:rename.join("|"),
						size:size.join("|"),
						status:status.join("|")	
					}
					$.file.create(c);
				}else{
					$.ebm.util.temp("upload_file",1);
				}
				*/
			},
			_file_async:function($f){
				//file	
				var f = $(".ebm_file",$f);
				$.ebm.util.temp("upload_file",0);//重置上传标识 upload_file: 1:无上传文件 2:上传成功 3:上传失败
				if(f.length > 0){
					var ids = [],fileConfig = [],rename = [],size = [],status = [];
					f.each(function(i,n){
						var o = $.ebm.util.jsonToObj( $(n).attr("option") );
							if(o && o.async == 1 ){
							}else{
								if( $(n).attr("id")==undefined )return;
								ids.push( $(n).attr("id") );
								if( o && o.fileConfig ){
									fileConfig.push( o.fileConfig );	
								}else{
									fileConfig.push('*');	
								}
								if( o && o.rename ){
									rename.push( o.rename );	
								}else{
									rename.push('*');	
								}
								if( o && o.size ){
									size.push( o.size );	
								}else{
									size.push('*');	
								}
								if(o && o.fk && $("#"+o.fk) ){
									status.push(2);	
								}else{
									status.push(1);	
								}	
							}	
					});	
					var c = {
						id:ids.join("|"),
						fileConfig:fileConfig.join("|"),
						rename:rename.join("|"),
						size:size.join("|"),
						status:status.join("|")	
					}
					$.file._create(c);
				}else{
					$.ebm.util.temp("upload_file",1);
				}
				
			},
			/*
				编辑器
			*/
			edit:function(editParm){
				var parm = {
					id:'',
					tools:'full',                       
					upImgUrl:'/cms/admin/Upload.action"',
					upImgExt:'jpg,jpeg,gif,png',
					upFlashUrl:'imgurl',
					upFlashExt:'swf',									
					upMediaUrl:'imgurl',
					upMediaExt:'avi'
				}
				$.extend(parm,editParm);
				if(!parm.id)return;
				var edit = $("#"+parm.id).xheditor(true,parm);
				$("#"+parm.id).data("selfJsObj",edit);
			},
			
			/*
				debugAlert 调试窗口
				
			*/
			debugAlert:function(){
				var content = '',d,dd;
				$.each(arguments,function(i,v){
					content += v+"\n";	
				})
				if($("#debugAlertDialogContent").get().length > 0){
					$("#debugAlertDialogContent").val( $("#debugAlertDialogContent").val()+content );	
				}
				if($('#debugAlert').get().length == 0){
					d = document.createElement("div");
					d.id = "debugAlert";
					d.style.cssText = "width:30px;height:30px;z-Index:9999;cursor:pointer;position:absolute";
					dd = document.createElement("div");
					dd.id = "debugAlertDialog";
					dContent = document.createElement("textarea");
					dContent.style.cssText = "width:560;height:260";
					dContent.id = "debugAlertDialogContent";
					$(dContent).appendTo($(dd));
					$(dContent).val(content);
					$(dd).appendTo("body");	
					$(dd).dialog({autoOpen:false,bgiframe:true,width:630,height:310,resizable:true,draggable:true,zIndex:999,title:'调试'})
				}else{
					d = $('#debugAlert').get()[0];
				}
				
				d.ondblclick=function(){
					$("#debugAlertDialog").dialog("option",'width',630);
					$("#debugAlertDialog").dialog("option",'height',310);
					$("#debugAlertDialog").dialog("option",'buttons',{'清空':function(){($).ebm.ui.clearDebug()}});
					$("#debugAlertDialog").dialog("option",'dragStart',function(){
						//每次拖动时防止层高度改变
						this.height = this.height;	
					});
					$("#debugAlertDialog").dialog("open");
					
				}
				$(d).appendTo("body");
				d.style.top = d.style.top?d.style.top:10;
				d.style.left = document.body.clientWidth-50; 
				window.onscroll=function(){
					$("#debugAlert").get()[0].style.top=document.body.scrollTop+10;
				}
				
				$.ebm.util.temp('debugAlertInterval',setInterval(function(){
					$("#debugAlert").effect('highlight','',5000);	
				},5000));	
			},
			clearDebug:function(){
				$("#debugAlertDialogContent").remove();
				$("#debugAlertDialog").remove();
				$("#debugAlert").remove();
				clearInterval($.ebm.util.temp('debugAlertInterval'));	
			},
			//销毁弹出窗体
			_destroyDialog:function(d, s){
				if(d){
					d.dialog('close');
					if(!s)s = "temp_dialog";
					setTimeout(function(){
						d.dialog('destroy');	
						$.ebm.util.temp(s, null);
					},100)
				}
			}
				
		}	
		
	}
	
	if($.ebm === undefined){
		$.extend({ebm: ui});
		ui = null;
	}else{
		$.extend($.ebm, ui);	
		ui = null;
	}
	
})(jQuery);

