var g_topicsCookieName;
var g_topics;

g_topicsCookieName = "st";
g_topics = getTopicsFromCookie();

function onFocusTopicSearch() {

    var o;

    o = $("enterTopicTextBox");

    o.value = "";
}

function onBlurTopicSearch() {

    var o;

    o = $("enterTopicTextBox");

    if (o.value.trim().length > 0) {
        return;
    }
    
    o.value = g_enterTopic;    
}

function onKeyPressTopicSearch(e) {

    if (e.keyCode != 13) {
        return;
    }

    getTopicSearchResults();
}

function getTopicSearchResults() {

    var button;

    button = $("enterTopicButton");
    button.style.backgroundImage = "url(../images/ani_button_search.gif)";
    button.value = "";
    
    RecommendationsHandler.RenderTopicSearchResults($("enterTopicTextBox").value, onRenderTopicSearchResults, onRenderTopicSearchResultsError);
}

function onRenderTopicSearchResults(request) {

    restoreEnterTopicButton();
    $("msInnerContent").innerHTML = request.responseText;
}

function onRenderTopicSearchResultsError(request) {

    restoreEnterTopicButton();
    showResponseAlert(request);
}

function restoreEnterTopicButton() {

    var button;

    button = $("enterTopicButton");
    button.style.backgroundImage = "";
    button.value = g_go;
}

function subscribe(topic, isMiniText) {

    RecommendationsHandler.Subscribe(topic, isMiniText, onSubscribe, showResponseAlert);
}

function unsubscribe(topic, isMiniText) {

    RecommendationsHandler.Unsubscribe(topic, isMiniText, onUnsubscribe, showResponseAlert);
}

function onSubscribe(request) {

    var o;

    o = eval(request.responseText);

    toggleSubscribe(o.topic, "subscribe", "unsubscribe", true, o.isMiniText);

    if (o.isMiniText) {
        return;
    }

    toggleViewMyPage();
}

function onUnsubscribe(request) {

    var o;

    o = eval(request.responseText);

    toggleSubscribe(o.topic, "subscribe", "unsubscribe", false, o.isMiniText);

    if (o.isMiniText) {
        return;
    }

    toggleViewMyPage();
}

function cookieSubscribe(topic, isMiniText) {

    addSubscriptionToCookie(topic);
    toggleSubscribe(topic, "cookieSubscribe", "cookieUnsubscribe", true, isMiniText);

    if (isMiniText) {
        return;
    }

    toggleViewMyPage();

    // Update urchin
    if (g_topics.length == 1) {
        try {
            urchinTracker("/event/anon_first_sub");
        } catch(e) {
        }
    }
}

function cookieUnsubscribe(topic, isMiniText) {

    removeSubscriptionFromCookie(topic);
    toggleSubscribe(topic, "cookieSubscribe", "cookieUnsubscribe", false, isMiniText);

    if (isMiniText) {
        return;
    }

    toggleViewMyPage();
}

function toggleSubscribe(topic, subscribeFunction, unsubscribeFunction, isSubscribed, isMiniText) {

    var link;

    link = $(topic.replace(" ", "_"));

    if (isMiniText) {
        link.href = "javascript:" + (isSubscribed ? unsubscribeFunction : subscribeFunction) + "('" + topic + "', true);";
        link.className = isSubscribed ? "msMiniTopicSubscribed" : "msMiniTopicUnsubscribed";
        link.childNodes[0].innerText = isSubscribed ? g_remove : g_add;
    } else {
        link.href = "javascript:" + (isSubscribed ? unsubscribeFunction : subscribeFunction) + "('" + topic + "', false);";
        link.className = isSubscribed ? "msTopicSubscribed" : "msTopicUnsubscribed";
        link.childNodes[0].innerText = isSubscribed ? g_removeMyTopic : g_addToMyTopics;
    }
}

function getTopicsFromCookie() {

    var cookie;

    cookie = getTopicsCookie();

    if (cookie == null) {
        return new Array();
    }

    return cookie.split(",");
}

function getTopicsCookie()
{
    var start;
    var end;

    if (document.cookie.length == 0) {        
        return null;
    }

    start = document.cookie.indexOf(g_topicsCookieName + "=");

    if (start == -1) {
        return null;
    }
    
    start = start + g_topicsCookieName.length + 1;
    end = document.cookie.indexOf(";", start);

    if (end == -1) {
        end = document.cookie.length;
    }
        
    return unescape(document.cookie.substring(start, end));
}

function determineCookieDomain() {

    var d = document.domain;
    if (d != null) {
        var p = d.split('.');
        if (p.length >= 2) {
            d = p[p.length-2] + '.' + p[p.length-1];
            d = "domain=" + d;
        } else {
            d = null;
        }
    }

    return ((d == null) ? "" : d);
}

function addSubscriptionToCookie(topic) {

    topic = topic.toLowerCase();
    
    if (g_topics.indexOf(topic) == -1) {
        g_topics.push(topic);
    }

    document.cookie = g_topicsCookieName + "=" + g_topics.join(",") + "; path=/; " + determineCookieDomain();
}

function removeSubscriptionFromCookie(topic) {

    topic = topic.toLowerCase();
    
    if (g_topics.indexOf(topic) > -1) {
        g_topics = g_topics.without(topic);
    }        

    document.cookie = g_topicsCookieName + "=" + g_topics.join(",") + "; path=/; " + determineCookieDomain();
}

function serializeTopics() {

    var s;

    s = "";
    
    for (var i = 0; i < g_topics.length; i++) {

        if (i > 0) {
            s += ",";
        }
        
        s += escape(g_topics[i]);   
    }

    return s;
}

/* Topic page header control subscribing / unsubscribing */

function topicCookieSubscribe(topic) {

    addSubscriptionToCookie(topic);
    reloadLocation();
}

function topicCookieUnsubscribe(topic) {
    
    removeSubscriptionFromCookie(topic);
    reloadLocation();
}

function topicSubscribe(topic) {
    RecommendationsHandler.Subscribe(topic, false, reloadLocation, showResponseAlert);
}

function topicUnsubscribe(topic) {
    RecommendationsHandler.Unsubscribe(topic, false, reloadLocation, showResponseAlert);
}

function reloadLocation() {
    document.location.reload(true);
}

function toggleViewMyPage()
{
    if (document.getElementsByClassName("msTopicSubscribed").length == 0) {
        hideElement("viewMyPageButtonDiv");
    } else {
        showElement("viewMyPageButtonDiv");
    }
}

