(function(NS){var $0='controller.js';NS.FragmentController=function($1)
{if(!u.isNumber($1))
throw new Error('Illegal fragment ID.')
u.initClassInstance(this,{id:$1,model:null,views:{}});var d=this.d;try
{u.importModule(this,u.RefCount);if(d.id>=0)
this.$2(d.id);u.info('[CREATE] FragmentController '+d.id,$0);}
catch(ex)
{u.cleanupClassInstance(this,NS.FragmentController);throw ex;}};var $3=NS.FragmentController;$3.prototype={_Cleanup:function()
{var d=this.d;if(d)
{if(d.model)
d.model.m.RefCount.release();$3.$4.remove(d.id);u.info('[DELETE] FragmentController '+(d.id),$0);}},$2:function($1)
{var d=this.d,$5=d.id;if(!u.isNumber($1)||$1<0)
throw new Error('Illegal fragment ID.');if(d.model)
throw new Error('This controller has already attached to a model.');d.model=NS.FragmentModel.Find($1);d.model.m.RefCount.addRef();try
{$3.$4.remove(d.id);$3.$4.set((d.id=d.model.GetID()),this);u.forEach(d.views,function($6){u.unthrow(function(){$6.SetFragmentID(d.id);});});if(d.id!=$5)
u.info('[MODIFY] FragmentController '+$5+' to '+d.id,$0)}
catch(ex)
{this.$7($5);throw ex;}},$7:function($5)
{var d=this.d,$8=d.id;u.forEach(d.views,function($6){if($6.GetFragmentID()!=$5)
u.unthrow(function(){$6.RollbackFragmentID($5);});});if(d.id!=$5)
{$3.$4.remove(d.id);$3.$4.set((d.id=$5),this);}
if(d.model)
u.unthrow(function(){d.model.m.RefCount.release();});d.model=null;u.info('[MODIFY] FragmentController '+$8+' to '+d.id,$0)},GetFragmentID:function()
{return this.d.id;},AttachView:function($6)
{var d=this.d;var $1=$6.GetID();if(!$1)throw new Error('This view has no id.');if(!d.views[$1])
{this.m.RefCount.addRef(function(){$6.On('cleanup',this.$9,this);$6.On('rawdataquery',this.$a,this);$6.On('edited',this.$b,this);$6.On('rollback',this.$c,this);$6.SetFragmentID(d.id);if(d.model)
$6.SetContent(d.model.RenderHTML());},this);d.views[$1]=$6;}},$9:function($6)
{var $1=$6.GetID();var $d=this.d.views;if($d[$1])
{delete $d[$1];this.m.RefCount.release();}},$a:function($e,$f)
{if(this.d.model)
{var $g=this.d.model.GetData();if($g)
$f.call($e,$g);}},$b:function($6,$g)
{var d=this.d;if(!d.model)
{var $h=NS.FragmentModel.Create($g);$h.m.RefCount.addRef(function(){this.$2($h.GetID());},this);}
else
{d.model.SetData($g);}
var $i=d.model.RenderHTML();u.forEach(d.views,function($6){$6.SetContent($i);});},$c:function($6,$5)
{this.$7($5);}};$3.$j=0;$3.$4=new u.ObjectCache();$3.Create=function()
{var $1=--$3.$j;$k=new $3($1);try{$3.$4.set($1,$k);}catch(ex){u.cleanupClassInstance($k);throw ex;}
return $k;};$3.Find=function($1)
{return $3.$4.find($1,function(){return new $3($1);});};NS.ResourceController=function($1,$l)
{u.initClassInstance(this,{id:String($1),model:null,views:{}});var d=this.d;try
{u.importModule(this,u.RefCount);d.model=NS.ResourceModel.Find(d.id,$l);d.model.m.RefCount.addRef();u.info('[CREATE] ResourceController '+d.id,$0);}
catch(ex)
{u.cleanupClassInstance(this,NS.ResourceController);throw ex;}};var $m=NS.ResourceController;$m.prototype={_Cleanup:function()
{var d=this.d;if(d)
{if(d.model)
d.model.m.RefCount.release();if(d.id)
$m.$4.remove(d.id);u.info('[DELETE] ResourceController '+d.id,$0);}},$n:function($o)
{u.forEach(this.d.views,$o,this);},$p:function($g)
{if(NS.DB.IsSiteDBInTransaction())
{this.d.model.SetData($g);}
else
{try
{NS.DB.TransactionForSiteDB(function(){this.d.model.SetData($g);},this);}
catch(ex)
{this.m.RefCount.addRef();Ext.Msg.confirm(NS.Msg.get('ERR_Title'),NS.Msg.get('ERR_WriteRetry'),function($q){if($q=='yes')
this.$p($g);this.m.RefCount.release();},this);}}},$r:function()
{try
{NS.DB.TransactionForSiteDB(function(){this.d.model.Delete();},this);}
catch(ex)
{this.m.RefCount.addRef();Ext.Msg.confirm(NS.Msg.get('ERR_Title'),NS.Msg.get('ERR_WriteRetry'),function($q){if($q=='yes')
this.$r();this.m.RefCount.release();},this);}},$s:function($t,$u)
{var d=this.d;this.$p({fragments:u.filter($t,function($v){return $v>=0;})});this.$n(function($6){if($6!=$u)
$6.SetFragments($t);});},$w:function($6,$x)
{var $1=$6.GetID();var $d=this.d.views;if(!$1)throw new Error('This view has no id.');if($d[$1])
{if(!$x)
$d[$1].m.Event.removeListenersByScope(this);delete $d[$1];this.m.RefCount.release();}},AttachView:function($6)
{var d=this.d;var $1=$6.GetID();if(!$1)throw new Error('This view has no id.');if(!d.views[$1])
{var $g=d.model.GetData();var $t=$g.fragments;for(var i in d.views)
{var $v=d.views[i];if(u.isObject($v)&&u.isFunction($v.GetFragments))
{$t=$v.GetFragments();break;}}
this.m.RefCount.addRef(function(){$6.On('cleanup',this.$9,this);$6.On('updated',this.$y,this);$6.On('titleedited',this.$z,this);$6.On('detach',this.$A,this);$6.On('delete',this.$B,this);$6.On('rawdataquery',this.$a,this);$6.SetResourceID($g.id);$6.SetTitle($g.title);$6.SetFragments($t);},this);d.views[$1]=$6;}},$a:function($e,$f)
{if(this.d.model)
{var $g=this.d.model.GetData();if($g)
$f.call($e,$g);}},$9:function($6)
{this.$w($6,true);},$A:function($6)
{this.$w($6,false);},$B:function()
{var d=this.d;if(d.model)
this.$r();this.$n(function($6){$6.Close();});},$y:function($6)
{this.$s($6.GetFragments(),$6);},$z:function($6,$l)
{this.$p({title:$l});$l=this.d.model.GetData().title;this.$n(function($6){$6.SetTitle($l);});}};$m.$4=new u.ObjectCache();$m.Find=function($1,$l)
{return $m.$4.find($1,function(){return new $m($1,$l);});};})(Infosketch);