/**
 * 选择页面返回数据对象
 * 属性：
 *       
 * 说明：
 * @author  zhaosh
 */

function SelectPageReturnData(){
	//私有属性
	this.selectedDatas=new Array();			//用户选中的数据对象。它的每个条目都是一个枚举型类型对象
	this.ownerField=null;						//打开选择页面地域对象。
	this.columnNames=new Array();				//数据列的名称
}

/**
 * 初始化选择页面返回的数据对象
 * @param dataForm: 选择页面中被选择的数据所在的表单
 *	@param selectFldName: 选择域（主要是单选框或复选框）的名字
 *
 * @return 如果用户没有选中数据，返回为false;否则一个SelectPageReturnData对象。
 * 注：该法中调用了publicOperatorLib中的SelectBox对象
 */
SelectPageReturnData.init=function (selectFldName,dataForm){
	var mySelectBox=new SelectBox(selectFldName,dataForm);
	var selectedValues=mySelectBox.getSelectedValues();
	if(selectedValues==undefined || selectedValues==null || selectedValues.length==0){
		return false;
	}
	
	var dataObj=new SelectPageReturnData();
	for(var i=0; i<selectedValues.length; i++){
		var itemData=new Enumerator();
		var dataTmp=selectedValues[i].split("$$");
		for(var j=0; j<dataTmp.length; j++){
			var fldData=dataTmp[j].split("^");
			var colName=fldData[0].trim().toUpperCase();
			var colValue=fldData[1];
			itemData[colName]=colValue;
			if(i==0){
				dataObj.columnNames[j]=colName;
			}
		}
		dataObj.selectedDatas[i]=itemData;
	}
	
	if(!window.opener){
		throw "父窗口已被关闭。";
	}
	if(window.opener.popSelectFldInfo==undefined || window.opener.popSelectFldInfo==null){
		throw "父窗口可能被刷新了，请重新打开。";
	}
	dataObj.ownerField=window.opener.popSelectFldInfo.popFieldObj;
	
	return dataObj;
}

/**
 * 初始化选择页面返回的数据对象,考虑保存翻页状态的情况
 * @param boxName: 选择域（主要是单选框或复选框）的名字
 * @param dataForm: 选择页面中被选择的数据所在的表单
 *
 * @return 如果用户没有选中数据，返回为false;否则一个SelectPageReturnData对象。
 * 注：该法中调用了publicOperatorLib中的SelectBox对象
 */
SelectPageReturnData.initWithStatus=function (boxName,dataForm){
	var appended = makeAppendedInPageAction("pageDivideAlreadySelected",boxName);//in publicOperator.js
	if(appended == null || appended == ""){
		return false;
	}
	//if(appended.replace(/[^\x00-\xff]/g,"aa").length > 1200){
	//	return "overSize";	
	//}
	
	var selectedValues = appended.substr(3).split("///");

	var dataObj=new SelectPageReturnData();
	for(var i=0; i<selectedValues.length; i++){
		var itemData=new Enumerator();
		var dataTmp=selectedValues[i].split("$$");
		for(var j=0; j<dataTmp.length; j++){
			var fldData=dataTmp[j].split("^");
			var colName=fldData[0].trim().toUpperCase();
			var colValue=fldData[1];
			itemData[colName]=colValue;
			if(i==0){
				dataObj.columnNames[j]=colName;
			}
		}
		dataObj.selectedDatas[i]=itemData;
	}
	
	if(!window.opener){
		throw "父窗口已被关闭。";
	}
	if(window.opener.popSelectFldInfo==undefined || window.opener.popSelectFldInfo==null){
		throw "父窗口可能被刷新了，请重新打开。";
	}
	dataObj.ownerField=window.opener.popSelectFldInfo.popFieldObj;
	
	return dataObj;
}

/**
 * 得到用户选中的第一条记录的某个列的值。
 * @param colName 列名。
 * @return 如果不存在这个列名的值，则抛出没有这一列的异常；
 	 		  如果没有选中值，则抛出索引超出范围的异常；
 			  否则返回这个列的值。
 */
SelectPageReturnData.prototype.getFirstColValue=function (colName){
	return this.getNthRecordColValue(0,colName);
}

/** 
 * 得到第N个返回值的某列值
 * @param n 选中的第几条记录,从0开始。
 * @param colName 列名
 * @return 如果不存在这个列名的值，则抛出没有这一列的异常；
 	 		  如果参数n的值小于0或大于选中的记录数据，则抛出索引超出范围的异常；
 			  否则返回这个列的值。
 */
SelectPageReturnData.prototype.getNthRecordColValue=function (n,colName){
	var selectedCount=this.getSelectedCount()
	if(selectedCount==0 || selectedCount<=n || n<0){
		throw "索引超出范围。";
	}
	if(!this.hasColumn(colName.toUpperCase())){
		throw "返回值中没有名为"+colName+"的列值。";
	}
	
	return this.selectedDatas[n][colName.toUpperCase()];
}

/**
 * 得到用户选中的多少条记录。
 */
SelectPageReturnData.prototype.getSelectedCount=function (){
	if(this.selectedDatas==undefined || this.selectedDatas.length==0){
		return 0;
	}
	
	return this.selectedDatas.length;
}

/**
 * 判断返回值中是否存在某列值。
 * @param colName 列名
 */
SelectPageReturnData.prototype.hasColumn=function (colName){
	for(var i=0; i<this.columnNames.length; i++){
		if(this.columnNames[i]==colName){
			return true;
		}
	}
	
	return false;
}

/**
 * 得到弹出页面的域的名称。
 */
SelectPageReturnData.prototype.getOwnerFldName = function (){
	return this.ownerField.name;
}
