Element.addMethods( 
{
	createColumn: function(objSender) /* kolumna jest tworzona jak zostaje przekroczona wysokosc kategorii */
	{        
		var column = new Element('td', {'class': 'linksColumn'});                        
		objSender.appendChild(column);        
		return column;
	},

	create: function(objSender, config) /* tworzy menu na podstawie konfiugracji */
	{
		// objSender - to kontener w którym będzie budowane menu 
		objSender.config = config;
		
		var maxHeight = config.height; /* maksymalna wysokosc po przekroczeniu ktorej nalezy dodawac nowe kolumny */ 
		var menuItems = objSender.childElements(); /* ilosc elementow w menu */
		  
		/* aktualna wysokosc kolumny */
		var actHeight = 0;                        
		
		/* konterner dla menu - w nim beda dodawane kolumny */
		var menuContainer =$(objSender.config.menuTarget);
		
		// do kontenera dodawana bedzie tabela - zachowuje sie najelpiej we wszystkich przegladarkach
		// divy na floatach sa roznie interpretowane przez ie
		var table = new Element("table", {'class': 'linksTable'} );
		var tbody = new Element("tbody");
		
		var rowContainer = new Element("tr"); // tuta beda dodawane nowe kolumny
		tbody.appendChild(rowContainer);
		table.appendChild(tbody);
		menuContainer.appendChild(table); // do kontenera na menu dodaje tabelke w ktorej bedzie budowane menu
		
		/* szerokosc kolumny */ 
		var columnWidth = 0;
		
		/* dodatkowo wysokosc  wynikajaca z marginesow i paddingow */
		var columnExtraHeight = 0;
		        
		/* wszystkie elementy DL - tutaj znajduja sie kategorie*/
		menuItems.each(function(item, index)
		{
			// pierwsze wejscei tworzona jest nowa komorka - czyli kolumna menu
			if (index == 0) // pierwsze wejście - tworznie nowej kolumny
			{            
				column = rowContainer.createColumn();            
			}          
			
			var height = item.getHeight(); // pobieram wysokosc kategorii z menu
			        
			// dodaje do wysokosci calej kolumny
			actHeight += height;
			
			// jezeli wysokosc zostala przekroczona
			if ((actHeight >= maxHeight) && index != 0)
			{             
				column = rowContainer.createColumn(); // tworze nowa kolumne 
				
				actHeight = height; // wysokosc nowej kolumny jest taka jak wysokosc elementu ktorej do neij trafi
				                        
				// przypadek ze kategoria jest wieksza jak przewidywana masymalna wysokosc
				// ustalam wtedy nowa maksymalna wysokosc dla tego menu 
				if (actHeight > maxHeight) maxHeight = actHeight;                    
			}
		  
		  // usuwam element z kontenera tymczasowego
		  var addItem = item.remove();   
		                                
		  // dodaje go do kolumny
		  column.appendChild(addItem);          
		});
		                
		// 
		var allColumns = menuContainer.select("td.linksColumn");
		
		var columnWidth = 0;
		
		var closeElement = new Element('div');
		closeElement.setStyle({clear: "both", visibility: "hidden"});
		
		allColumns.each(function(item, index)
		{
			var style = (index % 2) ? objSender.config.column1Style : objSender.config.column2Style;           
			item.setStyle(style);
			item.setStyle({height: maxHeight+"px"});
			
			columnWidth = parseInt(item.getStyle("width")) 
			
			if (!Prototype.Browser.IE)
			{
				columnWidth += parseInt(item.getStyle("paddingLeft")) + parseInt(item.getStyle("paddingRight"));
			} 			
			
			columnExtraHeight = 0;
			["paddingTop", "paddingBottom", "marginTop", "marginBottom"].each(function(st) 
			{
				var val = item.getStyle(st);
				if (!val) val = 0;     
				columnExtraHeight += parseInt(val);
			});

			item.setStyle({height: (maxHeight+ columnExtraHeight) + "px"});

			item.appendChild(closeElement);
		});

		//rowContainer.appendChild(closeElement);
		var mWidth = columnWidth * allColumns.length;
				        
		menuContainer.setStyle({width: mWidth + "px"});
		menuContainer.writeAttribute("w", mWidth);
		
		//debug(menuContainer.id);
		//menuContainer.setStyle({height: (maxHeight+ columnExtraHeight+20) + "px"});        
		
		objSender.remove();
	}
});

