﻿var wi_chatRefreshInt = 4000;
var wi_chatSessions = 0;
var wi_chatUpdating = false;
var wi_chatTimer;
var wi_chatMyName = 'Guest';
var wi_chatWins;
var wi_chatIsGuest = true;
var wi_chatIsGuestValidated = false;
var wi_chatGuestName = '';
var wi_chatGuestEmail = '';
var wi_chatGuestPhone = '';

$(document).ready(function () { wi_chatTimer = setInterval("WIChat_Refresh()", wi_chatRefreshInt); });

function WIChat_ChangeRefresh(ms) {
    if (ms != null && !ms.isNaN && ms >= 500 && ms <= 30000) {
        wi_chatRefreshInt = ms;

        try {
            if (wi_chatTimer != null) clearInterval(wi_chatTimer);
        } catch (e) { }

        wi_chatTimer = setInterval("WIChat_Refresh()", wi_chatRefreshInt);
    }
}

function WIChat_Refresh() {
    try {
        if (!wi_chatUpdating) {
            wi_chatUpdating = true;
            $.get('/jquery.aspx', { mode: 'chat' }, function (data) { chatUpdate(data); }, "xml");
        }
    }
    catch (e) {
        wi_chatUpdating = false;
        WIChat_ChangeRefresh(30000);
    }
}

function loadXMLString(data) {
    if (window.DOMParser) {
        parser = new DOMParser();
        return parser.parseFromString(data, "text/xml");
    }
    else {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(data);
        return xmlDoc;
    }
}

function chatUpdate(data) {
    if (typeof (data) == 'string') data = loadXMLString(data);

    var response = $(data).find("result");
    if (response != null && response.length > 0) {
        response = response[0];
        if (response.attributes != null) {
            if (response.attributes.getNamedItem("userIsGuest") != null)
                wi_chatIsGuest = (response.attributes.getNamedItem("userIsGuest").value == 'true');
            if (response.attributes.getNamedItem("guestIsValidated") != null)
                wi_chatIsGuestValidated = (response.attributes.getNamedItem("guestIsValidated").value == 'true');
        }

        var messages = $(response).find("message");
        if (messages != null && messages.length > 0) {
            var sessionBody;

            var sessionId;
            var userName;
            var targetName;
            var targetOnline;
            var msg;
            for (var i = 0; i < messages.length; i++) {
                sessionId = messages[i].attributes.getNamedItem("sessionId").value;
                userName = messages[i].attributes.getNamedItem("userName").value;
                targetName = messages[i].attributes.getNamedItem("targetName").value;
                targetOnline = (messages[i].attributes.getNamedItem("targetOnline").value == 'true');

                displayMessage(sessionId, userName, targetName, messages[i].firstChild.data, targetOnline);
            }

            WIChat_ChangeRefresh(1500);
        }
    }

    wi_chatUpdating = false;
}

function startChat(targetId, isOnline, isSupportChat) {
    try { $.get('/jquery.aspx', { mode: 'chat', init: true, targetId: targetId, isSupportChat: isSupportChat }, function (data) { newSession(data); }, "xml"); }
    catch (e) { WIChat_ChangeRefresh(30000); }
}

function newSession(data) {
    var session = $(data).find("session");
    if (session != null && session.length > 0) {
        session = session[0]

        wi_chatMyName = session.attributes.getNamedItem("initiatorName").value;
        var sessionId = session.attributes.getNamedItem("id").value;
        var targetName = session.attributes.getNamedItem("targetName").value;

        if (!wi_chatIsGuest || (wi_chatIsGuest && wi_chatIsGuestValidated)) openChat(sessionId, wi_chatMyName, targetName, false);
        else openChat(sessionId, wi_chatMyName, targetName, true);

        var session = $('#chatSes_' + sessionId)[0];

        WIChat_ChangeRefresh(1500);
    }
}

function chkUserInfo(sessionId) {
    var valid = true;

    var item = $('#name_' + sessionId);
    if (item == null) valid = false;
    else if (item.length == 0) valid = false;
    else {
        item = item[0];
        if (item.value == null || item.value.length == 0) valid = false;
        else wi_chatGuestName = item.value;
    }
    if (valid) {
        item = $('#email_' + sessionId);
        if (item == null) valid = false;
        else if (item.length == 0) valid = false;
        else {
            item = item[0];
            if (item.value == null || item.value.length == 0 || item.value.indexOf('@') == -1 || item.value.indexOf('.') == -1) valid = false;
            else wi_chatGuestEmail = item.value;
         }
    }
    if (valid) {
        item = $('#phone_' + sessionId);
        if (item != null && item.length > 0) {
            item = item[0];
            if (item.value != null && item.value.length > 0) wi_chatGuestPhone = item.value;
        }
    }

    if (valid) {
        wi_chatIsGuestValidated = true;
        hideUserInfo(sessionId);
    }
    else {
        var item = $('#infoError_' + sessionId);
        if (item != null || item.length > 0) {
            item[0].innerText = '* Error: Please enter your name and a valid email address.';
        }
    }

    return valid;
}

function hideUserInfo(sessionId) {
    var item = $('#userInfo_' + sessionId);
    if (item != null && item.length > 0) {
        item = item[0];
        item.style.display = 'none';
        item.style.visibility = 'hidden';
    }
}

function openChat(sessionId, initiatorName, targetName, getUserDetails) {
    var date = new Date();

    var chat = $('#chatSes_' + sessionId + '');

    if (chat == null || chat.length == 0) {
        wi_chatSessions += 1;
        var sendMsgFunction

        if (getUserDetails) sendMsgFunction = 'if (chkUserInfo(\'' + sessionId + '\')) {this.value=\'Send\'; sendMessage(\'' + sessionId + '\', \'' + initiatorName + '\', \'' + targetName + '\');}';
        else {
            hideUserInfo(sessionId);
            sendMsgFunction = 'this.value=\'Send\'; sendMessage(\'' + sessionId + '\', \'' + initiatorName + '\', \'' + targetName + '\');';
        }

        var chatWin = '<div class="WI-ChatWin" id="chatSes_' + sessionId + '">' +
            '<div class="WI-ChatWinHead"><div class=\"WI-ChatWinHeadL\"><img src="/images/icons/member.png" width="16" height="16" alt="Member: ' + targetName + '"> ' + targetName +
            '</div><div class="WI-ChatWinHeadR"><a href="javascript:closeChat(\'' + sessionId + '\');">X</a></div><div class="WI-Clear"></div></div>' +
            '<div class="WI-ChatWinBody" id="body_' + sessionId + '"><span class="WI-ChatTip">' + date.toLocaleString() + '</span><br/></div><div class="WI-ChatWinFoot">' +
            '<textarea rows="2" maxlength="2000" id="msg_' + sessionId +
            '" onkeypress="checkEnter(event, \'' + sessionId + '\', \'' + initiatorName + '\', \'' + targetName + '\');">' +
            '</textarea><input type="button" onclick="' + sendMsgFunction + '" value="Start Chat" /></div>';

        if (getUserDetails) chatWin += '<div class="WI-ChatWinGetInfo" id="userInfo_' + sessionId + '">' +
            '<p>Enter your name, email and message.</p>' +
            '<table><tr><td class="WI-Form-Req">Name&nbsp;</td><td><input type="text" id="name_' + sessionId + '" /></td></tr>' +
            '<tr><td class="WI-Form-Req">Email&nbsp;</td><td><input type="text" id="email_' + sessionId + '" /></td></tr>' +
            '<tr><td class="">Phone&nbsp;</td><td><input type="text" id="phone_' + sessionId + '" /></td></tr>' +
            '<tr><td colspan="2" class="WI-ChatWinError" id="infoError_' + sessionId + '"></td></tr>' +
            '</table></div>';

        chatWin += '</div>';

        chat = $('.WI-Chat').append(chatWin);

        chat = $('#chatSes_' + sessionId + '')[0];
        chat.style.top = (100 + (100 * wi_chatSessions)) + 'px';
        chat.style.zIndex = 500 + wi_chatSessions;

        var dragable1 = DragHandler.attach(chat.firstChild);
        dragable1.dragBegin = beginDrag;
        dragable1.drag = drag;
        dragable1.dragEnd = endDrag;
    }
    else {
        chat = chat[0];
        chat.style.visibility = 'visible';
        chat.style.display = '';
    }

    scrollAndFocus(sessionId);
}

function beginDrag(element, x, y) { }
function drag(element, x, y) { }
function endDrag(element, x, y) { }

function scrollAndFocus(sessionId) {
    var chat = $('#body_' + sessionId)[0];
    chat.scrollTop = chat.scrollHeight;
    chat = $('#msg_' + sessionId)[0].focus();
}

function closeChat(sessionId) {
    var chat = $('#chatSes_' + sessionId + '');

    if (chat != null || chat.length > 0) {
        //wi_chatSessions -= 1;

        chat = chat[0];
        chat.style.visibility = 'hidden';
        chat.style.display = 'none';

        try { $.get('/jquery.aspx', { mode: 'chat', sessionId: sessionId, showing: false }, null); }
        catch (e) { }
    }

    WIChat_ChangeRefresh(4000);
}

function sendMessage(sessionId, initiatorName, targetName) {
    var message;
    try {
        message = $('#msg_' + sessionId);
        if (message != null && message.length > 0) {
            var msg = message[0].value;

            if (wi_chatIsGuest && wi_chatGuestName != null && wi_chatGuestName.length > 0) initiatorName = wi_chatGuestName;

            displayMessage(sessionId, initiatorName, targetName, msg, true);

            $.get('/jquery.aspx', {
                mode: 'chat',
                sessionId: sessionId,
                message: encodeURIComponent(msg),
                guestName: encodeURIComponent(wi_chatGuestName),
                guestEmail: encodeURIComponent(wi_chatGuestEmail),
                guestPhone: encodeURIComponent(wi_chatGuestPhone)
            }, function (data) { chatUpdate(data); }, "xml");

            message[0].value = '';
        }
    }
    catch (e) { WIChat_ChangeRefresh(30000); }
}

function displayMessage(sessionId, posterName, targetName, message, targetOnline) {
    sessionBody = $('#body_' + sessionId);
    if (sessionBody == null || sessionBody.length == 0) {
        openChat(sessionId, targetName, posterName, false);
        sessionBody = $('#body_' + sessionId);
    }
    else {
        var chat = $('#chatSes_' + sessionId + '');

        if (chat != null || chat.length > 0) {
            chat = chat[0];
            chat.style.visibility = 'visible';
            chat.style.display = '';
        }
    }
    message = '<b>' + posterName + '</b>: ' + Encoder.htmlEncode(message) + '<br/>';
    if (!targetOnline) message = '<span class="WI-ChatTip">' + message + '</span>';
    sessionBody.append(message);

    scrollAndFocus(sessionId);
}

function checkEnter(e, sessionId, initiatorName, targetName) {
    var keynum;

    if (!e) e = window.event;

    if (window.event) keynum = e.keyCode; else if (e.which) keynum = e.which;

    if (keynum != null && keynum == 13) {
        sendMessage(sessionId, initiatorName, targetName);

        if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
        return false;
    }
}
function showFriends(show, persist) {
    var friends = $(".WI-ChatFriends");
    if (friends != null && friends.length > 0) {
        friends = friends[0];
        if (show) {
            friends.style.display = "block";
            friends.style.visibility = "visible";
        }
        else {
            friends.style.display = "none";
            friends.style.visibility = "hidden";
        }
    }
}
