/* Contains different search texts */


String.prototype.format = function() {
    var pattern = /\{\d+\}/g;
    var args = arguments;
    return this.replace(
        pattern,
        function(capture) {
            return args[capture.match(/\d+/)];
        }
    );
}


function searchTextGetSectionHeader(sortedUsers, i) {
    var text = getUserList(sortedUsers);
    var textId = text.length > 0 ? sortedUsers.join('-').replace(/\//g, '-') : 'not-in-common';
    var template = '<tr><td class="sectionTitle" id="{0}" colspan="7"><span class="purple">{1}.{2}</td></tr>';

    var innerText = '';
    if (isResultTwitterListMode()) {
        if (text.length > 0) {
            innerText = 'T</span>weeps in common in {0} Lists'.format(text);
        } else {
            innerText = 'T</span>weeps not in common in {0} Lists'.format(getUserList(searchBarGetUsers()));
        }
    } else if (isResultCommonFriendsMode()) {
        innerText = 'F</span>ollowed by {0}'.format(text);
    } else if (isResultCommonFollowersMode() || isResultBiggestFollowersMode()) {
        innerText = 'F</span>ollows {0}'.format(text);
    }

    var watchText = '';
    if (text.length > 0 && userData && !isResultBiggestFollowersMode()) {
        if ('watched_users' in watched_data && isWatchedUsers(watched_data.watched_users, sortedUsers)) {
            watchText = ' Added to <a href="{0}">Watch List</a>'.format(siteUrls.watch_list);
        } else {
            watchText = ' <a href="javascript: addToWatchList(\'{0}\');">Add to My Watch List</a>'.format(i);
        }
    }
    return template.format(textId, innerText, watchText);
}


function searchTextGetResultHeader(users, friends, sum_users) {
    var template = '<span class="purple">{0}<sup>(<a target="_blank" href="{1}" title="{2}">?</a>)</sup>';
    var mult = sum_users > 1 ? 's' : '';

    var innerText = '';
    var link = '';
    var title = '';
    if (isResultBiggestFollowersMode()) {
        var usersText = getCSSUserList(users, 'strong');
        var manyText = friends.length == 1 ? '1</span> Tweeter' : 'B</span>iggest {0} Tweeters'.format(friends.length);
        innerText = '{0} following {1}'.format(manyText, usersText);
        if (users.length > 1) {
            innerText = 'O</span>ut of the 100 biggest followers of<br />{0}'.format(usersText);
        }
        link = 'http://www.twiangulate.com/blog/biggest-twitter-followers';
        title = 'What does &quot;Biggest Followers&quot; mean?';
    } else if (isResultObscureFriendsMode()) {
        var manyText = friends.length == 1 ? '1</span> Tweeter' : 'S</span>mallest {0} tweeps'.format(friends.length);
        innerText = '{0} followed by {1}'.format(manyText, users[0]);
        link = 'http://www.twiangulate.com/blog/smallest-twitter-friends';
        title = 'What does &quot;Obscure Friends&quot; mean?';
    } else if (isResultKeywordsMode()) {
        var actPage = searchResults.act_page || 1;
        var actNumber = (actPage - 1) * 100;
        var userText = users.length > 0 ? ' for friends of {0}'.format(users[0]) : '';
        var manyText = actNumber + searchBarResultData.length == 1 ? '1' : '{0} {1}-{2}'.format($('#keywordsSort').val(), thousandSeparator(actNumber + 1), thousandSeparator(actNumber + searchBarResultData.length));
        innerText = 'D</span>isplaying {0} of {1} result{2}{3}:'.format(
            manyText,
            thousandSeparator(searchResults.total_keywords_result_number),
            searchResults.total_keywords_result_number > 1 ? 's' : '',
            userText
        );
        link = 'http://www.twiangulate.com/blog/keywords';
        title = 'What does &quot;Keywords&quot; mean?';
    } else if (isResultTwitterListMode()) {
        innerText = 'T</span>he {0} Lists have {1} people in common of {2} total tweep{3}'.format(getCSSUserList(users, 'strong'), searchResults.friends_number, sum_users, mult);
        link = 'http://twiangulate.com/blog/looking-for-common-tweeps-on-twitter-lists';
        title = 'What does &quot;Compare Lists&quot; mean?';
    } else if (isResultCommonFriendsMode()) {
        innerText = 'F</span>ollowing {0} people in common of {1} total tweep{2} followed'.format(searchResults.friends_number, sum_users, mult);
        link = 'http://www.twiangulate.com/blog/who-do-tweeps-follow-in-common';
        title = 'What does &quot;Mutual Friends&quot; mean?';
    } else if (isResultCommonFollowersMode()) {
        innerText = 'F</span>ollowed by {0} people in common of {1} total following tweep{2}'.format(searchResults.friends_number, sum_users, mult);
        link = 'http://www.twiangulate.com/blog/who-follows-the-same-tweeps';
        title = 'What does &quot;Mutual Followers&quot; mean?';
    }

    return template.format(innerText, link, title);
}


function searchTextGetSearchText() {
    var template = "Please wait. Finding {0}...";

    var innerText = '';
    if (isPageBiggestFollowersMode()) {
        var targetText = searchBarGetUsers().length > 1 ? 'these Tweeters' : 'this Tweeter';
        innerText = 'the most influential people following {0}'.format(targetText);
    } else if (isPageObscureFriendsMode()) {
        innerText = 'the most relevant people this Tweeter follows';
    } else if (isPageKeywordsMode()) {
        var userText = inputs[0].value != '' ? ' among friends of {0}'.format(inputs[0].value) : '';
        innerText = 'results for keyword search{0}'.format(userText);
    } else if (isPageTwitterListMode()) {
        innerText = 'users common in the specified lists';
    } else if (isPageCommonFriendsMode()) {
        innerText = 'people these Tweeters follow in common';
    } else if (isPageCommonFollowersMode()) {
        innerText = 'people following these Tweeters in common';
    }
    return template.format(innerText);
}


function searchTextGetTweetText(shortUrl) {
    var searchUsers = searchBarGetUsers();
    var friendsNumber = searchResults.friends.length;
    var mult = friendsNumber > 1 ? 's' : '';
    if (isResultVennMode()) {
        var resultNumbers = getResultNumbers(searchResults, false);
        var commonFollowNumber = 0;
        for (var i = 0; resultNumbers[i]; i++) {
            if (resultNumbers[i].users.length == searchUsers.length) {
                commonFollowNumber = resultNumbers[i].number;
                break;
            }
        }
        mult = commonFollowNumber > 1 ? 's' : '';
    }

    var innerText = '';
    if (isResultBiggestFollowersMode()) {
        if (isResultVennMode()) {
            innerText = '@{0} are followed by {1} tweep{2} in common {3} @Twiangulate'.format(searchUsers.join(' + @'), commonFollowNumber, mult, shortUrl);
        } else {
            innerText = 'The {0} most influential follower{1} of @{2} {3} @Twiangulate'.format(friendsNumber, mult, searchUsers[0], shortUrl);
        }
    } else if (isResultObscureFriendsMode()) {
        innerText = 'The {0} most obscure friend{1} of @{2} {3} @Twiangulate'.format(friendsNumber, mult, searchUsers[0], shortUrl);
    } else if (isResultKeywordsMode()) {
        var number = inputs[0].value != '' ? searchBarResultData.length : searchResults.total_keywords_result_number
        var numberText = thousandSeparator(number);
        var userText = inputs[0].value != '' ? ' among friends of {0}'.format(inputs[0].value) : '';
        mult = number > 1 ? 's' : '';
        innerText = '{0} result{1} for keyword "{2}"{3} {4} @Twiangulate'.format(numberText, mult, $('.keywordsInput').val(), userText, shortUrl);
    } else if (isResultTwitterListMode()) {
        innerText = '{0} lists have {1} tweep{2} in common {3} @Twiangulate'.format(searchUsers.join(' + '), commonFollowNumber, mult, shortUrl);
    } else if (isResultCommonFriendsMode()) {
        innerText = '@{0} follow {1} tweep{2} in common {3} @Twiangulate'.format(searchUsers.join(' + @'), commonFollowNumber, mult, shortUrl);
    } else if (isResultCommonFollowersMode()) {
        innerText = '@{0} are followed by {1} tweep{2} in common {3} @Twiangulate'.format(searchUsers.join(' + @'), commonFollowNumber, mult, shortUrl);
    }

    return innerText;
}


function searchTextGetNewUsersHeader() {
    var text = '';
    var linkTemplate = '<a href="javascript:scrollToSection(\'{0}\');" title="{1}">{2}</a>';
    var headerTemplate = "{0} new tweep{1} found: {2}";
    var linkArray = new Array();

    if (watched_data && 'new_users' in watched_data) {
        for (var i = 0; i < watched_data.new_users.length; i++) {
            var rowId = 'user-' + watched_data.new_users[i].toLowerCase().replace(/\//g, '-');
            var link = linkTemplate.format(rowId, watched_data.new_users[i], watched_data.new_users[i]);
            linkArray.push(link);
        }
    }
    if (linkArray.length) {
        var innerText = linkArray.join('wwww').replace(/wwww(?!.*wwww)/, ' and ').replace(/wwww/g, ', ');
        var mult = linkArray.length > 1 ? 's' : '';
        text = headerTemplate.format(linkArray.length, mult, innerText);
    }
    return text;
}


function searchTextGetVennHeader(resultNumbers) {
    var linkTemplate = '<br /><a href="javascript:scrollToSection(\'{0}\');" title="{1}">{2}</a>';
    var simpleTemplate = '<br /><span>{0}</span>';

    var sectionText = '';
    for (var i = 0; result = resultNumbers[i]; i++) {
        var friends = [];
        for (var j = 0; user = searchBarResultData[j]; j++)
            if (user.users.toString() == result.users.toString())
                friends[friends.length] = user.screen_name;
        var link = result.users.length > 0 ? result.users.join('-').replace(/\//g, '-') : 'not-in-common';
        var title = friends.sort().join(', ');
        var mult = result.number > 1 ? 's' : '';
        var innerText = '';
        if (isResultTwitterListMode()) {
            if (result.users.length > 0) {
                innerText = '{0} tweep{1} in common between {2}'.format(result.number, mult, getCSSUserList(result.users, 'strong'));
            } else {
                innerText = '{0} tweep{1} not in common between {2}'.format(result.number, mult, getCSSUserList(searchBarGetUsers(), 'strong'));
            }
        } else if (isResultCommonFriendsMode()) {
            innerText = '{0} followed by {1}'.format(result.number, getCSSUserList(result.users, 'strong'));
        } else if (isResultCommonFollowersMode() || isResultBiggestFollowersMode()) {
            if (isResultImprovedFollowersMode()) {
                var actionText = result.users.length > 1 ? 'share' : 'has';
                var multText = result.number > 1 ? 'followers who have' : 'follower who has';
                innerText = '{0} {1} {2} big {3} {4} followers'.format(getCSSUserList(result.users, 'strong'), actionText, result.number, multText, thousandSeparator(result.followersSum));
            } else {
                innerText = '{0} follow {1}'.format(result.number, getCSSUserList(result.users, 'strong'));
            }
        }
        sectionText += (isResultBiggestFollowersMode() ? simpleTemplate.format(innerText) : linkTemplate.format(link, title, innerText));
    }
    return sectionText;
}


function searchTextGetVennExclude(users, unique_data, unique_users) {
    var sectionText = '';
    for (var i = 0; u = users[i]; i++) {
        var mult = unique_data[i] > 1 ? 's' : '';
        var innerText = '';
        var usersText = getCSSUserList(unique_users[i], 'strong');
        if (isResultTwitterListMode()) {
            var plural = unique_data[i] > 1 ? 'are' : 'is';
            innerText = '{0} tweep{1} in <strong>{2}</strong> who {3} not in {4}.'.format(unique_data[i], mult, u, plural, usersText);
        } else if (isResultCommonFriendsMode()) {
            var plural = unique_users[i].length > 1 ? "don\'t" : "doesn\'t";
            innerText = '<strong>{0}</strong> has {1} friend{2} whom {3} {4} follow.'.format(u, unique_data[i], mult, usersText, plural);
        } else if (isResultCommonFollowersMode() || isResultBiggestFollowersMode()) {
            var plural = unique_data[i] > 1 ? "don\'t" : "doesn\'t";
            var modifier = isResultBiggestFollowersMode() ? ' influential' : '';
            innerText = '<strong>{0}</strong> has {1}{2} follower{3} who {4} also follow {5}.'.format(u, unique_data[i], modifier, mult, plural, usersText);
        }
        sectionText += '<br />' + innerText;
    }
    return sectionText;
}


function searchTextGetVennBiggest(users) {
    var biggestText = '';
    var biggestFound = false;
    for (var i = 0; u = users[i]; i++) {
        if (u.biggest_friends_count) {
            biggestFound = true;
            var usersText = getCSSUserList(u.screen_name, 'strong');
            biggestText += '<br />' + "{0} tweeps follow {1}'s 50 most influential followers".format(thousandSeparator(u.biggest_friends_count), usersText);
        }
    }
    if (biggestFound) {
        biggestText = '<br />' + biggestText;
    }
    return biggestText;
}


function searchTextGetVennText(users, unique_data, unique_users, resultNumbers, sum_users) {
    var template = '<h3>{0}</h3>{1}<br />{2}{3}';

    var headerText = searchTextGetResultHeader(users, searchResults.friends, sum_users);
    var sectionText = searchTextGetVennHeader(resultNumbers);
    var excludeText = searchTextGetVennExclude(users, unique_data, unique_users);
    var biggestText = searchTextGetVennBiggest(searchResults.search_user_data);

    return template.format(headerText, sectionText, excludeText, biggestText);
}
