/**
 * 这个文件中是一些可以公用的JS函数。
 */

/**
 * @fldName 域名
 * myForm 域所在的表单对象，如果不传该参数，则默认为文档中的第一个表单。
 */
function getFieldObj(fldName,myForm){
	var fldForm=myForm;
	if(fldForm==undefined || fldForm==null){
		fldForm=document.forms[0];
	}

	var fldObj=eval("fldForm."+fldName);
	return fldObj;
}

function getStringValueByFieldObj(fldObj,separate){
	var fldValues=getValuesByFieldObj(fldObj);
	if(fldValues==undefined || fldValues.length==0)	return "";

	var strFldValue=fldValues[0];
	for(var i=1; i<fldValues.length; i++){
		strFldValue+=separate+fldValues[i];
	}

	return strFldValue;
}

/**
 * 得到一个域的值,它返回的是一个数组。
 * @fldObj 域对象
 */
function getValuesByFieldObj(fldObj){
	var fldValues=new Array();

	var fldType="";
	if(fldObj.length && !fldObj.type){
		//如果是单选或多选按钮的情况
		fldType=fldObj[0].type.toLowerCase();
	}else{
		fldType=fldObj.type.toLowerCase();
	}

	if(fldType=="radio" || fldType=="checkbox"){
		var checkedCount=0;
		if(fldObj.length){
			for(var i=0; i<fldObj.length; i++){
				if(fldObj[i].checked){
					fldValues[checkedCount]=fldObj[i].value;
					checkedCount++;
				}
			}
		}else{
			if(fldObj.checked){
				fldValues[checkedCount]=fldObj.value;
				checkedCount++;
			}
		}
	}else if(fldType=="select-one" || fldType=="select-multiple"){
		var checkedCount=0;
		for(var i=0; i<fldObj.options.length; i++){
			if(fldObj.options[i].selected){
				fldValues[checkedCount]=fldObj.options[i].value;
				checkedCount++;
			}
		}
	}else{
		fldValues[0]=fldObj.value;
	}

	return fldValues;
}

/**
 * 设置域值(包括多值域和单值域两种情况)，
 		该方法在使用时，页面上不能存在多个同名的域（对于单选按钮和多选按钮除外）
 * @fldObj: 域对象
 * @fldValue:域值
 * @separate:域值的分隔符
 */
function setFieldObjValue(fldObj,fldValue,separate){
	var valueSeparate=separate
	if(valueSeparate==undefined)	valueSeparate=",";

	var fldType="";
	if(fldObj.length && !fldObj.type){
		//如果是单选或多选按钮的情况
		fldType=fldObj[0].type.toLowerCase();
	}else{
		fldType=fldObj.type.toLowerCase();
	}
	var myFldValue=fldValue;
	if(fldType=="checkbox" || fldType=="select-multiple"){
		myFldValue=fldValue.split(valueSeparate);
		setMultiValueFieldValue(fldObj,myFldValue);
	}else{
		setSingleValueFieldValue(fldObj,fldValue);
	}
}
/**
 * 设置单值域的值
 * @fldObj: 一个域对象
 * @fldValue:域值
 * @myForm:域所在的表单,如果不传该参数，则默认为文档中的第一个表单。
 */
function setSingleValueFieldValue(fldObj,fldValue){
	var fldType="";
	if(fldObj.length && !fldObj.type){
		//如果是单选或多选按钮的情况
		fldType=fldObj[0].type.toLowerCase();
	}else{
		fldType=fldObj.type.toLowerCase();
	}

	if(fldType=="radio"){
		if(fldObj.length){
			for(var i=0; i<fldObj.length; i++){
				if(fldValue==fldObj[i].value){
					fldObj[i].checked=true;
				}else{
					fldObj[i].checked=false;
				}
			}
		}else{
			if(fldValue==fldObj.value){
				fldObj.checked=true;
			}else{
				fldObj[i].checked=false;
			}
		}
	}else if(fldType=="select-one"){
		for(var i=0; i<fldObj.options.length; i++){
			if(fldValue==fldObj.options[i].value){
				fldObj.options[i].selected=true;
			}else{
				fldObj.options[i].selected=false;
			}
		}
	}else{
		fldObj.value=fldValue;
		setRelationFldValue(fldObj);
	}
}

/**
 * 设置多值域的值
 * @fldObj: 一个域对象
 * @fldValue:域值是一个数组
 * @myForm:域所在的表单,如果不传该参数，则默认为文档中的第一个表单。
 */
function setMultiValueFieldValue(fldObj,fldValue){
	var fldType="";
	if(fldObj.length && !fldObj.type){
		//如果是单选或多选按钮的情况
		fldType=fldObj[0].type.toLowerCase();
	}else{
		fldType=fldObj.type.toLowerCase();
	}

	if(fldType=="checkbox"){
		if(fldObj.length){
			for(var i=0; i<fldObj.length; i++){
				if(valueOfArrayIndex(fldValue,fldObj[i].value)>-1){
					fldObj[i].checked=true;
				}else{
					fldObj[i].checked=false;
				}
			}
		}else{
			if(valueOfArrayIndex(fldValue,fldObj.value)>-1){
				fldObj.checked=true;
			}else{
				fldObj.checked=false;
			}
		}
	}else if(fldType=="select-multiple"){
		for(var i=0; i<fldObj.options.length; i++){
			if(valueOfArrayIndex(fldValue,fldObj.options[i].value)>-1){
				fldObj.options[i].selected=true;
			}else{
				fldObj.options[i].selected=false;
			}
		}
	}
}
/**
 * 检查值在数组中的索引
 * @strArray 要检查的数组
 * @strValue 要检查的值
 */
function valueOfArrayIndex(checkArray,checkalue){
	if(checkArray==undefined || checkalue==undefined)	return -1;

	for(var i=0; i<checkArray.length; i++){
		if(checkArray[i]==checkalue){
			return i;
		}
	}

	return -1;
}

/**
 * 检查两个数组中的值是否有相等的。
 */
function checkTwoArrayHasValueEqual(array1,array2){
	if(array1==undefined || array2==undefined)	return false;

	for(var i=0; i<array1.length; i++){
		if(valueOfArrayIndex(array2,array1[i])>-1){
			return true;
		}
	}

	return false;
}

/**
 * 设置关联域的值
 * @param fldObj 一个域对象，要设置的域，与它有关联。
 */
function setRelationFldValue(fldObj){
	if(fldObj.relationType==undefined || fldObj.relationType==null){
		return;
	}

	//得到关联关系，这主要是为了扩展，当前其实只有可选可输一种情况。
	var relationType=fldObj.relationType.toLowerCase();
	if(relationType=="inputorselect"){
		setInputOrSelectTextFld(fldObj);
	}
}

/**
 * 设置可选可输域显示出来的值
 * @param valueFldObj 存放value值的域对象
 */
function setInputOrSelectTextFld(valueFldObj){
	//得到显示域的name属性
	var textFldName=valueFldObj.textFieldName;
	if(textFldName==undefined || textFldName==null){
		return;
	}
	var textFldObj=eval("valueFldObj.form."+textFldName);
	if(textFldObj==undefined || textFldObj==null){
		return;
	}

	var myFldObj=new SelectOrInputObj(textFldObj);
	myFldObj.onReady();
}
