/******************************************************************
	Author:       
	Create Date : 2004-04-25
	Function    : 界面功能

	Explain			:	
	Explain			:	包括两种类型功能方法:  
								1. 提供客户端的请求提交时涉及的公共接口；
								2. 可独立使用的功能接口；
	FunctionList：
			 _________________________________________________________________________________________________
		    | 		     	 |	 functionType		            |					  		name			  |
			|___________________________________________________|_____________________________________________|
			|    	1	     |			public			        |					 			  |
			|				 |									|					  execSearchAction        |
			|				 |									|					  execSearchByPKAction    |
			|				 |									|					  execUploadAction		  |
			|				 |									|					  execRollAction	      |
			|				 |									|					  execListAction          |
			|				 |									|					  execTreeAction          |
			|________________|__________________________________|_____________________________________________|
			|		2		 |			public					|			            myround               |
			|				 |									|						formatround           |
			|				 |									|						Keypress              |
			|				 |									|						trim                  |
			|				 |									|						lTrim                 |
			|				 |									|						rTrim                 |
			|				 |									|						reflectValue          |
			|				 |									|						reflectValue_onKeyUp  |
			|				 |									|						formatToNum           |
			|				 |									|						touchOnblur           |
			|				 |									|						touchOnClick          |
			|				 |									|						touchOnChange         |
			|				 |									|						touchOnKeyPress       |
			|				 |									|						touchOnKeyUp          |
			|				 |									|						touchOnMouseDown      |
			|				 |									|						buttonOnclick         |
			|				 |									|						setButtonEles         |
			|				 |									|						alliedObjs            |
			|				 |									|						alliedObjs_more       |
			|				 |									|						alliedObjs_bit        |
			|				 |									|						addSpeedKeyScript     |
			|________________|__________________________________|_____________________________________________|
			|				 |		  private  		            |						_showButtonPanel	  |
			|				 |									|						_controlScroll        |
			|				 |									|						_moveButtonPanel      |
			|				 |									|						_addChildOption       |
			|				 |									|						_addChildOption_more  |
			|				 |									|						_touchSpeedKey        |
			|________________|__________________________________|_____________________________________________|
	
 ******************************************************************/
function jumpToPage( frameName , url , img , label ) {
	
	if( frameName == "_blank" )  {
		openForm( url , 1 , img , label ) ;
		return ;
	}

  var parameterStr = "";
  var parameterName = new Array();
  var parameterValue = new Array();
  var _tempHideParent = new Array();
  var _tempHideHTML = new Array();
  var hiddenHtml = "";
  if(url.indexOf("?") > 0) {
    parameterStr = url.substring(url.indexOf("?") + 1);
    url = url.substring(0, url.indexOf("?"));
    
    //使用递归来解析参数
    _parseParameter(parameterStr, parameterName, parameterValue);
    
    for(var i = 0; i < parameterName.length; i++) {
      //如果页面中已经存在标签对象，先隐藏
      /*var _curParameterObj = eval("document.all('"+parameterName[i]+"')");
      if(_curParameterObj != null) {
        _tempHideHTML[_tempHideHTML.length++] = _curParameterObj.outerHTML;
        _tempHideParent[_tempHideParent.length++] = _curParameterObj.parentNode;
        _curParameterObj.parentNode.removeChild(_curParameterObj);
      }*/
      hiddenHtml += "<INPUT TYPE='HIDDEN' NAME='"+parameterName[i]+"' VALUE='"+parameterValue[i]+"'/>";
    }
  }

	str = "<form name='tempForm' target='" + frameName + "' action='" + url + "' method='get'>"+hiddenHtml+"</form>" ;

	for( var i in document.all )  {
		if ( document.all[i].tagName == "BODY" )  {
			document.all[i].insertAdjacentHTML( "BeforeEnd" , str ) ;
			break ;
		}
	}

	document.all.tempForm.submit() ;
	document.all.tempForm.outerHTML = "" ;
	
  onOpenState(true);  
	
	//将隐藏的标签对象显示出来
	/*for(var i = 0; i < _tempHideHTML.length; i++) {
	  _tempHideParent[i].insertAdjacentHTML("BeforeEnd", _tempHideHTML[i]);
	}*/

}

//执行跳转。为页面控件之间关联引起的跳转
function jumpToPage_allied(frameName , url) {
	
	if( frameName == "_blank" )  {
		openForm( url) ;
		return ;
	}

  var parameterStr = "";
  var parameterName = new Array();
  var parameterValue = new Array();
  var _tempHideParent = new Array();
  var _tempHideHTML = new Array();
  var hiddenHtml = "";
  if(url.indexOf("?") > 0) {
    parameterStr = url.substring(url.indexOf("?") + 1);
    url = url.substring(0, url.indexOf("?"));
    
    //使用递归来解析参数
    _parseParameter(parameterStr, parameterName, parameterValue);
    
    for(var i = 0; i < parameterName.length; i++) {
      //如果页面中已经存在标签对象，先隐藏
      hiddenHtml += "<INPUT TYPE='HIDDEN' NAME='"+parameterName[i]+"' VALUE='"+parameterValue[i]+"'/>";
    }
  }

	str = "<form name='tempForm' target='" + frameName + "' action='" + url + "' method='get'>"+hiddenHtml+"</form>" ;

	for( var i in document.all )  {
		if ( document.all[i].tagName == "BODY" )  {
			document.all[i].insertAdjacentHTML( "BeforeEnd" , str ) ;
			break ;
		}
	}

	document.all.tempForm.submit() ;
	document.all.tempForm.outerHTML = "" ;
  
}


//解析参数
function _parseParameter(parameterStr, parameterName, parameterValue) {
    var pos = parameterStr.indexOf("&");
    
    if(pos > 0) {
      var _curParameter = parameterStr.substring(0, pos);
      parameterStr = parameterStr.substring(pos+1);
      pos = _curParameter.indexOf("=");
      if(pos > 0) {
        parameterName[parameterName.length++]   = _curParameter.substring(0, pos);
        parameterValue[parameterValue.length++] = _curParameter.substring(pos+1);
      }

      _parseParameter(parameterStr, parameterName, parameterValue);
    } else if(parameterStr.indexOf("=") > 0) {
        pos = parameterStr.indexOf("=");
        parameterName[parameterName.length++]   = parameterStr.substring(0, pos);
        parameterValue[parameterValue.length++] = parameterStr.substring(pos+1);
    }
}
//******************************************************


//======================================================
//在状态栏显示信息
//当文档被加载时执行
//======================================================
function showStatus()  {

	theFlag = 0 ;

	for(var i in document.all)  {
		if (document.all[i].tagName == "MESSAGE")  {
			theFlag = 1 ;
			type = document.all[i].type ;
			message = document.all[i].value ;
			break ;
		}
	}

	if( theFlag == 0 )
		return ;

	if( type == "success" )
		showSuccessMessage( message ) ;

	if( type == "failure" )
		showFailureMessage( message ) ;

}
//******************************************************



//======================================================
//给出操作提示
function showOperationMessage( _message ) {
	
		//如果此时有操作提示，说明此时正向服务器请求服务。
		//现在的新请求不能再被响应
		if( document.all('operatingFlagPanel') != null ) {
			alert("当前的操作未完成，不能进行其他的操作！");
			return false;
		}
	
        //加入正在操作提示
        var iStr = "<div ID='operatingFlagPanel' style='position:absolute;z-index:1000;width:250;height:40;display:none;border-style:solid;border-width:1;border-color:#555555;font-size:9pt;background-color:#5555EE' align='center'><table border='0' width='100%' height='100%'><tr><td align='center' style='font-size:9pt;color:#FFFFFF'>请稍候，正在 "+_message+" ......</td></tr></table></div>";
        document.body.insertAdjacentHTML('AfterBegin', iStr);
        sTop = document.body.scrollTop + 50 ;
        sLeft = document.body.offsetWidth/2 - 125 ;
        if( document.body.offsetHeight < 130 ) {
        		document.all('operatingFlagPanel').style.height = 23;
        		sTop = (document.body.offsetHeight-23)/2; 
        }		
        if( document.body.offsetWidth < 300 ) {
        		document.all('operatingFlagPanel').style.width = 150;
		        sLeft = document.body.offsetWidth/2 - 75 ;
        }		
        document.all('operatingFlagPanel').style.pixelLeft = sLeft;
        document.all('operatingFlagPanel').style.pixelTop = sTop;
        document.all('operatingFlagPanel').style.display='';
        
        return true;
}        





//*****************************************************************


/*
 * 在提交请求前，对一些值进行前置处理
 * 1.去掉TextArea中回车换行
 × 2.替换返回页面中的&为$
 */
function preActionHandle(mainForm){
	var _textAreas = mainForm.getElementsByTagName("TEXTAREA");
	for(var i = 0; i < _textAreas.length; i++) {
          var curAreaObj = _textAreas[i];
     	  var enterStr = curAreaObj.value;
     	  while( enterStr.indexOf("\r") != -1 && enterStr.indexOf("\n") != -1) {
    		 enterStr = enterStr.replace('\r', '');
    		 enterStr = enterStr.replace('\n', '');
    	  }
          curAreaObj.value = enterStr;       
     }
     //-E-Modified by 李俊超 2003/05/22
     //while(ReturnPage.indexOf("&") != -1) {
     //    ReturnPage = ReturnPage.replace('&', '$');//将符号'&'转换为'$'
     //}

}

/**
 * 执行查询业务时的请求提交
 */
function execSearchAction() {
	var mainForm = document.all("mainForm");
	mainForm.action = "/servlet/org.apache.struts.action.ActionServlet?_TaskID=searchList";
	mainForm.target = "hideArea";
	mainForm.submit();
  if(self.onOpenState != null) {
    onOpenState(true);  
  }
	
}

//针对主键进行查询的请求提交
function execSearchByPKAction(taskId) {
	var mainForm = document.all("mainForm");
	mainForm.action = "/servlet/org.apache.struts.action.ActionServlet?_TaskID="+taskId;
	mainForm.target = "hideArea";
	mainForm.submit();
  if(self.onOpenState != null) {
    onOpenState(true);  
  }
	
}

//执行上传时提交
//saveDirID: 保存路径编号，需要在配置文件中进行定义
function execUploadAction(ReturnPage, ReturnArea, saveDirID, maxSize) {
	
	mainForm.enctype= "multipart/form-data";
	mainForm.action = "/view/share/upload/commonupload.jsp?ReturnPage="+ReturnPage+"&ReturnArea="+ReturnArea+"&saveDirID="+saveDirID+"&maxSize="+maxSize;
	mainForm.target = "hideArea";
	mainForm.submit();
	
}

//执行Roll的提交
function execRollAction() {
	var mainForm = document.all("rollForm");
	var rollTaskID = mainForm._RollTaskID.value;
	if(rollTaskID == null) {
		alert("请设置提交的ACTION别名");
	}
	if(rollTaskID.indexOf(".jsp")==-1){
			mainForm.action = rollTaskID+".do";
	}else{
	mainForm.action = rollTaskID;
	}
	mainForm.submit();
  if(self.onOpenState != null) {
    onOpenState(true);  
  }

}

//执行列表提交
function execListAction() {
	var mainForm = document.all("mainForm");
	mainForm.action = "/servlet/org.apache.struts.action.ActionServlet?_TaskID=onSelectItem";
	mainForm.target = "hideArea";
	mainForm.submit();
  if(self.onOpenState != null) {
    onOpenState(true);  
  }
	
}

//执行树列表提交
function execTreeAction() {
	var mainForm = document.all("mainForm");
	mainForm.action = "/servlet/org.apache.struts.action.ActionServlet?_TaskID=onSelectNode";
	mainForm.target = "hideArea";
	mainForm.submit();
  if(self.onOpenState != null) {
    onOpenState(true);  
  }
}

//====================================================== 









//======================================================
//------------------------四舍五入,n为小数位数,返回数字---------------------------------//
function myround(m,n) {
 var myrd = Math.round(m*Math.pow(10,n))/Math.pow(10,n); 
 return myrd;
}

//------------------------四舍五入,n为小数位数,格式化数字,返回字符---------------------------------//
function formatround(m,n) {
 var myrd = Math.round(m*Math.pow(10,n))/Math.pow(10,n)+"";
 
 var strTmp = ""; 
 var index = myrd.indexOf("."); 
 var strAfter = myrd.substring(index+1);
 if(index>0){
  for(var j=0; j<n-strAfter.length;j++){   
   myrd = myrd + "0";   
  }
 }else{
  if(n>0){
   myrd = myrd + ".";
   for(var i= 0;i<n;i++){
    myrd = myrd + "0"; 
   }      
  }
 }
 return myrd;
}


//======================================================
// 回车执行焦点跳转
// 说明: 向下跳转到下一个可控的页面标签；如果当前标签为页面中的最后一个标签，焦点跳转
//			 到页面第一个标签；
// 注意：因涉及"当前控件可视"形式的验证，在执行Kerpress的时候需要同时引用validate.js
//======================================================
function Keypress(ikey) {
  var ieKey=event.keyCode;
  var obj;
  if (ieKey == 13) {
     for(i_loop = 0;i_loop < document.forms[0].elements.length;i_loop++) {

  		if (document.forms[0].elements[i_loop] == ikey) {
  			for(i=i_loop+1;;i++) {
  				if(i==document.forms[0].elements.length) i=0;
  				obj=document.forms[0].elements[i];
  				
  				if(obj.type=="hidden" || obj.type=="file" || obj.readOnly==true || obj.disabled==true || obj.style.display == "none") {
  					continue;
  				} else {
  				  //
    				_checkTabButton(obj);
    				
  					if(obj.tagName!="TEXTAREA") {
    						obj.focus();
  					} else {
  					  //延迟后设置焦点
  					  if(eval("document.forms[0]."+obj.name) != null) {
    					  setTimeout("document.forms[0]."+obj.name+".focus();", 1);
    					} else {
    					  setTimeout("document.forms[0]."+obj.id+".focus();", 1);  
    					}
  					}
  					
  					if(obj.type=="text") {
  					  obj.select();
  					}
  					return;
  				}
  			}
  			return;
  		}

     }
  }
  
}


//======================================================
//去掉空格,类似于java中的"trim()"方法
//去掉字串两边的空格
function trim(str) {
 return lTrim(rTrim(str));
}
 
//去掉字串左边的空格
function lTrim(str) {
 if (str.charAt(0) == " ") {
  //如果字串左边第一个字符为空格
  str = str.slice(1);//将空格从字串中去掉
  //这一句也可改成 str = str.substring(1, str.length);
  str = lTrim(str); //递归调用
 }
 return str;
}
 
//去掉字串右边的空格
function rTrim(str) {
 var iLength;
 
 iLength = str.length;
 if (str.charAt(iLength - 1) == " ") {
  //如果字串右边第一个字符为空格
  str = str.slice(0, iLength - 1);//将空格从字串中去掉   
  //这一句也可改成 str = str.substring(0, iLength - 1);
  str = rTrim(str); //递归调用
 }
 return str;
}
//======================================================



//======================================================
//由输入的参数值，设置下拉框中相应值为当前焦点。如果没有，给予提示，并返回焦点
function reflectValue( inputObj, reflectObj, objCaption ) {
  
 if(inputObj.value == "" || reflectObj.children.length == 1) {
  reflectObj.children(0).selected = true;//如果没有输入值，或者下拉菜单只有一项，选择下拉菜单的第一项并返回。
  return;
 }
 /*if(inputObj.value.length != reflectObj.children(1).value.length) {
  return;//如果没有输入值，或者下拉菜单只有一项，或者输入值长度与下拉菜单中的值长度不一致，返回。
 }*/
 
 for(var i = 1; i < reflectObj.children.length; i++) {
  if(inputObj.value == reflectObj.children(i).value) {
   reflectObj.children(i).selected = true;
   return;
  }
 }
 
 if(inputObj.value.length > 1 || inputObj.value.length == inputObj.maxLength) {
   alert("代码为["+inputObj.value+"]的"+objCaption+"不存在!");
   reflectObj.children(0).selected = true;
   inputObj.focus();
   inputObj.select();
  }
  
} 
 
 
//由输入的参数值，匹配下拉框中相应值为当前焦点。
function reflectValue_onKeyUp( inputObj, reflectObj ) {

 if(inputObj.value == "") {
  inputObj.blur();
  inputObj.focus();
  return;
 }
 
 for(var i = 1; i < reflectObj.children.length; i++) {
  if(inputObj.value == reflectObj.children(i).value) {
   reflectObj.children(i).selected = true;
   return;
  }
 }
 
 if(inputObj.value.length == inputObj.maxLength) {
 	inputObj.blur();
 }
 
} 
//======================================================



/**
  * 格式化数字：将科学计数法转化为通常形式
  * 说明：
  *   1.如果用科学计数法表示的数值(以下简称"科学计数数")的指数为正数[如3.3E9]，又分为下列几种处理方式
  *	    1.1  科学计数数的尾数为正数
  *     1.2  科学计数数的尾数为负数
  *
  *   2.如果用科学计数法表示的数值(以下简称"科学计数数")的指数为负数[如3.3E-9]，又分为下列几种处理方式
  *	    2.1  科学计数数的尾数为正数
  *     2.2  科学计数数的尾数为负数
  *
  *   注意：因为如果没有人为的因素(现在也不可能存在)，不可能存在科学计数数的尾数为0.000..的情况，在此忽略
  * parameter:  curNumber 需要格式化的数字，字符串类型
  *             dec       保留的小数位数，整数类型
  */
function formatToNum(curNumber, dec) {

	//如果不是科学计数法，直接返回
	if (curNumber == null) {
		return curNumber;
	}

	//检查参数是否为数字，如果不是，直接返回
	if(isNaN(parseFloat(curNumber))) {
		
		return curNumber;
	}

	if(curNumber == "0" || (curNumber.indexOf("e") == -1 && curNumber.indexOf("E") == -1)) {
		//判断小数位是否和传入的参数dec一致，如果不一致，补足小数位
		var pos = curNumber.indexOf(".");
		if (pos != -1 && dec != null && dec > -1) {

			if (dec == 0) { //如果dec为0，首先进行四舍五入，去掉小数位
				curNumber = formatround(curNumber.substring(0, pos), 0);

				if (curNumber.indexOf(".") != -1) {
					curNumber = curNumber.substring(0, curNumber.indexOf("."));
				}
			} else {
				var decBit = curNumber.substring(pos); //小数位
				var bitMis = dec - (decBit.length - 1); //dec与小数位的差值
				if (bitMis > 0) {
					while (bitMis > 0) {
						curNumber = curNumber + "0";
						bitMis--;
					}
				} else if (bitMis < 0) {
					curNumber = formatround(curNumber, dec);
				}
			}
		}
        
		return curNumber;
	}


	//判断是否为负数
	var sufTag = ""; //负数标志
	if (curNumber.length > 1 && curNumber.substring(0, 1) == "-") {
		sufTag = "-";
		curNumber = curNumber.substring(1);
	}

	var curValue = "";
	var pos = curNumber.indexOf("E");
	if(pos == -1) {
		pos = curNumber.indexOf("e");
	}

	var tail = "1"; //尾数
	var exponent = 1; //指数
	if (pos != -1) {
		exponent = parseInt(curNumber.substring(pos + 1));
		tail = curNumber.substring(0, pos);
	}

	//如果exponent为正数，说明为整数 
	var pointPos = tail.indexOf(".");
	var minLocation = 0; //共有多少个小数位
	var lastMinLocation = 0; //小数位后的数字个数
	if (pointPos > 0) {
		minLocation = tail.substring(0, pointPos).length;
		lastMinLocation = tail.substring(pointPos + 1).length;
		tail = tail.substring(0, pointPos) + tail.substring(pointPos + 1);
	}

	//循环设置数字后的"0"
	var zeroStr = ""; //所有的零位
	var exponentNum = exponent;
	if (exponent < 0) {
		zeroStr = "0.";
		exponentNum = -exponentNum;
	}

	for (var i = 0; i < exponentNum; i++) {
		zeroStr += "0";
	}

	if (exponent > 0) {
		//1.1 指数位大于小数点后数字个数
		if (exponentNum > lastMinLocation) {
			curValue = tail + zeroStr.substring(0, exponentNum - lastMinLocation);
		} else if (exponentNum == lastMinLocation) { //1.2 等于
			curValue = tail;
		} else { //1.3 小于
			var curLastIndex = minLocation + exponentNum;
			curValue = tail.substring(0, curLastIndex) + "." + tail.substring(curLastIndex);
		}
	} else {
		//2.1 指数位大于小数点后数字个数
		if (exponentNum > minLocation) {
			zeroStr = zeroStr.substring(0, zeroStr.length - minLocation);
			if (zeroStr == "0") {
				zeroStr = "0.0";
			}
			curValue = zeroStr + tail;
		} else if (exponentNum == minLocation) { //2.2 等于
			curValue = "0." + tail;
		} else { //2.3 小于
			if (minLocation - exponentNum > 0) {
				minLocation = minLocation - exponentNum;
				curValue = tail.substring(0, minLocation) + "." + tail.substring(minLocation);
			} 
		}
	}

	//判断小数位是否和传入的参数dec一致，如果不一致，补足小数位
	pos = curValue.indexOf(".");
	if (pos != -1 && dec != null && dec > -1) {
		if (dec == 0) { //如果dec为0，返回整数
			curValue = formatround(curValue.substring(0, pos), 0);

			if (curValue.indexOf(".") != -1) {
				curValue = curValue.substring(0, curValue.indexOf("."));
			}
		} else {
			var decBit = curValue.substring(pos); //小数位
			var bitMis = dec - decBit.length; //dec与小数位的差值
			if (bitMis > 0) {
				while (bitMis > 0) {
					curValue = curValue + "0";
					bitMis--;
				}
			} else if (bitMis < 0) {
				curValue = formatround(curValue, dec);
			}
		}
	}

	return sufTag + curValue;
}
//======================================================


 

//======================================================
//可供重载的方法，该组方法可以使用户对页面中的单个控件进行控制
//参数为控件对象
//======================================================
function touchOnblur(obj) {}
function touchOnClick(obj) {}
function touchOnChange(obj) {}
function touchOnKeyPress(obj) {}
function touchOnKeyUp(obj) {}
function touchOnMouseDown(obj) {}
//======================================================


//======================================================
//可供重载的方法，该方法对taglib-BUTTON的ONCLICK事件进行扩展
//参数为BUTTON对象
//======================================================
function buttonOnclick(buttObj) {
  return true;
}
//======================================================


//======================================================
//浮动按钮容器构造
//======================================================
//提供对外设置将哪些按钮放入"浮动按钮容器"，参数为按钮Name数组
var _buttonEles = new Array();
function setButtonEles(curButtonEles) {
  _buttonEles = curButtonEles;
  _showButtonPanel();
}

//浮动按钮容器
var buttonPanelStr = "<div id='_ButtonPanel' style='position:absolute;z-index:10000;' align='center'></div>";
//var buttonPanelFrameStr = "<div id='_ActiveButtonPanel' style='position:absolute;z-index:1000;' align='center'><iframe border=0 width='50' height='20' NORESIZE=NORESIZE SCROLLING=no MARGINWIDTH=0 MARGINHEIGHT=0 FRAMESPACING=0 FRAMEBORDER=0></iframe></div>";

//显示浮动按钮容器及按钮
function _showButtonPanel() {
  //判断有无按钮
  if(_buttonEles.length <= 0) {
    return;
  }

  //显示容器
  document.write(buttonPanelStr);
  //document.write(buttonPanelFrameStr);
  
  //容器对象
  var buttonPanelObj = document.getElementById("_ButtonPanel");
  //var buttonPanelFrame = document.getElementById("_ActiveButtonPanel");  
  
  for(var i = 0; i < _buttonEles.length; i++) {
    if(trim(_buttonEles[i]) == "") {//允许空格的情况发生，不过不处理
      continue;
    }
    
    var _curButtonObj = eval("document.all._btn_"+_buttonEles[i]);//针对control-BUTTON
    if(_curButtonObj == null) {
      _curButtonObj = eval("document.all."+_buttonEles[i]);//针对普通BUTTON
    }
    
    if(_curButtonObj!=null) {//忽略错误按钮名称
      buttonPanelObj.insertAdjacentHTML("beforeEnd", _curButtonObj.outerHTML+"&nbsp;");
      //将被移动的按钮删除
      _curButtonObj.removeNode();
      
      /*_curButtonObj = eval("document.all._btn_"+_buttonEles[i]);//针对control-BUTTON
      if(_curButtonObj == null) {
        _curButtonObj = eval("document.all."+_buttonEles[i]);//针对普通BUTTON
      }
      var newFrameObj = buttonPanelFrame.cloneNode();
      
      //alert(_curButtonObj.offsetTop+"||"+_curButtonObj.offsetLeft+"||"+_curButtonObj.offsetWidth+"||"+_curButtonObj.offsetLeft+"||"+_curButtonObj.clientLeft+"||"+_curButtonObj.clientTop);
      newFrameObj.style.posTop = _curButtonObj.offsetLeft;
      newFrameObj.style.posLeft = _curButtonObj.clientLeft;*/
    } 
  }

  buttonPanelObj.style.width = document.body.clientWidth;
  buttonPanelObj.style.posTop = document.body.clientHeight-30+document.body.scrollTop;

} 

window.setTimeout("_controlScroll()", 1000);

//滚动条滚动时重新定位BUTTON
function _controlScroll() {
  if(document.body != null) {
    var buttonPanelObj = document.getElementById("_ButtonPanel");
    if(buttonPanelObj != null) {
      //document.body.onscroll = new Function("_moveButtonPanel()");
      _moveButtonPanel();
    }
  }
  
  window.setTimeout("_controlScroll()", 10);
}

//移动按钮容器
function _moveButtonPanel() {
  //容器对象
  var buttonPanelObj = document.getElementById("_ButtonPanel");
  //var buttonPanelFrame = document.getElementById("_ActiveButtonPanel");

  buttonPanelObj.style.width = document.body.clientWidth;
  buttonPanelObj.style.posTop = document.body.clientHeight-30+document.body.scrollTop;
/*
  buttonPanelFrame.style.width = document.body.clientWidth;
  buttonPanelFrame.style.posTop = document.body.clientHeight-40+document.body.scrollTop;*/
}
//======================================================








//======================================================
// 从Cache中取出关联字段的值，支持多个字段的关联。
// 注：第一个参数为一维数组、第二个参数为二维参数
//     参数一包含：1.参照字段所在表名称  2.参照字段NAME  3.参照字段当前ID
//     参数二包含：多个子表信息数组(包含：1.子表名称  2.关联字段NAME  3.如果为单据模式，为单据NAME，否则为空)
//     参数三包含：当前帧名称
//======================================================
function alliedObjs(parentMes, childrenMes, curFrameName) {
  //参照信息是否完整
  if(parentMes.length < 3) {
    //alert("警告  第一个参数应包含的主表信息:\r\n 1.参照字段所在表名称 \r\n 2.参照字段NAME \r\n 3.参照字段当前ID");
    return;
  }
  //关联字段信息是否完整
  if(childrenMes.length == -1) {
    alert("警告  第二个参数为子表信息，以数组形式存在，必须确保其完整。");
    return;
  } else {
    for(var i = 0; i < childrenMes.length; i++) {
      if(childrenMes[i].length < 2) {
        alert("警告  第二个参数中,子表["+childrenMes[i][0]+"]信息不完整，必须包含：\r\n 1.子表名称 \r\n 2.关联字段NAME \r\n 3.如果为单据模式，为单据模式NAME，否则可为空");
        return;
      } else if(childrenMes[i].length < 2) {//如果只有两个子项，补足三个
        childrenMes[i][2] = "";
      }
    }
  }
  //关联字段和参照字段所在区域名称有否
  if(curFrameName == null || curFrameName.length == -1) {
    alert("警告  第三个参数为当前区域，不能为空！");
    return;
  }

  //参照对象当前ID是否为旧值，如为旧值，返回。否则替换旧值为新值
  //因为考虑到单据先删后再添加同样数据的情况，在此不再做限制；需要在调用本方法之前自行限制
  /*if(parentMes[2] == oldPriName) {
    return;
  } else {
    oldPriName = parentMes[2];  
  }*/
  
  var returnParameter = "";
  returnParameter += "sourceFrameName="+curFrameName;//当前操作区域名称
  returnParameter += "&srcCacheName="+parentMes[0]+"&srcName="+parentMes[1]+"&srcID="+parentMes[2];//主表名称和参照字段当前ID
  for(var i = 0; i < childrenMes.length; i++) {
    returnParameter += "&desCacheName="+childrenMes[i][0]+"&desName="+childrenMes[i][1]+"&desVoucherName="+childrenMes[i][2];
  } 
 
  jumpToPage_allied("hideArea", "/view/jsp/share/search/searchbond.jsp?"+returnParameter);
  
}

function _alliedObjs(parentMes, childrenMes, curFrameName) {
  //参照信息是否完整
  if(parentMes.length < 3) {
    //alert("警告  第一个参数应包含的主表信息:\r\n 1.参照字段所在表名称 \r\n 2.参照字段NAME \r\n 3.参照字段当前ID");
    return;
  }
  //关联字段信息是否完整
  if(childrenMes.length == -1) {
    alert("警告  第二个参数为子表信息，以数组形式存在，必须确保其完整。");
    return;
  } else {
    for(var i = 0; i < childrenMes.length; i++) {
      if(childrenMes[i].length < 2) {
        alert("警告  第二个参数中,子表["+childrenMes[i][0]+"]信息不完整，必须包含：\r\n 1.子表名称 \r\n 2.关联字段NAME \r\n 3.如果为单据模式，为单据模式NAME，否则可为空");
        return;
      } else if(childrenMes[i].length < 2) {//如果只有两个子项，补足三个
        childrenMes[i][2] = "";
      }
    }
  }
  //关联字段和参照字段所在区域名称有否
  if(curFrameName == null || curFrameName.length == -1) {
    alert("警告  第三个参数为当前区域，不能为空！");
    return;
  }

  //参照对象当前ID是否为旧值，如为旧值，返回。否则替换旧值为新值
  //因为考虑到单据先删后再添加同样数据的情况，在此不再做限制；需要在调用本方法之前自行限制
  /*if(parentMes[2] == oldPriName) {
    return;
  } else {
    oldPriName = parentMes[2];  
  }*/
  
  var returnParameter = "";
  returnParameter += "sourceFrameName="+curFrameName;//当前操作区域名称
  returnParameter += "&srcCacheName="+parentMes[0]+"&srcName="+parentMes[1]+"&srcID="+parentMes[2];//主表名称和参照字段当前ID
  for(var i = 0; i < childrenMes.length; i++) {
    returnParameter += "&desCacheName="+childrenMes[i][0]+"&desName="+childrenMes[i][1]+"&desVoucherName="+childrenMes[i][2];
  } 
 
  jumpToPage_allied("hideArea", "/view/jsp/share/search/searchbond_oa.jsp?"+returnParameter);
  
}


//======================================================
// 1.税种到税目的关联
// 2.城区到乡街的关联
// 注：第一个参数为一维数组、第二个参数为二维参数
//     参数一包含：1.参照字段所在表名称  2.参照字段NAME  3.参照字段当前ID
//     参数二包含：多个子表信息数组(包含：1.子表名称  2.关联字段NAME  3.如果为单据模式，为单据NAME，否则为空)
//     参数三包含：当前帧名称
//======================================================
function alliedObjs_more(parentMes, childrenMes, curFrameName, curBtiFrameName) {
  //参照信息是否完整
  
  if(parentMes.length < 3) {
    //alert("警告  第一个参数应包含的主表信息:\r\n 1.参照字段所在表名称 \r\n 2.参照字段NAME \r\n 3.参照字段当前ID");
    return;
  }
  //关联字段信息是否完整
  if(childrenMes.length == -1) {
    alert("警告  第二个参数为子表信息，以数组形式存在，必须确保其完整。");
    return;
  } else {
    for(var i = 0; i < childrenMes.length; i++) {
      if(childrenMes[i].length < 2) {
        alert("警告  第二个参数中,子表["+childrenMes[i][0]+"]信息不完整，必须包含：\r\n 1.子表名称 \r\n 2.关联字段NAME \r\n 3.如果为单据模式，为单据模式NAME，否则可为空");
        return;
      } else if(childrenMes[i].length < 2) {//如果只有两个子项，补足三个
        childrenMes[i][2] = "";
      }
    }
  }
  //关联字段和参照字段所在区域名称有否
  if(curFrameName == null || curFrameName.length == -1) {
    alert("警告  第三个参数为当前区域，不能为空！");
    return;
  }
  
  var returnParameter = "";
  returnParameter += "sourceFrameName="+curFrameName;//当前操作区域名称
  returnParameter += "&srcCacheName="+parentMes[0]+"&srcName="+parentMes[1]+"&srcID="+parentMes[2];//主表名称和参照字段当前ID
  for(var i = 0; i < childrenMes.length; i++) {
    returnParameter += "&desCacheName="+childrenMes[i][0]+"&desName="+childrenMes[i][1]+"&desVoucherName="+childrenMes[i][2];
  }
  
  if(curBtiFrameName != null) {
   jumpToPage_allied(curBtiFrameName, "/view/share/search/searchbond_more.jsp?"+returnParameter);
  } else {
	 
   jumpToPage_allied("hideArea", "/view/share/search/searchbond_more.jsp?"+returnParameter);
  }
}

//======================================================
// 税目到税率的关联。
// 注：第一个参数为一维数组、第二个参数为二维参数
//     参数一包含：1.参照字段所在表名称  2.参照字段NAME  3.参照字段当前ID
//     参数二包含：多个子表信息数组(包含：1.子表名称  2.关联字段NAME  3.如果为单据模式，为单据NAME，否则为空)
//     参数三包含：当前帧名称
//======================================================
function alliedObjs_bit(parentMes, childrenMes, curFrameName) {
  //参照信息是否完整
  if(parentMes.length < 3) {
    //alert("警告  第一个参数应包含的主表信息:\r\n 1.参照字段所在表名称 \r\n 2.参照字段NAME \r\n 3.参照字段当前ID");
    return;
  }
  //关联字段信息是否完整
  if(childrenMes.length == -1) {
    alert("警告  第二个参数为子表信息，以数组形式存在，必须确保其完整。");
    return;
  } else {
    for(var i = 0; i < childrenMes.length; i++) {
      if(childrenMes[i].length < 2) {
        alert("警告  第二个参数中,子表["+childrenMes[i][0]+"]信息不完整，必须包含：\r\n 1.子表名称 \r\n 2.关联字段NAME \r\n 3.如果为单据模式，为单据模式NAME，否则可为空");
        return;
      } else if(childrenMes[i].length < 2) {//如果只有两个子项，补足三个
        childrenMes[i][2] = "";
      }
    }
  }
  //关联字段和参照字段所在区域名称有否
  if(curFrameName == null || curFrameName.length == -1) {
    alert("警告  第三个参数为当前区域，不能为空！");
    return;
  }
  
  var returnParameter = "";
  returnParameter += "sourceFrameName="+curFrameName;//当前操作区域名称
  returnParameter += "&srcCacheName="+parentMes[0]+"&srcName="+parentMes[1]+"&srcID="+parentMes[2];//主表名称和参照字段当前ID
  for(var i = 0; i < childrenMes.length; i++) {
    returnParameter += "&desCacheName="+childrenMes[i][0]+"&desName="+childrenMes[i][1]+"&desVoucherName="+childrenMes[i][2];
  }
  
  jumpToPage_allied("hideArea", "/view/share/search/searchbond_bit.jsp?"+returnParameter);
  
}

//======================================================
//	以下接口为关联功能的辅助功能
//	关联功能涉及:  	1./view/share/search/searchbond.jsp
//									[辅助js接口: _addChildOption()、toucherAfterAllied()]
//									2./view/share/search/searchbond_more.jsp
//									[辅助js接口: _addChildOption_more()、toucherAfterAllied_more()]
//									3./view/share/search/searchbond_bit.jsp
//									[辅助js接口: _addChildOption()、toucherAfterAllied_bit()]
//======================================================
//向关联的下拉菜单插入值,返回的value是ID值
function _addChildOption(childName, curValue, curText) {
 
  var newOption = document.createElement("OPTION");
  newOption.value = ""+curValue+"";
  newOption.innerText = curText;
      
  eval("mainForm."+childName+".appendChild(newOption);");
  
  //如果有辅助框，删除辅助框中的值
  var suppObj = eval("mainForm."+childName+"_code");
  if(suppObj != null) {
    suppObj.value = "";
  }
  
}
//向关联的下拉菜单插入值,返回的value是ID+Name值

function _addChildOptionForName(childName, curValue, curText) {
 
  var newOption = document.createElement("OPTION");
  newOption.value = ""+curValue+"$$"+curText+"";
  newOption.innerText = curText;
      
  eval("mainForm."+childName+".appendChild(newOption);");
  
  //如果有辅助框，删除辅助框中的值
  var suppObj = eval("mainForm."+childName+"_code");
  if(suppObj != null) {
    suppObj.value = "";
  }
  
}


//向关联的下拉菜单插入值
function _addChildOption_more(childName, curValue, curText) {

  var newOption = document.createElement("OPTION");
  newOption.value = ""+curValue+"";
  newOption.innerText = curText;
      
  eval("mainForm."+childName+".appendChild(newOption);");
  
  //如果有辅助框，删除辅助框中的值
  var suppObj = eval("mainForm."+childName+"_code");
  if(suppObj != null) {
    suppObj.value = "";
  }
  
}


//当关联处理完毕后触发，供jsp重载使用
// @ param srcName    参照字段NAME(根据参照字段可知道触发的源头)
function toucherAfterAllied(srcName) {}
//======================================================

//当关联处理完毕后触发，供jsp重载使用，只限于"税种"-"税目"的关联
// @ param srcName    参照字段NAME(根据参照字段可知道触发的源头)
function toucherAfterAllied_more(srcName) {}
//======================================================

//当关联处理完毕后触发，供jsp重载使用，只限于"税目"-"税率"关联
// @ param srcName    参照字段NAME(根据参照字段可知道触发的源头)
function toucherAfterAllied_bit(srcName) {}
//======================================================




//======================================================
// 设置当前页面使用的快捷键
//======================================================
//键盘键名字典
var keyLibrary  = new Array();
//键名数组
var keyNames    = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
                           +"0","1","2","3","4","5","6","7","8","9",
                           +"`","-","=","\\","[","]","ENTER",
                           +";","'","\,",".","/","SPACE",
                           +"F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12");
//键代码
var keyCodes    = new Array("65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90",
                           +"48","49","50","51","52","53","54","55","56","57",
                           +"192","189","187","220","219","221","13",
                           +"186","222","188","190","191","32",
                           +"112","113","114","115","116","117","118","119","120","121","122","123");
                           
//将键名和键代码对应于键盘键名字典
for(var i = 0; i < keyNames.length; i++) {
  keyLibrary[keyNames[i]] = keyCodes[i];
}

/**
  * 设置当前页面使用的快捷键
  * @ param  sourceName    ：需要快捷键的控件NAME；
  * @ param  curSpeedkeyStr：大写字符串数组，为键名的组合。(两个特殊键名的输入方式：1."\"----"\\"  2.","----"\,")
  */
function addSpeedKeyScript(sourceName, curSpeedKeyStr){
  if(curSpeedKeyStr == null || curSpeedKeyStr == "" || curSpeedKeyStr.length == -1) {
    return;
  }
  
  var speedKeyCon = "";//判断快捷键的条件
  
  for(var i = 0; i < curSpeedKeyStr.length; i++) {
    var curSpeedKey = curSpeedKeyStr[i];
    var linkLabel   = "";
    if(speedKeyCon.length > 0) {
      linkLabel = "&&";
    }
    
    if(curSpeedKey == "CTRL") {
      speedKeyCon += linkLabel+"window.event.ctrlKey";  
    } else if(curSpeedKey == "ALT") {
      speedKeyCon += linkLabel+"window.event.altKey";  //ALT键必须与SHIFT或CTRL组合使用
    } else if(curSpeedKey == "SHIFT") {
      speedKeyCon += linkLabel+"window.event.shiftKey";  
    } else {
      speedKeyCon += linkLabel+"window.event.keyCode=="+keyLibrary[curSpeedKey];  
    }
  }
  
  if(eval("document.all('_btn_"+sourceName+"')") != null) {//快捷键所在控件为BUTTON
    _speedKeyMethodStr += "if("+speedKeyCon+") { document.all('_btn_"+sourceName+"').click(); }\r\n";
  } else {//快捷键所在控件不是BUTTON，此控件必须设置ID
    _speedKeyMethodStr += "if("+speedKeyCon+") { document.getElementById('"+sourceName+"').click(); }\r\n";
  }
  
}

document.onkeydown = _touchSpeedKey;

//触发快捷键
var _speedKeyMethodStr = "";//快捷键触发方法体
function _touchSpeedKey() {
  eval(_speedKeyMethodStr);
}



function sty_display(obj){
	     if (!document.getElementById(obj)){
		     return;
		 } 
		 if (document.getElementById(obj).style.display=="none"){
		      document.getElementById(obj).style.display="block";
	        document.getElementById("img" & mid(obj,3)).src="/view/image/common/menu_open.gif";
		 }else {
		      document.getElementById(obj).style.display="none";
	        document.getElementById("img" & mid(obj,3)).src="/view/image/common/menu_close.gif";
		 }
	}
//======================================================


//-----------------------------

 //跳转页面,翻页跳转
	 function fy_view1(pageID){		
		mainForm._pageno.value=pageID;
		mainForm.submit();
     }
//======================================================
//进度条控制============================================
//
closeStateItem();
function closeStateItem(){
	if(document.body!=null){
		setTimeout('closeStateItem()','100');
	}else{ 
		_closeStateItem();
	}
}
/*尚聪，关闭进度条，分两个是看有没有在frame里面*/
function _closeStateItem() { 
	if(parent._stateItemCot!=null){
		parent._stateItemCot(false);
	}
	if(parent.parent._stateItemCot!=null){
		parent.parent._stateItemCot(false);
	}	  
}
/*尚聪，打开进度条，分两个是看有没有在frame里面*/
function _openStateItem() { 
	if(parent._stateItemCot!=null){
		parent._stateItemCot(true);
	}
	if(parent.parent._stateItemCot!=null){
		parent.parent._stateItemCot(true);
	}	  
}
//将初始化焦点置于此处(即模块容器)
self.focus();



//------------------------------------------------------/
// 格式化小数,保留位数
// 参数： value:要格式化的数
//		  currPrec保留小数位数
// 返回： 格式化后的数	
//------------------------------------------------------/
function _formatFloatBit(value,currPrec){

	if(value==""||isNaN(value)){
			value=0;
		}
	var tempBit=1;
	for(i=0;i<currPrec;i++){
		tempBit=tempBit*10;
	}
	var value1=Math.round(value*tempBit);
	var valueTempT=value1+"";
	var valueTemp=valueTempT.substring(0,valueTempT.length-currPrec)+"."+valueTempT.substring(valueTempT.length-currPrec,valueTempT.length);
	if(value==0){
		valueTempT="";
			for(i=0;i<currPrec;i++){
				valueTempT=valueTempT+"0";
			}
		valueTemp="0."+valueTempT;
	}
	if(valueTemp.substring(0,1)=="."||valueTemp.substring(0,2)=="-."){
		valueTemp=valueTemp.substring(0,valueTemp.indexOf("."))+"0"+valueTemp.substring(valueTemp.indexOf("."));
	}
	return valueTemp
}