﻿function initStartpageJQuery() {
    var startpage = $('#startpage');
    var divOnlineUsers = document.getElementById('divOnlineUsers');
    var divPrivateMessages = document.getElementById('divPrivateMessages');
    var divPrivateMessagesPopup = document.getElementById('divPrivateMessagesPopup');
    var divTeamspeak = document.getElementById('divTeamSpeak');
    var divMessageBoard = document.getElementById('divMessageBoard');
    var divGameServers = document.getElementById('divGameServers');
    var tabPrivateMessagesPopup = document.getElementById('tabPrivateMessagesPopup');
    var pollDelay = 10000;

    var cbox = $('#ChatBox');
    var cboxMsgList = document.getElementById('ChatBoxList');
    var cboxLastMsg = null;
    var cboxInBox = document.getElementById('ChatBoxText');
    var cboxLastId = 0;
    // var cboxUrlExp = /(((ht|f)tp(s?)\:\/\/|~\/|\/)?(\w+:\w+@)?(([-\w]+\.)+(com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(:[\d]{1,5})?(((\/([-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?((\?([-\w~!$+|.,*:]|%[a-f\d{2}])+=([-\w~!$+|.,*:=]|%[a-f\d]{2})*)(&([-\w~!$+|.,*:]|%[a-f\d{2}])+=([-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(#([-\w~!$+|.,*:=]|%[a-f\d]{2})*)?)/ig;
    var cboxUrlExp = /(([\w]+@)?((ht|f)tp(s?)\:\/\/|~\/|\/)?(\w+:\w+@)?(([-\w]+\.)+(com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(:[\d]{1,5})?(((\/([-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#|\:)?((\?([-\w~!$+|.,*:]|%[a-f\d{2}])+=([-\w~!$+|.,*:=]|%[a-f\d]{2})*)(&([-\w~!$+|.,*:]|%[a-f\d{2}])+=([-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(#([-\w~!$+|.,*:=]|%[a-f\d]{2})*)?(\:([-\w~!$+|.,*:=]|%[a-f\d]{2})*)?)/ig;
    var cboxImgExp = /((\.(jpg|png|gif))$)/ig;

    var gameServerData;

    // ----------------------------------------------------------------------------------------------- 
    // Get status...
    // -----------------------------------------------------------------------------------------------

    startpage.getstatus = function(forceReload) {
        writeLog('Status (force reload: ' + forceReload + ')');
        $.getJSON('Number1Clan.axd', { 'subject': 'startpage', 'forcereload': forceReload }, function(data) {
            if (data.TeamSpeak || forceReload) {
                startpage.queryTeamspeak(forceReload);
            };
            if (data.OnlineUsers || forceReload) {
                startpage.queryOnlineUsers(forceReload);
            };
            if (data.PrivateMessagesPopup || forceReload) {
                startpage.queryPrivateMessagesPopup(forceReload);
            };
            if (data.PrivateMessages || forceReload) {
                startpage.queryPrivateMessages(forceReload);
            };
            if (data.MessagesBoard || forceReload) {
                startpage.queryMessageBoard(forceReload);
            };
            if (data.ChatBox || forceReload) {
                writeLog('ChatBox > Changed...');
                cbox.queryChatBox(forceReload);
            };
            setTimeout(startpage.spinUpGetStatus, pollDelay);
        });
    }


    startpage.spinUpGetStatus = function() {
        startpage.getstatus(false);
    }


    // ----------------------------------------------------------------------------------------------- 
    // TeamSpeak...
    // -----------------------------------------------------------------------------------------------

    startpage.queryTeamspeak = function(forceReload) {
        if (divTeamspeak == null) {
            return
        }
        $.getJSON('Number1Clan.axd', { 'subject': 'teamspeak', 'forcereload': forceReload }, function(data) {
            startpage.queryTeamspeakResult(data);
        });
    }

    startpage.queryTeamspeakResult = function(users) {
        var user;
        var item;

        divTeamspeak.innerHTML = '';

        for (var i = 0; i < users.length; i++) {
            user = users[i];
            if (user.MustRemove) {
                var divRemove = document.getElementById('divTeamSpeak' + user.NickName);
                if (divRemove != null) {
                    $('#divTeamSpeak' + user.NickName).fadeOut('normal', function() {
                        divTeamspeak.removeChild(divRemove);
                    });
                }
            } else {
                item = document.createElement('div');
                item.id = 'divTeamSpeak' + user.NickName;
                item.innerHTML = user.NickName;
                divTeamspeak.appendChild(item);
                if (user.IsNew) {
                    item.style.display = 'none';
                    $(item).fadeIn('normal');
                }
            }
        }
    }



    // ----------------------------------------------------------------------------------------------- 
    // OnlineUsers...
    // -----------------------------------------------------------------------------------------------

    startpage.queryOnlineUsers = function(forceReload) {
        if (divOnlineUsers == null) {
            return
        }
        $.getJSON('Number1Clan.axd', { 'subject': 'onlineusers', 'forcereload': forceReload }, function(data) {
            startpage.queryOnlineUsersResult(data);
        });
    }

    startpage.queryOnlineUsersResult = function(users) {
        var user;
        var item;

        divOnlineUsers.innerHTML = '';

        for (var i = 0; i < users.length; i++) {
            user = users[i];
            if (user.MustRemove) {
                var divRemove = document.getElementById('divOnlineUsers' + user.NickName);
                if (divRemove != null) {
                    $('#divOnlineUsers' + user.NickName).fadeOut('normal', function() {
                        divOnlineUsers.removeChild(divRemove);
                    });
                }
            } else {
                item = document.createElement('div');
                item.id = 'divOnlineUsers' + user.NickName;
                item.innerHTML = user.NickName;
                divOnlineUsers.appendChild(item);
                if (user.IsNew) {
                    item.style.display = 'none';
                    $(item).fadeIn('normal');
                }
            }
        }
    }


    // -----------------------------------------------------------------------------------------------
    // PrivateMessages...
    // -----------------------------------------------------------------------------------------------

    startpage.queryPrivateMessages = function(forceReload) {
        $.getJSON('Number1Clan.axd', { 'subject': 'privatemessages', 'forcereload': forceReload }, function(data) {
            startpage.queryPrivateMessagesResult(data, forceReload);
        });
    }

    startpage.queryPrivateMessagesResult = function(messages, forceReload) {
        var message;

        // Delete rows...
        var table = document.getElementById('tabPrivateMessagesBody');
        var limit = 0;
        var rows = table.rows;
        for (; rows.length > limit; ) {
            table.deleteRow(limit);
        }

        for (var i = 0; i < messages.length; i++) {
            message = messages[i];

            var colorPre = '';
            var colorPost = '';

            if (message.IsNew) {
                htmlPre = '<b>';
                htmlPost = '</b>';
                img = 'mail_closed_16x16';
            } else {
                htmlPre = '';
                htmlPost = '';
                img = 'mail_opened_16x16';
            }

            $('#tabPrivateMessagesBody').append('<tr id="pm' + message.ID + '" onmouseout="this.className=\'your_wall_entry_mouse_out\'" onmouseover="this.className=\'your_wall_entry_mouse_over\'" class="your_wall_entry_mouse_out" onClick="window.open(\'start/users/messages/read.aspx?ID=' + message.ID + '\');"">' +
							'<td><img src="App_Images/objects/' + img + '.png" /></td>' +
							'<td>' + htmlPre + message.From + htmlPost + '</td>' +
							'<td>' + htmlPre + message.Subject + htmlPost + '</td>' +
							'<td style=\'text-align: right;\'>' + htmlPre + message.DateStr + htmlPost + '</td>' +
							'</tr>')
        }

        if (forceReload) {
            $('#PrivateMessagesTableContainer').fadeIn('normal');
        }
    }

    // -----------------------------------------------------------------------------------------------
    // PrivateMessagesPopup...
    // -----------------------------------------------------------------------------------------------

    startpage.queryPrivateMessagesPopup = function(forceReload) {
        if (divPrivateMessagesPopup == null) {
            return
        };
        $.getJSON('Number1Clan.axd', { 'subject': 'privatemessagespopup', 'forcereload': forceReload }, function(data) {
            startpage.queryPrivateMessagesPopupResult(data, forceReload);
        });
    }

    startpage.queryPrivateMessagesPopupResult = function(messages, forceReload) {
        var message;
        var item;
        var itemLink;
        var playSound = false;

        divPrivateMessagesPopup.innerHTML = '';

        if (messages.length > 0) {
            if (tabPrivateMessagesPopup.style.display == 'none') {
                tabPrivateMessagesPopup.style.display = 'table';
            };
        } else {
            tabPrivateMessagesPopup.style.display = 'none';
        }

        for (var i = 0; i < messages.length; i++) {
            message = messages[i];
            if (message.IsNew) {
                item.style.display = 'none';
                $(item).fadeIn('normal');
                playSound = true;
            }
        }

        if (playSound && !forceReload) {
            snd = document.privateMessageSound;
            try {
                snd.DoPlay()
            } catch (e) {
                try {
                    snd.Play()
                } catch (f) { }
            }
        }
    }



    // ----------------------------------------------------------------------------------------------- 
    // MessageBoard...
    // -----------------------------------------------------------------------------------------------

    startpage.queryMessageBoard = function(forceReload) {
        if ($('#tabMessageBoard') == null) {
            return
        }
        $.getJSON('Number1Clan.axd', { 'subject': 'messageboard', 'forcereload': forceReload }, function(data) {
            startpage.queryMessageBoardResult(data, forceReload);
        });
    }

    startpage.queryMessageBoardResult = function(messages, forceReload) {
        var message;

        // Delete rows...
        var table = document.getElementById('tabMessageBoard');
        var limit = 1;
        var rows = table.rows;
        for (; rows.length > limit; ) {
            table.deleteRow(limit);
        }

        // Add rows...
        for (var i = 0; i < messages.length; i++) {
            message = messages[i];

            var colorPre = '';
            var colorPost = '';

            if (message.BackColorString != '') {
                colorPre = '<font color="' + message.BackColorString + '">';
                colorPost = '</font>';
            }

            if (forceReload) {

                $('#tabMessageBoard').append('<tr id="mb' + message.ID + '" onmouseout="this.className=\'normal\'" onmouseover="this.className=\'highlight\'" class="normal">' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')"><img src="App_Images/forum/visibility/' + message.Img + '.png" /></td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')">' + colorPre + message.Subject + colorPost + '</td>' +
							'<td class="row_color" onclick="SUD(\'' + message.CreatedByID + '\')">' + colorPre + message.CreatedBy + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')" style="text-align: right;" >' + colorPre + message.Views + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')" style="text-align: right;" >' + colorPre + message.Replies + colorPost + '</td>' +
							'<td class="row_color" onclick="SUD(\'' + message.LastPostByID + '\')">' + colorPre + message.LastPostBy + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFLT(\'' + message.LastPostID + '\')" style="white-space: nowrap; text-align: right;">' + colorPre + message.LastPostDateStr + colorPost + '</td>' +
							'</tr>')
                $('#MessageBoardTableContainer').fadeIn('normal');
            } else {
                if (message.IsNew) {
                    $('#tabMessageBoard').append('<tr id="mb' + message.ID + '" onmouseout="this.className=\'normal\'" onmouseover="this.className=\'highlight\'" class="normal">' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')"><img src="App_Images/forum/visibility/' + message.Img + '.png" /></td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')">' + colorPre + message.Subject + colorPost + '</td>' +
							'<td class="row_color" onclick="SUD(\'' + message.CreatedByID + '\')">' + colorPre + message.CreatedBy + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')" style="text-align: right;" >' + colorPre + message.Views + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')" style="text-align: right;" >' + colorPre + message.Replies + colorPost + '</td>' +
							'<td class="row_color" onclick="SUD(\'' + message.LastPostByID + '\')">' + colorPre + message.LastPostBy + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFLT(\'' + message.LastPostID + '\')" style="white-space: nowrap; text-align: right;">' + message.LastPostDateStr + colorPost + '</td>' +
							'</tr>').find('td div').fadeIn('normal');
                } else {
                    $('#tabMessageBoard').append('<tr id="mb' + message.ID + '" onmouseout="this.className=\'normal\'" onmouseover="this.className=\'highlight\'" class="normal">' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')"><img src="App_Images/forum/visibility/' + message.Img + '.png" /></td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')">' + colorPre + message.Subject + colorPost + '</td>' +
							'<td class="row_color" onclick="SUD(\'' + message.CreatedByID + '\')">' + colorPre + message.CreatedBy + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')" style="text-align: right;" >' + colorPre + message.Views + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFB(\'' + message.ID + '\')" style="text-align: right;" >' + colorPre + message.Replies + colorPost + '</td>' +
							'<td class="row_color" onclick="SUD(\'' + message.LastPostByID + '\')">' + colorPre + message.LastPostBy + colorPost + '</td>' +
							'<td class="row_color" onclick="VTFLT(\'' + message.LastPostID + '\')" style="white-space: nowrap; text-align: right;">' + colorPre + message.LastPostDateStr + colorPost + '</td>' +
							'</tr>')
                }
            }
        }
    }


    // ----------------------------------------------------------------------------------------------- 
    // ChatBox...
    // -----------------------------------------------------------------------------------------------

    $(cboxInBox).keypress(function(e) {
        if (e.keyCode == 13) {
            cbox.sendMsg();
            e.cancelBubble = true;
            if (e.stopPropagation) e.stopPropagation();
            return false;
        }
    });

    $('#ChatBoxBtn').click(function() {
        cbox.sendMsg();
    });

    cbox.start = function() {
        writeLog('ChatBox > Start');
        cbox.fadeIn('normal');
    }

    cbox.sendMsg = function() {
        if (cboxInBox.value > '') {
            $.post('Number1Clan.axd', { 'subject': 'chatbox', 'cmd': 'add', 'msg': cboxInBox.value, 'id': cboxLastId }, function(data) {
                cbox.renderMessages(data, true, true);
            }, 'json');
            cboxInBox.value = '';
        }
    }

    cbox.queryChatBox = function(forceReload) {
        $.getJSON('Number1Clan.axd', { 'subject': 'chatbox', 'cmd': 'get', 'id': cboxLastId }, function(data) {
            cbox.renderMessages(data, true, !forceReload);
        });
    }

    cbox.renderMessages = function(messages, highlight, playSound) {
        var msg;
        var item, item2, item3;
        var dt;

        for (var i = messages.length - 1; i > -1; i--) {
            msg = messages[i];
            //msg.Message = msg.Message.replace('<', '&lt;').replace('>', '&gt;').replace(cboxUrlExp, ChatBoxFixUrl);
            
            if (cboxLastId < msg.ID) {
                item = document.createElement('div');
                if (msg.Own) {
                    item.className = 'chatboxPostOwn';
                } else {
                    if (cboxMsgList.childNodes.length % 2 == 0)
                        item.className = 'chatboxPost';
                    else
                        item.className = 'chatboxPost-alt';
                }
                item2 = document.createElement('div');
                item2.className = 'chatboxPost-date';
                item2.innerHTML = msg.DateStr;
                item.appendChild(item2);
                item2 = document.createElement('p');
                item2.className = 'chatboxPost-msg';
                item3 = document.createElement('span');
                item3.className = 'chatboxPost-nick';
                item3.innerHTML = msg.User + ':';
                item2.appendChild(item3);
                item2.appendChild(document.createTextNode(msg.Message.replace('<', '&lt;').replace('>', '&gt;')));
                //item2.appendChild(document.createTextNode(''));
                //item2.innerHTML += msg.Message.replace('<', '&lt;').replace('>', '&gt;').replace(cboxUrlExp, ChatBoxFixUrl);
                item2.innerHTML = item2.innerHTML.replace(cboxUrlExp, ChatBoxFixUrl);
                //item2.innerHTML = item2.innerHTML.replace('<', '&lt;').replace('>', '&gt;').replace(cboxUrlExp, ChatBoxFixUrl); 
                item2.innerHTML = item2.innerHTML.replace(cboxImgExp, ChatBoxFixImageUrl);
                item2.innerHTML = ChatBoxFixSmileys(item2.innerHTML);
                item.appendChild(item2);
                item.style.display = 'none';
                if (cboxLastMsg == null)
                    cboxMsgList.appendChild(item);
                else
                    cboxMsgList.insertBefore(item, cboxLastMsg);
                cboxLastMsg = item;
                cboxLastId = msg.ID;

                if (highlight) {
                    $(item).fadeIn('normal');
                }
                else
                { item.style.display = ''; }
            }
        }

        if (messages.length > 0 && playSound == true) {
            snd = document.chatboxSound;
            try {
                snd.DoPlay()
            } catch (e) {
                try {
                    snd.Play()
                } catch (f) { }
            }
        }
    }


    // ----------------------------------------------------------------------------------------------- 
    // GameServers...
    // -----------------------------------------------------------------------------------------------

    startpage.startGameServers = function() {
        if (!divGameServers) {
            return
        }
        startpage.queryGameServers();
        $('#divGameServers').fadeIn('normal');
    }

    startpage.queryGameServers = function() {
        $.getJSON('Number1Clan.axd', { 'subject': 'gameservers', 'forcereload': 'true' }, function(data) {
            gameServerData = data;
            startpage.queryGameServersResult();
        });
    }

    startpage.queryGameServersResult = function() {
        var server;
        var html = '<table cellspacing="0" cellpadding="5" style="width: 100px"><tr>';
        for (var i = 0; i < gameServerData.length; i++) {
            server = gameServerData[i];
            if (i == 14) {
                html = html + '</tr><tr>';
            }
            html = html + '<td><iframe src="http://cache.www.gametracker.com/components/html0/?host=' + server.IP + ':' + server.Port + '&bgColor=333333&titleBgColor=222222&borderColor=555555&fontColor=CCCCCC&titleColor=FF9900&linkColor=FFCC00&borderLinkColor=222222&showMap=1&showCurrPlayers=1&showTopPlayers=0&showBlogs=0&width=144&height=421" frameborder="0" scrolling="no" width="144" height="421"></iframe></td>';
        }
        html = html + '</tr></table>';
        divGameServers.innerHTML = html;
        setTimeout(startpage.queryGameServersResult, 30000);
    }


    // ----------------------------------------------------------------------------------------------- 
    // Document ready...
    // -----------------------------------------------------------------------------------------------

    $(document).ready(function() {
        writeLog('Document ready');
        cbox.start();
        startpage.startGameServers();
        startpage.getstatus(true);
    });
}


function ChatBoxFixUrl(url) {
    var pad = '';
    if (url.charAt(url.length - 1) == ' ') {
        url = url.substring(0, url.length - 1);
        pad = ' ';
    }
    if (url.indexOf('//') > 0)
        return '<a href="' + url + '" target="_blank">' + url + '</a>' + pad;
    else if (url.indexOf('@') > 0 && url.indexOf(':') == -1)
        return '<a href="mailto:' + url + '" target="_blank">' + url + '</a>' + pad;
    else
        return '<a href="http://' + url + '" target="_blank">' + url + '</a>' + pad;
}


function ChatBoxFixImageUrl(url) {
    return '<img src="' + url + '" style="max-width: 100px; max-height: 100px" />';
}


function ChatBoxFixSmileys(text) {
    var smiley_array = [':)', ':D', ';)', ':('];
    var smiley_xhtml = ['1', '4', '3', '2'];
    for (var i = 0; i < smiley_array.length; i++) {
        word = smiley_array[i].replace(")", "\\)");
        word = word.replace("(", "\\(");
        word = new RegExp(word, "g");
        var smiley_img = '<img src="http://www.number1clan.net/App_Images/emoticons/' + smiley_xhtml[i] + '.gif" align="absmiddle" />';
        text = text.replace(word, smiley_img);
    }
    return text;
}