function ModelBase(name){this.name=name;this.getValue=elm_getValue;this.setValue=elm_setValue;this.setItems=elm_setItems;this.setMin=elm_setMin;this.setMax=elm_setMax;this.setStep=elm_setStep;this.getCurrentItemName=elm_getCurrentItemName;this.calculateItems=elm_calculateItems;this.valueOf=elm_getValue;this.toString=function(){return this.name};this.addOnChange=elm_addOnChange;this.setSelfcheck=elm_setSelfcheck;this.setPreSelfcheck=elm_setPreSelfcheck;this.handleOnChange=elm_handleOnChange;this.updateDependencies=elm_updateDependencies;this.validate=elm_validate;this.elmFields=document.getElementsByName(this.name);this.type=(this.elmFields[0])?this.elmFields[0].type:null;this.onChangeFunctions=new Array();this.obj=this;this.itemsChanged=false;this.conditions=null;this.items=null;this.min=null;this.max=null;this.step=null;this.changed=false;this.selfCheck=null;this.preSelfCheck=null;for(var i=0;i<this.elmFields.length;i++){this.elmFields[i].obj=this;if(this.type=='text')
this.elmFields[i].onblur=elm_handleOnChange;else if(this.type=='radio')
this.elmFields[i].onclick=elm_handleOnChange;else
this.elmFields[i].onchange=elm_handleOnChange;}
function elm_getValue(){if(!this.elmFields)
return null;else if(this.type=='text'||this.type=='select-one'||this.type=='hidden')
return this.elmFields[0].value;else if(this.type=='radio'){for(var i=0;i<this.elmFields.length;i++)
if(this.elmFields[i].checked)
return this.elmFields[i].value;}
return null;}
function elm_setValue(value){if(this.getValue()!=value){this.changed=true;if(this.type=='text'||this.type=='select-one'||this.type=='hidden'){this.elmFields[0].value=value;}
else if(this.type=='radio'){for(var i=0;i<this.elmFields.length;i++)
this.elmFields[i].checked=(this.elmFields[i].value==value.toString());}
if(eform.models['onChangeFlag']!=undefined&&eform.models['onChangeModels']!=undefined){if(eform.models['onChangeFlag'].getValue()!=true&&contains(this.obj.name,listToSeperatedString(eform.models['onChangeModels'].items,";"))){this.handleOnChange();}}}}
function elm_setMin(min){if(this.min!=min){this.min=min;this.itemsChanged=true;}}
function elm_setMax(max){if(this.max!=max){this.max=max;this.itemsChanged=true;}}
function elm_setStep(step){if(this.step!=step){this.step=step;this.itemsChanged=true;}}
function elm_setItems(items){if(this.items!=items){this.items=items;this.changed=true;}}
this.getItems=function(){var out="[";var first=true;for(var i=0;this.items&&i<this.items.length;i++){out+=(first?"{name:":", {name:")+this.items[i]['name']+", value:"+this.items[i]['value']+"}";first=false;}
return out+"]";}
function elm_setConditions(conditions){this.conditions=conditions;}
this.getConditions=function(){var out="";for(var index=0;index<this.conditions.length;index++)
{var condition=this.conditions[index];var when=condition.when;var otherwise=condition.otherwise;if(when){out+="\n\t\t"+when.test+":\n\t\t\t(attribute)\n";var first=true;for(var name in when.attributes){if(name!='test'){out+=(first?"\t\t\t":",\n\t\t\t")+name+" = "+when.attributes[name];first=false;}}
first=true;out+=when.items?"\n\t\t\t(items)\n":"";for(var i=0;when.items&&i<when.items.length;i++){out+=(first?"\t\t\t":",\n\t\t\t")+when.items[i]['name']+" = "+when.items[i]['value'];first=false;}}
if(otherwise){out+="\n\t\totherwise:\n\t\t\t(attribute)\n";var first=true;for(var name in otherwise.attributes){if(name!='test'){out+=(first?"\t\t\t":",\n\t\t\t")+name+" = "+otherwise.attributes[name];first=false;}}
first=true;out+=otherwise.items?"\n\t\t\t(items)\n":"";for(var i=0;otherwise.items&&i<otherwise.items.length;i++){out+=(first?"\t\t\t":",\n\t\t\t")+otherwise.items[i]['name']+" = "+otherwise.items[i]['value'];first=false;}}}
return out;}
function elm_getCurrentItemName(){for(var i=0;this.items&&i<this.items.length;i++)
if(this.items[i]['value']==this.getValue())
return this.items[i]['name'];return"";}
function elm_calculateItems(){var min=this.min;var max=this.max;var step=this.step;if(max!=null&&min!=null){if(this.eClass=="eInteger"){min=parseInt(min,10);max=parseInt(max,10);if(step==null){step=1;}
else{step=parseInt(step);}}
else{min=parseFloat(min);max=parseFloat(max);if(step==null){step=1;}
else{step=parseFloat(step);}}
if(min<=max){var value=min;this.items=new Array();do{this.items[this.items.length]={name:value,value:value};value+=step;}while(value<=max);}}}
function elm_addOnChange(object,method,args){this.onChangeFunctions[this.onChangeFunctions.length]=[object,method,args];}
function elm_setPreSelfcheck(object,method,args){this.preSelfCheck=[object,method,args];}
function elm_setSelfcheck(object,method,args){this.selfCheck=[object,method,args];}
function elm_handleOnChange(){var preSelfCheck=this.obj.preSelfCheck;if(preSelfCheck!=null){preSelfCheck[1].apply(preSelfCheck[0],preSelfCheck[2]);}
var selfCheck=this.obj.selfCheck;selfCheck[1].apply(selfCheck[0],selfCheck[2]);this.obj.updateDependencies();if(eform.models['onChangeFlag']!=undefined&&eform.models['onChangeModels']!=undefined){if(eform.models['onChangeFlag'].getValue()!=true&&contains(this.obj.name,listToSeperatedString(eform.models['onChangeModels'].items,";"))){eform.models['onChangeFlag'].setValue(true);eform.models['onChangeFlag'].updateDependencies();}}}
function elm_updateDependencies(){for(i=0;i<this.onChangeFunctions.length;i++)
{var onChange=this.onChangeFunctions[i];onChange[1].apply(onChange[0],onChange[2]);}}
function elm_validate(){if(this.itemsChanged){this.calculateItems();}
if(this.itemsChanged||this.changed){this.itemsChanged=false;this.changed=false;this.updateDependencies();}}}