--***********************************************************
--**              	  ROBERT JOHNSON                       **
--**            UI display with a question or text         **
--**          can display a yes/no button or ok btn        **
--***********************************************************

ISNewsUpdate = ISPanelJoypad:derive("ISNewsUpdate");

--************************************************************************--
--** ISNewsUpdate:initialise
--**
--************************************************************************--

function ISNewsUpdate:initialise()
    ISPanelJoypad.initialise(self);
    local btnWid = 100
    local btnHgt = 25
    local padBottom = 10
    if self.yesno then
        self.yes = ISButton:new((self:getWidth() / 2) - btnWid - 5, self:getHeight() - padBottom - btnHgt, btnWid, btnHgt, getText("UI_Yes"), self, ISNewsUpdate.onClick);
        self.yes.internal = "YES";
        self.yes.anchorTop = false
        self.yes.anchorBottom = true
        self.yes:initialise();
        self.yes:instantiate();
        self.yes.borderColor = {r=1, g=1, b=1, a=0.1};
        self:addChild(self.yes);

        self.no = ISButton:new((self:getWidth() / 2) + 5, self:getHeight() - padBottom - btnHgt, btnWid, btnHgt, getText("UI_No"), self, ISNewsUpdate.onClick);
        self.no.internal = "NO";
        self.no.anchorTop = false
        self.no.anchorBottom = true
        self.no:initialise();
        self.no:instantiate();
        self.no.borderColor = {r=1, g=1, b=1, a=0.1};
        self:addChild(self.no);
    else
        self.ok = ISButton:new((self:getWidth() / 2) - btnWid / 2, self:getHeight() - padBottom - btnHgt, btnWid, btnHgt, getText("UI_Ok"), self, ISNewsUpdate.onClick);
        self.ok.internal = "OK";
        self.ok.anchorTop = false
        self.ok.anchorBottom = true
        self.ok:initialise();
        self.ok:instantiate();
        self.ok.borderColor = {r=1, g=1, b=1, a=0.1};
        self:addChild(self.ok);
    end

    self.chatText = ISRichTextPanel:new(0, 2, self.width - 15, self.height - 60);
    self.chatText.marginRight = self.chatText.marginLeft;
    self.chatText:initialise();

    self:addChild(self.chatText);
    self.chatText.background = false;
    self.chatText.autosetheight = false;
    self.chatText.clip = true
    self.chatText:addScrollBars();
    self.chatText.text = self.text;
    self.chatText:paginate();
end

function ISNewsUpdate:updateButtons()
    local btnHgt = 25
    local padBottom = 10
    if self.yesno then
        self.yes:setY(self:getHeight() - padBottom - btnHgt);
        self.no:setY(self:getHeight() - padBottom - btnHgt);
    else
        self.ok:setY(self:getHeight() - padBottom - btnHgt);
    end
end

function ISNewsUpdate:prerender()
    self.chatText:setStencilRect(0,5,self:getWidth(),self:getHeight()-5);
    ISPanel.prerender(self);
end

function ISNewsUpdate:render()
    ISPanel.render(self);
    self.chatText:clearStencilRect();
end

function ISNewsUpdate:destroy()
    UIManager.setShowPausedMessage(true);
    self:setVisible(false);
    if self.destroyOnClick then
        self:removeFromUIManager();
    end
    if UIManager.getSpeedControls() then
        UIManager.getSpeedControls():SetCurrentGameSpeed(1);
    end
    if self.player and JoypadState.players[self.player+1] then
        setJoypadFocus(self.player, nil);
    end
end

function ISNewsUpdate:onClick(button)
    self:destroy();
    if self.onclick ~= nil then
        self.onclick(self.target, button, self.param1, self.param2);
    end
end

function ISNewsUpdate:prerender()
    self:drawRect(0, 0, self.width, self.height, self.backgroundColor.a, self.backgroundColor.r, self.backgroundColor.g, self.backgroundColor.b);
    self:drawRectBorder(0, 0, self.width, self.height, self.borderColor.a, self.borderColor.r, self.borderColor.g, self.borderColor.b);
    --	self:drawTextCentre(self.text, self:getWidth() / 2, (self:getHeight() / 2) - 10, 1, 1, 1, 1, UIFont.Small);
end

function ISNewsUpdate:onMouseDown(x, y)
    --	ISPanelJoypad.onMouseDown(self, x, y)
    -- FIXME: this prevents clicks being passed to windows behind, but need to swallow clicks outside and mouse-move events as well
    return true
end

function ISNewsUpdate:onGainJoypadFocus(joypadData)
    ISPanelJoypad.onGainJoypadFocus(self, joypadData);
    if self.yesno then
        self:setISButtonForA(self.yes)
        self:setISButtonForB(self.no)
        self.yes.mouseOver = true;
    else
        self:setISButtonForA(self.ok)
        self.ok.mouseOver = true;
    end
end

function ISNewsUpdate:onJoypadDown(button)
    if button == Joypad.AButton then
        if self.yesno then
            if self.yes.mouseOver then
                self.yes.player = self.player;
                self.yes.onclick(self.yes.target, self.yes);
            else
                self.no.player = self.player;
                self.no.onclick(self.no.target, self.no);
            end
        else
            self.ok.onclick(self.ok.target, self.ok);
        end
    end
    if button == Joypad.BButton then
        if self.yesno then
            self.no.player = self.player;
            self.no.onclick(self.no.target, self.no);
        else
            self.ok.onclick(self.ok.target, self.ok);
        end
    end
end

function ISNewsUpdate:onJoypadDirRight()
    if self.yesno then
        self.no.mouseOver = true;
        self.yes.mouseOver = false;
    end
end

function ISNewsUpdate:onJoypadDirLeft()
    if self.yesno then
        self.no.mouseOver = false;
        self.yes.mouseOver = true;
    end
end

function ISNewsUpdate:update()
    ISPanelJoypad.update(self)
--    local minHeight = self.chatText:getY() + self.chatText:getHeight() + 30
--    if self:getHeight() < minHeight then
--        local dh = minHeight - self:getHeight()
--        self:setHeight(minHeight)
--        self:setY(self:getY() - dh / 2)
--    end
    if self.alwaysOnTop then
        self:bringToTop();
    end
end

--************************************************************************--
--** ISNewsUpdate:new
--**
--************************************************************************--
function ISNewsUpdate:new(x, y, width, height, text, yesno, target, onclick, player, param1, param2)
    local o = {}
    o = ISPanelJoypad:new(x, y, width, height);
    setmetatable(o, self)
    self.__index = self
    local playerObj = player and getSpecificPlayer(player) or nil
    o.name = nil;
    o.backgroundColor = {r=0, g=0, b=0, a=0.5};
    o.borderColor = {r=0.4, g=0.4, b=0.4, a=1};
    o.width = width;
    o.height = height;
    o.anchorLeft = true;
    o.anchorRight = true;
    o.anchorTop = true;
    o.anchorBottom = true;
    o.text = text;
    o.yesno = yesno;
    o.target = target;
    o.onclick = onclick;
    o.yes = nil;
    o.player = player;
    o.no = nil;
    o.ok = nil;
    o.param1 = param1;
    o.param2 = param2;
    o.destroyOnClick = false;
    return o;
end

