﻿NicoFanSite.Guestbook = {};

NicoFanSite.Guestbook.PageParams = { current: null, max: null };
NicoFanSite.Guestbook.XmlObject = null;
NicoFanSite.Guestbook.XslObject = null;
NicoFanSite.Guestbook.LastMessage = null;

function LoadMessagesFromXml(sender, eventArgs)
{
    var windowlessEnabled = /(MSIE|Firefox)/.test(Silverlight.ua.Browser);
    sender.findName("form").Visibility = windowlessEnabled ? "Visible" : "Collapsed";
    sender.findName("noform").Visibility = windowlessEnabled ? "Collapsed" : "Visible";

    XHRLoader("handlers/guestbook.ashx", "session=" + new Date().getTime().toString(), "GET", XmlDownloadCompleted, GbXmlDownloadFailed,
        { namespace: "NicoFanSite.Guestbook", successAction: DisplayGBPage, errorAction: GbXmlDownloadFailed });
    if (!NicoFanSite.Guestbook.XslObject)
    {
        XHRLoader("xml/guestbook.xslt", null, "GET", XmlDownloadCompleted, GbXmlDownloadFailed,
            { namespace: "NicoFanSite.Guestbook", successAction: DisplayGBPage, errorAction: GbXmlDownloadFailed });
    }
    
    GetNickFromCookie();
}

function GbXmlDownloadFailed()
{
    if (NicoFanSite.Guestbook.LastMessage)
    {
        document.getElementById("messageTextbox").value = NicoFanSite.Guestbook.LastMessage;
        NicoFanSite.Guestbook.LastMessage = null;
    }
}

function DisplayGBPage()
{
    var control = GetControl().content;
    var xaml = XsltTransformation(NicoFanSite.Guestbook.XmlObject, NicoFanSite.Guestbook.XslObject);
    NicoFanSite.Guestbook.XmlObject = null;
    NicoFanSite.Guestbook.LastMessage = null;
    if (!xaml) return;
    var content = control.createFromXaml(xaml);
    var canvas = control.findName("messagesContainer");
    canvas.children.clear();
    canvas.children.add(content);
}

function GuestbookInit(sender, eventArgs)
{
    var messages = sender.findName("messages");
    var count = messages.children.count;
    var top = 0;
    for (var i = 0; i < count; i++)
    {
        var message = messages.children.getItem(i);
        message["Canvas.Top"] = top;
        top += message.ActualHeight + 4;
    }
    messages.Height = top;
    
    var pageNumber = sender.findName("pageNumber");
    centeringText(pageNumber, pageNumber.getParent());
    
    var pageInfo = pageNumber["Text"].split(' / ');
    NicoFanSite.Guestbook.PageParams.current = parseInt(pageInfo[0]);
    NicoFanSite.Guestbook.PageParams.max = parseInt(pageInfo[1]);

    scroller.Initialize(
        sender.findName("scroller"),
        messages,
        sender.findName("scrollUp"),
        sender.findName("scrollDown"),
        "#FF2373D5"
    );
}

function ChangeGuestbookPage(sender, eventArgs)
{
    var pageNumber;
    switch (sender["Name"])
    {
        case "firstLink":
            pageNumber = 1;
            break;
        case "previousLink":
            pageNumber = NicoFanSite.Guestbook.PageParams.current - 1;
            break;
        case "nextLink":
            pageNumber = NicoFanSite.Guestbook.PageParams.current + 1;
            break;
        case "lastLink":
            pageNumber = NicoFanSite.Guestbook.PageParams.max;
            break;
        default:
            pageNumber = 0;
            break;
    }
    deleteMouseCaptureObjects();
    XHRLoader("handlers/guestbook.ashx", "session=" + new Date().getTime().toString() + "&page=" + pageNumber,
        "GET", XmlDownloadCompleted, GbXmlDownloadFailed,
        { namespace: "NicoFanSite.Guestbook", successAction: DisplayGBPage, errorAction: GbXmlDownloadFailed });
}

function SendGBMessage(sender, eventArgs)
{
    var nick = document.getElementById("nickTextbox").value;
    var message = document.getElementById("messageTextbox").value;

    if (!/\S/.test(nick)) { return EmptyFieldAlert(1); }
    if (!/\S/.test(message)) { return EmptyFieldAlert(2); }

    NicoFanSite.Guestbook.LastMessage = message;
    //document.getElementById("nickTextbox").value = new String();
    document.getElementById("messageTextbox").value = new String();

    XHRLoader("handlers/guestbook.ashx", ["nick=" + nick, "message=" + message, "action=1"].join("&"),
        "POST", XmlDownloadCompleted, GbXmlDownloadFailed,
        { namespace: "NicoFanSite.Guestbook", successAction: DisplayGBPage, errorAction: GbXmlDownloadFailed });
    SetNickToCookie(nick);
}

function EmptyFieldAlert(value)
{
    var control = document.getElementById("SilverlightControl").content;
    var label = control.findName("emptyFieldText");
    switch (value)
    {
        case 1: label.Text = "не введен ник!"; break;
        case 2: label.Text = "не введено сообщение!"; break;
        default: label.Text = "непредвиденная ошибка"; break;
    }
    control.findName("emptyFieldCanvas").Visibility = "Visible";
    control.findName("EmptyFieldAnimation").Begin();    
    return null;
}

function EmptyFieldAnimationCompleted(sender, eventArgs)
{
    sender.findName("emptyFieldCanvas").Visibility = "Collapsed";
}

function GetNickFromCookie()
{
    var nick = GetCookieByName("nick");
    if (nick != "")
    {
        document.getElementById("nickTextbox").value = nick;
    }
}

function SetNickToCookie(nick)
{
    var date = new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 30);
    document.cookie = "nick=" + nick + "; expires=" + date.toGMTString();
}

function GetCookieByName(name)
{
    var cookies = document.cookie.split(';');
    while (cookies.length)
    {
        var cookie = cookies.pop().split('=');
        cookies[cookie[0]] = cookie[1];
    }
    var value = cookies[name];
    return value == undefined ? "" : value;
}
