class LogsWindow extends ListBoxWithUIWindows
{
	/** odleglosc tekstu (elementu listboxa) od krawedzi listboxa */
	float _TEXT_ELEM_SPACING = 3f;

    /**Odleglosc miedzy liniami*/
    float _LINE_SPACING = 0;
    
	final static int ID_LIST_ELEM_MSG = 1020;
	final static int ID_LIST_LOGS = 1021;
	
	static UIElement List_msg = new UIElement(ID_LIST_ELEM_MSG, 0,
											  new Vector(0, 0, 0),
											  new Vector(0, 0, 0),
											  "",
											  "",
											  "", 
											  "", 
											  EButtonFlags.BTN_TYPE_LISTBOX_ITEM,
											  "");

    final static int COLOR_WHITE = 0;
    final static int COLOR_BLUE = 1;
    final static int COLOR_RED = 2;
    final static int COLOR_GREEN = 3;
	
	static int ONE_LINE_HEIGHT = -1;
	String m_sFontId = null;
    int nMaxTexts = 50;
    int nFullCapacity = 10;
    float fWidth = 0.0f;
	
    
	/** Inicjacja okna, musi byc wywolana po ustaleniu rozmiaru i pozycji.
	 */
    void Init()
    {
		InitListboxSize();
    }
	
    void AddText(String sText,Vector vColor)
    {
        AddText(sText, COLOR_WHITE, vColor);
    }
    
    void AddText(String sText)
    {
        AddText(sText, COLOR_WHITE, null);
    }
	
	void ClearLogs()
	{
		
	}
    
    void AddText(String sTextName, int nColorFlag, Vector vColor)
    {
        if (sTextName == null || sTextName.length() == 0) 
            return;
		
		

    	// przerabiamy na wersję lokalizowana
		sTextName = Text.Get(sTextName);
        
        if (sTextName.startsWith("&") && sTextName.endsWith("&"))
            return;
        
        ((UIStatic)m_cListWindow).SetText(" ");
        m_cListWindow.SetTextPosFlags(ESpriteText.MULTILINE);
        
        String sTab[] = m_cListWindow.GetTextLines(sTextName);
        
        //ten item sluzyl tylko do wyliczenia tekstu
        if (sTextName.length() == 0) 
            return;
		
		if (sTab.length == 0)
        {
            Button item = CreateListboxItem(nColorFlag);
			InitListboxItem(item, sTextName, vColor);
        }
		else
		{
			for (int i = 0; i < sTab.length; i++)
			{
				Button item = CreateListboxItem(nColorFlag);
				InitListboxItem(item, sTab[i], vColor);
			}
		}
    }
    
	Button CreateListboxItem(int nColorFlag)
	{
        Button item = (Button) CreateObject("Button");
        item.Init(List_msg, module);
        item.nIDExtra = nColorFlag;
        item.sText = sText;
		item.SetFont(m_sFontId);
		return item;
	}
	
	void InitListboxItem(Button item, String sText,Vector vColor)
	{
        int nPos = AddItem(item);
        if (GetItemCount() > nMaxTexts)
            RemoveItem(0);
        //jesli podany jest bezposrednio kolor to go ustaw
        if ( vColor != null )
        {
            item.SetTextColorV( vColor );
        }
        else
        switch (item.nIDExtra)
        {
            case COLOR_BLUE:
				item.SetTextColor(53f/255f, 96f/255f, 1, 1);
			break;
			
            case COLOR_GREEN:
				item.SetTextColor(0, 1, 0, 1);
			break;
			
            case COLOR_RED:
				item.SetTextColor(1, 27f/255f, 10f/255f, 1);
			break;
			
            case COLOR_WHITE:
				item.SetTextColor(1, 1, 1, 1);
			break;
        }
        item.SetTextPosFlags(ESpriteText.HORIZ_LEFT | ESpriteText.VERT_MIDDLE);
        item.sText = new String(sText);
        item.DisplayText(sText);
        EnsureVisible(nPos);
	}
	
    void InitListboxSize()
    {
        Vector v = GetSize();
		
        nFullCapacity = (int)m_cListWindow.GetSize().fY/ONE_LINE_HEIGHT;
        
        SetCapacity(nFullCapacity);
        ShowScroll(true);
        EnsureVisible(GetItemCount() - 1);
        UpdateList();
    }
    
    void OnButton(Button btnSender)
    {
        if (btnSender.nBtnType == EButtonFlags.BTN_TYPE_LISTBOX_ITEM) 
            return;
		
        switch (btnSender.nID)
        {
            case EUI.ID_SCROLL_DN:
				OnScrollDown();
			break;
			
            case EUI.ID_SCROLL_UP:
				OnScrollUp();
			break;
			
			case ID_SCROLLBAR:
				LogLine("ID_SCROLLBAR");
			break;
        }
    }
    
    /**Umieszcza element o podanym indeksie w widocznej czesci listy mozliwie 
     * najblizej "dna"*/
    void EnsureVisible(int nPos)
    {
        if ( (nPos < 0) || (nPos >= nItemCount) )
			return;
        int nLastFirstVisible = nItemCount - nCapacity;
        nFirstVisible = nPos - nCapacity + 1;
        if (nFirstVisible < 0)
			nFirstVisible = 0;
        UpdateList();
    }

		
    void Init(UIWindow cParent)
    {
        super.Init(cParent);
        ONE_LINE_HEIGHT = (int)(((Sprite)m_cListWindow).GetTextExtent(" ").fY + 2f * _LINE_SPACING);
        m_sFontId = ((UIStatic)m_cListWindow).m_sFontId;
        
		vItemsFirstPos = new Vector(_TEXT_ELEM_SPACING, 0, 0);
		
        /*SetModule(module);
        nID = data.nID;
        nBtnType = data.nFlags & EButtonFlags.BTN_TYPE_MASK;
        if ((data.nFlags & EButtonFlags.BTN_STATE_MASK) != 0)
        {
            nBtnState = data.nFlags & EButtonFlags.BTN_STATE_MASK;
        }*/
        
    }
	
    void SetCapacity(int nNewCapacity)
    {
        nCapacity = nNewCapacity;
        vElemSize.fY = vClientSize.fY / (float) nNewCapacity;
        vElemSize.fX = vClientSize.fX - 2 * _TEXT_ELEM_SPACING; 
        for (int i = 0; i < nItemCount; i++) 
            ((Window) vItems.elementAt(i)).SetSize(vElemSize);
    }
    
    

}
