//***************************************************************************************
//	7WX API set 1.0 for Action Orient Programming (Leebai 200207) 
//  Copyright 2002-2006 XJAWA Corp.  libq@xjawa.com.cn
//***************************************************************************************

//			7WX Public Function
//============================================
//=======2.表单api==============================
//
//构造取表单所有字典所需的URL
function XgetFormDicsURL(theForm){
	var paras = new Array();
	var control;
	var getDicURL = "";
	for(var i=0;i<theForm.elements.length;i++){
		control=theForm.elements[i];
//		alert(control.name+"::"+control.Xdictionary);
		//control.Xdictionary=="1"时为虚字典，即字典数据不通过XgetFormDicsURL获取，但在
		//buffer中有其他来源的字典数据。XinitFormWithData时同样充填虚字典
		var dic = control.getAttribute("Xdictionary");
		if(dic != null && dic!="1"){
			if(dic.charAt(0)=="(" || dic.charAt(0)=="["){
				if(dic.charAt(dic.length-1)!=")" && dic.charAt(dic.length-1)!="]"){
					alert("开发者：控件"+ control.name + "的Xdictionary属性定义错误：括符没有结束："+dic);
					return "";
				}
				var dicv = dic.substring(1,dic.length-1);
				var dicValues = dicv.split(",");
				var dicArray = new Array();
				if(dic.charAt(0)=="("){//like:(option1,#option2/,option3)   #--selected/checked /--new line
					for(var j=0;j<dicValues.length;j++){
						dicArray[j] = [dicValues[j].charAt(0)=="#"?dicValues[j].substring(1):dicValues[j],dicValues[j]];
						var endChar = dicValues[j].charAt(dicValues[j].length-1);
						if(endChar=="/"||endChar=="\\")
							dicArray[j] = [dicValues[j].substring(0,dicValues[j].length-1),dicValues[j]];
					}
				}else{//like;[value1,text1,value2,#text2/,value3,text3]
					if((dicValues.length % 2)==1){
						alert("开发者：控件"+ control.name + "的Xdictionary属性定义错误：代码型枚举字典的值必须成对出现："+dic);
						return "";
					}
					for(var j=0;j<dicValues.length/2;j++)
						dicArray[j] = [dicValues[j*2],dicValues[j*2+1]];
				}
				//control.setAttribute("XdicArray",dicArray);//DOM Element 的get/setAttribute()只能存取DOMString类型的数据
				systemValue7WX[control.name+".XdicArray"] = dicArray;//firefox中F5仍有问题todo...

			}else{
				paras = dic.split(",");
				if(paras.length < 6){
					alert("开发者：控件"+ control.name + "的Xdictionary属性应为以逗号分割的六个值：schema名,表名,id列,名列,过滤条件,排序列名。如果字典表不在默认数据源，则在后面再加一个值指定数据源");
					return "";
				}
				getDicURL += XmakeDicURL(paras[0],paras[1],paras[2],paras[3],paras[4],paras[5],paras.length==6?'null':paras[6],control.name);
			}
		}
	}
	
	return getDicURL;
}

//取字典url构造
function XmakeDicURL(schema,table,idColumn,textColumn,where,order,dsName,arrName){
	return "&_XschemaName=" + schema
			+"&_X_Dic_tableName=" + table
			+"&_XidColumnName=" + idColumn
			+"&_XtextColumnName=" + textColumn
			+"&_Xwhere=" + where
			+"&_Xorder=" + order
			+"&_XdsName=" + dsName
			+"&_XarrName=" + arrName;
}

//设定自动调节表单内控件的宽度，在XinitFormWithData()之前调用
function XadjustControlSize(){_XadjustControlSize=true;}
//设定表单在焦点离开域时不检查域合法性，在XinitFormWithData()之前调用
function XnoValidateOnBlur(){_XvalidateOnBlur=false;}
//设定表单控件的显示样式，在XinitFormWithData()之前调用
function XnoFormatControlStyle(){_XformatControlStyle=false;}


//1.充填选项框
//2.根据结果集元数据初试化表单validate参数（对new及update）
//3.取记录以充填表单（对update）
//arrName为记录集对应的数组名
function XinitFormWithData(theForm,arrName,isQForm){
	XisQueryForm = typeof(isQForm) != "undefined";

	var rsArr = eval("buffer."+arrName);
	if(typeof(rsArr)=="undefined")
		{alert("开发者：从指定给XinitFormWithData的数组名参数得不到数组变量");return;	}

	if(typeof(theForm.tagName)=="undefined" || theForm.tagName.toUpperCase()!="FORM")
		{alert("开发者：XinitFormWithData的第一个参数必须是一个表单");return;}
	if(theForm.elements.length < 1 )return;

	//if(rsArr.length > 1)
	//	{alert("开发者：查询返回错误,更改的记录不止一条。");return;}

	var forUpdate = rsArr.length > 0 ;//is update?

	if(typeof(theForm.XhasDic)=="undefined"){
		_XsetFormDictionary(theForm); //设置字典
//		alert("_XsetFormDictionary:\n\n" + theForm.outerHTML);
		theForm.XhasDic = "1";
	}

	if(typeof(theForm.XhasMeta)=="undefined"){
		_XsetFormLabel(theForm,arrName,forUpdate);
		_XsetFormControl(theForm,arrName,forUpdate); //设置校验
//		alert("_XsetFormControl:\n\n" + theForm.outerHTML);
		theForm.XhasMeta = "1";
	}

	if(forUpdate){ //更新对象,充填数据
//		alert("before _XfillFormWithData:\n\n" + theForm.outerHTML);
		_XfillFormWithData(theForm,arrName); 
//		alert("_XfillFormWithData:\n\n" + theForm.outerHTML);
	}

	theForm.style.display="";
}


function Xvalidate(theForm){
	return _XvalidateForm(theForm);
}

//====选择框<select>元素常用函数=============================================================
//add option to select control 
function XaddOption(selecter,id,name,selected){
	var oOption = document.createElement("OPTION");
	oOption.value=id;
	oOption.text=name;
	if(typeof(selected)!='undefined'&& selected)
		oOption.selected=true;
	selecter.add(oOption);
}
//contain option? 
function XgetOptionByValue(selecter,value){
	for(var i=0; i<selecter.options.length; i++){
		if(selecter.options[i].value == value)
			return selecter.options[i];
	}
	return null;
}
//add option to select control 
function XaddOptionEx(selecter,id,name,selected){
	if(XgetOptionByValue(selecter,id)==null)
		XaddOption(selecter,id,name,selected);
}

// get selected options' value as url 
function XgetSelectedOptionsURL(selecter,idname){
	var url="";
	var opts = XgetSelectedOptions(selecter,idname);
	for(var i=0; i<opts.length;i++)
		url += "&" + idname + "=" + opts[i];
	return url;
}
// get selected option' value as array
function XgetSelectedOptions(selecter,idname){
	var opts = new Array();
	for(var i=0; i<selecter.options.length;i++)
		if(selecter.options[i].selected)
			opts[opts.length] = selecter.options[i].value;
	return opts;
}
// remove selected options
function XremoveSelectedOptions(selecter){
	for(var i=selecter.options.length-1; i>=0; i--){
		if(selecter.options[i].selected){
			if(window.HTMLElement)
				selecter.removeChild(selecter.options[i]);
			else
				selecter.options.remove(i);
		}
		
	}
}
function XremoveSelectedOptgroup(selecter){
	for(var i=0;i<20;i++){
		if(document.getElementById(selecter.id+"_"+i) != undefined && document.getElementById(selecter.id+"_"+i) != null){
			selecter.removeChild(document.getElementById(selecter.id+"_"+i));
		}else{
			break;
		}
	}
}

//bind Control with Dictionary
function XbindControlWithDictionary(control,dicArray){
	if(control.tagName.toLowerCase()=="input"
		&& (control.type=="radio" || control.type=="checkbox")){

		var allItemHtml = "";
		control.setAttribute("Xdictionary","");//anti reflect
		var itemSep = control.getAttribute("Xdirection")==null ? "<br>" : "&nbsp; ";
		for(var j=0;j<dicArray.length;j++){
			control.value = dicArray[j][0];
			var xchecked = "";
			if(dicArray[j][1].charAt(0)=="#"){
				dicArray[j][1] = dicArray[j][1].substring(1);
				xchecked = " checked";
			}
			var xnewline = "";
			if(dicArray[j][1].charAt(dicArray[j][1].length-1)=="/"||dicArray[j][1].charAt(dicArray[j][1].length-1)=="\\"){
				dicArray[j][1] = dicArray[j][1].substring(0,dicArray[j][1].length-1);
				xnewline = "<br>";
			}

			allItemHtml += control.outerHTML.substring(0,control.outerHTML.length-1)
					+ xchecked +">"+ dicArray[j][1] + itemSep + xnewline;
		}//alert(allItemHtml)
		control.outerHTML = allItemHtml.substring(0,allItemHtml.length-itemSep.length);

	}else if(control.tagName.toLowerCase()=="select"){
		XremoveSelectedOptions(control);
		if(XisQueryForm){
			var oOption = document.createElement("OPTION");
			oOption.text="所有";
			oOption.value="";
			control.add(oOption);
		}
		var selectedVar = null;
		for(var j=0;j<dicArray.length;j++){
			var oOption = document.createElement("OPTION");
			var oText = dicArray[j][1];
			oOption.text = oText.charAt(0)=="#" ? oText.substring(1) : oText;
			if(oText.charAt(0)=="#"){
				//oOption.selected = true;//在ie中，如select元素不可见，则此句不起做用
				selectedVar= dicArray[j][0];
			}

			oOption.value=dicArray[j][0];
			control.add(oOption);
		}
		if(selectedVar!=null)control.value = selectedVar;
	}
}
function XbindControlWithDictionary_select(control,dicArray,depArray){
	XremoveSelectedOptions(control);
	XremoveSelectedOptgroup(control);
	var initOp = new Option("请选择","0");
	initOp.id = control.id+"_init";
	initOp.selected = true;
	initOp.disabled = true;
	control.options.add(initOp);
	for(var i=0;i<dicArray.length;i++){
		var oPtgroup = document.createElement("OPTGROUP");
		//oPtgroup.style.color="#777777";   
        oPtgroup.style.fontStyle="normal";   
        oPtgroup.style.fontWeight="normal";
		var oText = dicArray[i][1];
		oPtgroup.id = control.id+"_"+i;
		oPtgroup.label = oText;
		control.appendChild(oPtgroup);
		for(var j=0;j<depArray.length;j++){
			if(depArray[j][0] == 213){
				continue;
			}
			if(dicArray[i][0] == depArray[j][3])
				control.options.add(new Option(depArray[j][1],depArray[j][0]));
		}
	}
}

//===杂项功能，将来另成文件=============================================

//转换表单中输入的unicode字符为常规字符
var xCommonUCs = [169,174,8482,165,167,163,945,946,8230,8240];
var xCommonUCMaps = ['(c)','(r)','TM','&yuan','&sect','&pound','&alpha','&beta','...','0/00'];
var xCommonUCChars = new Array();
for(var i=0; i<xCommonUCs.length; i++){
	xCommonUCChars[xCommonUCChars.length] = String.fromCharCode(xCommonUCs[i]);
}
function XtransUnicode(strIn){
	for(var i=0;i<xCommonUCChars.length;i++){
		while(strIn.indexOf(xCommonUCChars[i])>=0)
			strIn = strIn.replace(xCommonUCChars[i],xCommonUCMaps[i]);
	}

	return strIn;
}



//=================================================================
//			7WX Private Function
//=================================================================
//fill dictionary
var XisQueryForm=false;//Query Form(no lostFocusValidate,no mastField,plus allDic) vs Record Form
function _XsetFormDictionary(theForm){
	var control;
	for(var i=0;i<theForm.elements.length;i++){
		control=theForm.elements[i];
		if(control.getAttribute("Xdictionary") != null && control.getAttribute("Xdictionary") != ""){

			//var dicArray = control.getAttribute("XdicArray");//枚举型字典 //bad in firefox
			var dicArray = systemValue7WX[control.name+".XdicArray"];
			//alert(typeof(dicArray))
			if( dicArray == null){
				dicArray = eval("buffer." + control.name);
				if(typeof(dicArray)=="undefined"){
					alert("开发者：控件 "+control.tagName+":"+control.name
						+" 指定的字典数据(即名为 " + control.name +" 的二维数组)在 buffer 中找不到。可能是字典数据定义有问题。");
					continue;
				}
			}
			XbindControlWithDictionary(control,dicArray);
		}
	}
}



//set input control's label by column name
function _XsetFormLabel(theForm,arrName,forUpdate){
	var colNames = eval("buffer." + arrName + "_colNames");
	if(typeof(colNames)=="undefined"){
		alert("后端开发者：表单" + theForm.id + "的取记录数据返回中没有元数据MetaData");
		return;
	}
	var colLabels = eval("buffer." + arrName + "_colLabels");
	for(var i=0; i<colNames.length; i++){
		var labelSpan = document.getElementById("xcLabel_" + colNames[i].toLowerCase());
		
		if(labelSpan!=null){ 
			if(forUpdate || labelSpan.getAttribute("XinvisibleOnNew")==null){
				labelSpan.innerHTML = colLabels[i];	
			}
		}
	}
}

//set validating paras for form control
function _XsetFormControl(theForm,arrName,forUpdate){
	var control;
	for(var i=0;i<theForm.elements.length;i++){
		control=theForm.elements[i];
		
		if(_XformatControlStyle){
			if(control.tagName.toLowerCase()=="input"){
				if(control.type=="password" || control.type=="text"){
					control.className = "formInput";
				}else if(control.type=="file"){
					control.className = "formInputFile";
				}
			}else if(control.tagName.toLowerCase()=="textarea"){
				control.className = "formTextarea";
			}
		}

		if((control.tagName.toLowerCase()=="input" && (control.type=="password" || control.type=="text"))
			|| control.tagName.toLowerCase()=="textarea"){
		//	if(typeof(control.Xmetas)=="undefined"){//already control on form
				_XsetControlMeta(arrName,control);
				
				if(forUpdate && control.getAttribute("XreadonlyOnUpdate")!=null){
					control.readOnly=true;
					control.style.borderWidth=0;
					control.style.backgroundColor="#f3f4f5";

				}
				if(!forUpdate && control.getAttribute("XinvisibleOnNew")!=null){
					control.style.display = "none";
					//control.style.visibility = "hidden";
				}
				
		//	}
		}

		control.onkeydown = _XifReturnThenNext;
		if(i==theForm.elements.length-1)
			control.XnextControl = theForm.elements[0];
		else
			control.XnextControl = theForm.elements[i+1];

//		alert(control.outerHTML);
	}

//	theForm.onsubmit = _XvalidateForm; //不好使
}

//_XsetFormControl辅助函数
var _XformatControlStyle = true;
var _XvalidateOnBlur = true;
var _XadjustControlSize=false;
var XmetaNames = new Array();
XmetaNames = ["colLabels","colTypeNames","colSizes","colPrecisions","colScales","colNullables"];
function _XsetControlMeta(arrName,control){
	var tmp = "buffer."+ arrName + "_";
	var colIndex = eval(tmp + control.name.toUpperCase());
	
	if(typeof(colIndex)=="undefined") return;

	var metaArr;
	control.Xmetas = new Array();
	for(var i=0;i<XmetaNames.length;i++){
		metaArr = eval(tmp + XmetaNames[i]);
		control.Xmetas[XmetaNames[i]] = metaArr[colIndex];
	}
	if(!XisQueryForm && _XvalidateOnBlur) control.onblur = _XvalidateControl_;

	if(XallCharType.indexOf("-" + control.Xmetas["colTypeNames"] + "-")>=0){
		control.maxLength = control.Xmetas["colSizes"]; //can use for number??????
		control.onkeypress = _XadjustMaxLength; //cann't sence chinese input
	//	alert(control.name + "---maxLength:"+ control.maxLength);
	}

	if((XallIntType+XallFloatType+XallNumberType).indexOf(
		"-" + control.Xmetas["colTypeNames"] + "-")>=0){
		if(_XformatControlStyle) control.className = "formInputNumber";
		control.onkeypress = _XnumberCheck;
	}
	if(!XisQueryForm && control.Xmetas["colNullables"]=='0'){
		if(_XformatControlStyle) control.style.borderBottom = "1px solid red";
	}
	
	if(_XadjustControlSize==true && (!(control.tagName.toLowerCase()=="textarea"))){
		if(( control.size > parseInt(control.Xmetas["colSizes"])//IE 20 is default
			|| (control.size==0 && parseInt(control.Xmetas["colSizes"])<20) ) //Firefox 0 is default
			&& control.outerHTML.toLowerCase().indexOf("size")<0){
			control.size = parseInt(control.Xmetas["colSizes"]);
		}
	}

}

//fill form with record array data
function _XfillFormWithData(theForm,arrName){ 
	var tmp = "buffer." + arrName + "_";
	var control;
	var arrData = eval("buffer." + arrName);
	var colData;
	var arrRowIndex = (typeof(theForm.elements[0].XfirstTD)=="undefined") ? 0 : -1; //used for Table Editing

	for(var i=0;i<theForm.elements.length;i++){
		control=theForm.elements[i];
		if(typeof(control.XfirstTD)!="undefined") arrRowIndex++;//used for Table Editing
		if(typeof(control.name)=="undefined")continue;
		var colIndex = eval(tmp+control.name.toUpperCase());
		if(typeof(colIndex)=="undefined")continue;//form control Num > column Num,has unbind control
//		alert(arrRowIndex);
		colData=arrData[arrRowIndex][colIndex];
		if(control.getAttribute("Xformat")!=null){//control may format buffer data
			if(typeof(eval(control.getAttribute("Xformat")))=="undefined"){
				alert("开发者：格式化函数 " + control.getAttribute("Xformat") + "未定义。");
				return;
			}else{
				colData = eval(control.getAttribute("Xformat"))(colData);
			}
		}
		var ctlTag = control.tagName.toLowerCase();

//		alert(control.name + ":" + control.type)

		if(ctlTag=="input"){
			if(control.type=="password" || control.type=="text" || control.type=="hidden"){
				control.value = colData;
			}else if(control.type=="radio"){//multi controls
				if(control.value == colData) control.checked=true;
			}else if(control.type=="checkbox"){//single or multi controls
//				if(control.value == colData) control.checked=true;

				//for multi select example: colData("a,b,c,d,e")----control.value("d")
				if((","+colData+",").indexOf(","+control.value+",")>=0)
					control.checked=true;
				else
					control.checked=false;
			}		

		}else if(ctlTag=="textarea"){
			control.value = colData;

		}else if(ctlTag=="select"){
			for(var j=0; j<control.options.length; j++){
//				if(colData==control.options[j].value)
//					control.options[j].selected=true;

				//for multi select
				if(control.options[j].value.length>=0 && //>=0 or >0 ??? (>=0)for cms5 column.html
					(","+colData+",").indexOf(","+control.options[j].value+",")>=0){
					control.options[j].selected=true;
				}else
					control.options[j].selected=false;
			}
		}
	}
}

//对表单进行输入校验（对new及update）
function _XvalidateForm(theForm){
	if(typeof(theForm.XhasMeta)=="undefined"){
		alert("开发者：调用XvalidateForm之前需先调用XinitFormWithData");
		return false;
	}
	var dataError = "";
	var control;
  for(var i=0;i<theForm.elements.length;i++){
		control=theForm.elements[i];

		if((control.tagName.toLowerCase()=="input" && (control.type=="password" || control.type=="text"))
			|| control.tagName.toLowerCase()=="textarea"){
			//去掉前后空格20071228  add by zhangyijun
			if((control.tagName.toLowerCase()=="input" && control.type=="text")
			|| control.tagName.toLowerCase()=="textarea"){
				control.value = trimWEB(control.value);
			}	
			var tmpErr = "";
			if(typeof(control.Xmetas)!="undefined")
				tmpErr = _XvalidateControl(control);

			var tmpLabel;
			if(tmpErr.length > 0 ){
				tmpLabel = control.getAttribute("Xlabel")==null ? 
					control.Xmetas["colLabels"] : control.getAttribute("Xlabel");
				dataError += "* " + tmpLabel + "： " + tmpErr + "\n";
			}
		}
	}

	if(dataError.length > 0){
		alert("表单输入不符合系统要求，请更正以下输入错误:                \n\n"+ dataError);
		return false;
	}
	return true;
}

//validate input control (text or password only)
var XallCharType = "-VARCHAR2-CHAR-VARCHAR-CHARACTER-LONG-CHARACTER VARYING-LONG VARCHAR-TEXT-CLOB-----";
var XallIntType = "-INTEGER-INT-SMALLINT-BIGINT-TINYINT-----";
var XallFloatType = "-FLOAT-DOUBLE-DOUBLE PRECISION------";
var XallNumberType = "-NUMBER-DECIMAL-DEC-REAL------";
var XallDateType = "-DATE-TIME-TIMESTAMP-DATETIME-----";
function _XvalidateControl(control){
	var errInfo="";
	if(control.getAttribute("XalwaysValid")!=null)
		return errInfo;

	var xtype = "-" + control.Xmetas["colTypeNames"].toUpperCase() + "-";
	var xvalue = control.value;
	if(xvalue.length > 0){
		if(XallCharType.indexOf(xtype)>=0){
			if(_XstrByteLength(xvalue) > control.Xmetas["colSizes"])
				errInfo = "字符个数不能超过" + control.Xmetas["colSizes"] + "(一个汉字算两字符)";

		}else if(XallIntType.indexOf(xtype)>=0){
			if(!_XisAllNumberChar(xvalue)|| isNaN(parseInt(xvalue)) || xvalue.indexOf(".") >=0)
				errInfo = "只能输入整数值";
			else if(xvalue.charAt(0)=="-" && xvalue.length-1>control.Xmetas["colPrecisions"]
					|| xvalue.charAt(0)!="-" && xvalue.length>control.Xmetas["colPrecisions"])
				errInfo = "输入的整数值不能大于"+control.Xmetas["colPrecisions"]+"位";
	

		}else if(XallFloatType.indexOf(xtype)>=0){
			if(!_XisAllNumberChar(xvalue)|| isNaN(parseFloat(xvalue)))
				errInfo = "只能输入浮点数值";

		}else if(XallNumberType.indexOf(xtype)>=0){
			if(!_XisAllNumberChar(xvalue)|| isNaN(parseFloat(xvalue)))
				errInfo = "只能输入数值";
			else{
				if(xvalue.charAt(0)=="-")
					xvalue = xvalue.substring(1);
				var pp,ss;
				var pLen=parseInt(control.Xmetas["colPrecisions"]);
				var sLen=parseInt(control.Xmetas["colScales"]);

				var ppi = xvalue.indexOf(".");
				if(ppi>=0){
					pp = parseInt(xvalue.substring(0,ppi)).toString();
					ss = parseInt(xvalue.substring(ppi+1)).toString();
					if(ss.length > sLen
						&& Math.abs(sLen)<50)//for oracle float
						errInfo = "小数部分只能精确到　"+control.Xmetas["colScales"]+"　位";
				}else{
					pp = parseInt(xvalue).toString();
				}
				if(pp.length > (pLen-sLen)
					&& Math.abs(pLen) <50)
					errInfo += " 整数部分不能大于　"+(pLen-sLen)+"　位";
			}

		}else if(XallDateType.indexOf(xtype)>=0){
			//??????????????????????????????????
			//no check for date; input date vi selecting
		}else{
			//alert("开发者：发现未知的数据库数据类型 " + control.Xmetas["colTypeNames"]);
			}
	}else
		if(control.Xmetas["colNullables"]=="0")
			errInfo += " 本输入域不能为空";

//	alert(control.name + ":::" + xtype + ":::" + errInfo)

	if(control.getAttribute("Xvalidate")!=null){//control can specify own checking
		if(typeof(eval(control.getAttribute("Xvalidate")))=="undefined"){
			alert("开发者：检查函数 " + control.getAttribute("Xvalidate") + "未定义。");
			return "";
		}else{
			errInfo += eval(control.getAttribute("Xvalidate"))(control.value);
		}
	}

	return errInfo;
}
//validate control onblur
var XafterSetFocus=false;
function _XvalidateControl_(event){
	if(typeof(event)=="undefined")event=window.event;
	var evenSrc = event.srcElement;

//	alert(XafterSetFocus + ","+ evenSrc.XSetFocusObject);
	if(XafterSetFocus && (typeof(evenSrc.XSetFocusObject)=="undefined"
		|| evenSrc.XSetFocusObject=="0")) return;
	
	var errInfo = _XvalidateControl(evenSrc);
	if(errInfo.length > 0){
		alert("不正确的输入：" + errInfo);

		XafterSetFocus = true;
		evenSrc.XSetFocusObject = "1";
		evenSrc.focus();
		var tr = evenSrc.createTextRange();
		tr.select();

	}else{
		XafterSetFocus = false;
		evenSrc.XSetFocusObject = "0";
	}
}

//string database length
function _XstrByteLength(strIn){
	return strIn.length + _XDBCCount(strIn);
}
//count double byte chars number in string
function _XDBCCount(strIn){
	var len = 0;
	var uStr = escape(strIn);
	for(var i=0;i<uStr.length;i++)
		if(uStr.charAt(i)=="%" && uStr.charAt(i+1)=="u" ){
			len++;i+=5;
		}
	return len;
}
//Dynamic change input control's maxLength for double byte chars
function _XadjustMaxLength(event){
	if(typeof(event)=="undefined")event=window.event;
	var control = event.srcElement;
	var DBCCount = _XDBCCount(control.value);
	if(control.value.length + DBCCount > control.Xmetas["colSizes"])
		event.returnValue=false;
	else
		control.maxLength = control.Xmetas["colSizes"] - DBCCount;
}

//number checking
var XnumberChars = "01234567890-.";
function _XnumberCheck(event){
	if(typeof(event)=="undefined")event=window.event;
	if(XnumberChars.indexOf(String.fromCharCode((window.HTMLElement)?event.charCode:event.keyCode)) < 0)
		event.returnValue=false;
}
//is all number char
function _XisAllNumberChar(str){
	for(var i=0;i<str.length;i++){
		if(XnumberChars.indexOf(str.charAt(i)) < 0)
			return false;
	}
	return true;
}

// as name
function _XifReturnThenNext(event){
	if(typeof(event)=="undefined")event=window.event;
	var srcElm = event.srcElement;
	if(srcElm.tagName.toLowerCase() == "button"
		|| (srcElm.tagName.toLowerCase() == "input" && (srcElm.type=="button" || srcElm.type=="submit" ||srcElm.type=="reset"))
		|| srcElm.tagName.toLowerCase() == "textarea")
		return;

	if(event.keyCode==13){
		var nextCtl=srcElm.XnextControl;
		while ((nextCtl.tagName.toLowerCase()=="input" && nextCtl.type=="hidden")
			|| nextCtl.style.display == "none" || nextCtl.style.visibility == "hidden"
			|| nextCtl.style.disabled || nextCtl.readOnly){
			nextCtl = nextCtl.XnextControl;
		}
		try{
			nextCtl.focus();
		}catch(e){
			
		}
		event.returnValue=false; //!!!!not put this key to next control
	}
}

/**********表单验证 去掉前后空格********************************/
//去掉字符串头尾空格 luzhonghua
function trimWEB(str)
{
  var strReturn;
  strReturn = leftTrim(str);
  strReturn = rightTrim(strReturn);
  return strReturn;
}

//去掉字符串头空格  luzhonghua
function leftTrim(strValue)
{
  var re =/^\s*/;
  if(strValue==null)
    return null;

 strValue= "" + strValue;
  var strReturn = strValue.replace(re,"");

  return strReturn;
}

//去掉字符串尾空格  luzhonghua
function rightTrim(strValue)
{
  var re =/\s*$/;
  if(strValue==null)
    return null;

  var strReturn = strValue.replace(re,"");

  return strReturn;
}

