
/**
 * 统一业务校验
 * className:实现com.itown.framework.IBizValidator的类名称
 * buttonName:校验成功时，执行点击的按钮名称
 */
function bizValidateUsingService(className,buttonName){
			var myForm=document.forms[0];
			var flag=itownObjsMgr.validateAll(myForm);
			if(!flag){
				return false;
			}

			document.forms[0].setAttribute("target","publicSubmitFrame");		
			var url = "./controller?SERVICE_ID=FRAMEWORK_PUBLIC_SERVICE_VALIDATOR"
			//		+ "&className=" + className + "&buttonName=" + buttonName;
			//modify by dongxin 修改通用后台校验无法和上载文件一起使用的问题 
			document.forms[0].framework_className.value=className;
			document.forms[0].framework_buttonName.value=buttonName;
			//end
			document.forms[0].setAttribute("action",url);
			document.forms[0].submit();
}

//modify by dongxin 添加方法，后台业务校验提交非页面中第一个表单的方法
function bizValidateUsingServiceWithForm(className,buttonName,myForm){
			 
			var flag=itownObjsMgr.validateAll(myForm);
			if(!flag){
				return false;
			}

			myForm.setAttribute("target","publicSubmitFrame");		
			var url = "./controller?SERVICE_ID=FRAMEWORK_PUBLIC_SERVICE_VALIDATOR"
					+ "&framework_className=" + className + "&framework_buttonName=" + buttonName;
			myForm.setAttribute("action",url);
			myForm.submit();
}



/* 
 * 用于校验是否是唯一的业务主键
 * tableName:要校验的表名
 * paramString:校验的字段信息，例如：user_name='JJ'
 */
function checkUniqueBizColumn(tableName,paramString){
	var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	xmlhttp.open("POST", "./checkcolumnuniqueservlet",false);
	xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	xmlhttp.send("tableName=" + tableName + "&" + paramString);
	
	var responseInfo = xmlhttp.responseText;
	if(responseInfo == "true"){//表中不存在该业务主键
		return true;
	}else{
		return false;
	}
}

/**用于校验主键是否重复,最多支持五个字段，还要考虑编辑区内的字段
 * operateType：操作类别，有两种，分别是插入i和修改u
 * checkName：选中按钮的名字，在更新是要用
 */
function subTableKeysIsUnique(operateType,checkName,keyNames){
	var keysArray = new Array();
	var unique = true;
	
	if(keyNames == null || keyNames.length == 0) return true;
	
	var key1s = document.getElementsByName(keyNames[0]);
	var editValue = document.getElementsByName(keyNames[0] + "_modify")[0].value;
	var rowSize = key1s.length;

	var checkKeys = document.getElementsByName(checkName);

	var key2s = null;
	if(keyNames.length >= 2){
		key2s = document.getElementsByName(keyNames[1]);
		editValue = editValue + "---" + document.getElementsByName(keyNames[1] + "_modify")[0].value;
	}
	var key3s = null;
	if(keyNames.length >= 3){
		key3s = document.getElementsByName(keyNames[2]);
		editValue = editValue + "---" + document.getElementsByName(keyNames[2] + "_modify")[0].value;
	}
	var key4s = null;
	if(keyNames.length >= 4){
		key4s = document.getElementsByName(keyNames[3]);
		editValue = editValue + "---" + document.getElementsByName(keyNames[3] + "_modify")[0].value;
	}
	var key5s = null;
	if(keyNames.length >= 5){
		key5s = document.getElementsByName(keyNames[4]);
		editValue = editValue + "---" + document.getElementsByName(keyNames[4] + "_modify")[0].value;
	}
	

	for(var i = 0;i < key1s.length;i++){
		var tempValue = key1s[i].value;
		
		if(key2s != null){
			tempValue = tempValue + "---" + key2s[i].value;
		}
		if(key3s != null){
			tempValue = tempValue + "---" + key3s[i].value;
		}
		if(key4s != null){
			tempValue = tempValue + "---" + key4s[i].value;
		}
		if(key5s != null){
			tempValue = tempValue + "---" + key5s[i].value;
		}
		
		keysArray.push(tempValue);
	}	
	
	if(operateType == 'i'){
		for(var i = 0;i < keysArray.length;i++){
			//alert("keysArray[i]:" + keysArray[i] + " and editValue:" + editValue);
			if(keysArray[i] == editValue){
				unique = false;
				break;
			}
		}
	}else{//update when operateType == 'u'
		for(var i = 0;i < keysArray.length;i++){
			//alert("keysArray[i]:" + keysArray[i] + " and editValue:" + editValue);
			if(!checkKeys[i].checked){//业务主键不应和其他记录的相同，但自己的如果未修改，可以相同
				if(keysArray[i] == editValue){
					unique = false;
					break;
				}	
			}
		}
	}
	
	return unique;
}

/**
 * 用来翻页，同时将查询结果中选中的信息附带在url的后面
 * @params url:原来的翻页url
 * @params pageDivideAlreadySelected:存放翻页信息的隐藏域名
 */
function pageActionWithStatus(url,pageDivideAlreadySelected,boxName){
	var appended = makeAppendedInPageAction(pageDivideAlreadySelected,boxName);
	if(appended != ""){
		//appended = encode64(appended);
	}
	//if(appended != null && appended.replace(/[^\x00-\xff]/g,"aa").length > 1200){
	//	alert("已选项过多,系统当前不支持,请修改。");
	//	return;
	//}

	//appended = "&" + pageDivideAlreadySelected + "=" + appended;
	//window.location = url + appended;
	if(window.top.opener != null){
		window.top.opener.pageDivideAlreadySelected = appended;
	}
	//将已经选中信息保存在父页面
	if(window.parent != null){
		if(window.parent.document.forms[0].pageAlreadySelected!=null){
			window.parent.document.forms[0].pageAlreadySelected.value = appended;
		}
	}
	url = url.replace(/\%/g,"%25");//直接替换%
	window.location = url;
}


//生成appended对象，被pageActionWithStatus()调用
function makeAppendedInPageAction(pageDivideAlreadySelected,boxName){
  	var strScript="document.forms[0]."+pageDivideAlreadySelected;

	var appended = "///";
	var alreadySelected = null;
	if(eval(strScript)!=null){
		alreadySelected = eval(strScript);
		appended = alreadySelected.value + "///";
	}
	var myForm=document.forms[0];
	var mySelectBox=new SelectBox(boxName,myForm);
	//已选的
	var selectedValues=mySelectBox.getSelectedValues();
	for(var i = 0;i < selectedValues.length;i++){
		var reverseSelected = reverseReturnDataSequence(selectedValues[i]);
		if(appended.indexOf(selectedValues[i]) == -1 && appended.indexOf(reverseSelected) == -1){
			appended = appended + selectedValues[i] + "///";
		}

	}
	//未选的
	var unselectedValues=mySelectBox.getUnselectedValues();
	for(i = 0;i < unselectedValues.length;i++){
		if(appended.indexOf(unselectedValues[i] + "///") != -1){
			appended = appended.replace(unselectedValues[i] + "///","");
		}
		var reverseSelected = reverseReturnDataSequence(unselectedValues[i]);
		if(appended.indexOf(reverseSelected) != -1){
			appended = appended.replace(reverseSelected + "///","");
		}
	}
	var result = appended.substring(0,appended.length - 3);
	//alert(result);
	
	return result;
}

/**
 * 返回值的参数反转,例如 name=1&value=2，转成value=2&name=1
 * @params source
 */
function reverseReturnDataSequence(source){
	if(source != undefined && source.indexOf("$$") > 0){
		var sourceArray = source.split("$$");
		var temp = "";

		for(var i=sourceArray.length-1;i>=0;i--){

			if(i == sourceArray.length - 1){
				temp = sourceArray[i];
			}else{
				temp = temp + "$$" + sourceArray[i];
			}
		}
		return temp;

	}else{
		return source;
	}
}

/**
 * 用于将父窗口中的pageDivideAlreadySelected读取过来,在弹出窗口多选查询时用到
 *
 */
function updatePageDivideAlreadySelected(pageDivideAlreadySelected){
	var strScript="document.forms[0]."+pageDivideAlreadySelected;
	if(eval(strScript)!=null){
		var alreadySelected = eval(strScript);
		try{
			if(window.top.opener.pageDivideAlreadySelected != null){
				alreadySelected.value = window.top.opener.pageDivideAlreadySelected;
			}
		}catch(e){
	
		}
	}
}

/**
 * 检查是否应将当前项选中
 * @params pageDivideAlreadySelected:存放翻页信息的隐藏域名
 * @params chkSelfId:用于检查的对象Id
 */
function checkSelectInPageDivide(pageDivideAlreadySelected,chkSelfId){
	var strScript="document.forms[0]."+pageDivideAlreadySelected;

	var appended = "";
	if(eval(strScript)!=null){
		var alreadySelected = eval(strScript);

		appended = alreadySelected.value;
		//appended = decode64(alreadySelected.value);

		var chkSelf = document.getElementById(chkSelfId);

		if(appended.indexOf(chkSelf.value) != -1){
			chkSelf.checked = true;
		}
		var reverseSelected = reverseReturnDataSequence(chkSelf.value);
		if(appended.indexOf(reverseSelected) != -1){
			chkSelf.checked = true;
		}
	}
}


/**----------------------------------------------查询区按纽调用的函数-----------------------------------------------**/
/**
 * 重置查询信息
 * @params curObj:重置按钮自身对象。
 * 说明：要求重置按钮对象要在查询条件域所在的表单中。
 */
function resetSearch_public(curObj){
	if(curObj==undefined){
		throw "调用resetSearch_public方法时，curObj参数不能为null.";
	}
	if(curObj.form==undefined){
		throw "调用resetSearch_public方法时，传入的curObj对象不在表单中。";
	}
	resetSearchCondition(curObj.form);
}

/**
 * 查询按纽执行的方法
 * @params curObj:查询按钮自身对象。
 * 说明：要求查询按钮对象要在查询条件域所在的表单中。
 */
function searchData_public(serviceID,curObj){
	if(curObj==undefined){
		throw "调用searchData_public方法时，curObj参数不能为null.";
	}
	if(curObj.form==undefined){
		throw "调用searchData_public方法时，传入的curObj对象不在表单中。";
	}
	var myForm=curObj.form;
	var flag=itownObjsMgr.validateAll(myForm);
	if(!flag){
		return false;
	}

	
	var searchCondition=getParamExpressFromUrl("popPresetCondition",document.location.href);

	submitSearchRequest(serviceID,curObj.form,searchCondition);
}

/**
 * 实现回车查询
 * @param curForm:查询表单对象。
 * 使用方法：该函数的查询域所在的表单的onKeyDown事件调用。
 * 说明：表单中的查询按钮要有一个属性名为：funType，属性值为：searchData的属性。
 		其详情，请看publicOperatorLib.js的getSearchFunObject方法。
 */
function enterToSearch_public(curForm){
	if(curForm==null){
		throw "调用enterToSearch_public方法时，curForm参数不能为null.";
	}
	//得到查询按钮对象
	searchButton=getSearchFunObject(curForm);
	if(searchButton==undefined){
		//如果没有查询按钮对象，则表示没有查询。
		return true;
	}

	translateEnterToSearch(curForm,searchButton);
	return true;
}
/**###############################################查询区按纽调用的函数################################################**/





/**--------------------------------------------操作列表数据按钮调用的函数--------------------------------------------**/

/**
 * 全选
 * @params boxName:复选框的名称
 * @params myForm:复选框所在的表单
 */
function selectAll_public(boxName,myForm){
	var mySelectBox=new SelectBox(boxName,myForm);
	mySelectBox.selectAll();
}

/**
 * 反选
 * @params boxName:复选框的名称
 * @params myForm:复选框所在的表单
 */
function reverseSelect_public(boxName,myForm){
	var mySelectBox=new SelectBox(boxName,myForm);
	mySelectBox.reverseSelect();
}

/**
 * 打开增加数据的页面
 * @param serviceID:打开增加页面的service的ID。
 * @param curObj:调用当前函数的自身（可以用THIS）。
 * 说明：调用当前方法的对象要与提交的数据在同一个表单中。
 */
function addItem_public(serviceID,curObj,addPageUrl){
	try{
		if(curObj==undefined){
			throw "调用addItem_public方法的curObj对象不能为空。"
		}
		var myForm=curObj.form;
		var params="redirectUrlName="+addPageUrl + "&updateAddAction=add";
		submitRequest(serviceID,myForm,params);
	}catch(ex){
		alert(ex);
	}
}
/**
 * 打开修改数据的页面
 * @param serviceID:打开修改页面的service的ID。
 * @param curObj:执行该方法的对象。
 */
function modifyItem_public(serviceID,curObj,boxName){
	if(boxName==undefined || boxName==null || boxName==""){
		boxName="chkSelf";
	}

	var mySelectBox=new SelectBox(boxName,curObj.form);
	var selectedItems=mySelectBox.getSelectedItems();
	if(selectedItems.length==0){
		alert("请选择记录。");
		return false;
	}
	if(selectedItems.length>1){
		alert("对不起，只能操作一条记录。");
		return false;
	}
	var submitUrl="./controller?SERVICE_ID="+serviceID + "&updateAddAction=update";
	submitUrl+="&"+selectedItems[0].value;
	curObj.form.action=submitUrl;
	window.location = submitUrl;
	//curObj.form.submit();
}

/**
 * 以提交的方式，执行转向操作
 */
function submitForward_public(curObj,url){
	var submitUrl="./controller?SERVICE_ID=FRAMEWORK_REDIRECT_SERVICE";
	submitUrl+="&redirectUrlName="+url;
	curObj.form.action=submitUrl;
	window.location = submitUrl;
   //curObj.form.submit();
}

/**
 * 将请求提交到serviceId
 */
function submit_public(serviceId,curObj){
	var submitUrl="./controller?SERVICE_ID=" + serviceId;
	curObj.form.action=submitUrl;
	window.location = submitUrl;
   //curObj.form.submit();
}


/**
 * 删除用户选中的记录。
 * @param serviceID:打开修改页面的service的ID。
 * @param curObj:执行该方法的对象。
 */
function deleteItem_public(serviceID,curObj,boxName){
	if(boxName==undefined || boxName==null || boxName==""){
		boxName="chkSelf";
	}

	var mySelectBox=new SelectBox(boxName,curObj.form);
	var selectedItems=mySelectBox.getSelectedItems();
	if(selectedItems.length==0){
		alert("请选择要删除的记录。");
		return false;
	}
	var flag=confirm("本操作是不可恢复的，你确认要删除吗？");
	if(!flag){
		return false;
	}
	var submitUrl="./controller?SERVICE_ID="+serviceID;
	for(var i=0; i<selectedItems.length; i++){
		submitUrl+="&"+selectedItems[i].value;
	}
	submitUrl+="&recordCount="+selectedItems.length;
	curObj.form.action=submitUrl;
	window.location = submitUrl;
	//curObj.form.submit();
}
/**
 * 保存增加的数据\
 * @param serviceID 保存增加的数据的Service的ID
 * @param curObj 执行该方法的对象。
 */
function saveInsertData_public(serviceID,curObj){
	try{
		if(curObj==undefined || curObj==null){
			throw "调用addItem_public方法的curObj对象不能为空。"
		}
		var myForm=curObj.form;
		var flag = true;
		if(serviceID.indexOf("&backToQuery=") == -1){
			flag = itownObjsMgr.validateAll(myForm);
			if(!flag){
				return false;
			}
		}
		itownObjsMgr.beforeSubmit(myForm);
		submitRequest(serviceID,myForm);
	}catch(ex){
		alert(ex);
	}
}
/**
 * 保存增加的数据\
 * @param serviceID 保存增加的数据的Service的ID
 * @param curObj 执行该方法的对象。
 */
function saveUpdateData_public(serviceID,curObj){
	try{
		if(curObj==undefined || curObj==null){
			throw "调用addItem_public方法的curObj对象不能为空。"
		}
		var myForm=curObj.form;
		var flag = true;
		if(serviceID.indexOf("&backToQuery=") == -1){
			flag = itownObjsMgr.validateAll(myForm);
			if(!flag){
				return false;
			}
		}
		itownObjsMgr.beforeSubmit(myForm);
		submitRequest(serviceID,myForm);
	}catch(ex){
		alert(ex);
	}
}
/**############################################操作列表数据按钮调用的函数#############################################**/



/**--------------------------------------------操作子表的按钮调用的函数----------------------------------------------**/
/**
 * 增加子表的一行记录
 * @param subTbl 子表对象
 * @param checkGroupName 该操作要检查的域所属的组名
 * @param curObj 当前按钮对象。
 */
function addSubItem_public(subTbl,checkGroupName,curObj){
	if(subTbl.bizKeys != null){
		var keysUnique = subTableKeysIsUnique('i',subTbl.checkFldName,subTbl.bizKeys);
		if(!keysUnique){
			var bizKeyName="";
         try{
			   if(typeof(subTbl.bizKeysName)!= 'undefined')
			   {
			   bizKeyName = subTbl.bizKeysName;
			   }
                        }
 			catch(e)
			{
			 bizKeyName="";
			}
			if(bizKeyName=="")
			{
                          bizKeyName="主键";
			}
			alert(bizKeyName+"有重复的，请仔细检查！");
			return false;
		}
	}
	
	var myForm=curObj.form;
	var flag=itownObjsMgr.validateAll(myForm,checkGroupName)
	if(!flag){
		return false;
	}
	itownObjsMgr.beforeSubmit(myForm,checkGroupName);
	subTbl.addRow();
	subTbl.clearEditFieldValues();
}

/**
 * 修改子表的一行记录
 * @param subTbl 子表对象
 * @param checkGroupName 该操作要检查的域所属的组名
 * @param curObj 当前按钮对象。
 */
function modifySubItem_public(subTbl,checkGroupName,curObj){
	if(subTbl.bizKeys != null){
		var keysUnique = subTableKeysIsUnique('u',subTbl.checkFldName,subTbl.bizKeys);
		if(!keysUnique){
			var bizKeyName="";
         try{
			   if(typeof(subTbl.bizKeysName)!= 'undefined')
			   {
			   bizKeyName = subTbl.bizKeysName;
			   }
                        }
 			catch(e)
			{
			 bizKeyName="";
			}
			if(bizKeyName=="")
			{
                          bizKeyName="主键";
			}
			alert(bizKeyName+"有重复的，请仔细检查！");
			return false;
		}
	}

	var myForm=curObj.form;
	var flag=itownObjsMgr.validateAll(myForm,checkGroupName)
	if(!flag){
		return false;
	}
	itownObjsMgr.beforeSubmit(myForm,checkGroupName);
	subTbl.updateRow();
	subTbl.clearEditFieldValues();
}

/**
 *	删除子表的一行记录
 * @param subTbl 子表对象
 * @param checkGroupName 该操作要检查的域所属的组名
 * @param curObj 当前按钮对象。
   
 */
function deleteSubItem_public(subTbl,boxName){
	//modify by dongxin 先提示选择记录，再询问是否进行删除 2007-6-7
	if(boxName!=undefined && boxName!=null && boxName!=""){
		var mySelectBox=new SelectBox(boxName,document.forms[0]);
		var selectedItems=mySelectBox.getSelectedItems();
		if(selectedItems.length==0){
			alert("请选择要删除的记录。");
			return false;
		}
	}

	
	// modify and
	var flag=confirm("你确认要删除吗？");
	if(flag==false){
		return false;
	}

	subTbl.deleteRow();
	subTbl.clearEditFieldValues();
}


function deleteBatchSubItem_public(subTbl){
	 
	subTbl.deleteRow();
}


/********************************************公用函数*************************************************/

/**
 * 在按键事件中，把回车换成TAB键
 * 使用方法：该函数的查询域所在的表单的onKeyDown事件调用。
 		也可以在body的onKeyDown事件中调用，这样对文档的所有表单都有效。
 */
function enterToTab_public(){
	if(event.srcElement==null || event.srcElement.type==null)	return;
	if(event.srcElement.type.toLowerCase()=="textarea"){
		return true;
	}
	if(event.srcElement.type.toLowerCase()=="button"){
		return true;
	}
	if(event.keyCode==13){
		event.keyCode=9;
	}

	return true;
}


/**
 * 编辑文本区域
 * @param fldName:要写回值的域名
 */
function editTextArea_public(fldName){
	var openUrl="./publicJsp/editContent.html";
	openUrl += "?fldName="+fldName;
	openWindow(openUrl,550,260);
}

/**
 * 打开一个新窗口
 * @param myURL:要打开的新窗口的URL。
 * @param winWidth 窗口宽度
 * @param winHeight 窗口高度
 */
function openWindow(myURL,winWidth,winHeight){
	var myWidth=winWidth;
	var myHeight=winHeight;
	if(myWidth==undefined || myWidth==null || myWidth==""){
		myWidth="400";
	}
	if(myHeight==undefined || myHeight==null || myHeight==""){
		myHeight="420";
	}
	var winStyle="location=no,menubar=no,toolbar=no,scrollbars=yes,resizable=yes";
	winStyle+=",width="+myWidth+",height="+myHeight+",status=yes,top=100,left=200";

	var openWindow=window.open(myURL,"_blank",winStyle);
	//var openWindow=window.open(myURL);

	return openWindow;
}

/**
 * 页面内容加载完成以后，去掉“请稍候。。”提示
 *
 */
 function  completeload(){
 	try{
		var loadingmessage = parent.left.document.getElementById("loading");
		loadingmessage.innerHTML = "";
	}catch(ex){
	 	try{
			var loadingmessage = parent.parent.left.document.getElementById("loading");
			loadingmessage.innerHTML = "";
		}catch(e){
			
		}
	}
 }
