﻿
/*-----------------------------------------------------------------------------------------------------
IMPLEMENTATIONS OF THE CHATTING SERVICE
-----------------------------------------------------------------------------------------------------*/

g_oldStatus = "";
g_hasfocus = true;
g_TitlebarLostFocusPattern = g_tr.new_msg_pattern; //TOREMOVE: "* New Message ";
g_TitlebarLostFocusIndex = 0;
g_NewMessageReceived = false;
g_UiUpdateTimer = -1;

function initSimpleConnection() {
    con = new SimpleConnection();
    var defaultSchema = "http://www.SimpleConnexion.com/basic/1.0";

    con.messageListeners.addListener(new MessageListener("msg2", "response", "chat", defaultSchema, handleChatResponse)); //sent if there is error in delivery
    con.messageListeners.addListener(new MessageListener("msg2", "response", "login", defaultSchema, handleLoginResponse));
    con.messageListeners.addListener(new MessageListener("msg2", "response", "logout", defaultSchema, handleLogoutResponse));
    con.messageListeners.addListener(new MessageListener("msg2", "notify", "chat", defaultSchema, handleChatMessage));
    con.messageListeners.addListener(new MessageListener("msg2", "notify", "profile", defaultSchema, handleProfileMessage));
    con.discussionChanged.addListener(handleDiscussionChanged);
    con.connected.addListener(handleConnected);
    g_UiUpdateTimer = setInterval(updateUI, 500);
    return con;
}

function updateUI() {
    handleTitleBar();
}



function handleLoginResponse(sender, msg) {
    if (typeof (msg.success) != "undefined") {
        if (!msg.success) {
            con.isLoggedIn = false;
            var msgType = (msg.errcode == "0035") ? 1 : ((msg.errcode == "0030") ? 2 : 0);
            openLoginDialog(msgType);
        } else {
            con.isLoggedIn = true;
            con.userId = msg.properties.uuid; // after login another uuid is sent to the client, so take it here
            con.contactsManager.loadContacts();
            con.mailDiscussionManager.loadAllDiscussions();
            j$("#header_login_box").hide();
            j$("#header_logout_box").show();
            con.loggedin.fireEvent({"userid":con.userId, "isLoggedIn": true});
        }
    }
}

function handleLogoutResponse(sender, msg) {
    if (typeof (msg.success) != "undefined") {
        if (!msg.success) {
            alert(g_tr.logout_failed); //TOREMOVE:"Failed to logout. Please try again.");
        } else {
            con.isLoggedIn = false;
            con.loggedin.fireEvent({ "userid": con.userId, "isLoggedIn": false });
            con.contactsManager.close();
            con.mailDiscussionManager.close();
            j$("#header_logout_box").hide();
            j$("#header_login_box").show();
            alert(g_tr.logout_success); //TOREMOVE:"You successfully logged out");
            // reconnect as anonymous user
            g_dispMsg.clear();
            con.stop();
            con.start();
        }
    }
}

function getUserNickname(sender, _msg) {
    if (typeof (_msg.nick) == "undefined") {
        if (_msg.src == sender.userId) {
            return g_tr.chat_you;
        }
        return g_tr.chat_stranger;
    }
    return _msg.nick;
}

function handleChatResponse(sender, msg) {
    if (msg.success == "0") {
        g_dispMsg.writeHtml(g_tr.msg_undelivered /*TOREMOVE:"The following message was not delivered:<br/>"*/ + msg.properties.text, "DisplayMessageLine_ServerNotif", false);
    }
}

function handleChatMessage(sender, msg) {
    var src = g_tr.chat_stranger + ": ";
    if (typeof (msg.srcNickname) != "undefined") {
        src = msg.srcNickname + ": ";
    }

    var className = "DisplayMessageLine_Incoming";
    if (msg.src == sender.userId) {
        className = "DisplayMessageLine_Outgoing";
    }
    g_dispMsg.writeHtml(src + msg.text, className, false);
    g_NewMessageReceived = !g_hasfocus;
}



//function handleChatMessage_old(sender, _msg) {
//    if (_msg.src != sender.userId) {
//        sender.peerNickname = getUserNickname(sender, _msg);
//    }

//    var className = "DisplayMessageLine_Incoming";
//    var _type = _msg.type.toLowerCase();
//    if (_type == "chat") {
//        var src = sender.peerNickname + ": "; //"Stranger: ";
//        if (_msg.src == sender.userId) {
//            className = "DisplayMessageLine_Outgoing";
//            src = getUserNickname(sender, _msg) + ": ";  //"You: ";
//            g_NewMessageReceived |= false;
//            // tells about stranger's status
//            if (typeof (_msg.status) != "undefined") {
//                if (_msg.status != "") {
//                    g_dispMsg.writeHtml("You now have the following status:<br/>" + _msg.status, "DisplayMessageLine_ServerNotif", false);
//                    g_googleVideoSearch.execute(_msg.status);
//                } else {
//                    g_dispMsg.writeHtml("You have removed your status", "DisplayMessageLine_ServerNotif");
//                }
//            }
//        } else {
//            g_NewMessageReceived = true && !g_hasfocus;
//            // tells about stranger's status
//            if (typeof (_msg.status) != "undefined") {
//                if (_msg.status != "") {
//                    g_dispMsg.writeHtml(sender.peerNickname + /*Stranger*/" has the following status:<br/>" + _msg.status, "DisplayMessageLine_ServerNotif", false);
//                } else {
//                    g_dispMsg.writeHtml(sender.peerNickname + /*Stranger*/" has removed his status", "DisplayMessageLine_ServerNotif");
//                }
//            }
//        }

//        if (typeof (_msg.txt) != "undefined" && _msg.txt != null && _msg.txt != "") {
//            g_dispMsg.writeHtml(src + _msg.txt, className);
//        }

//    } else if (_type == "newchat") {
//        g_NewMessageReceived = true && !g_hasfocus;
//        className = "DisplayMessageLine_ServerNotif";
//        g_dispMsg.clear();
//        g_dispMsg.writeHtml("<b>You are connected to a new user. You can chat now.</b><br/>Don't reveal personal information and please avoid abusive language.", className, false);
//        var interest = false;
//        if (typeof (_msg.topics) != "undefined") {
//            interest = true;
//            g_dispMsg.writeHtml(sender.peerNickname + /*Stranger*/" has the following interests.<br/>", className, false);
//            g_dispMsg.writeHtml("Topics: " + _msg.topics, className);
//        }
//        if (typeof (_msg.places) != "undefined") {
//            if (!interest) {
//                g_dispMsg.writeHtml(sender.peerNickname + /*Stranger*/" has the following interests.<br/>", className, false);
//            }
//            g_dispMsg.writeHtml("Places: " + _msg.places, className);
//        }

//        if (typeof (_msg.status) != "undefined") {
//            if (_msg.status != "") {
//                g_dispMsg.writeHtml(sender.peerNickname + /*Stranger*/" has the following status:<br/>" + _msg.status, className, false);
//            }
//        }

//        discussionStarted();
//        return;
//    } else if (_type == "peerleft") {
//        className = "DisplayMessageLine_ServerNotif";
//        g_dispMsg.writeHtml(sender.peerNickname + /*Stranger*/" has ended the discussion.", className);
//        discussionEnded();
//        return;
//    } else if (_type == "error") {
//        className = "DisplayMessageLine_ServerNotif";
//        g_dispMsg.writeHtml(_msg.txt, className);
//        sender.searchingNewUser = false;
//        discussionEnded();
//        return;
//    } else if (_type == "paused") {
//        className = "DisplayMessageLine_ServerNotif";
//        g_dispMsg.writeHtml(_msg.txt, className);
//        sender.searchingNewUser = false;
//        discussionEnded();
//        return;
//    } else if (_type == "server") {
//        className = "DisplayMessageLine_ServerNotif";
//        g_dispMsg.writeHtml(_msg.txt, className);
//        return;
//    } else if (_type == "twitterauth") {
//        window.open("TwitterAuth.aspx", "TwitterAuth", "location=no,menubar=no,resizable=no,scrollbars=yes,status=no,toolbar=no,width=800");
//        return;
//    }
//}


function handleProfileMessage(sender, msg) {
    showMiniProfile(sender, msg);
    //showFullProfile(sender, msg);
}

function showFullProfile(sender, msg) {
    var _profile = msg.profile;
    var _prefix = "";

    if (_profile.profileOwner == sender.userId) {
        _prefix = "#your_";
        sender.yourProfile = _profile;
    } else {
        _prefix = "#peer_";
        sender.peerProfile = _profile;
    }

    var elem = $(_prefix + "pf_Image");
    if (typeof (_profile.normalImageUrl) != "undefined" && _profile.normalImageUrl != null && _profile.normalImageUrl != "") {
        elem.attr("src", _profile.normalImageUrl);
    } else {
        elem.attr("src", "images/users/anonymous_normal.png");
    }

    elem = $(_prefix + "pf_Nickname");
    elem.text("");
    if (typeof (_profile.nickName) != "undefined" && _profile.nickName != null && _profile.nickName != "") {
        elem.text(_profile.nickName);
    } else {
        //        $("#yourMiniProfile_Empty")[0].style.display = "inline";
        //        $("#yourMiniProfile_Completed")[0].style.display = "none";
    }

    elem = $(_prefix + "pf_Age");
    elem.text("");
    if (typeof (_profile.ageRange) != "undefined" && _profile.ageRange != null) {
        elem.text(_profile.ageRange);
    }

    elem = $(_prefix + "pf_Gender");
    elem.text("");
    if (typeof (_profile.gender) != "undefined" && _profile.gender != null) {
        elem.text(_profile.gender);
    }

    elem = $(_prefix + "pf_Profession");
    elem.text("");
    if (typeof (_profile.profession) != "undefined" && _profile.profession != null) {
        elem.text(_profile.profession);
    }

    elem = $(_prefix + "pf_Location");
    elem.text("");
    if (typeof (_profile.location) != "undefined" && _profile.location != null) {
        elem.text(_profile.location);
    }


    elem = $(_prefix + "pf_Website");
    elem.text("");
    elem.attr("href", "");
    if (typeof (_profile.website) != "undefined" && _profile.website != null) {
        elem.text(_profile.website);
        elem.attr("href", "http://" + _profile.website);
    }
}

function showMiniProfile(sender, msg) {
    var _profile = msg.profile;
    var _prefix = "";
    var elem = null;

    if (_profile.profileOwner == sender.userId) {
        _prefix = "#ur_";
        sender.yourProfile = _profile;
        if (con.isLoggedIn) {
            j$("#yourMiniProfileEdit").hide();
            j$("#yourMiniProfile").show();
            j$("#yourMiniProfile_Completed").show();
        }

        j$("#ur_pf_Location_Lat").text(_profile.loc_lat);
        j$("#ur_pf_Location_Lng").text(_profile.loc_lng);

        elem = $(_prefix + "pf_Profession_Val");
        elem.text("");
        if (typeof (_profile.professionid) != "undefined" && _profile.professionid != null) {
            elem.text(_profile.professionid);
        }

        elem = $(_prefix + "pf_Age_Val");
        elem.text("");
        if (typeof (_profile.ageRange) != "undefined" && _profile.ageRange != null) {
            elem.text(_profile.ageRange);
        }

        elem = $(_prefix + "pf_Gender_Val");
        elem.text("");
        if (typeof (_profile.gender) != "undefined" && _profile.gender != null) {
            elem.text(_profile.gender);
        }

        elem = $(_prefix + "pf_Location");
        elem.text("");
        if (typeof (_profile.location) != "undefined" && _profile.location != null) {
            elem.text(_profile.location);
        }

    } else {
        _prefix = "#pr_";
        sender.peerProfile = _profile;

        elem = $(_prefix + "pf_Location");
        elem.text("");
        if (typeof (_profile.formatedDistance) != "undefined" && _profile.formatedDistance != null) {
            elem.text(_profile.formatedDistance);
        }
    }

    elem = $(_prefix + "pf_Image");
    if (typeof (_profile.normalImageUrl) != "undefined" && _profile.normalImageUrl != null && _profile.normalImageUrl != "") {
        elem.attr("src", _profile.normalImageUrl);
    } else {
        elem.attr("src", "images/users/anonymous_normal.png");
    }

    elem = $(_prefix + "pf_Nickname");
    elem.text("");
    if (typeof (_profile.nickName) != "undefined" && _profile.nickName != null) {
        elem.text(_profile.nickName);
    }


    elem = $(_prefix + "pf_Age");
    elem.text("");
    if (typeof (_profile.ageRange) != "undefined" && _profile.ageRange != null) {
        elem.text(g_GetAge(_profile.ageRange));
    }


    elem = $(_prefix + "pf_Gender");
    elem.text("");
    if (typeof (_profile.gender) != "undefined" && _profile.gender != null) {
        elem.text(g_GetGender(_profile.gender));
    }


    elem = $(_prefix + "pf_Profession");
    elem.text("");
    if (typeof (_profile.professionid) != "undefined" && _profile.professionid != null) {
        elem.text(g_GetProfession(_profile.professionid));
    }


}

function saveMiniProfileOnServer(nickname, gender, age, profession, location_lat, location_lng, location_text,
                                ageCriteria, genderCriteria, professionCriteria, countryCriteria, minDistCriteria, maxDistCriteria) {
    var msg = createSaveProfileMessage(con.nextMessageID(), nickname, gender, age, profession, location_lat, location_lng, location_text);

    con.postMessageObject(msg);
}

function handleDiscussionChanged(sender, args) {
    if (args != null) {
        if (args.status == 'ended') {
            $('#peer_profile_panel').hide();
            $('#personLabel').hide();
            var className = "DisplayMessageLine_ServerNotif";
            if (args.initiator == "peer") {
                g_dispMsg.writeHtml(sender.peerNickname + /*Stranger*/g_tr.stranger_ended_discussion, className);
            } else {
                g_dispMsg.writeHtml(g_tr.you_ended_discussion, className);
            }
            updateUI_DiscussionEnded();
        }
        else if (args.status == 'started') {
            $('#peer_profile_panel').show();
            $('#personLabel').show();
            var className = "DisplayMessageLine_ServerNotif";
            g_dispMsg.clear();
            g_dispMsg.writeHtml(g_tr.chat_safety_warn, className, false);
            updateUI_DiscussionStarted();
        }
    }
}

function handleConnected(sender, args) {
    var className = "DisplayMessageLine_ServerNotif";
    g_dispMsg.writeHtml(g_tr.connect_msg, className);
    //j$('#btnStartStop')[0].disabled = false;
    j$("#fldReferer").val("");
    if (args.isLoggedIn) {
        con.contactsManager.loadContacts();
        con.mailDiscussionManager.loadAllDiscussions();
        j$("#header_login_box").hide();
        j$("#header_logout_box").show();
    }
}

function sendChatMessage() {
    var txt = j$('#txtWriteMsg').val();
    if (txt != "") {
        if (validateText(txt)) {
            var xmltxt = encodeXml(txt);
            var m = createChatMessage(con.nextMessageID(), con.discussionId, xmltxt);
            con.postMessageObject(m);

            g_dispMsg.writeHtml("You: " + txt, "DisplayMessageLine_Outgoing");
            j$('#txtWriteMsg').val("");
            j$('#txtWriteMsg')[0].focus();
        } else {
            alert(g_tr.inappropriate_language);
        }
    }
}

function validateText(txt) {
    return !isBanned(txt);
}

function endConnection() {
    if (con != null) {
        con.stop();
        clearInterval(g_UiUpdateTimer);
        var className = "DisplayMessageLine_ServerNotif";
        g_dispMsg.writeHtml(g_tr.disconnect_msg, className);
        ended();
    }
}

function ended() {
    //j$('#btnStartStop')[0].disabled = true;
    updateUI_DiscussionEnded();
}


function toggleSaveDiscussion(checkBtn) {

    con.postMessage("<msg type='chat' save='" + checkBtn.checked + "'/>");
}



//function toggleStartStop() {

//    if (con.discussionStatus == 0 && !con.searchingNewUser) {
//        if (con.isMiniProfileFilled()) {
//            j$("#btnStartStop").val("Stop");
//            g_dispMsg.clear();
//            g_dispMsg.writeHtml(g_tr.search_available_user, "DisplayMessageLine_ServerNotif");
//            SendSearchCriteria();
//            con.searchNewUser();
//        } else {
//            alert(g_tr.must_fill_profile);
//        }
//    } else
//        if (con.discussionStatus == 0 && con.searchingNewUser) {
//            j$("#btnStartStop").val(g_tr.btn_start);
//            g_dispMsg.writeHtml(g_tr.search_stopped, "DisplayMessageLine_ServerNotif");
//            con.stopSearch();
//        } else
//            if (con.discussionStatus == 1) {
//                if (!confirm(g_tr.confirm_quit)) {
//                    return;
//                } else {
//                    j$("#btnStartStop").val(g_tr.btn_start);
//                    con.stopChat();
//                }
//            }

//}

function toggleStartStop() {

    if (con.discussionStatus == 0 && !con.searchingNewUser) {
        if (con.isMiniProfileFilled()) {
            j$("#searchingForCriteria").hide();
            j$("#chatpanel").show();
            g_dispMsg.clear();
            g_dispMsg.writeHtml(g_tr.search_available_user, "DisplayMessageLine_ServerNotif");
            SendSearchCriteria();
            con.searchNewUser();
        } else {
            alert(g_tr.must_fill_profile);
        }
    } else
        if (con.discussionStatus == 0 && con.searchingNewUser) {
            j$("#chatpanel").hide();
            j$("#searchingForCriteria").show();
            g_dispMsg.writeHtml(g_tr.search_stopped, "DisplayMessageLine_ServerNotif");
            con.stopSearch();
        } else
            if (con.discussionStatus == 1) {
                if (!confirm(g_tr.confirm_quit)) {
                    return;
                } else {
                    j$("#chatpanel").hide();
                    j$("#searchingForCriteria").show();
                    //j$("#btnStartStop").val(g_tr.btn_start);
                    con.stopChat();
                }
            }

}

function SendSearchCriteria() {
    var ageCriteria = j$("#ageCriteria").val();
    var genderCriteria = j$("#genderCriteria").val();
    var professionCriteria = j$("#professionCriteria").val();
    var ageCriteria = j$("#ageCriteria").val();
    var countryCriteria = "";
    var minDistCriteria = "";
    var maxDistCriteria = "";

    var option = $('input:radio[name=loc]:checked').val();
    if (option == "Country") {
        countryCriteria = j$("#locationCountry").val();
    } else if (option == "Distance") {
        minDistCriteria = j$("#locationMin").val();
        maxDistCriteria = j$("#locationMax").val();
    } else {
        minDistCriteria = maxDistCriteria = "-1";
    }

    var msg = createSearchCriteriaMessage(con.nextMessageID(), ageCriteria, genderCriteria, professionCriteria, countryCriteria, minDistCriteria, maxDistCriteria);
    con.postMessageObject(msg);
}


function txbStatus_blur() {
    var txt = j$("#txbStatus").val().toLowerCase();
    if (g_oldStatus != txt) {
        g_oldStatus = txt;
        if (validateText(txt)) {
            var xml = "<msg type='updateoptions' status = '" + encodeXml(txt) + "' />";
            con.postMessage(xml);
        } else {
            alert(g_tr.inappropriate_language);
        }
    }
}


function txtWriteMsg_keyPressed() {
    var event = txtWriteMsg_keyPressed.caller.arguments[0] || window.event;
    var key = event.keyCode;
    if (key == 13) {
        sendChatMessage();
        event.preventDefault();
        event.returnValue = false;
    }
}

function statusOnkeyPressed() {
    var event = statusOnkeyPressed.caller.arguments[0] || window.event;
    var key = event.keyCode;
    if (key == 13) {
        txbStatus_blur();
        event.preventDefault();
        event.returnValue = false;
    }
}

function findOnTwitter() {
    var txt0 = j$("#txbStatus").val();
    var txt = j$("#txbStatus").val().toLowerCase();
    if (txt.match(/^\s*$/) || window["txbStatus_waterMarkValue"] == txt0) { // if empty
        alert("Enter a topic to chat about first");
        return;
    }

    if (validateText(txt)) {
        if (con.discussionStatus == 1 && !confirm(g_tr.confirm_quit)) {
            return;
        }
        var xml = "<msg type='findontwitter' status = '" + encodeXml(txt0) + "' />";
        con.postMessage(xml);
    } else {
        alert(g_tr.inappropriate_language);
    }

}

function updateUI_DiscussionStarted() {
    j$('#btnSend')[0].disabled = false;
    j$('#txtWriteMsg')[0].disabled = false;
    j$("#searchingForCriteria").hide();
}

function updateUI_DiscussionEnded() {
    j$('#btnSend')[0].disabled = true;
    j$('#txtWriteMsg')[0].disabled = true;
    j$("#chatpanel").hide();
    j$("#searchingForCriteria").show();
}

function focusLost() {
    g_hasfocus = false;
}

function focusGot() {
    g_hasfocus = true;
    document.title = "Simple Connexion";
    g_TitlebarLostFocusIndex = 0;
    g_NewMessageReceived = false;
}

function handleTitleBar() {
    if (con != null && !g_hasfocus && g_NewMessageReceived) {
        g_TitlebarLostFocusIndex = (g_TitlebarLostFocusIndex + 1) % g_TitlebarLostFocusPattern.length;
        var strTitle = g_TitlebarLostFocusPattern.substr(g_TitlebarLostFocusIndex, g_TitlebarLostFocusPattern.length - g_TitlebarLostFocusIndex) +
                 g_TitlebarLostFocusPattern.substr(0, g_TitlebarLostFocusIndex - 1);
        document.title = strTitle;
    }
}

function generateID(prefix) {
    var r = Math.round(Math.random() * 100000);
    var d = (new Date()).getTime();
    var id = prefix + "-" + d + "-" + r;
    return id;
}


function setWaterMark(txb, evt) {
    if (typeof evt == 'undefined') {
        evt = window.event;
    }
    var waterMarkValue = window[txb.id + "_waterMarkValue"];

    if (txb.value.length == 0 && evt.type == "blur") {
        txb.style.color = "gray";
        txb.value = waterMarkValue;
    }

    if (txb.value == waterMarkValue && evt.type == "focus") {
        txb.style.color = "black";
        txb.value = "";
    }
}

function setPosLeft(elem, left) {
    if (Prototype.Browser.Gecko) { // if firefox
        elem.style.left = left + "px";
    } else {
        elem.style.posTop = left;
    }
}

function setPosTop(elem, top) {
    if (Prototype.Browser.Gecko) { // if firefox
        elem.style.left = top + "px";
    } else {
        elem.style.posTop = top;
    }
}

function setPosTopLeft(elem, top, left) {
    if (Prototype.Browser.Gecko) { // if firefox
        elem.style.left = top + "px";
        elem.style.top = left + "px";
    } else {
        elem.style.posTop = top;
        elem.style.posLeft = left;
    }
}


function changeColors(elem, color, bgcolor) {
    if (elem != null) {
        if (bgcolor != null) {
            elem.style.backgroundColor = bgcolor;
        }

        if (color != null) {
            elem.style.color = color;
        }
    }
}
