/**
 * 365hrm 1.4.3 Copyright(c) 2009, 365hrm.
 * 
 * 
 * This is a collection of model operation.
 * you should include jquery and dwr, before use it
 */
if (model == null) var model = {};
if (model.simple == null) model.simple = {};
if (MODELsimple == null) var MODELsimple = model.simple;

//字段之间的分隔符，比如java中obj.field1.field2，在html,js中为obj-field1-field2
model.simple.fieldSeperator="-";
//数组中名字和索引的分隔符，比如java中obj[i].field1.field2，在html,js中为obj_i-field1-field2
model.simple.listIndexSeperator="_";
//
model.simple.indexReg="<n>";

model.simple._365hrmTailHeight=30;

/**
 * 根据输入对象object来初始化某个globalId下属的子元素值（objNamePrefix前缀）。
 * @param globalId: html里面某个头元素id，如某个formId，或者某个tableId。
 * @param objNamePrefix 子元素id前缀
 * @param object 导入的数据对象
 */
model.simple.initByObject = function(globalId,objNamePrefix,object) {
	var regS = new RegExp(model.simple.fieldSeperator,"gi");
	var elementsAll=$("#"+globalId+" [id^='"+objNamePrefix+model.simple.fieldSeperator+"']");
	for(var i=0;i<elementsAll.size();i++){
		var element=elementsAll.get(i);
		var fieldName=element.id.substring(objNamePrefix.length+1);
		fieldName=fieldName.replace(regS,".");
		var value=eval("object."+fieldName);
		if(value==null){
			value="";
		}
		if(element.tagName=="SELECT"){
			valueMap=eval("object."+fieldName+"Map");
			if(valueMap){
				DWRUtil.removeAllOptions(element.id);
				DWRUtil.addOptions(element.id, valueMap, false);
			}
		}
		model.simple.setElementValue(element,value);
	}
}
/**
 * 根据输入数组list来初始化某个globalId下属的子元素值（listNamePrefix前缀）。
 * @param globalId: html里面某个头元素id，如某个formId，或者某个tableId。
 * @param listNamePrefix 子元素id前缀
 * @param list 导入的数据对象
 */
model.simple.initByList = function (globalId,listNamePrefix,list){
	var regS = new RegExp(model.simple.fieldSeperator,"gi");
	var elementsAll=$("#"+globalId+" [id^='"+listNamePrefix+model.simple.listIndexSeperator+"']");
	for(var i=0;i<elementsAll.size();i++){
		var element=elementsAll.get(i);
		var fieldName=element.id.substring(listNamePrefix.length+1);
		var num=fieldName.substring(0,fieldName.indexOf(model.simple.fieldSeperator));
		fieldName=fieldName.substring(num.length+1);
		fieldName=fieldName.replace(regS,".");
		var value=eval("list["+num+"]."+fieldName);
		if(value==null){
			value="";
		}
		if(element.tagName=="SELECT"){
			valueMap=eval("list["+num+"]."+fieldName+"Map");
			if(valueMap){
				DWRUtil.removeAllOptions(element.id);
				DWRUtil.addOptions(element.id, valueMap, false);
			}
		}
		model.simple.setElementValue(element,value);
	}
}

/**
 * 根据输入数组list来初始化某个table
 * @param tableId: table id
 * @param listNamePrefix 子元素id前缀
 * @param list 导入的数据对象
 * param trHtml 每个tr的模板内容
 */
model.simple.initTableByList = function (tableId,listNamePrefix,list,trHtml){
	if(!list.length){
		return;
	}
	var regS = new RegExp(model.simple.indexReg,"gi");
	var table=$("#"+tableId);
	//移除标题以外的行
	table.find("tr:gt(0)").remove();
	//设定初始html
	var tableHtml="";
	for(var i=0;i<list.length;i++){
		tableHtml+=trHtml.replace(regS,i);
	}
	table.append(tableHtml);
	//设定初始值
	model.simple.initByList(tableId,listNamePrefix,list);
}

/**
 * 根据输入元素id得到对应的元素
 */
model.simple.getElementById = function (idOrElement){
	if(typeof idOrElement=="string"){
		return document.getElementById(idOrElement);
	}
	return null;
	//alert("type of id is wrong: model.simple.getElementById");
}

/**
 * 根据输入元素id或者元素得到对应的元素
 */
model.simple.getElement = function (idOrElement){
	if(typeof idOrElement=="string"){
		return document.getElementById(idOrElement);
	}else if(typeof idOrElement=="object"){
		return idOrElement;
	}
	return null;
	//alert("type of id is wrong: model.simple.getElementById");
}
/**
 * 设定元素的值，如果是div之类的则设定里面的html
 */
model.simple.setElementValue = function (idOrElement,value){
	var element = model.simple.getElement(idOrElement);
	if(element==null){
		//alert("type of idOrElement is wrong: model.simple.getElementValue");
		return;
	}
	if(element.tagName == "INPUT" || element.tagName == "TEXTAREA"){
		if(element.type == "checkbox"){
			if(value){
				element.checked=true;
			}else{
				element.checked=false;
			}
		}else{
			element.value=value;
		}
	}else if(element.tagName=="SELECT"){
		if(element.type == "select-one" && (value || value===0)){
			element.value=value;
		}
	}else if(element.tagName=="IMG"){
		element.src=value;
	} else{
		element.innerHTML=value;
	}
}
/**
 * 得到元素的值，如果是div之类的则得到里面的html
 */
model.simple.getElementValue = function (idOrElement){
	var element = model.simple.getElement(idOrElement);
	if(element==null){
		//alert("type of idOrElement is wrong: model.simple.getElementValue");
		return;
	}
	if(element.tagName == "INPUT" || element.tagName == "TEXTAREA"){
		if(element.type == "checkbox" && !element.checked){
			return null;
		}
		return element.value;
	}else if(element.tagName=="SELECT"){
		return element.value;
	}else if(element.tagName=="IMG"){
		return element.src;
	} else{
		return element.innerHTML;
	}
}

/**
 * 得到form元素的值，如果是div之类的则返回空
 */
model.simple.getFormElementValue = function (idOrElement){
	var element = model.simple.getElement(idOrElement);
	if(element==null){
		//alert("type of idOrElement is wrong: model.simple.getFormElementValue");
		return;
	}
	if(element.tagName == "INPUT" || element.tagName == "TEXTAREA"){
		if(element.type == "checkbox" && !element.checked){
			return null;
		}
		return element.value;
	}
	if(element.tagName=="SELECT"){
		return element.value;
	}
	return null;
}

/**
 * 对table进行排序，默认table第一行为标题行，不参与排序．
 * @param tableId: table id
 * @param colIndex 列数
 * @param valueType 比较类型，"number"表示数字，其他表示字符串
 * @param elementType 符合jquery规范的元素类型，如果为空表示为td里的内容，否则表示td李某种类型元素里面的值，如":text"表示type=text的input。
 */
model.simple.sortTable = function (tableId,colIndex,valueType,elementType){
	var trListOld=$("#"+tableId+" tr:gt(0)");
	var trNum=trListOld.size();
	var valueArr=new Array();
	var trArr=new Array();
	for(var i=0;i<trNum;i++){
		trArr[i]=trListOld.get(i);
		var element=$(trArr[i]).children("td").get(colIndex);
		if(typeof elementType=="string" && elementType.length>0){
			element=$(element).children(elementType).get(0);
		}
		var valueTmp=model.simple.getElementValue(element);
		if(valueType=="number"){
			valueArr[i]=parseInt(valueTmp);
		}else{
			valueArr[i]=valueTmp;
		}
		
	}
	for(var i=trNum-1;i>0;i--){
		for(var j=0;j<i;j++){
			if(valueArr[j]>valueArr[j+1]){
				var interVal=valueArr[j+1];
				valueArr[j+1]=valueArr[j];
				valueArr[j]=interVal;
				var interTr=trArr[j+1];
				trArr[j+1]=trArr[j];
				trArr[j]=interTr;
			}
		}
	}
	$("#"+tableId+" tr:gt(0)").remove();
	for(var i=0;i<trNum;i++){
		$("#"+tableId).append(trArr[i]);
	}
}


/**
 * 对table进行排序，默认table第一行为标题行，不参与排序．排序值首先转换成数字再排序
 * @param tableId: table id
 * @param colIndex 列数
 * @param elementType 符合jquery规范的元素类型，如果为空表示为td里的内容，否则表示td李某种类型元素里面的值，如":text"表示type=text的input
 */
model.simple.sortTableByNum = function (tableId,colIndex,elementType){
	model.simple.sortTable(tableId,colIndex,"number",elementType);
}

/**
 * 对table某一列的值进行放大
 * sortId的顺序也需要对应index，conditionId的顺序也需要对应index，比如tr1与sortId1对应，
 * @param tableId: table id
 * @param colIndex 列数
 * @param valueType 比较类型，"number"表示数字，其他表示字符串
 * @param elementType 符合jquery规范的元素类型，如果为空表示为td里的内容，否则表示td李某种类型元素里面的值，如":text"表示type=text的input
 */
model.simple.amplifyNum = function (tableId,colIndex,rate,elementType){
	var trListOld=$("#"+tableId+" tr:gt(0)");
	var trNum=trListOld.size();
	for(var i=0;i<trNum;i++){
		var element=$(trListOld.get(i)).children("td").get(colIndex);
		if(typeof elementType=="string" && elementType.length>0){
			element=$(element).children(elementType).get(0);
			if(!element){
				continue;
			}
		}
		var valueTmp=parseInt(model.simple.getElementValue(element));
		model.simple.setElementValue(element, valueTmp*10);
	}
}

/**
 * 将某个globalId下面的所有checkBox改成checkboxId对应的状态
 */
model.simple.checkAll = function(globalId,checkboxId){
	var checkList=$("#"+globalId+" input[@type='checkbox']");
	for(var i=0;i<checkList.size();i++){
		if($("#"+checkboxId).attr("checked")){
			checkList.get(i).checked=true;
		}else{
			checkList.get(i).checked=false;
		}
	}
}
/**
 * 将某个globalId下面的所有以prefix开头的id和对应的值转换成object。注：如果id对应的元素不是表单元素，则忽略该id
 */
model.simple.formIdValueToObject = function(globalId, objNamePrefix) {
	var elementsAll=$("#"+globalId+" [id^='"+objNamePrefix+"']");
	var keys = new Array();
	var values = new Array();
	//得到所有以objNamePrefix开头的id和对应的值
	var patrn = new RegExp('^' + objNamePrefix + '((_(0|([1-9][0-9]{0,2})))|(\\-[a-zA-Z]))');
	//index 判断
	var indexPatrn = /^([1-9]\d*)|0$/;
	var eleNum=0;
	for(var i=0;i<elementsAll.size();i++){
		var ele=elementsAll.get(i);
		var key = ele.id;
		if (!patrn.exec(key))
			continue;
		
		var value=model.simple.getFormElementValue(ele);
		if(value==null){
			continue;
		}
		keys[eleNum]=key.substring(objNamePrefix.length+1);
		values[eleNum]=value;
		eleNum++;
	}
	//组装成object
	var obj;
	for ( var i = 0; i < keys.length; i++) {
		var fields = keys[i].split("-");//将id用-拆开
		var fieldAll=new Array();//存放所有的field和List对赢得index
		var fieldLength=0;//长度
		//得到所有的field和List对应得index
		for(var j=0;j<fields.length;j++){
			if(fields[j].length==0){
				continue;
			}
			var fieldNameTmp=fields[j];
			var numTmp=null;
			var place = fields[j].lastIndexOf("_");
			if(place>0){
				numTmp = fields[j].substring(place + 1);
				if (indexPatrn.exec(num)){//存在数组
					fieldNameTmp=fields[j].substring(0,place);
				}else{
					numTmp=null;
				}
			}
			fieldAll[fieldLength++]=fieldNameTmp;
			if(numTmp!=null){
				fieldAll[fieldLength++]=numTmp;
			}
		}
		//组装成object
		var varName="obj";
		for(var j=0;j<fieldLength;j++){
			if(typeof eval(varName)=="undefined"){
				if (indexPatrn.test(fieldAll[j])){//数组初始化
					eval(varName+"=new Array()");
				}else{//map初始化
					eval(varName+"={}");
				}
			}
			varName+="['"+fieldAll[j]+"']";
		}
		var value=values[i];
		eval(varName+"=value");
	}
	var objResult;
	if(typeof obj=="array" && obj.length>0){
		var j=0;
		for(var i=0;i<obj.length;i++){
			if(obj[i]){
				objResult[j++]=obj[i];
			}
		}
	}
	return obj;
}
/**
 * 设定某个子select里面的option和value
 * @param topSelectIdOrElement 主select或者其id
 * @param 子select id
 * @param 子select的Map值存放的对象名
 * @param 子select的value
 */
model.simple.changeSubSelect = function(topSelectIdOrElement,subSelectId,subSelectMapName,subValue){
	var value=model.simple.getElementValue(topSelectIdOrElement);
	var subSelectMap=eval(subSelectMapName);
	DWRUtil.removeAllOptions(subSelectId);
	DWRUtil.addOptions(subSelectId, subSelectMap[value]);
	if(typeof subValue!="undefined"){
		model.simple.setElementValue(subSelectId,subValue);
	}
}

/**
 * 得到指定id对应的元素或者指定元素的位置
 */
model.simple.getElementPosition = function(idOrElement){
	var element = model.simple.getElement(idOrElement);
	if(element==null){
		//alert("type of idOrElement is wrong: model.simple.getElementValue");
		return;
	}
	var position={};
	position.left=position.top=0;
	now=element;
	while(now.tagName != "BODY") {
		position.left+=now.offsetLeft;
		position.top+=now.offsetTop;
		now = now.offsetParent;
	}
	position.bottom=position.top+element.offsetHeight;
	position.right=position.left+element.offsetWidth;
	return position;
}
/**
 * 设定id对应的元素或者指定元素的高度，使其高度正好占满浏览器剩下的高度
 */
model.simple.setElementHeightToFull = function(idOrElement){
	var element = model.simple.getElement(idOrElement);
	var eleHeight=element.style.height;
	//alert("old element.height=="+eleHeight);
	var place=model.simple.getElementPosition(element);
	//alert("window.screen.Height=="+window.screen.height+"//window.document.body.offsetWidth=="+window.document.body.offsetwidth+"//document.body.clientHeight=="+document.body.clientHeight);
	element.style.height=window.screen.height-270-place.top-model.simple._365hrmTailHeight;
	var eleHeight1=element.style.height;
	//alert("window.screen.Height=="+window.screen.Height+"   document.body.clientHeight=("+document.body.clientHeight+")-place.top("+place.top+")-model.simple._365hrmTailHeight("+model.simple._365hrmTailHeight+")");
	//alert("element.style.height=="+element.style.height);
	eleHeight=eleHeight.replace("px","");
	eleHeight1=eleHeight1.replace("px","");
	//alert("eleHeight1=="+eleHeight1+" / eleHeight=="+eleHeight+"//"+(parseInt(eleHeight1)<parseInt(eleHeight)));
	if(eleHeight1<eleHeight){element.style.height=217;}
	//alert("eleHeight1=="+eleHeight1+" / eleHeight=="+eleHeight+"//");
	//alert("  / end element.style.height=="+element.style.height);
}

/**
 * 设定id对应的元素或者指定元素的高度，使其高度正好占满浏览器剩下的高度
 */
model.simple.setParentIFrameFull = function(parentId){
	var element = parent.document.getElementById(parentId);
	var place=model.simple.getElementPosition(element);
	element.height=parent.document.body.clientHeight-place.top-model.simple._365hrmTailHeight;
}

