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))
          {             
          	if (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) // przekroczona wysokośc - dodaję skrola  
			{			
				var freezeHeight =  parseInt(maxHeight) + 70; // 70 - tyle wynosi wysokość marginów i paddingów górnych dodatkowych
            	table.up().setStyle({height: freezeHeight+"px", overflow: 'auto'});            	
            	//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();
      }
    });

