﻿var FormControl=function(f){
	this.form=f;
};

try{//设置命名空间
	Class.setNameSpace("org.developerworld.portlet.FormControl",FormControl);
	Class.getClass("org.developerworld.util.DocumentUtil").init(FormControl);
}
catch(e){
	alert("org.developerworld.portlet.FormControl 加载出错，本类并非为独立类:"+e.message);	
}

FormControl.prototype.onsubmit_temp="onsubmit_temp";
FormControl.prototype.form=null;
FormControl.prototype.lock_type="disabled";

FormControl.prototype.getFirstEmptyElement=function(){//获取第一个为空的元素
	return this.getEmpty(0);
};

FormControl.prototype.getEmptyElements=function(){//获取所有为空的元素
	return this.getEmpty(1);
};

FormControl.prototype.getEmpty=function(type){
	var rst=(type==0?null:[]);
	var ens=this.getSingleElements();
	for(var i=0;i<ens.length;i++){
		var v=this.getValue(ens[i].name);
		if(!v || v.length<=0){
			if(type==0){
				rst=ens[i];
				break;
			}
			else
				rst[rst.length]=ens[i];
		}
	}
	return rst;
};

FormControl.prototype.getEmptyCount=function(){//获取表单中没填项数目
	var rst=0;
	var ens=this.getSingleElementNames();
	for(var i=0;i<ens.length;i++){
		if(ens[i].length<=0) continue;
		var v=this.getValue(ens[i]);
		if(!v || v.length<=0)
			++rst;
	}
	return rst;
};

FormControl.prototype.getElementType=function(o){//获取指定元素的元素类型
	if(typeof(o)!="object"){
		o=this.form.elements[o];
		o=o.length?o[0]:o;
	}
	return o.type;
};

FormControl.prototype.getSingleElements=function(){//获取表单中唯一元素数组(多个同名取第1个)
	return this.getSingle(0);
};

FormControl.prototype.getSingleElementNames=function(){//获取表单中唯一元素名数组
	return this.getSingle(1);
};

FormControl.prototype.getSingle=function(type){
	var rst=[];
	for(var i=0;i<this.form.elements.length;i++){
		var temp=true;
		for(var j=0;j<rst.length;j++){
			if((type==0 && rst[j].name==this.form.elements[i].name) || (type==1 && rst[j]==this.form.elements[i].name)){
				temp=false;
				break;
			}
		}
		if(temp)
			rst[rst.length]=(type==0?this.form.elements[i]:this.form.elements[i].name);
	}
	return rst;
};

FormControl.prototype.getCheckBoxValue=function(name,compart){//获取指定选中多选框中的值
	return this.getValue(name,compart);
};

FormControl.prototype.getRadioValue=function(name,compart){//获取指定选中单选框中的值
	return this.getValue(name,compart);
};

FormControl.prototype.getValue=function(name,compart){
	var rst="";
	compart=compart?compart:",";
	var objs=this.form.elements[name];
	if(!objs.length || objs.type)
		rst=objs.value+compart;
	else{
		for(var i=0;i<objs.length;i++){
			if((objs[i].type.toLowerCase()!="radio" && objs[i].type.toLowerCase()!="checkbox") || objs[i].checked==true)
				rst+=objs[i].value+compart;
		}
	}
	if(rst.length>0)
		rst=rst.substring(0,rst.length-1);
	return rst;
};

FormControl.prototype.getSelectText=function(name){
	return this.form[name].options[this.form[name].selectedIndex].text;
};

FormControl.prototype.checkedAllCheckBox=function(name){//全选多选框
	this.setAllCheckBoxSelected(name,true);
};

FormControl.prototype.uncheckedAllCheckBox=function(name){//全不选多选框
	this.setAllCheckBoxSelected(name,false);
};

FormControl.prototype.reversalAllCheckBox=function(name){//全反选多选框
	this.setAllCheckBoxSelected(name);
};

FormControl.prototype.setAllCheckBoxSelected=function(name,checked){
	var checkboxs=FormControl.GENS(name);
	for(var i=0;i<checkboxs.length;i++){
		var checkbox=checkboxs[i];
		if(checkbox.form!=this.form)
			continue;
		if(checked!=undefined)
			checkbox.checked=checked;
		else
			checkbox.checked=!checkbox.checked;
	}
};

FormControl.prototype.setCheckBox=function(name,value,compart){//设置表单多选框值
	compart=compart?compart:",";
	var checkboxs=FormControl.GENS(name);
	var values=value.split(compart);
	for(var i=0;i<checkboxs.length;i++){
		var checkbox=checkboxs[i];
		if(checkbox.form!=this.form)
			continue;
		for(var j=0;j<values.length;j++)
			if(checkbox.value==values[j])
				checkbox.checked=true;
	}
};

FormControl.prototype.setRadio=function(name,value){//设置表单单选框值
	var radios=FormControl.GENS(name);
	for(var i=0;i<radios.length;i++){
		var radio=radios[i];
		if(radio.form!=this.form || radio.value!=value)
			continue;
		radio.checked=true;
		break;
	}
};

FormControl.prototype.setSelect=function(name,value,compart){//设置表单单选框值
	compart=compart?compart:",";
	var select=FormControl.GEN(name);
	var values=value.split(compart);
	for(var i=0;i<select.options.length;i++){
		var option=select.options[i];
		for(var j=0;j<values.length;j++)
			if(option.value==values[j])
				option.selected=true;
	}
};

FormControl.prototype.setText=function(name,value){//设置表单元素值
	if(!this.form.elements[name].length)
		this.form.elements[name].value=value;
	else
		for(var i=0;i<this.form.elements[name].length;i++)
			this.form.elements[name][i].value=value;
};

FormControl.prototype.lockForm=function(){//锁表单
	FormControl.setLock(this,true);
};

FormControl.prototype.unlockForm=function(){//解锁表单
	FormControl.setLock(this,false);
};

FormControl.setLock=function(formcontrol,type){//设置锁状态
	var form=formcontrol.form;
	var lock_type=formcontrol.lock_type;
	var onsubmit_temp=formcontrol.onsubmit_temp;
	for(var i=0;i<form.elements.length;i++)
		if(form.elements[i][lock_type]!=null)
			form.elements[i][lock_type]=type;
	if(type){
		form[onsubmit_temp]=form.onsubmit;
		form.onsubmit=function(){
			return false;
		};
	}
	else{
		form.onsubmit=form[onsubmit_temp];
		form[onsubmit_temp]=null;
	}
};

/*已经过期，但兼容旧版本而存在的方法*/
FormControl.prototype.getMoreValue=FormControl.prototype.getValue;
