Syn.Component=Class.extend({init:function(config){this.type=config['type'];this.uid=config['uid'];this.config=config;this.uid_esc=this.uid.replace(/(:|\|)/g,'\\$1');this.ajaxtoken=config['ajaxtoken'];this.comp=$('#'+this.uniqueKey());this.popup_id=0},uid:function(){return this.uid},uniqueKey:function(key,no_escape){if(no_escape){return this.type+'_'+(key!=null?key+'_':'')+this.uid}return this.type+'_'+(key!=null?key+'_':'')+this.uid_esc},uniqueElmt:function(key){return $('#'+this.uniqueKey(key))},container:function(){return this.comp},submit:function(vals,extra_opts){if(!this.ajaxtoken){return}var packet={'type':this.type,'uid':this.uid,'ajaxtoken':this.ajaxtoken,'prefs':vals};if(extra_opts&&extra_opts['norender']){packet['norender']=true}this.comm=new Syn.Comm(Syn.Config.WebservicesUrl);this.comm.call('ComponentService','submit',packet,this,'result')},result:function(res){if(res){this.hideLoading();var e=this.uniqueElmt();var n;if(!Syn.ComponentMgr||!res.match(/pre class="config"/)){this.container().replaceWith(res);return}e.hide();e.after(res);n=e.next();e.remove();var instance=Syn.ComponentMgr.instantiate(n.find('pre.config'));if(instance!=this){this.remove()}else{this.onAjaxUpdate(this.parseConfig())}}},onAjaxUpdate:function(config){return},parseConfig:function(){var config=this.find('.config');if(!config.length){return{}}config=config.html();var re=new RegExp('<!--((.|\n)+)-->','mgi');var json=re.exec(config)[1];config=window["eval"]("("+json+")");return config},find:function(selector){return $('#'+this.uniqueKey()+(selector?' '+selector:''))},showLoading:function(opts){opts=opts||{};var loading=this.uniqueElmt('loading');var target=opts['target']||this.find();if(!loading.length){loading=$(document.createElement('div'));loading.attr({'id':this.uniqueKey('loading',true),'class':'loading '+opts['class']})}target.prepend(loading);loading.show().css({'width':target.width(),'height':target.height()})},hideLoading:function(){this.uniqueElmt('loading').hide()},loadJs:function(scripts,obj,method,args,number){var that=this;scripts=(typeof scripts=="string")?[scripts]:scripts;number=number||0;args=args||[];$.getScript(Syn.Config.PortalRoot+'js/'+scripts[number],function(){if((number+1)<scripts.length){that.loadJs(scripts,obj,method,args,number+1)}else{(typeof method=='string')?obj[method].apply(obj,args):method.apply(obj,args)}})},wrapper:function(){var res=this.uid.match(/^(\d+)[\w\:]*_([\w\d]+)$/);var wrap_sel='#body_col_'+res[1]+' div.comp_container[id=syn_comp_'+res[2]+']';return $(wrap_sel).length?$(wrap_sel):this.container()},remove:function(options){options=options||[];if(Syn.ComponentMgr){Syn.ComponentMgr.remove(this)}var target=options['target']=='wrapper'?this.wrapper():this.container();if(options['fade_out']){target.fadeOut(options['fade_out'],function(){$(this).remove()})}else{target.remove()}},popup:function(options,obj,method,args){var that=this;var load_fn=function(){if(!that.syn_popup){that.syn_popup=new Syn.Popup()}if(options['center']&&options['center']=='component'||!options['center']&&!options['left']&&!options['top']){options['center']='#'+that.uniqueKey()}that.syn_popup.popup(options,obj,method,args)};$.getScripts(["framework/synpopup.packed.js"],load_fn,Syn.Config.PortalRoot+"js/")}});