﻿var g_detailView = null;

var DetailView = function()
{
    DetailView.superclass.constructor.call(this, {
        title: "スレッド",
        region: "center",
        contentEl: "DetailView",
        split: true,
        width: 225,
        minSize: 100,
        layout: "fit",
        margins: "0 0 0 0",
        autoScroll: true,
        cls: "DetailView",
        bbar: new Ext.Toolbar({
            defaultText: "",
            id: "detailViewStatusbar",
            items:
                    [
                    "",
                    "->",
	                {
	                    id: "detailView_reloadBtn",
	                    text: "スレ更新",
	                    handler: DetailViewToolbar_onReload
	                },
	                {
	                    id: "detailView_aboutBtn",
	                    text: "HikkyWebについて",
	                    handler: DetailViewToolbar_onAbout
	                }
                    ]
        })
    });

    g_detailView = this;
    this.targetURL = "GetThreadDAT.aspx";
    this.boardSubjectURL = null;
    this.datName = null;
    this.dat = null;

    this.on("afterlayout", this.onAfterLayout, this);
};

Ext.extend(DetailView, Ext.Panel,
{
    updateView: function(boardSubjectURL, name, dat)
    {
        // DAT情報の保持
        this.boardSubjectURL = boardSubjectURL;
        this.datName = name;
        this.dat = dat;

        // タイトルの設定
        this.setTitle(this.datName);

        // 問い合わせURLの組み立て
        var requestURL = this.targetURL;
        var queryString = "";

        if (this.boardSubjectURL != null)
            queryString += ("URL=" + this.boardSubjectURL);

        queryString += "&DAT=" + this.dat;

        if (queryString.length > 0)
            requestURL += ("?" + queryString);

        requestURL = encodeURI(requestURL);

        this.load({
            url: requestURL,
            //params: { URL: queryString },
            discardUrl: false,
            nocache: false,
            text: "Loading...",
            timeout: 30,
            scripts: true
        });
    },

    onReload: function(btn, bar)
    {
        if (this.boardSubjectURL == null || this.dat == null)
            return;

        // 問い合わせURLの組み立て
        var queryString = "";

        queryString += ("URL=" + this.boardSubjectURL);
        queryString += ("&DAT=" + this.dat);
        // 最終スレッド番号の設定
        queryString += ("&RequestThreadNo=" + $(".ThreadDat").length);

        // ステータスバーをビジー状態にする
        this.SetBarMessage(bar, "Loading...");

        // 更新ボタン禁止
        if (btn != null)
            btn.disable();

        $.ajax(
            {
                url: this.targetURL,
                type: "GET",
                data: encodeURI(queryString),
                dataType: "html",
                error: DetailView_onReceivedError,
                success: DetailView_onReceivedData
            });
    },

    onReceivedData: function(robj, btn, bar)
    {
        // ビジー状態解除
        this.ClearBarMessage(bar);

        // 更新ボタン解除
        if (btn != null)
            btn.enable();

        var dats = $(robj).filter(".ThreadDat");
        $("#" + this.body.id).append(dats);
    },

    onReceivedError: function(btn, bar)
    {
        // ビジー状態解除
        this.ClearBarMessage(bar);

        // 更新ボタン解除
        if (btn != null)
            btn.enable();
    },

    SetBarMessage: function(bar, message)
    {
        if (bar == null)
            return;

        var comp = bar.getComponent(0);
        if (comp != null)
            $("#" + comp.getItemId()).text(message);
    },

    ClearBarMessage: function(bar)
    {
        if (bar == null)
            return;

        var comp = bar.getComponent(0);
        if (comp != null)
            $("#" + comp.getItemId()).text("");
    },

    onAbout: function(btn, bar)
    {
        var win = new AboutHikkyWeb();
        win.showAbout();
    },

    onAfterLayout: function()
    {
        if ($("#DetailView").css("visibility") != "visible")
        {
            $("#DetailView").css("visibility", "visible");
            $("#PublicInformation").load("PublicInformation.aspx");
        }
    }
});

function DetailViewToolbar_onReload(btn)
{
    if (g_detailView == null)
        return;

    var bar = Ext.getCmp("detailViewStatusbar");

    g_detailView.onReload(btn, bar);
}

function DetailView_onReceivedError(robj)
{
    if (g_detailView == null)
        return;

    var btn = Ext.getCmp("detailView_reloadBtn");
    var bar = Ext.getCmp("detailViewStatusbar");

    g_detailView.onReceivedError(btn, bar);
}

function DetailView_onReceivedData(robj)
{
    if (g_detailView == null)
        return;

    var btn = Ext.getCmp("detailView_reloadBtn");
    var bar = Ext.getCmp("detailViewStatusbar");

    g_detailView.onReceivedData(robj, btn, bar);
}

function DetailViewToolbar_onAbout(btn)
{
    if (g_detailView == null)
        return;

    var bar = Ext.getCmp("detailViewStatusbar");

    g_detailView.onAbout(btn, bar);
}

function onDetailViewAncherOver(element, target)
{
    var q = Ext.QuickTips.getQuickTip();

    q.maxWidth = 400;

    // Manually register a quick tip for a specific element
    q.register({
        target: element,
        text: $(target).html(),
        width: 400
    });
}

