/**
 * 自定义工具库
 **/
(function($){
	/**
	 * 为字符串添加参数
	 * @author yangwenhai
	 * example
	 * $.fillParam('fill param{0}','one');
	 */
	$.fillParam=function(){
			var pl=arguments.length;
			if(pl==0){
				return '';
			}
			if(pl==1){
				return arguments[0];
			}
			var str=arguments[0]
			for(var i=0;i<pl;i++){
				str=str.replace('{'+i+'}',arguments[i+1]);
			}
			return str;
	};
	/**
	 * @author zyx
	 * 
	 * eventType  触发方式:click 或 hover,默认为hover
	 * content    显示的内容
	 * popId      弹出层的Id，默认为bxqPopDiv
	 * autoClose  自动关闭标识，触发方式为click时有效
	 * offsetTop  偏移位置 top
	 * offsetLeft 偏移位置 left
	 */
	$.fn.bxqPop = function(options) {
		var opts = $.extend({
		  width: 200,
		  height: 100,
		  eventType:'hover',
		  content:'',
		  popId:'bxqPopDiv',
		  autoClose:true,
		  offsetTop:20,
		  offsetLeft:10,
		  popClass:'bxqPopBox'
		},options||{});
		
		opts.popId = '#'+opts.popId;
		
		if($(opts.popId).size() == 0){
			$('<div id="' + opts.popId.slice(1) + '"></div>').appendTo('body')
				.css({
					position:'absolute',
					width:opts.width + 'px',
					height:opts.height + 'px',
					display:'none'
				}).addClass(opts.popClass);
			
		}
		$(opts.popId).bind('mouseover',function(){
			$(opts.popId).show();
			return false;
		});
		if(opts.eventType == 'hover'){
			$(this).bind('mouseover',function(e){
				e.preventDefault();
				setContent(e);
				return false;
			});
			$(this).bind('mousemove',function(e){
				setPosition(e);
				return false;
			});
			$(this).bind('mouseout',function(){
				$(opts.popId).hide().empty();
			});
		}
		if(opts.eventType == 'click'){
			$(this).bind('click',function(e){
				setContent(e);
				setPosition(e);
				$(document).bind('click',function(e){
					if(opts.autoClose){
						closePopDiv();
					}
				});
				return false;
			});
		}
		var closePopDiv = function(){
			$(opts.popId).hide().empty();
		}
		var setContent = function(e){
			$(opts.popId).html(opts.content);
		}
		var setPosition = function(e){
			var posLeft = e.pageX + opts.offsetLeft;
			var posTop = e.pageY + opts.offsetTop;
			
			$(opts.popId).css({
				left:posLeft,
				top:posTop
			}).bgIframe().show();
		}
		if ($.fn.bgIframe == undefined) {
			$.fn.bgIframe = function() {return this; };
		}; 
	};
})(jQuery);
/**
 * BXQ common js framework
 */
var Geometry = {};
/**
 * 窗口相距屏幕左侧的距离和屏幕上部的距离
 */
if (window.screenLeft) { // IE and others
    Geometry.getWindowX = function( ) { return window.screenLeft; };
    Geometry.getWindowY = function( ) { return window.screenTop; };
}

else if (window.screenX) { // Firefox and others
    Geometry.getWindowX = function( ) { return window.screenX; };
    Geometry.getWindowY = function( ) { return window.screenY; };
}
/**
 * 获得窗口的分辨率宽度
 */
Geometry.getWindowWidth=function(){
	return window.screen.availWidth;
}
/**
 * 
 */
if (window.innerWidth) { // All browsers but IE
	
    Geometry.getViewportWidth = function( ) { return window.innerWidth; };
    Geometry.getViewportHeight = function( ) { return window.innerHeight; };
    Geometry.getVerticalScroll = function( ) { return window.pageYOffset; };
    Geometry.getHorizontalScroll = function( ) { return window.pageXOffset; };
    Geometry.setHorizontalScroll = function(scroll ) {window.scroll(scroll,0); };
    Geometry.setVerticalScroll = function( scroll) { window.scroll(0,scroll); };
}
else if (document.documentElement && document.documentElement.clientWidth) {
    // These functions are for IE 6 when there is a DOCTYPE
    Geometry.getViewportWidth =
        function( ) { return document.documentElement.clientWidth; };
    Geometry.getViewportHeight =
        function( ) { return document.documentElement.clientHeight; };
    Geometry.getHorizontalScroll =
        function( ) { return document.documentElement.scrollLeft; };
    Geometry.getVerticalScroll =
        function( ) { return document.documentElement.scrollTop; };
    Geometry.setHorizontalScroll =
            function(scroll ) { document.documentElement.scrollLeft=scroll; };
    Geometry.setVerticalScroll =
            function( scroll) { document.documentElement.scrollTop=scroll; };
}
else if (document.body&&document.body.clientWidth) {
    // These are for IE4, IE5, and IE6 without a DOCTYPE
    Geometry.getViewportWidth =
        function( ) { return document.body.clientWidth; };
    Geometry.getViewportHeight =
        function( ) { return document.body.clientHeight; };
    Geometry.getHorizontalScroll =
        function( ) { return document.body.scrollLeft; };
    Geometry.getVerticalScroll =
        function( ) { return document.body.scrollTop; };
    Geometry.setHorizontalScroll =
            function( scroll) { document.body.scrollLeft=scroll; };
    Geometry.setVerticalScroll =
            function(scroll ) { document.body.scrollTop=scroll; };
}
/**
 * 通过链接打开新窗口
 * @param link
 * @author ywh
 * @return
 */
function openNewWindow(link){
	var width=Geometry.getWindowWidth();
	var height=window.screen.availHeight-35;
	var docHeight=Geometry.getViewportHeight();
	var url=$(link).attr('href');
	var destUrl=BXQ.contextPath+'/skeletonFrame.do?destURL='+encodeURIComponent(url)+'&avaliableHeight='+docHeight;
	var currentDate=new Date();
	var opener=window.open(destUrl,currentDate.getTime()+'','resizable=false,menubar=false,toolbar=false,top=0,left=0,width='+width+',height='+height);
	if(opener){
		opener.moveTo(-5,0);
	}
}
/**
 * 点击图标，打开新窗口
 * @param link
 * @author ywh
 * @return
 */
function openIconWindow(link){
	var width=Geometry.getWindowWidth();
	var height=window.screen.availHeight-35;
	var currentDate=new Date();
	var opener=window.open(link,currentDate.getTime()+'','resizable=false,menubar=false,toolbar=false,top=0,left=0,width='+width+',height='+height);
	if(opener){
		opener.moveTo(-5,0);
	}
}
//下面的2个函数拷贝自bxqFrame.js中。因和现有冲突，特注释
//function openNewWindow(link){
//	var width=window.screen.availWidth;
//	var height=window.screen.availHeight-35;
//	var url=$(link).attr('href');
//	window.open(url,null,'resizable=false,menubar=false,toolbar=false,top=0,left=0,width='+width+',height='+height);
//}
//function openIconWindow(link){
//	var width=window.screen.availWidth;
//	var height=window.screen.availHeight-35;
//	window.open(link,null,'resizable=false,menubar=false,toolbar=false,top=0,left=0,width='+width+',height='+height);
//}
/**
 * 打开新窗口时，指定了宽度和高度
 * @param url
 * @param width
 * @param height
 * @author ywh
 * @return
 */
function openWindow(url,width,height){
	var left = ($(window).width()-width)/2;
	var top = ($(window).height()-height)/2;
	var opener=window.open(url,null,'resizable=false,menubar=false,scrollbars=yes,toolbar=false,top='+top+',left='+left+',width='+width+',height='+height);
}
/**
 * 打开通知窗口
 * @param vtype
 * @param range
 * @param rangName
 * @param title
 * @param context
 * @return
 */
function openNoticeWindow(vtype,range,rangName,title,content){
	window.open(BXQ.contextPath+'/common/releaseNotice.do?vtype='+vtype+'&range='+range+'&rangName='+rangName+'&title='+title+'&content='+content, "dsffsf",'height=400px,width=700px,resizable=no,help=no,scroll=1,status=no');
}
/**
 * 弹出模式窗口
 * @param url
 * @param data
 * @param width
 * @param height
 * 
 * @author ywh
 * @return
 */
function openModalDialog(url,data,width,height){
	var param = '';
	param += 'dialogHeight:'+height+'px;';
	param += 'dialogWidth:'+width+'px;';
	param += 'center:yes;help:no;resizable:no;status:no';
	var rv = window.showModalDialog(url,data,param);
	return rv
}
/**
 * 弹出单选框
 * @param elementP
 * @return
 */
function openSinglePicker(elementP){
	var element=$(elementP);
	var url=element.attr('url');
	var width=element.attr('pickerWidth');
	var height=element.attr('pickerHeight');
	var callback=element.attr('callback');
	var elementSn=$('#'+element.attr('refSn'));
	var nameVal=element.attr('value');
	var snVal=elementSn.attr('value');
	var pdata=[window,element,elementSn,nameVal,snVal];
	if(callback){
		var callfun=new Function("data",callback+'(data);');
		pdata[pdata.length]=callfun;
	}
	if(url.indexOf('?')!=-1){
		url+='&sn='+snVal;
	}else{
		url+='?sn='+snVal;
	}
	openPicker(url,pdata,width,height);
}

/**
 * 弹出多选框
 * @param elementP
 * @return
 */
function openMultiPicker(elementP){
	var element=$(elementP);
	var url=element.attr('url');
	var width=element.attr('pickerWidth');
	var height=element.attr('pickerHeight');
	var maxSelect=element.attr('maxSelect');
	var minSelect=element.attr('minSelect');
	var nameId=element.attr('refName');
	var snId=element.attr('refSn');
	var elementSn=document.getElementById(snId);
	var elementName=document.getElementById(nameId);
	var elementSpan=element.parent().siblings('div.multiPicker').get(0);
	var nameVal=elementName.value;
	var snVal=elementSn.value
	var pdata=[window,elementSpan,elementName,elementSn,nameVal,snVal,maxSelect,minSelect];
	if(url.indexOf('?')!=-1){
		url+='&sn='+snVal;
	}else{
		url+='?sn='+snVal;
	}
	openPicker(url,pdata,width,height);
}
/**
 * 弹出选择对话框
 * @param url
 * @param data
 * @param width
 * @param height
 * @return
 */
function openPicker(url,data,width,height){
	var param='';
	param+='dialogHeight:'+height+';';
	param+='dialogWidth:'+width+';';
	param+='center:yes;help:no;resizable:no;status:no';
	window.showModalDialog(url,data,param);
}
/**
 * 记忆页面滚动位置
 * @return
 */
function rememberScrollVertical(){
	var scroll=Geometry.getVerticalScroll();
	document.cookie ='scroll='+escape(scroll);
}
function loadScrollVertical(){
	var scrollNum=getCookie('scroll');
	if(scrollNum!=null){
		scrollNum=parseInt(scrollNum);
		if(scrollNum==-1)
			return;
		Geometry.setVerticalScroll(scrollNum);
		//清除滚动记录
		var lastyear=new Date();
		lastyear.setFullYear(lastyear.getFullYear()-1);
		document.cookie ='scroll=-1;expires='+lastyear.toGMTString();
	}
}
function getCookie(cookieName){
	cookieName=cookieName+'=';
	var allcookies=document.cookie;
	var pos=allcookies.indexOf(cookieName);
	if(pos!=-1){
		var start=pos+cookieName.length;
		var end=allcookies.indexOf(";",start);
		if(end==-1) end=allcookies.length;
		var value=allcookies.substring(start,end);
		value=unescape(value);
		return value;
	}else{
		return null;
	}
}
/**
 * 设置写锁的位置码
 * @return
 */
function setWriteLockPosCode(){
	var posCode=getCookie('lockPosCode');
	if(posCode!=null){
		posCode=BXQ.lockpos|posCode;
	}else{
		posCode=BXQ.lockpos;
	}
	var nextHour=new Date();
	nextHour.setHours(nextHour.getHours()+1);
	document.cookie ='lockPosCode='+posCode+';expires='+nextHour.toGMTString();
	BXQ.writelockFlag=false;
}
/**
 * 打印带有表格的页面
 * @return
 */
function printTablePage(){
	var tableTitle=$('.bs_tableTitle').text();
	var table=null;
	var width=0;
	if($('.mdata_table').size()>0){
	 	table=$('.mdata_table').parent().html();
		width=$('.mdata_table').width();
	}else if($('.data_table').size()>0){
		table=$('.data_table').parent().html();
	 	width=$('.data_table').width();
	}else if($('.courseReport').size()>0){
		table=$('.courseReport').parent().html();
	 	width=$('.courseReport').width();
	}else{
		alert('No data print');
		return;
	}
	width=width+50;
	var printWin=window.open('','printWin','toolbar=yes,scrollbars=yes,menubar=yes,width='+width+',resizable=yes');
	printWin.document.write('<html>');
	printWin.document.write('<head>');
	printWin.document.write('<title>');
	printWin.document.write(tableTitle);
	printWin.document.write('</title>');
	printWin.document.write('<link href="'+BXQ.contextPath+'/resources/common/css/bs_print.css" rel="stylesheet" type="text/css"/>');
	printWin.document.write('</head>');
	printWin.document.write('<body>');
	printWin.document.write('<div class="bs_printTip">请选择浏览器的打印功能进行打印，点击“文件”->“打印预览”</div>');
	printWin.document.write('<div class="bs_tableTitle"><span>'+tableTitle+'</span></div>');
	printWin.document.write(table);
	printWin.document.write('</body>');
	printWin.document.write('</html>');
	printWin.document.close();
	return false;
}
/**
 * 表格的控制对象，控制表格的排序和打印动作
 * @param tableElement
 * @return
 */
function TableManage(tableElement,noNeedInitFlag){
	this.tableElement=tableElement;
	if(!noNeedInitFlag){
		this.init();
	}
}
TableManage.prototype={
	init:function(){
		var tm=this;
		//显示奇偶行的不同
		//$(this.tableElement).find('tr:nth-child(odd) td').addClass('td2');
		//建立行点击的事件
		$(this.tableElement).find('tr').each(function(){
				$(this).bind('mouseover',function(event){
//					if(this.parentNode.nodeName=='FORM'){
//						return;
//					}
//					if($(this).attr('class')=='cmani'){
//						return;
//					}
					if($(this).attr('select')=='true') return;
					this.setAttribute('className','focus');
					//this.className='focus';
					//$(this.parentNode).addClass('focusTr');
					//$(this).find('td').addClass('focus');
				});
				$(this).bind('mouseout',function(event){
//					if(this.parentNode.nodeName=='FORM'){
//						return;
//					}
//					if($(this).attr('class')=='cmani'){
//						return;
//					}
					if($(this).attr('select')=='true') return;
					this.setAttribute('className','');
					//this.setAttribute('className','');
					//$(this.parentNode).removeClass('focusTr');
					//$(this.parentNode).children().removeClass('focusTr_td');
				});
				$(this).bind('click',function(event){
					if(this.parentNode.nodeName=='FORM'){
						return;
					}
					if($(this).attr('class')=='operating'||$(this).children().get(0).nodeName=='TH'){
						return;
					}
					if($(this).attr('select')=='true'){
						$(this).removeClass('selected');
						$(this).attr('select',false)
					}else{
						$(this).parent().children().each(
							function(){
								$(this).removeClass('selected');
								$(this).attr('select','false')
							}
						);
						$(this).addClass('selected');
						$(this).attr('select','true')
					}
			});
		});
		//建立表头排序事件
		$(this.tableElement).find('tr th').each(function(){
			var orderFlg=$(this).attr('orderFlag');
			if(orderFlg&&orderFlg=='true'){
				var th=this;
				$(this).addClass('orderTableHead');
				$(this).hover(function(){
					$(this).addClass('orderTh');
					},function(){
					$(this).removeClass('orderTh');
					}
				);
				$(this).bind('click',function(){
					$(this).find('.atype').remove();
					$(this).siblings().find('.atype').remove();
					
					var dataType=$(this).attr('dataType');
					var orderPosition=$(this).attr('orderPosition');
					var orderType=$(this).attr('orderType');
					if(orderType==null||orderType=='desc'){
						orderType='asc';
						$(this).attr('orderType','asc');
						//$(this).css({padding:0}).append('<span class="atype">&darr;</span>');
						$(this).append('<span class="atype">&darr;</span>');
					}else{
						orderType='desc';
						$(this).attr('orderType','desc');
						//$(this).css({padding:0}).append('<span class="atype">&uarr;</span>');
						$(this).append('<span class="atype">&uarr;</span>');
					}				
					if(orderPosition==null){
						var siblings=th.parentNode.getElementsByTagName('TH');
						for(var i=0;i<siblings.length;i++){
							if(siblings[i]==th){
								orderPosition=i+1;
							}
						}
					}else{
						orderPosition=parseInt(orderPosition);
					}
					tm.orderData(orderPosition,orderType,dataType);
				});
			}
		});
	},
	/**
	 * 表格排序动作
	 */
	orderData:function(columnPosition,orderType,dataType){
		var dataPool=new Array();
		var tableTrs=this.tableElement.getElementsByTagName('TR');
		var parent=this.tableElement;
		var trpool=new Array();
		var sequenceFlag=false;
		var sequenceIndex=0;
		var sequence=0;
		for(var i=0;i<tableTrs.length;i++){
			var tr=tableTrs[i];
			if(tr.nodeName!='TR'||tr.getElementsByTagName('TH').length>0){ 
				var ths=tr.getElementsByTagName('TH');
				for(var j=0;j<ths.length;j++){
					var th=ths[j];
					if($(th).attr('sequence')=='true'){
						sequenceIndex=j;
						break;
					}
				}
				continue;
			}
			trpool[trpool.length]=tr;
			var tds=tr.getElementsByTagName('TD');
			var counter=0;
			for(var j=0;j<tds.length;j++){
				var td=tds[j];
				counter++;
				if(sequenceIndex==j&&!sequenceFlag){
					if($(td).text()!=null&&$.trim($(td).text())!='')
					 sequence=parseInt($(td).text());
					else
					sequence=0;
					sequenceFlag=true;
				}
				if(counter==columnPosition){
					var dataTd=tds[j];
					var data=null;
					if('string'==dataType){
						data=this.getTdData(dataTd);
					}else if('number'==dataType){
						data=parseFloat(this.getTdData(dataTd));
					}else if('date'==dataType){
						data=this.getTdData(dataTd);
					}
					var dataNode={'data':data,'trNode':tr};
					dataPool[dataPool.length]=dataNode;
				}
			}
		}
		//对dataPool进行排序
		var order=true;
		if('desc'==orderType) order=false;
		var temp=null;
		for(var i=0;i<dataPool.length;i++){
			for(var j=i;j<dataPool.length;j++){
				var a=dataPool[i];
				var b=dataPool[j];
				if(order){
					if(b.data>a.data){
						temp=b;
						dataPool[j]=a;
						dataPool[i]=temp;
					}
				}else{
					if(b.data<a.data){
						temp=b;
						dataPool[j]=a;
						dataPool[i]=temp;
					}
				}
			}
		}
		for(var i=trpool.length-1;i>=0;i--){
			$(trpool[i]).remove();
		}
		for(var i=0;i<dataPool.length;i++){
			$(parent).append(dataPool[i].trNode);
		}
		trs=parent.getElementsByTagName('TR');
		var count=0;
		for(var i=0;i<trs.length;i++){
			var tr=trs[i];
			if(tr.getElementsByTagName('TH').length>0) continue;
			var tds=tr.getElementsByTagName('TD');
			var td=tds[sequenceIndex];
			$(td).text(sequence+count);
			count++;
		}
	},
	getTdData:function(td){
		var childrens=td.childNodes;
		var data='';
		if(childrens&&childrens.length>0){
			for(var i=0;i<childrens.length;i++){
				data=data+this.getElementText(childrens[i]);
			}
		}
		return data;
	},
	getElementText:function(element){
		if(element.nodeType==3){
			return $.trim(element.nodeValue);
		}else if(element.nodeType==1){
			if(element.nodeName=='INPUT'){
				return $.trim($(element).val());
			}else if(element.nodeName=='SELECT'){
				var options=element.options;
				for(var i=0;i<options.length;i++){
					if(option.selected)
						return $.trim(option.text);
				}
			}else{
				var childrens=element.childNodes;
				var data='';
				if(childrens&&childrens.length>0){
					for(var i=0;i<childrens.length;i++){
						data=data+this.getElementText(childrens[i]);
					}
				}
				return data;
			}
		}
	}
}
/**
 * 表格的树结构控制
 * 使用UL和LI构建的树形结构，可以使用此对象进行处理树节点的展开和关闭
 */
function Tree(){
}
Tree.prototype={
	/**
	 * 处理
	 */
	handle:function(imgElement){
		var openFlag=$(imgElement).attr('open');
		if(openFlag==1){
			$(imgElement).attr('open',0);
			$(imgElement).attr('src','../../../../resources/inky/image/skeleton/bs/open.gif');
			$(imgElement).parent().attr('class','treeExpand');
		}else{
			$(imgElement).attr('open',1);
			$(imgElement).attr('src','../../../../resources/inky/image/skeleton/bs/close.gif');
			$(imgElement).parent().attr('class','treeFlod');
		}
	}
}
var leftTree=new Tree();

