AjaxUpdater = function(method,placeholder,url,params,callback)
{
	//alert(url);
	if(typeof callback == 'undefined' || typeof callback != 'function')
	{
		callback = function(){};
	}
	//$(placeholder).innerHTML='<div style="text-align:center;"><img src="image/template/loader.gif" /></div>';
	$(placeholder).setOpacity(0.2);
	//wait(1000);
	//return;
	var parameters=$H(params);
	parameters.set('uid',new Date().getTime());
	new Ajax.Updater
	(
		{success: $(placeholder)}, 
		url, 
		{			
			method : method,			
			parameters: parameters, 
			onFailure: AjaxError,
			onComplete: function() { $(placeholder).setOpacity(1);callback();},
			evalScripts: true			
		}
	);
};
		
AjaxError =function (request) {
	alert('Błąd podczas próby zaladowania danych');
};



var Listing = {
	//shownMenu : [],
	menu:
	{					
		/*show : function(elem,content)
		{			
			$(content).toggle();
											
			if(this.shownMenu)
			{
				$(this.shownMenu).hide();
				this.shownMenu=false;
			}
			
			if($(content).visible())
			{
				this.shownMenu=$(content);
			}
		},*/
		show : function(name)
		{	
			var content = $(name).down('.filter');
					
			$(content).toggle();
											
			/*if(this.shownMenu[name])
			{
				$(this.shownMenu[name]).hide();
				this.shownMenu[name]=false;
			}
			
			if($(content).visible())
			{
				this.shownMenu[name]=$(content);
			}*/
		},
		
		hideFilter : function(name) {
			if($(name))
			{
				var filter=$(name).down('.filter');
				if(filter)
				{
					filter.hide();
					//this.shownMenu[name]=false;
				}
			}
		},
		
		showFilter : function(name) {		
			if($(name))
			{
				var filter=$(name).down('.filter');
				if(filter)
				{
					filter.show();
					//this.shownMenu[name]=filter;
				}
			}
		},
		hideColumns : function(name) {
			$(name).down('.columns').hide();
		}
		,
		showColumns : function(name) {
			$(name).down('.columns').show();
		}
	},
	

	'filter' : function(name)
	{
		if(eval('typeof ' + name) != 'undefined')
		{				
			$(name+'_filter_check').disable();
			var obj={};
			eval('obj = '+name);
			var placeholder=$(name).down('.body');
			Listing.menu.hideFilter(name);
			AjaxUpdater('post',$(name).down('.body'),obj.url+'&dataOnly=1',$(name).down('.filter form').serialize(true),function(){$(name+'_filter_check').enable();$(name+'_filter_check').checked=true;obj.callback});
			return false;
		}
	},
	'filterActivate' : function(name,params)
	{	
		if(eval('typeof ' + name) != 'undefined')
		{					
			$(name+'_filter_check').disable();
			var obj={};
			eval('obj = '+name);
			var placeholder=$(name).down('.body');
			Listing.menu.hideFilter(name);
			AjaxUpdater('post',$(name).down('.body'),obj.url+'&dataOnly=1',{filter:(params ? 'enable' : 'disable' )},function(){$(name+'_filter_check').enable();obj.callback});
			return false;
		}
	},
	'search' : function(name)
	{
		if(eval('typeof ' + name) != 'undefined')
		{					
			var obj={};
			eval('obj = '+name);
			var placeholder=$(name).down('.body');
			Listing.menu.hideFilter(name);
			//alert($(name).down('.simpleSearch form').serialize(true).inspect());
			AjaxUpdater('post',$(name).down('.body'),obj.url+'&dataOnly=1',$(name).down('.simpleSearch form').serialize(true),obj.callback);
			return false;
		}
	},
	
	'sort' : function(name,column,direction)
	{
		if(eval('typeof ' + name) != 'undefined')
		{					
			var obj={};
			eval('obj = '+name);
			var placeholder=$(name).down('.body');
			var url=obj.url+'&dataOnly=1&sort='+column;
			
			if(typeof direction != 'undefined')
			{
				url=url+'&sortDirection='+direction;
			}			
			AjaxUpdater('get',$(name).down('.body'),url,{},obj.callback);
			return false;
		}
	},
	
	'pager' : function(name,page)
	{				
		if(eval('typeof ' + name) != 'undefined')
		{				
			Listing.menu.hideFilter(name);
			//alert(page);		
			var obj={};
			eval('obj = '+name);
			var placeholder=$(name).down('.body');			
			AjaxUpdater('get',$(name).down('.body'),obj.url+'&dataOnly=1&view='+page,{},obj.callback);
			
		}
		return false;
	},
	
	'refresh': function(name)
	{
		Listing.menu.hideFilter(name);	
		this.show(name);
	},
	
	'show' : function(name)
	{		
		if(eval('typeof ' + name) != 'undefined')
		{						
			//alert(page);		
			var obj={};
			eval('obj = '+name);
			var placeholder=$(name).down('.body');			
			AjaxUpdater('get',$(name).down('.body'),obj.url+'&dataOnly=1',{},obj.callback);
			return false;
		}
	},
	'wrapPager' : function(name)
	{
		var pager=$(name+'_pager');
		var pagerArea=$(name+'_pagerArea');
		if(pager && pagerArea)
		{
			pagerArea.update(pager.innerHTML);
		}
		/*if(pager && pagerArea)
		{
			pagerArea.wrap(pager);
		}*/
	},
	'wrapSortBy' : function(name)
	{
		var sort=$(name+'_sortBy');
		var sortArea=$(name+'_sortByArea');
		if(sort && sortArea)
		{
			sortArea.update(sort.innerHTML);
		}
		/*if(pager && pagerArea)
		{
			pagerArea.wrap(pager);
		}*/
	},
	'setCallback' : function(name,callback)
	{
		if(eval('typeof ' + name) != 'undefined' )
		{			
			if(typeof callback == 'undefined' || typeof callback != 'function')
			{
				callback = function(){};
			}
			//alert(page);		
			var obj={};
			eval('obj = '+name);
			obj.callback=callback;				
		}
	},
	
	'getCallback' : function(name)
	{
		return this.callback;
	},
	
	'portion' : function(name,portion)
	{
		if(eval('typeof ' + name) != 'undefined')
		{					
			var obj={};
			eval('obj = '+name);
			var placeholder=$(name).down('.body');
			Listing.menu.hideFilter(name);
			//alert($(name).down('.simpleSearch form').serialize(true).inspect());
			AjaxUpdater('post',$(name).down('.body'),obj.url+'&dataOnly=1',{'portion':portion},obj.callback);
			return false;
		}	
	},
	'createHeader' : function(name)
	{
		return;
		var self=this;
		/*$(name).down('.dataTable').down('thead').update($(name).down('.body').down('tfoot').innerHTML);	
		var listingHeader=$(name).down('.dataTable').down('thead').select('div');
		
		$(name).down('.body').down('tfoot').select('div').each(function(elem,index)
		{		
			var dimensions=elem.getDimensions();
			$(listingHeader[index]).update(elem.innerHTML);		
			$(listingHeader[index]).setStyle({'width':dimensions.width+'px'});				
		});*/

		if( $(name+'_body_header') && $(name+'_content') )
		{
			var bodyHeader		= $(name+'_body_header').down('thead');
			var bodyContent		= $(name+'_content').down('tfoot');
			var dimensions		= [];
			var listingHeader	= [];
			
			if(bodyHeader && bodyContent)
			{
			  // alert(name+' 33');return;
				bodyHeader.update(bodyContent.innerHTML);	
				listingHeader	= bodyHeader.select('div');
				//alert(bodyHeader.innerHTML);
				//alert(listingHeader.size());
				//if(listingHeader.size())
				//{					
					bodyContent.select('div').each(function(elem,index)
					{		
						dimensions	= elem.getDimensions();
						//alert(index+' '+name);
						//$(listingHeader[index]).update(elem.innerHTML);		
						listingHeader[index].setStyle({'width':dimensions.width+'px'});	
						
						elem._counted = undefined;         // for Prototype
						elem.removeAttribute('_counted');  // for IE
						listingHeader[index]._counted = undefined;         // for Prototype
						listingHeader[index].removeAttribute('_counted'); // for IE

					});
				//}
				
				
				$(name+'_content').observe('scroll',function(){
					self.onScroll(name);
				});
			}
		}
	},
	
	'onLoad' : function(name)
	{
		//alert(name);	
		if($(name))
		{

			/*var searchInput=$(name).down('.simpleSearchInput');
			
			if(searchInput && searchInput.visible())
			{
				searchInput.focus();
			}*/
			
			this.wrapPager(name);				
			this.wrapSortBy(name);
			this.resize(name);
			//this.createHeader(name);		
		}
	},
	'onScroll' : function(name)
	{
		//alert('tt');
		$(name+'_body_header').scrollLeft=$(name+'_content').scrollLeft;
		//$(name).down('.simpleSearchInput').value=$(name+'_content').scrollLeft+' '+$(name+'_body_header').scrollLeft;
	},
	'resize' : function(name)
	{
		
		if( $(name+'_content') && eval('typeof ' + name) != 'undefined')
		{					
			var obj={};
			eval('obj = '+name);			

			/*$(obj.container).setStyle({
				'overflow' : 'hidden'
			});*/
			
			$(obj.container).scrollTop=0;
			/*$(name+'_content').setStyle( {
				'height' : ($(obj.container).getHeight()-$(name+'_body_header').cumulativeOffset().top+$(obj.container).cumulativeOffset().top-$(name+'_header').getHeight()-obj.bottomSpace)+'px' ,
				'overflow' : 'auto'
			});*/	
			
			//ustawienie rozmiaru dla tabeli z nagłówkami
			if($(name+'_body_header') && $(name+'_content') )
			{
				if($(name+'_body_header').down('.dataTable') && $(name+'_content').down('.dataTable') )
				{
					$(name+'_body_header').down('.dataTable').setStyle({
						'width' : $(name+'_content').down('.dataTable').getWidth()+'px'
					});
				}
			}
			
			this.createHeader(name);
		}
	},
	
	'init' : function(name,params)
	{
		if(eval('typeof ' + name) == 'undefined')
		{	
			//this.shownMenu[name]=false;									
			//alert(typeof params.bottomSpace);
			if(typeof params.bottomSpace == 'undefined' || typeof params.bottomSpace != 'number')
			{
				//alert(	params.bottomSpace );
				params.bottomSpace=0;
			}
			if( typeof params.container == 'undefined' || !$(params.container))
			{
				params.container=$$('body')[0];
			}
			
			var obj={
				 'name'	: name
				,'url'	: params.url
				,'bottomSpace' : params.bottomSpace
				,'container' : $(params.container)
			}
			if(typeof params.callback == 'undefined' || typeof params.callback != 'function')
			{
				params.callback = function(){};
			}
			obj.callback=params.callback;
			
			Event.observe(window, 'resize', function() {		
				Listing.resize(name);					
			});	
		}
		else
		{
			var obj={};
			eval('obj = '+name);
		}		

		return obj;
	},
	
	'makeEditable' : function(name)
	{
		var self=this;
		$(name).select('td.editable').each(function(elem,index){
			elem.observe('click',function(event){
				if(this.getAttribute('title')!='edit' && !self.edit)
				{
					this.writeAttribute('title','edit');					
					
					var span = this.down('span');
					var div = this.down('div');
					var input=div.down('input');
																	
					
					div.setStyle({
						'width':(this.getWidth())+'px',
						'min-width':'50px'
					});
					
					div.show();
					span.hide();
					input.focus();
					input.select();
					self.createHeader(name);
					self.edit=true;
				}
			});
		});			
	},
	
	'closeEditable' : function(name,elem,update)
	{
		if($(elem).getAttribute('title')=='edit')
		{									
			var div=$(elem).down('div');				
			var span=$(elem).down('span')
			div.hide();
			span.show();
			if(update==true)
			{
				span.update( div.down('input').value );
			}
			else
			{					
				div.down('input').value=span.innerHTML.strip();
			}
			$(elem).writeAttribute('title','');
			this.edit=false;
		}
		this.createHeader(name);
	},
	
	'getChecked' : function(name)
	{
		var result=[];
		var checkboxes=$(name+'_content').select('.checkbox');
		checkboxes.each(function(elem){
			if(elem.checked)
			{
				result.push(elem.value);
			}
		});
		return result;
	},
	
	'checkAll' : function(name)
	{
		var checkboxes=$(name+'_content').select('.checkbox');
		checkboxes.each(function(elem){
			elem.checked=true;
		});	
	},

	'uncheckAll' : function(name)
	{
		var checkboxes=$(name+'_content').select('.checkbox');
		checkboxes.each(function(elem){
			elem.checked=false;
		});	
	},
	
	'inwertChecked' : function(name)
	{
		var checkboxes=$(name+'_content').select('.checkbox');
		checkboxes.each(function(elem){
			elem.checked=!elem.checked;
		});	
	}
};
