/**----------------------------------------------------选择框对象----------------------------------------------------**/
/**
 * 对选择框进行操作的类。
 * @param boxName:选择框的名称
 * @param myForm:选择框所在的表单对象
 */	
function SelectBox(boxName,myForm){
	if(boxName==null || boxName=="") throw "boxName参数(选择框域名)不能为空。";
	
	var strScript="myForm."+boxName;
	if(myForm==undefined || myForm==null){
		strScript="document.forms[0]."+boxName;
	}
	
	var toSelectedBoxs=null;
	
	if(eval(strScript)!=null){
		toSelectedBoxs=eval(strScript);
	}
	this.selectBox=toSelectedBoxs;									//选择对象
	
	this.getSelectedItems=getSelectedObjs;							//得到选中的选择框对象
	this.getSelectedValues=getSelectedBoxValues;					//得到用户选中的选择框对象的值
	
	this.getUnselectedItems=getUnselectedObjs;						
	this.getUnselectedValues=getUnselectedBoxValues;					
	
	this.getFirstSelectedValue=getFirstSelectedBoxValue;		//得到用户选中的第一个选择框对象的值
	this.getSelectedIndexs=getSelectedBoxIndexs;					//得到用户选中的选择框在选择框中的索引值
	this.getFirstSelectedIndex=getFirstSelectedBoxIndex;		//得到用户选中的第一个选择框在选择框中的索引值
	this.getFldCount=getBoxFldCount;									//得到有多少个选择框
	this.selectAll=selectAllItem;										//选中所有条目，该方法只对复选框有效
	this.reverseSelect=reverseSelectItem;							//反选,该方法只对复选框有效
}

/**
 * 得到选中的单选或多选按纽对象
 * @return 返回一个数组对象，如果没有选中值，则返回的数组对象的length属性等于0。
 */
function getSelectedObjs(){
	var result=new Array();
	
	if(this.selectBox==null){
		return result;
	}
	
	var curIndex=0;
	if(this.selectBox.length){
		for(var i=0; i<this.selectBox.length; i++){
			if(this.selectBox[i].checked){
				result[curIndex]=this.selectBox[i];
				curIndex++;
			}
		}
	}else{
		if(this.selectBox.checked){
			result[curIndex]=this.selectBox;
			curIndex++;
		}
	}
	
	return result;
}
/**
 * 得到选中的值
 * @return 返回一个数组对象，如果没有选中值，则返回的数组对象的length属性等于0。
 */
function getSelectedBoxValues(){
	var result=new Array();
	var selectedObjs=this.getSelectedItems();
	if(selectedObjs==null || selectedObjs.length==0){
		return result;
	}
	for(var i=0; i<selectedObjs.length; i++){
		result[i]=selectedObjs[i].value;
	}
	
	return result;
}

//得到未选中的单选或多选按纽对象
function getUnselectedObjs(){
	var result=new Array();
	
	if(this.selectBox==null){
		return result;
	}
	
	var curIndex=0;
	if(this.selectBox.length){
		for(var i=0; i<this.selectBox.length; i++){
			if(!this.selectBox[i].checked){
				result[curIndex]=this.selectBox[i];
				curIndex++;
			}
		}
	}else{
		if(!this.selectBox.checked){
			result[curIndex]=this.selectBox;
			curIndex++;
		}
	}
	
	return result;
}
//得到未选中的值
function getUnselectedBoxValues(){
	var result=new Array();
	var selectedObjs=this.getUnselectedItems();
	if(selectedObjs==null || selectedObjs.length==0){
		return result;
	}
	for(var i=0; i<selectedObjs.length; i++){
		result[i]=selectedObjs[i].value;
	}
	
	return result;
}

/**
 * 得到用户选中的第一个值
 * @return 用户选中了值，则返回选中的值，否则返回null;
 */
function getFirstSelectedBoxValue(){
	var selectedValues=this.getSelectedValues();
	if(selectedValues==null || selectedValues.length==0){
		return null;
	}
	
	return selectedValues[0];
}

/**
 * 得到选中的单选或多选按纽的索引值
 * @return 返回一个数组对象，如果没有选中值，则返回的数组对象的length属性等于0。
 */
function getSelectedBoxIndexs(){
	var result=new Array();
	
	if(this.selectBox==null){
		return result;
	}
	
	var curIndex=0;
	if(this.selectBox.length){
		for(var i=0; i<this.selectBox.length; i++){
			if(this.selectBox[i].checked){
				result[curIndex]=i;
				curIndex++;
			}
		}
	}else{
		if(this.selectBox.checked){
			result[curIndex]=0;
			curIndex++;
		}
	}
	
	return result;
}

/**
 * 得到用户选中的第一个选择按纽的索引值
 * @return 如果没有选中值，返回为-1;否则返回其选中的第一个按纽的索引值
 */
function getFirstSelectedBoxIndex(){
	var selectedIndexs=this.getSelectedIndexs();
	if(selectedIndexs==null || selectedIndexs.length==0){
		return -1;
	}
	
	return selectedIndexs[0];
}

/**
 * 得到页面上有多少个选择框控件
 */
function getBoxFldCount(){
	if(this.selectBox==null)	return 0;
	
	if(this.selectBox.length){
		return this.selectBox.length;
	}else{
		return 1;
	}
}

/**
 * 选中所有的条目，只对复选框有效。
 */
function selectAllItem(){
	if(this.selectBox==null){
		return;
	}
	
	var count=this.getFldCount();
	if(count==1){
		this.selectBox.checked=true;
		return;
	}
	for(var i=0; i<count; i++){
		this.selectBox[i].checked=true;
	}
}

/**
 * 反选。只对复选框有效
 */
function reverseSelectItem(){
	if(this.selectBox==null){
		return;
	}
	
	var count=this.getFldCount();
	if(count==1){
		this.selectBox.checked=!(this.selectBox.checked);
		return;
	}
	for(var i=0; i<count; i++){
		this.selectBox[i].checked=!(this.selectBox[i].checked);
	}
}

/**
 * 选中指定索引值的条目
 * @param itemIndex:条目的索引(下标从0开始)。
 */
SelectBox.prototype.selectIndexItem=function(itemIndex){
	if(this.getFldCount()<=itemIndex){
		return false;
	}
	if(this.getFldCount()==1){
		this.selectBox.checked=true;
	}else{
		this.selectBox[itemIndex].checked=true;
	}
	
}
/**####################################################选择框对象####################################################**/



/**---------------------------------------------------查询区域的操作---------------------------------------------------**/
/**
 * 向后台提交查询请求
 * @param searchServiceID:执行查询时，请求的serviceID。
 * @param searchForm:查询条件输入域所在的表单对象。
 * @param params:查询时的附加参数。
 */
function submitSearchRequest(searchServiceID,searchForm,params){
	submitRequest(searchServiceID,searchForm,params);
}
/**
 * 重置查询条件
 * @param searchForm:查询域所在的表单
 * 说明：如果查询条件中有下拉选择的，要求第一个选项是默认选项。
 */
function resetSearchCondition(searchForm){
	if(searchForm==undefined){
		throw "在调用resetSearch方法时，查询表单参数为null.";
	}
	
	var Objlen = searchForm.elements.length;
	for(var i=0; i<Objlen; i++){
		if(!searchForm.elements[i].type){
			continue;
		}
		if(searchForm.elements[i].type.toLowerCase()=="text"){
			//如果是文本域
			searchForm.elements[i].value="";
		}
		if(searchForm.elements[i].type.toLowerCase()=="select-one"){
			//如果是选择域
			if(searchForm.elements[i].options[0]){
				//如果有可选项
				searchForm.elements[i].options[0].selected=true;
			}
		}
		//如果是多选框和复选框，点击重置按钮以后，通过“resetvalue”属性，设置按钮的初始选中状态
		if(searchForm.elements[i].type.toLowerCase()=="radio"){
			if(searchForm.elements[i].resetvalue=="checked"){
				searchForm.elements[i].checked=true;
			}else{
		        	searchForm.elements[i].checked=false;
		        }
				
		}
	    if(searchForm.elements[i].type.toLowerCase()=="checkbox"){
			if(searchForm.elements[i].resetvalue=="checked"){
				searchForm.elements[i].checked=true;
			}else{
				searchForm.elements[i].checked=false;
			}
				
		}
	}
}
/**
 * 变回车为执行查询按钮功能
 * @param searchForm:查询域所在的表单对象。
 * @param searchButton:查询按纽对象。
 */
function translateEnterToSearch(searchForm,searchButton){
	if(searchForm==undefined){
		throw "调用translateEnterToSearch方法时，searchForm参数不能为null.";
	}
	if(searchButton==undefined){
		throw "调用translateEnterToSearch方法时，searchButton参数不能为null.";
	}
	if(event.srcElement==null || event.srcElement.type==null)	return true;
	if(event.srcElement.type.toLowerCase()=="textarea" || event.srcElement.type.toLowerCase()=="button"){
		return true;
	}
	
	if(event.keyCode==13){
		searchButton.click();
	}

	return true;
}
/**
 * 得到查询表单中的查询功能对象（有可能是按钮，也有可能是链接）
 * @param searchForm:查询域所在的表单对象
 * 说明：查询功能对象（可以是按钮，也可以是链接或其他对象）要求在searchForm表单中，
 		并且有一个名为funType的属性，其值为：searchData。（值的大小写无关）
 	 	例如：<input type="button" name="mySearch" funType="searchData" value="search" onClick="">
 */
function getSearchFunObject(searchForm){
	if(searchForm==undefined){
		throw "调用getSearchButtonObject方法时，searchForm参数不能为null.";
	}
	var Objlen = searchForm.elements.length;
	for(var i=0; i<Objlen; i++){
		if(searchForm.elements[i].funType){
			if(searchForm.elements[i].funType.toLowerCase()=="searchdata"){
				return searchForm.elements[i];
			}
		}
	}
}
/**###################################################查询区域对象###################################################**/


function submitRequest(serviceID,myForm,params){
	if(myForm==undefined){
		throw "提交请求表单对象不能为null(调用submitRequest方法的myForm参数).";
	}
	
	var formAction="./controller?SERVICE_ID="+serviceID;
	if(params!=undefined && params!=null){
		formAction+="&"+params;
	}
	
	myForm.action=formAction;
	myForm.submit();
}

String.prototype.trim=function(){
	return this.replace(/^[\s]* | [\s]*$/g,"");
}

/**
 * 得到URL中指定的参数的表达式。
 		例如：对于参数&myParam=123456要得到myParam=123456。
 * @param paramName 参数的名称
 * @param myurl 要取值的URL
 */
function getParamExpressFromUrl(paramName,myUrl){
	var myRgx=new RegExp("&"+paramName+"=[^&]*","i");
	var strMatch=myUrl.match(myRgx);
	if(strMatch==null){
		return "";
	}
	
	var paramFormula=strMatch.input.substring(strMatch.index+1,strMatch.lastIndex);
	return paramFormula;
}

/**
 * 得到URL中指定的参数的第一个值
 		例如：对于参数&myParam=123456要取出myParam参数的值。
 * @param paramName 参数的名称
 * @param myurl 要取值的URL
 */
function getParamValueFromUrl(paramName,myUrl){
	var paramFormula=getParamExpressFromUrl(paramName,myUrl);
	
	return paramFormula.substring(paramName.length+1);
}
