// (c)2010 Michael Holtstrom

function Entry(val,sheet,box,mov,fet)
{dbg('Entry.constructor');this.remover=Array();this.style='';this.validity='';this.smpl=true;this.att=null;this.mod=null;this.sheet=sheet;this.box=box;this.mov=mov;this.fet=fet;this.sleft=document.createElement('span');this.sright=document.createElement('span');this.spn=document.createElement('span');if(fet!=1){this.spn.className='editable';}
this.spn.innerHTML=val;this.txt=document.createElement('textarea');this.txt.className='gone';if(fet!=1)
{this.remover[this.remover.length]=util.bind(this,'gotxthdlr','click',this.spn);this.remover[this.remover.length]=util.bind(this,'keydown','keydown',this.txt);this.remover[this.remover.length]=util.bind(this,'keyup','keyup',this.txt);this.remover[this.remover.length]=util.bind(this,'gospnhdlr','blur',this.txt);}};Entry.prototype.gotxthdlr=function(e,o)
{dbg('Entry.gotxthdlr');this.gotxt();return util.cancel(e);};Entry.prototype.gotxt=function()
{dbg('Entry.gotxt');if(this.att!=null&&this.att.ary[0]==0)
{return;}
if(this.mod==null)
{if(this.fet==3)
{this.sleft.className='';}
else
{if(this.smpl&&this.fet==0)
{var blob=this.spn.innerHTML;var p1=blob.indexOf('<strong>');if(p1==0){blob=blob.substr(8);}
p1=blob.indexOf('</strong>');if(p1>=0){blob=blob.substr(0,p1)+blob.substr(p1+9);}
this.txt.value=util.toCR(blob);}
else
{this.txt.value=util.toCR(this.spn.innerHTML);}
if(this.txt.value=='blank...'||this.txt.value=='&nbsp;&nbsp;')
{this.txt.value='';}}}
else
{if(this.fet==2)
{var pos=this.mod.txtval.indexOf(this.kind);if(pos==0)
{this.txt.value=this.mod.txtval.substr(this.kind.length);}
else
{this.txt.value=this.mod.txtval;}}
else
{this.txt.value=this.mod.txtval;}}
this.spn.className='gone';if(this.att==null)
{at('sizer').className='sizer editable '+this.style;at('sizer').innerHTML=util.toBR(this.txt.value)+'&nbsp;';this.txt.style.width='100%';this.txt.className='txt editable '+this.style;at('sizer').style.width=this.txt.offsetWidth+'px';this.txt.style.height=at('sizer').offsetHeight+'px';}
else{this.setInl();}
this.txt.focus();if(this.att!=null&&this.att.ary[0]!=0)
{this.txt.select();}};Entry.prototype.setInl=function()
{dbg('Entry.setInl');this.style='';at('sizer').className='sizer '+this.validity+' editable '+this.style;at('sizer').innerHTML=util.toBR(this.txt.value)+'&nbsp;';at('sizer').style.width='';this.txt.style.height=at('sizer').offsetHeight+'px';this.txt.style.width=at('sizer').offsetWidth+'px';this.txt.className='txt '+this.validity+' editable '+this.style;dbg('#2 - '+this.txt.className+' '+this.txt.style.width+' '+this.txt.style.height);};Entry.prototype.setVstl=function()
{dbg('Entry.setVstl');at('sizer').className='sizer '+this.validity+' editable '+this.style;this.txt.className='txt '+this.validity+' editable '+this.style;dbg('#5 - '+this.txt.className+' '+this.txt.style.width+' '+this.txt.style.height);};Entry.prototype.keydown=function(e,o)
{dbgx('Entry.keydown');this.sheet.dirty=true;if(this.fet==0&&this.smpl&&util.colon(e))
{if(this.bind(this.txt.value))
{if(this.att.ary[0]==0)
{this.gospn();}
else
{this.txt.select();}
return util.cancel(e);}}
if(util.crlf(e)||util.tab(e))
{this.sheet.nextEntry(this.box,this);return util.cancel(e);}};Entry.prototype.bind=function(tag)
{dbg('Entry.bind');var s=util.trim(tag).toLowerCase();var o=rules[s];if(o==undefined){return false;}
if(o.obj!=null){return false;}
this.att=o;this.smpl=false;o.obj=this;o.format();return true;};Entry.prototype.keyup=function()
{dbgx('Entry.keyup');if(this.att==null)
{at('sizer').innerHTML=util.toBR(this.txt.value)+'&nbsp;';this.txt.style.height=at('sizer').offsetHeight+'px';}
else
{this.att.validate();at('sizer').innerHTML=util.toBR(this.txt.value)+'&nbsp;';this.txt.style.width=at('sizer').offsetWidth+'px';}};Entry.prototype.gospnhdlr=function(e,o)
{dbg('Entry.gospnhdlr '+this.fet);this.gospn();return util.cancel(e);};Entry.prototype.gospn=function()
{if(this.txt.className=='gone'){return;}
dbg('Entry.gospn '+this.smpl+','+this.att+','+this.mod);if(util.trim(this.txt.value)=='')
{if(this.att==null)
{this.txt.value='blank...';}
else
{this.txt.value='&nbsp;&nbsp;';}}
if(this.mod!=null)
{dbg('validate',1);if(this.fet==2){this.txt.value=this.kind+this.txt.value;}
this.mod.validate();}
else if(this.smpl)
{if(this.fet==2){this.txt.value=this.kind+this.txt.value;}
this.mod=new Modifier(this,(this.fet!=0));if(this.mod.isjunk)
{this.mod=null;}
else{this.smpl=false;}}
if(this.smpl)
{if(this.fet==3)
{var hit=feats[util.trim(this.txt.value.toLowerCase())];if(hit)
{this.spn.innerHTML='<strong>'+hit[0]+':</strong> '+hit[1];this.sleft.className='gone';}
else
{this.spn.innerHTML=util.toBR(this.txt.value);this.sleft.className='';}}
else if(this.fet==0)
{var p1=this.txt.value.indexOf(':');if(p1>0)
{this.spn.innerHTML='<strong>'+util.toBR(this.txt.value.substr(0,p1+1))+'</strong>'+util.toBR(this.txt.value.substr(p1+1));}
else
{this.spn.innerHTML=util.toBR(this.txt.value);}}
else
{this.spn.innerHTML=util.toBR(this.txt.value);}}
else if(this.att!=null)
{if(this.att.ary[0]==1){this.spn.innerHTML=''+this.att.base;}
else{this.spn.innerHTML='';}}
else
{}
this.txt.className='gone';var ed=' editable ';if(this.fet==1){ed=' ';}
this.spn.className=this.validity+ed+this.style;};Entry.prototype.cleanup=function()
{dbg('Entry.cleanup');for(var i=0;i<this.remover.length;i++)
{util.remover(this.remover[i]);this.remover[i]=null;}};Entry.prototype.restyle=function(s)
{if(!(this.smpl)){return;}
dbg('Entry.restyle');this.style=s;if(this.spn.className!='gone')
{this.spn.className='editable '+this.style;}
else
{this.txt.className='txt editable '+this.style;at('sizer').className='sizer editable '+this.style;this.txt.style.height=at('sizer').offsetHeight+'px';}};Entry.prototype.load0=function(s,v)
{dbg('Entry.load0');this.spn.innerHTML=s;this.restyle(v);};Entry.prototype.load1=function(s)
{dbg('Entry.load1');this.txt.value=s;this.txt.className='gone hack';this.gospn();};Entry.prototype.load2=function(s,v)
{dbg('Entry.load2');if(this.bind(s))
{if(this.att.ary[0]!=0)
{this.txt.value=v;this.keyup();}
this.txt.className='gone hack';this.gospn();}};