

if(typeof window.TableAjaxControl == 'undefined'){
	TableAjaxControl = Class.create();
	Object.extend(TableAjaxControl.prototype, AjaxControl.prototype);
	
	Object.extend(TableAjaxControl.prototype, {
		isLoaded:false,
		
		initControl:function(){
			this.useOnlyThisControl = true;
			this.updateField = this.options['updateField'];
			var ctrl = this;
			Event.observe(this.getButton(), "click", function(e){ctrl.onClick()}.bindAsEventListener(), false);
		},
		
		getButton:function(){
			var btn = $$('table#'+this.control + ' img#btn_'+this.control)[0];
			if(!btn){
				throw new Error("TableAjaxControl. No expand button found.");
			}
			
			return btn;
		},
		
		onClick:function(){
			var doHide = this.getButton().src.indexOf('minus.gif') >= 0;
			
			if(doHide){
				this.collapse();
			} else {
				this.expand();
			}
		},
		
		expand:function(){
			var btn = this.getButton();
			if(this.isLoaded){
				this.getRows().each(function(r){
					Element.show(r);
				});
							
				btn.src = btn.src.substring(0, btn.src.indexOf('plus.gif')) + 'minus.gif';
			} else {
				this.sendMessage();
			}
		},
		
		collapse:function(){
			this.getRows().each(function(r){
				Element.hide(r);
			});
			
			var btn = this.getButton();
			btn.src = btn.src.substring(0, btn.src.indexOf('minus.gif')) + 'plus.gif';
		},
		
		getRows:function(){
			return $$('table#'+this.control+' tr.row1', 'table#'+this.control+' tr.row2', 'table#'+this.control+' tr.row1 select', 'table#'+this.control+' tr.row2 select');
		},
		
		getQueryString:function(){
			var query = '';
			var ctrl = this;
			Object.keys(ctrl.options).each(function(k){
				if(k != 'updateField' && k != 'renderCallback'){
					query += (query != ''?'&':'') + k + '=' + ctrl.options[k];
				}
			});
			return query;
		},
		
		onAjaxResponse:function(subj, message, data){
			if(this.doRender(this, message.body)){
				var btn = this.getButton();
				btn.src = btn.src.substring(0, btn.src.indexOf('plus.gif')) + 'minus.gif';
				this.isLoaded = true;
			}
		},
		
		doRender:function(ctrl, data){
			var ctrl = this;
			var renderOk = Try.these(
				function(){return ctrl.options.renderCallback(ctrl, data);},
				function(){return false;}
			);
			
			return renderOk;
		}
	});
}