/*forums_key*/


$doc.ready(function () {
    if (cMemberInfo.usingMobileTheme) $('#AdditionalFeatures').hide();

    setSubSectionProperties();

    if (cMemberInfo.isAdmin || cMemberInfo.isAModerator)
        registerModeratorChecking(0);

    registerAdditionalLinks();

    window._subscribedonly = '';
});

function registerAdditionalLinks() {
    var scrollToOptions = { duration: 700, offset: { top: -10 } };
    $('#AdditionalFeatures')
        .on('click', 'a.featured, a.goingon', function () {
            return false;
        })
        .on('mousedown', 'a.featured', function () {
            var $featuredPanel = $('#FeaturedArticles');
            if (!$featuredPanel.is(':visible'))
                $featuredPanel.slideDown('fast');
        })
        .on('mousedown', 'a.goingon', function () {
            var $lnk = $(this);

            $('#FeaturedArticles').slideUp('fast', function () {
                $.scrollTo($lnk, scrollToOptions);
            });
        })
        .on('mousedown', 'a.scrollToForums', function () {
            $.scrollTo($('#ForumTopFilters'), scrollToOptions);
            $(this).removeClass('selected');
        });

    $body // 2 possibilities for the following links, one in AdditionalFeatures the other in ForumTopFilters
        .on('mousedown', 'a.markboardread, a.allforums, a.subscribedonly, a.popforumfilter', function () {
            var $fpanel = $('#forumPanel');
            var $lnk = $(this);

            if (!$lnk.hasClass('popforumfilter'))
                $.scrollTo($lnk, scrollToOptions);

            $fpanel.css('opacity', 0.4);
            $lnk.removeClass('selected');
        })
        .on('mousedown', 'a.markboardread', function () {
            JQCallWebService('ws/TrackRead.aspx/MarkBoardRead', {}, function (r) {
                if (r.d) {
                    $find('forumPanel').set_value(window._subscribedonly);
                }
            });

            return false;
        })
        .on('mousedown', 'a.popforumfilter', function () {
            var $lnk = $(this);
            popRadWin('popforumfilter.aspx', 700, 500, function () {
                if ($(this).data('args') == 'true') {
                    $('#forumPanel').css('opacity', 0.4);
                    $.scrollTo($lnk, scrollToOptions);
                    $find('forumPanel').set_value(window._subscribedonly);
                }
            });

            $('#forumPanel').css('opacity', 1);

            return false;
        })
        .on('mousedown', 'a.subscribedonly', function () {
            $find('forumPanel').set_value('subscribedonly');
            setSubscribeButtonTextnClass($(this));
            return false;
        })
        .on('mousedown', 'a.allforums', function () {
            $find('forumPanel').set_value('');
            setSubscribeButtonTextnClass($(this));
            return false;
        })
        .on('click', 'a.markboardread, a.allforums, a.subscribedonly, a.popforumfilter', function () {
            return false; // ForumtopFilters click handler
        });
}

function setSubscribeButtonTextnClass($link) {

    if ($link.hasClass('subscribedonly')) {
        $link.removeClass('subscribedonly').addClass('allforums')
            .find('h4 span').text(ln.allForumsDesc);
        window._subscribedonly = 'subscribedonly';
    } else {
        $link.addClass('subscribedonly').removeClass('allforums')
            .find('h4 span').text(ln.mysubForumDesc);
        window._subscribedonly = '';
    }
}

function setSubSectionProperties() {
    // this function sets the css for the bottom stats section
    if (!cMemberInfo.usingMobileTheme) {
        $('div.subSection')
        .css ('width', 'auto')
        .find('a.smalllink').each(function () {
            var $this = $(this);
            $this.attr('title', $this.text().trim());
        });
    }
}


var _subForumStateDefaultShow = true;
var _subforumStateCookie = 'subForumState';

function TogglesubforumState($subforum, animated) {
    var $subforumList = $subforum.find('ul');

    if(animated) {
        $subforumList.slideToggle('fast', AfterSubforumToggle);    
    } else {
        $subforumList.toggle(!window.subForumStateDefaultShow);
        AfterSubforumToggle($subforumList.get(0));
    }
}

function AfterSubforumToggle(ele) {
    
    var $subforumList = $(ele || this);
    var isVisible = $subforumList.is(':visible');
    var $subforum = $subforumList.closest('.subforum');
    
    $subforum.find('img:first').attr('src', pageThemeImageURL +
            (isVisible ? forumThemeInfo.forumIcons.subforumClose : forumThemeInfo.forumIcons.subforumOpen));

    RecordSubforumState($subforum.attr('id'), isVisible);
}

function RecordSubforumState(subforumId, state) {

    if (typeof subforumId == 'undefined') return;
    
    var theid = subforumId.replace('subforum_', '');

    var currCookieValue = $.storage.get(_subforumStateCookie);

    if (currCookieValue == "null" || currCookieValue == null) currCookieValue = "";

    currCookieValue = currCookieValue.replace("|" + theid, "").replace("null", "");

    if (state != window.subForumStateDefaultShow) currCookieValue += "|" + theid;

    $.storage.set(_subforumStateCookie, currCookieValue);
}

function RestoreSubforumState() {

    $body
        .off('click.subforumstate', '.subforum legend a')
        .on('click.subforumstate', '.subforum legend a', function (e) {
            var $subforum = $(this).closest('.subforum');

            TogglesubforumState($subforum, true);

            return false;
        });

    $('.subforum').each(function () {
        var $subforumdiv = $(this);
        
        $subforumdiv.find('img:first').attr('src', pageThemeImageURL +
            (window.subForumStateDefaultShow ? forumThemeInfo.forumIcons.subforumClose : forumThemeInfo.forumIcons.subforumOpen));

        if (window.subForumStateDefaultShow)
            $subforumdiv.find('ul').show();
    });

    var currCookieValue = $.storage.get(_subforumStateCookie);
    
    if (currCookieValue == "" || currCookieValue == "null" || currCookieValue == null) return;

    var arrCurrCookieValue = currCookieValue.split("|");
    
    if (typeof pageThemeImageURL != 'undefined') {
        for (var i = 0; i < arrCurrCookieValue.length; i++) {

            if (arrCurrCookieValue[i] == '') continue;

            TogglesubforumState($('#subforum_' + arrCurrCookieValue[i]), false);
        }
    }
    

}

$doc.ready(function () {
    RestoreSubforumState();
    //consoleLog($.storage.get(_subforumStateCookie));
});

$doc.ready(function () {
    api_init();
});

var _api_init = false;

function api_init(forcedExec) {
    if (!forcedExec && _api_init) return;
    api_registerSignupbox();
    api_registerAlternativeLoginLinks();
    api_registerPollIndividualVote();
    //consoleLog('api_init');
    _api_init = true;
}

var _onsiteApi_qtipNoticeOption = { position: { at: 'middle right', my: 'middle left', adjust: { x: 2} }, hide: { inactive: 3000} };

function api_registerPollIndividualVote() {
    var $surveyDiv = $('div.api_surveybox');
    
    if (!$surveyDiv[0]) return;
    
    _api_loadSurvey($surveyDiv);

    $body.on('click', '.castvote', function () {
        var $btn = $(this);
        var $api_box = $btn.closest('.api_surveybox');

        var $polls = $api_box.find('div.voteInterface');
        var atLeastOneSubmitted = false;
        var submittedCount = 0;
        for (var i = 0; i < $polls.length; i++) {
            var $poll = $polls.eq(i);

            var $checkedBoxes = $poll.find('input[type=checkbox]:checked');
            var $radio = $poll.find('input[type=radio]:checked');
            var votes = [];

            if ($checkedBoxes[0]) {
                $checkedBoxes.each(function () {
                    votes.push($(this).val());
                });
            } else if ($radio[0]) {
                votes.push($radio.val());
            }

            if (votes.length == 0) continue;

            submittedCount += 1;

            atLeastOneSubmitted = true;

            JQCallWebService('ws/Poll.aspx/CastVote', { pollID: $poll.data('pollid'), votes: votes }, function (r) {

                if (r.d) {

                }
            }, JQOnCallError);

        }

        if (atLeastOneSubmitted) {
            $btn.effect('highlight', submittedCount * 400);
            
            setTimeout(function () {
                _api_loadSurvey($surveyDiv);
                $btn.hide();
            }, submittedCount * 300);
        }

        return false;
    });
}

function _api_loadSurvey($surveyDiv) {
    var pollids = $surveyDiv.data('pollids');

    $('<div />').load(cPathInfo.ForumDir + 'ws/Poll.aspx?pollid=' + pollids + ' #AllPolls div', function (r) {
        var $div = $(this);

        $div.find('.voteResultRow, .voteBtnRow').remove();
        $div.find('.voteresultHead').removeClass('center');
        $div.find('.voteresults td').css('border-bottom', '1px dashed #DDD');

        $surveyDiv.find('div:first').replaceWith($div);

        if ($surveyDiv.find('input')[0])
            $surveyDiv.find('.castvote').show();

        $surveyDiv.show();

    });    
}

function api_registerSignupbox() {
    var $signupDiv = $('div.api_signupbox');
    
    if (!$signupDiv[0]) return;

    if (cMemberInfo.memID != -1) {
        $signupDiv.remove();
        return;        
    } else {
        $signupDiv.show();
    }

    var $1stsignupdiv = $signupDiv.eq(0);

    var $name = $1stsignupdiv.find('input.signup_name');
    var $email = $1stsignupdiv.find('input.signup_email');
    var $pass = $1stsignupdiv.find('input.signup_pass');
    var $cptaimg = $1stsignupdiv.find('img.signup_cptaimg');
    var $cpta = $1stsignupdiv.find('input.signup_cptainput');
    var $signupbutton = $1stsignupdiv.find('.signup_button');

    $cpta.focus(function () {
        _api_resetCaptcha($cptaimg, $cpta);
    });

    $signupbutton.click(function () {

        var neededFields = [$name, $email, $pass, $cpta];

        if (_api_requiredFieldFailedNotice(neededFields)) return false;

        var data = {};
        data.username = $name.val();
        data.email = $email.val();
        data.pass = ($pass[0] ? $pass.val() : '');
        data.captchaVal = ($cpta[0] ? $cpta.val() : '');

        JQCallWebService('ws/Login.aspx/RegisterUser', data, function (r) {
            //{.Success, .SuccessResponse, .FailedReason, .NewMemberID, .RegStatus, .RegisterResult}
            var regResult = r.d;

            if (regResult.RegisterResult == 0 && regResult.NewMemberID > 0) {

                if (regResult.SuccessRedirectTo != '') {
                    self.location.href = regResult.SuccessRedirectTo;
                    return true;
                }

                var handleOk;

                if (regResult.RegStatus == 0) {
                    handleOk = function () {
                        self.location.reload();
                    };

                } else {
                    handleOk = function () {
                        _api_blankOutAllInput(neededFields);
                    };
                }

                qtip.confirm(regResult.SuccessResponse, ln.buttonSubmitValue, '', '', handleOk);

            } else {
                var $noticeEle = (regResult.RegisterResult == 1 ? $name :
                    (regResult.RegisterResult == 2 ? $email : (regResult.RegisterResult == 3 ? $signupbutton : $cpta)));

                qtip.notice($noticeEle, regResult.FailedReason, _onsiteApi_qtipNoticeOption);

                if ($noticeEle.prop('tagName') == 'INPUT') {
                    $noticeEle.val('');
                };

            }

            _api_resetCaptcha($cptaimg, $cpta);

        });

        return true;
    });

    $signupDiv.filter(':gt(0)').remove();
}

function _api_requiredFieldFailedNotice($fields) {
    var failed = false;
    for (var i = 0; i < $fields.length; i++) {
        if ($fields[i][0] && $fields[i].val().trim() == '') {
            failed = true;
            qtip.notice($fields[i], ln.warnRequiredDesc, _onsiteApi_qtipNoticeOption);
        }
    }
    return failed;
}

function _api_resetCaptcha($img, $input) {
    $img.attr('src', pageThemeImageURL + 'CaptchaImage.axd?p=' + randomString(5));
    $input.val('');
}

function _api_blankOutAllInput($fields) {
    for (var i = 0; i < $fields.length; i++) {
        if ($fields[i][0]) {
            $fields[i].val('');
        }
    }
}

function api_registerAlternativeLoginLinks() {
    var $topLoginLink = $('#subnav-login');

    if (!$topLoginLink[0]) return;

    $('a.clickToOpenLogin')
        .html($topLoginLink.html())
        .click(function () {
            $topLoginLink.triggerHandler('click'); //,
            //[$(this), { position: { my: 'bottom right', at: 'top right', adjust: { y: -15}}}]);
            return false;
        }
    );
}
/*regularmaster_key*/

function RegisterBackToTopScroller() {

    if (cMemberInfo.usingMobileTheme || cMemberInfo.isMobileDevice) return;
 
    var $backtotop = $('div.backtotop');
    var $main = $('#main');

    $backtotop.click(function () {
        $.scrollTo(0, { duration: 200 });
        return false;
    });

    var firstScrolled = false;

    $win.bind('scrollstop', function () {

        if ($win.scrollTop() > 500) {
            if (!firstScrolled) {

                var marginLeft = (($win.width() - $main.width()) / 2) > 35 ? 10 : -45;

                $backtotop.css('margin-left', $main.width() + marginLeft);
                firstScrolled = true;
            }
            $backtotop.fadeIn('fast');
        } else {
            $backtotop.fadeOut('fast');
        }
    });
}

function RegisterUniversalMessageMemberHover() {
    
    if (cMemberInfo.usingMobileTheme || cMemberInfo.isMobileDevice) return;

    $body
        .on('mouseenter', 'a.messagelink', function () {

            var $lnk = $(this);
            var options = {
                overwrite: false,
                position: { at: 'middle left', my: 'bottom left', adjust: { x: 0, y: -18 }, viewport: $win },
                style: { tip: false },
                show: {
                    delay: 500,
                    effect: function () {
                        $(this).fadeIn(150);
                    }
                },
                hide: { delay: 100, fixed: false, inactive: 5000, event: 'click mouseleave' },
                events: {
                    render: function () {
                        $(this).css({ 'max-width': '450px', 'line-height': 1.6 });
                    },
                    hide: null
                }
            };

            var title = $lnk.attr('title');
            if (title)
                qtip.notice($lnk, title.replace(/\</gi, '&lt;').replace(/\>/gi, '&gt;'), options);

            return false;
        })
        .on('mouseover', 'a.authorlink', function () {
            var $lnk = $(this);
            var memID = $lnk.data('memid');

            if (memID < 0) {
                $lnk.attr('href', 'javascript:void(0)');
                return false;   
            }

            var adjustx = $lnk.data('adjustx');

            var options = {
                position: { at: 'right middle', my: 'left middle', adjust: { x: (adjustx ? adjustx : 5) }, viewport: $win },
                show: { delay: 500 },
                hide: { delay: 200, event: 'click mouseleave', fixed: true },
                style: { tip: false }
            };

            var pmlinktmpl = '{0}pmsend.aspx?toMemId={1}';

            if (cMemberInfo.popupPosting)
                pmlinktmpl = 'javascript:void(popRadWin(\'' + pmlinktmpl + '&pop=true\'))';

            var linkContent = String.format(
                '<a href="{0}Posts/{1}" class="{2}">{4}</a>{3}' +
                (cFeatureInfo.galleryActive ? '<a href="{0}photosearch.aspx?albummemid={1}" class="{2}">{5}</a>{3}' : '') +
                (cMemberInfo.memID != memID && cMemberInfo.memID != -1 && cMemberInfo.pmAllowed ?
                    '<a href="{0}pm.aspx?senderID={1}" class="{2}">{6}</a>{3}' +
                    '<a href="' + pmlinktmpl + '" class="{2}">{7}</a>' : ''),
            cPathInfo.ForumDir, memID, 'medium postButtonDropdown', '<div class="divider"></div>',
            ln.profRecentPosts, ln.galListAlbumsByMember, ln.pmListPMsByAuthor, ln.tmMenuSendPM);

            qtip.notice($lnk, linkContent, options);

            // if ($lnk.hasClass('pmMemberLink')) else if ($lnk.hasClass('photoMemberLink'))

        });
}

$doc.ready(function () {
    RegisterBackToTopScroller();
    RegisterUniversalMessageMemberHover();
});
/*topNavigation_key*/

function registerSearchBoxes() {

    $('#masterSearchButton').click(function () {
        performTopSearch($('#masterphrase'));
        return false;
    });

    $('#masterphrase').keypress(function (e) {
        
        if (isEnterKeyPressed(e)) {
            performTopSearch($(this));
            return false;
        }
        return true;
    });

}

function performTopSearch($theTextbox) {

    var phrase = $theTextbox.val().trim();

    if (phrase.length < 3) {
        showNoticeToFilterSearchbox($theTextbox, ln.srTermTooShort);
        return false;
    }

    showNoticeToFilterSearchbox($theTextbox, ln.srSearchWaitingMsg);

    initiateSearchSimilarThreads(phrase, 'ALL', function (r) {
        var result = r.d; //[asyncID, server now, highlight] or [Integer delay, "" ,""]
        var aid = result[0];

        if (!isNaN(aid)) {
            showNoticeToFilterSearchbox($theTextbox, ln.srSearchWaitAbit);
            return false;
        }

        if (aid == 'reentersearch') {
            showNoticeToFilterSearchbox($theTextbox, ln.srSearchNoResultMsg);
            return false;
        } else { // start tracking
            trackSearchByAid(aid, result[1], $theTextbox);
        }

        return true;
    }, 200, ['Normal', 'Exact']);

    return true;
}

function trackSearchByAid(aid, beginTime, $theTextbox) {
    window.dropdownfilterInterval = setInterval(function () {
        searchCheckIfComplete(aid, beginTime, function (result) {
            var searchid = result.d;
            switch (searchid) {
                case 0: // not done, keep checking at interval
                    break;
                case -1: // no result
                    clearInterval(window.dropdownfilterInterval);
                    showNoticeToFilterSearchbox($theTextbox, ln.srSearchNoResultMsg);
                    break;
                default:
                    clearInterval(window.dropdownfilterInterval);
                    $theTextbox.qtip('hide');
                    $theTextbox.blur();

                    loadSearchResultOnMasterPhrase($theTextbox, searchid);

                    break;
            }
        });
    }, 1000);
}

function loadSearchResultOnMasterPhrase($theTextbox, searchid) {
    var options = $.extend(true, getTopNavDropDownTipOptions(), {
        style: { width: 'auto' },
        events: {
            render: function (e, api) {
                var $thistip = $(this);
                var $content = $thistip.children(qtip.contentSelector);
                $content.css({ 'overflow': 'auto' })
                    .load(cPathInfo.ForumDir + 'ws/TopNav.aspx?s=' + searchid.toString() + ' #navdata', function () {
                        api.set('position.my', 'top right');
                        api.set('position.at', 'bottom right');

                        $content.append(String.format(
                            '<div class="center bMargin10 medium"><a href="{0}search?searchid={1}&phrase={2}&high={2}">{3} <i class="icon-forward"></i></a></div>',
                            cPathInfo.ForumDir, searchid, encodeURIComponent($theTextbox.val()), ln.viewMoreDesc));
                    });

            },
            visible: function () {
                var $thistip = $(this);
                var $content = $thistip.children(qtip.contentSelector);
                var maxHeight = getTopNavDropDownContentMaxHeight();
                $content.css({ 'max-height': maxHeight });
            }
        }
    });

    $theTextbox.qtip(options);
}

function showNoticeToFilterSearchbox($theTextbox, content) {
    if ($theTextbox.data('notip') === true) return;
    qtip.notice($theTextbox, content, { position: { adjust: { x: -10}} });
}

/*function sendMasterSearchString() {
    var masterPhrase = $('#masterphrase').val().trim();
    if (masterPhrase == '') return;
    
    self.location.href = cPathInfo.ForumDir + 'search.aspx?phrase=' +
        escape(masterPhrase.replace(/\</gi, ''));
} */
function registerLoginbox($theLink, redirectTo) {

    if (redirectTo != '') {

        $theLink.click(function () {
            self.location.href = redirectTo +
                    (redirectTo.indexOf('?') >= 0 ? '&' : '?') +
                        'ReturnUrl=' + escape(cPathInfo.Url);
        });
        return;
    }

    if (cMemberInfo.isMobileDevice) return; // don't use popup for mobile devices

    var $loginTbl = $('#subnav-loginbox-div');
    var html = $loginTbl.html();

    $loginTbl.remove();

    $theLink.click(function (e, showtarget, additionalOptions) {
        /*        
        consoleLog(showtarget);
        consoleLog((showtarget ? $(showtarget) : $theLink));
        */
        var oriQtipOptions = {
            content: { text: html, title: { text: ln.logTitleDesc, button: true} },
            position: { my: 'top center', at: 'top center',
                adjust: { y: (cMemberInfo.isMobileDevice ? 10 : 190) }, // mobile keyboard will hide input
                target: $win
            },
            show: { event: 'click', ready: true, modal: false },
            hide: { fixed: true, delay: 1000, event: 'unfocus' },
            style: { classes: 'qtip-apglogin qtip-wideshadow ', tip: false, width:620 },
            events: {
                visible: function (e, api) {
                    var $thisTip = $(this);
                    $thisTip.find('input:first').focus();
                    blankRefreshCaptchaForLogin();
                },
                render: function (e, api) {
                    var $thisTip = $(this);

                    $thisTip.find('.fbLogin, .twitterLogin').attr('href', function (ind, attr) {
                        return attr + '&ReturnUrl=' + escape(cPathInfo.Url.replace(/^.*\/\/[^\/]+/, ''));
                    });

                    $body
                    .delegate('.subnav-loginbox input', 'keydown', function (ev) {
                        var code = (ev.keyCode ? ev.keyCode : ev.which);
                        if (code == 13) {
                            $("#subnav-loginbox-submit").click();
                        }
                    })
                    .delegate('#subnav-loginbox-submit', 'click', function () {
                        var ajaxData = {
                            username: $('#subnav-loginbox-u').val().trim(),
                            password: $('#subnav-loginbox-p').val().trim(),
                            captchaVal: $('#subnav-loginbox-c').val().trim(),
                            remember: $('#subnav-loginbox-r').prop('checked')
                        };
                        JQCallWebService('ws/Login.aspx/SignIn', ajaxData,
                            function (r) {
                                var returnedVal = r.d;

                                if (returnedVal.success) {
                                    var selfhref = self.location.href;

                                    if (selfhref.indexOf('/login') > 0 ||
                                        selfhref.indexOf('/social') > 0 ||
                                        selfhref.indexOf('/register') > 0 ||
                                        selfhref.indexOf('/confirmation') > 0) { //prevent reloading of wrong page

                                        self.location.replace(cPathInfo.ForumDir);
                                    } else {
                                        self.location.replace(location.href.split("#")[0]);
                                    }
                                } else {
                                    //consoleLog(returnedVal.resultCode);
                                    switch (returnedVal.resultCode) {
                                        // only display error on captcha, as we need a way to show the various "forget features"            
                                        case -6:
                                            blankRefreshCaptchaForLogin();
                                            qtip.notice($('#subnav-loginbox-c'), ln.formVerificationFailureMsg);
                                            break;
                                        default: // all errors
                                            self.location.href = String.format('{0}login?err={1}&username={2}',
                                                cPathInfo.ForumDir, returnedVal.resultCode, ajaxData.username);
                                            break;
                                    }

                                }
                            }, null, this);

                        return false;
                    });
                }
            }
        };

        $theLink.qtip($.extend(true, {}, oriQtipOptions, additionalOptions));

        return false;
    });

}

function blankRefreshCaptchaForLogin() {
    $('#subnav-loginbox-c').val('');
    $('#subnav-loginbox-captcha:visible')
            .attr('src', pageThemeImageURL + 'CaptchaImage.axd?p=' + randomString(5));
}

function registerGplusButtonClick() {
    $body.on('click', 'a.googleLogin', function () {
        $('#form1')
            .attr('action', cPathInfo.ForumDir + 'sociallogin.aspx?ReturnUrl=' + escape(cPathInfo.Url.replace(/^.*\/\/[^\/]+/, '')))
            .append('<input type="hidden" name="openid_identifier" value="https://www.google.com/accounts/o8/id">')
            .submit();
        return false;
    });
}

    var _paneClass = 'individualSection';
    var _topNavLiDistance = 0;
    
    function getTopNavDropDownContentMaxHeight() {
        if (cMemberInfo.isMobileDevice)
            _topNavLiDistance = 1E5;
        
        if (_topNavLiDistance == 0) {
            var $li = $('ul.topnavTabList').find('li:first');
            _topNavLiDistance = $li.offset().top + $li.innerHeight();
        }

        return $win.height() - _topNavLiDistance - 30;
    }

    function getTopNavDropDownTipOptions() {
        return {
            overwrite: false,
            content: { text: ln.loadingDesc + '.' }, //extra dot to make sure if ln is not available, tip still renders
            position: { my: 'top left', at: 'bottom left'},
            style: { classes: ' qtip-apgmenu ' + (Modernizr.borderimage ? ' qtip-wideshadow ' : ' qtip-iemenushadow '), //Modernizr.borderimage as a test for IE all versions
                        widget: false, tip: false },
            show: { ready: true, event: _mobileAwareEventName, modal: { on: false }, effect: false },
            hide: { fixed: true, delay: 300, event: ((typeof cMemberInfo != 'undefined' && !cMemberInfo.isMobileDevice) ? 'unfocus' : 'mouseleave'), effect: false },
            events : {
                hide: function (e, api) { api.elements.target.removeClass('selected'); }
            }
        };
    }

    function registerTopNavDropDowns() {

        var topTabLiSel = 'ul.topnavTabList > li'; // each top menu button

        // add a down triangle
        var $topLis = $(topTabLiSel);
        $topLis.append('<span class="ui-icon ui-icon-triangle-1-s"></span>');

        $('div.topnavTabs').on(_mobileAwareEventName, topTabLiSel, function () {

            var topTabLiSelClass = 'selected';
            var $thisLi = $(this);

            if ($thisLi.hasClass(topTabLiSelClass)) { // click again close
                $thisLi.removeClass(topTabLiSelClass);
                $thisLi.qtip('hide');
                return true;
            }

            // deselect all other buttons
            $thisLi
                .siblings('li').removeClass(topTabLiSelClass)
                .end().addClass(topTabLiSelClass);

            if (typeof $thisLi.attr('id') != 'undefined') return true;

            var options = $.extend(true, getTopNavDropDownTipOptions(), {
                position: { target: $thisLi.parent().find('li:first') },
                events: {
                    render: function (e, api) {
                        var $thistip = $(this);

                        api.set('content.text', GetHiddenTopMenuContent($thisLi));

                        var filterType = getFilterTypeFromLi($thisLi);

                        if (filterType == 'pm') {
                            api.set('position.target', $thisLi);
                        }

                        $thistip.data('fortype', filterType);

                        registerEventsForTopNavContent($thistip);

                        //$thistip

                    },
                    visible: function (e, api) {
                        var $thisTip = $(this);

                        var $content = $thisTip.children(qtip.contentSelector);

                        $content.css('max-height', getTopNavDropDownContentMaxHeight());

                        var filterType = $thisTip.data('fortype');

                        if (filterType == 'pm') {
                            $thisTip.css('width', 500);
                        } else {
                            $thisTip.css('width', $('#main').width());
                        }

                        setMenuDivsWidth($thisTip);

                        var $prevShownPane = restoreMenuScrollPosition(findMenuContainerInsideTip($thisTip));

                        var $topFilterButtons = $thisTip.find('.resultTopFilter');
                        var $selectedFilter = $topFilterButtons.filter('.selected');

                        if ($selectedFilter.length == 0) { // no filter loaded. load the first one
                            reloadPaneByFilterButton($topFilterButtons.eq(0));
                        } else if ($prevShownPane.length > 0 && paneLoadedToolongAgo($prevShownPane)) {
                            reloadPaneByFilterButton($selectedFilter);
                        }
                    }
                }
            });

            $thisLi.qtip(options);

        });
        
        $body
            .on('mousedown', '.resultTopFilter', function () { // a or div are possible
                var $filterButton = $(this);
                $filterButton.siblings().removeClass('selected').end().addClass('selected');

            });

        if (getQueryString('sidebar') == "1") // from tag approval notice
            setTimeout(function () { $('#extrabarOpener').trigger(_mobileAwareEventName); }, 1000);   
    }

    function registerEventsForTopNavContent($topNavMenu) {
        var viewMoreE = cMemberInfo.isMobileDevice ? 'mousedown' : 'mousedown'; // any touch event will slow down page scroll

        $topNavMenu
        .on(viewMoreE, '.resultTopFilter', function () { // a or div are possible, need to skip a few things when not in topnav
            var $filterButton = $(this);
            var topFilterType = $filterButton.parent().data('topfiltertype');

            if (topFilterType) { // inside topnav as filter

                var filter = $filterButton.data('filter');

                var menuContentSel = '.topnav-menuContent.' + topFilterType;
                var paneID = topFilterType + '-' + filter;
                var $pane = $('#' + paneID);

                if ($pane.length == 0) { // filter content not loaded yet
                    $pane = $('<div id="' + paneID + '" class="' + _paneClass + '" />').appendTo($(menuContentSel + ' .scrollingPane'));

                    if (filter != 'SearchResult') ajaxLoadPane($pane, filter);

                } else if (paneLoadedToolongAgo($pane)) { // filter loaded 5 min ago
                    if (filter != 'SearchResult') ajaxLoadPane($pane, filter);

                } else {
                    scrollPaneIntoView($pane);
                }
            }

        })
        .on(viewMoreE, 'div.topnav-extraLinks.posts span.reload', function () {

            var $thisLink = $(this);
            var $filterButton = findSelectedFilterButtonByContent($thisLink);

            $thisLink.css({ cursor: 'progress' });
            setTimeout(function () { $thisLink.css({ cursor: 'pointer' }); }, 500);

            reloadPaneByFilterButton($filterButton);

            return false;
        })
        .on(viewMoreE, 'div.topnav-extraLinks.posts a.viewmore', function () {

            var $thisLink = $(this);
            var $filterButton = findSelectedFilterButtonByContent($thisLink);
            var filter = $filterButton.data('filter');

            if (filter == 'RecentVisits') {
                qtip.notice($thisLink, ln.NoDataWarning);
                return false;
            }

            $thisLink.attr('href', cPathInfo.ForumDir + filter);
        })
        .on(viewMoreE, 'div.topnav-extraLinks.blog a.viewmore', function () {

            var $thisLink = $(this);

            $thisLink.attr('href', cPathInfo.BlogRootDir);

        })
        .on(viewMoreE, 'div.topnav-extraLinks.pm a.viewmore', function () {

            var $thisLink = $(this);
            var $filterButton = findSelectedFilterButtonByContent($thisLink);
            var filter = $filterButton.data('filter');

            $thisLink.attr('href', cPathInfo.ForumDir + 'pm.aspx' +
                (filter == 'pminbox' ? '?FolderID=0' : ''));

        })
        .on(viewMoreE, 'div.topnav-extraLinks.gallery a.viewmore', function () {

            var $thisLink = $(this);
            var $filterButton = findSelectedFilterButtonByContent($thisLink);
            var filter = $filterButton.data('filter');

            $thisLink.attr('href', cPathInfo.ForumDir + 'gallery.aspx?scrolltophoto=true&myfavorites=' +
                (filter == 'recentphotos' ? 'false' : 'true'));

        });        
    }

    function GetHiddenTopMenuContent($thisLi) { 
        //only called when the qtip is first rendered. content defined in page.
        var $thisLiTopmenu = $thisLi.find('div.topnav-menu');

        if ($thisLiTopmenu.length == 0) return '';

        var thisFilterType = getFilterTypeFromLi($thisLi);
        
        if (thisFilterType == 'pm' && !$thisLi.find('.unreadPMHead')[0]) {
            $thisLi.find('.resultTopFilter:first').remove();
        }

        var filter = $thisLi.find('.resultTopFilter:first').data('filter');
        var indSectionId = thisFilterType + '-' + filter;

        var $menuContentDiv = $('<div />').addClass('topnav-menuContent ' + thisFilterType);
        
        $menuContentDiv.html('<div class="scrollingPane">' +
            '<div id="' + indSectionId + '" class="' + _paneClass + '"></div></div>');

        $thisLiTopmenu.detach().append($menuContentDiv);
        
        var finalContent = $thisLiTopmenu.html();
        
        //content finally stored in tip.content.text
        return finalContent;
    }

    function setMenuDivsWidth($qtip) { // when filter content loaded / shown, we need to set its width for successful scrolling effect
        var $subDivs = $qtip.find('.' + _paneClass);
        var qtipWidth = $qtip.children(qtip.contentSelector).width() - 2;
        $subDivs.css('width', qtipWidth.toString() + 'px'); // standardize all content divs width;
    }

    function setMenuDivHeight($pane) {
        var $qtip = findQtipByContent($pane);
        var qtipHeight = $qtip.find('.topnav-menuTopFilters').innerHeight() + $pane.innerHeight();

        var $content = $qtip.children(qtip.contentSelector);

        if (getTopNavDropDownContentMaxHeight() < qtipHeight) {
            $content.css('overflow', 'auto');
        }
        else {
            $content.css('overflow', 'hidden');
        }
        
        $content.animate({ 'height': (qtipHeight).toString() + 'px' }, 400, forumThemeInfo.jQueryEasing);
    }

    function restoreMenuScrollPosition($menuContent) { // when window is resized and then filter menu reopened
        var storedScrollToEle = $menuContent.data('scrollTo');
        
        if (storedScrollToEle) {
            $menuContent.scrollTo(storedScrollToEle, {duration:0});
        }

        var $scrollTo = $(storedScrollToEle);
        setMenuDivHeight($scrollTo);
        
        return $scrollTo;
    }

    function paneLoadedToolongAgo($pane) {
        return ($pane.data('loaded') < (new Date().getTime() - 3E5)); // 5 min
    }
    
    function reloadPaneByFilterButton($filterButton) { //for reloading a filter
        var filter = $filterButton.data('filter');
        var topfiltertype = $filterButton.parent().data('topfiltertype');
        var $paneToLoad = $('#' + topfiltertype + '-' + filter);

        ajaxLoadPane($paneToLoad, filter, $filterButton.data('searchID'));

        $filterButton.addClass('selected');        
    }

    function ajaxLoadPane($pane, filter, searchID) { //the actual ajax loading of a filter

        var urlToLoad = cPathInfo.ForumDir + 'ws/TopNav.aspx?' +
            (filter == 'SearchResult' ? 's=' + searchID.toString() : 't=' + filter) +
                ' #navdata .newActiveRepeaterWrap';
        
/*        var $loadingPane =
            $('<div />')
            .css({ 'position': 'absolute', 'left': '10px', 'top': '10px' })
            .text(ln.loadingDesc);*/

        var $filterBtnDiv = $pane.closest('.topnav-menuContent').prev();
        $filterBtnDiv.css('opacity', 0.4);
        
        //$pane.after($loadingPane);

        $pane.load(urlToLoad, function (r) {
            $filterBtnDiv.css('opacity', 1);
            //$loadingPane.detach();
            trackThreadRead($pane.selector);

            var $qtip = findQtipByContent($pane);

            setMenuDivsWidth($qtip);
            performDateFormat(false);

            $pane.data('loaded', new Date().getTime()); // for auto reload later on after 5 min

            if (searchID) {
                var $theFilterButton = findTipContainerByContent($pane).find('.resultTopFilter[data-filter=SearchResult]');
                $theFilterButton.show().data('searchID', searchID); // for reload & view more links
            }

            scrollPaneIntoView($pane);
        });
       
    }

    function scrollPaneIntoView($pane) { // scroll the desired filter content
        findMenuContainerByPane($pane)
            .scrollTo($pane,
                { duration: 800, easing: forumThemeInfo.topNavScrollEasing, 
                    onAfter: function (scrollToEle) {$(this).data('scrollTo', scrollToEle); // store the last scrolled To pane
            }
        });
        
        setMenuDivHeight($pane);
    }

    function findMenuContainerByPane($pane) {
        return $pane.closest('.topnav-menuContent');
    }
    
    function findMenuContainerInsideTip($qtip) {
        return $qtip.find('.topnav-menuContent');
    }
    
    function findQtipByContent($pane) {
        return $pane.closest('.qtip');
    }
    
    function findTipContainerByContent($anyContent) {
        return $anyContent.closest(qtip.contentSelector);
    }

    function findSelectedFilterButtonByContent($anyContent) {
        return findTipContainerByContent($anyContent).find('.resultTopFilter.selected');
    }

    function getFilterTypeFromLi($thisLi) {
        return $thisLi.data('filtertype');
    }

    function injectHiddenTopMenu() {
        var menulis = $('#hiddenTopMenu').children('li').toArray().sort(function (a, b) {
            return $(a).data('listindex') - $(b).data('listindex');
        });

        var $primarymenu = $('ul.topnavTabList').children('li');
        
        for (var i = 0; i < menulis.length; i++) {
            var $li = $(menulis[i]);
            $li.insertBefore($primarymenu.eq($li.data('listindex') - i));
        }

    }
/* HTML structure:
-----------------
    qTip for the respective top LI

        qtip-content area

            menuTopFilters w/ data-topfiltertype matching the top LI
                - filter button (w/ a matching pane w/ data-filter specified)
                - filter button
                - etc.

            menu-content
                horizontal scrolling pane holder
                    - pane (w/ a matching filter button)
                    - pane
                    - etc.
*/

$doc.ready(function () {

    var $extrabarOpener = $('#extrabarOpener');

    if ($extrabarOpener.length != 0) {
        
        var options = $.extend(true, getTopNavDropDownTipOptions(), {
            style: { width: 400 },
            events: {
                render: function (e, api) {
                    var $thistip = $(this);
                    var $content = $thistip.children(qtip.contentSelector);
                    $content
                        .css({ 'overflow': 'auto' })
                        .load($extrabarOpener.data('extrabar'), function () {
                            trackThreadRead();
                            performDateFormat(false);

                            //if (!cMemberInfo.isMobileDevice) 
                            produceTagCloud();

                            bindTagApprovalLinks(api.elements.target);

                            setupTopFilterSelect();
                        });
                },
                visible: function () {
                    var $thistip = $(this);
                    var $content = $thistip.children(qtip.contentSelector);
                    var maxHeight = getTopNavDropDownContentMaxHeight();
                    $content.css({ 'max-height': maxHeight });
                }
            }
        });

        $extrabarOpener.bind(_mobileAwareEventName, function () {
            $extrabarOpener.qtip(options);
        });
    } else {
        $extrabarOpener.hide();
    }
});


function setupTopFilterSelect() {
    $('.sidebarTopStatsFilter').off('mousedown', 'a').on('mousedown', 'a', function () {
        var $link = $(this);
        var filter = $link.data('filter');

        if (filter == null) {
            var $selected = $link.siblings('.selected');
            var selFilter = $selected.data('filter');

            if (!selFilter) return true;

            $link.attr('href', cPathInfo.ForumDir + 'Stats.aspx?t=' + selFilter);
            return true;
        }

        var thefid = (typeof currentForumID != 'undefined' ? currentForumID : 0);
        var $stats = $('#topStats');

        $stats.fadeTo('fast', 0.4, function () {
            $stats.load(cPathInfo.ForumDir +
                String.format('ws/extrabar.aspx?c=true&fid={0}&range={1} #topStats', thefid, filter), null, function () {
                    $stats.fadeTo('fast', 1);
                });
        });

    });
}

function bindTagApprovalLinks($tiptarget) {
    $('.sidebarTagAdditional').on('click', 'a.tagapprovelink', function () {
        var $link = $(this);
        var wsName;

        switch ($link.attr('id')) {
            case 'approveTag':
                wsName = 'ApproveTags';
                break;
            case 'disapproveTag':
                wsName = 'DisapproveTags';
                break;
            default:
                wsName = 'DisapproveAndDeleteTags';
        }

        var checkedBoxes = [];

        var sidebarCheckboxesSel = '.sidebarTagCheckboxes';

        var $checkboxesDiv = $(sidebarCheckboxesSel);
        $checkboxesDiv.find('input[type=checkbox]:checked').each(function () {
            checkedBoxes[checkedBoxes.length] = parseInt($(this).val());
        });

        if (checkedBoxes.length == 0) return false;

        JQCallWebService('ws/Tag.aspx/' + wsName, { tagIDs: checkedBoxes }, function () {
            $checkboxesDiv.load($tiptarget.data('extrabar') + ' ' + sidebarCheckboxesSel);
        });

        return false;
    });
}

function produceTagCloud() {
    var $tagArea = $('#sidebarTagsList');
    var $tagitems = $tagArea.find('.tagitem');
    
    var needsUpdate = false;

    var tagCanvasOptions = {
        textColour: '#444',
        outlineColour: '#DADADA',
        shadow: '#888',
        shadowBlur: 2,
        shadowOffset: [0, 1],
        reverse: true,
        weight: true,
        weightFrom : 'data-weight',
        maxSpeed : 0.02,
        wheelZoom: false
    };

    var $canvas = $('#tagCanvas');

    if ($tagitems.length == 0) {
        needsUpdate = true;
    } else {
        if ($tagitems.length == 1 && $tagitems.eq(0).data('weight') == 0) {
            $tagitems.text(ln.NoDataWarning).attr('href', '');
        } else {
            $canvas.show().tagcanvas(tagCanvasOptions, 'tagLinks');
        }
    }

    $tagitems.each(function () {
        //consoleLog(new Date($(this).data('lastgen')));
        if (new Date().getTime() > new Date($(this).data('lastgen')).addDays(1).getTime()) {
            needsUpdate = true;
            return false;
        }
        return true;
    });

    if (needsUpdate) {
        setTimeout(function () {
            JQCallWebService('ws/Tag.aspx/UpdateForumTagStats',
            { forumID: $canvas.data('forumid') }, null, JQOnCallError);            
        }, 1000);
    }
}

$doc.ready(function () {
    var $forumMenuOpener = $('#forumMenuOpener');

    if ($forumMenuOpener.length != 0) {

        var options = $.extend(true, getTopNavDropDownTipOptions(), {
            style: { width: 'auto' },
            events: {
                render: function (e, api) {
                    var $thistip = $(this);
                    var $content = $thistip.children(qtip.contentSelector);
                    $content
                        .css({ 'overflow': 'auto' })
                        .load(cPathInfo.ForumDir + 'ws/TopNav.aspx?t=forums #navdata', function () {
                            $content.find('ul.allforums').find('li.forum').filter(':has(ul)') // the subscription forums and li without childrend ul don't need arrow
                                .append(' <span class="ui-icon ui-icon-triangle-1-e"></span>');
                        });

                    $body.on('mouseenter', '.forumTopMenu li.forum', function () {

                        var $li = $(this);

                        var $childforumLinks = $li.children('ul');

                        if ($childforumLinks.length == 0) return false;

                        var existingQtip = $li.qtip('api');

                        if (existingQtip) {
                            existingQtip.show();
                            return false;
                        }

                        var $allLinksHTML = $('<div />').append(
                            $childforumLinks.clone().addClass('forumTopMenu').removeClass('none'));

                        var finalOptions = $.extend(true, {}, getTopNavDropDownTipOptions(), {
                            //overwrite: true, do not destroy.
                            content: { text: $allLinksHTML.html() },
                            //style: { classes: ' qtip-shadow' },
                            position: { target: $li, my: 'left top', at: ($li.data('depth') > 2 ? 'bottom left' : 'right top'), adjust: { x: -15, y: -5} },
                            show: { delay: 200 },
                            hide: { event: 'mouseleave unfocus', delay: 100, inactive: false },
                            events: {
                                visible: function (ae, aapi) {
                                    var $tip = $(this);

                                    $tip.on('mousedown', 'li', function (eee) {
                                        // necessary to prevent leaving the parent tip visible (needed for the unfocus hide event)
                                        // and to make a clickable.
                                        eee.stopImmediatePropagation();
                                    });

                                    aapi.focus();
                                }
                            }
                        });

                        $li.qtip(finalOptions);

                        return false;
                    });
                },
                visible: function () {
                    var $thistip = $(this);
                    var $content = $thistip.children(qtip.contentSelector);
                    var maxHeight = getTopNavDropDownContentMaxHeight();
                    $content.css({ 'max-height': maxHeight });
                }
            }
        });

        $forumMenuOpener.bind(_mobileAwareEventName, function () {
            $forumMenuOpener
                .qtip(options);
            //.addClass('selected');
        });
    } else {
        $forumMenuOpener.hide();
    }

});

$doc.ready(function () {

    registerTopCustomMenu('li.topCustomMenu');
    
    registerTopCustomMenu('#rightOptionTopMenu');

    if (cMemberInfo.isBMan || cMemberInfo.isUMan || cMemberInfo.isFMan)
        registerAdminMenus();

    registerSubCustomMenus();
});

function registerTopCustomMenu(topLiSel) {
    var $allCustomMenus = $(topLiSel);
    
    for (var i = 0; i < $allCustomMenus.length; i++) {
        
        var $currTopMenu = $allCustomMenus.eq(i);

        var $subOptions = $currTopMenu.children('ul');
        
        var isRightAligned = $currTopMenu.hasClass('right');

        if ($subOptions.find('li')[0]) {

            appendPrependArrowForLi($subOptions, isRightAligned);

            var subMenuOptions = $.extend(true, getTopNavDropDownTipOptions(), {
                show: { ready: false },
                style: { width: 'auto' },
                position: (isRightAligned ? { my: 'top right', at: 'bottom right'} : { my: 'top left', at: 'bottom left' }),
                events: {
                    render: function (e, api) {
                        var $target = api.get('show.target');

                        $(this).children(qtip.contentSelector)
                            .css({ 'overflow': 'auto' })
                            .html(String.format('<ul class="{0}">{1}</ul>',
                                ($target.hasClass('right') ? 'rightOptionMenu' : 'leftOptionMenu'), 
                                $target.children('ul').html()));
                        
                    },
                    visible: function () {
                        var $content = $(this).children(qtip.contentSelector);
                        var maxHeight = getTopNavDropDownContentMaxHeight();
                        $content.css({ 'max-height': maxHeight });
                    }
                }
            });

            $currTopMenu.qtip(subMenuOptions);
            
        } else {
            $currTopMenu.hide();
        }    
    }
}

function registerSubCustomMenus() {

    $body.on('mouseenter', 'ul.rightOptionMenu li, ul.leftOptionMenu li', function () {

        var $theLi = $(this);
        var isRightAligned = $theLi.parent().hasClass('rightOptionMenu');

        var $childMenu = $theLi.children('ul');

        if ($childMenu.length == 0) {
            return false;
        }

        var existingQtip = $theLi.qtip('api');

        if (existingQtip) {
            existingQtip.show();
            return false;
        }

        var $allLinksHTML = $('<div />').append(
            $childMenu.clone().addClass((isRightAligned ? 'rightOptionMenu' : 'leftOptionMenu')).removeClass('none')
        );

        var finalOptions = $.extend(true, {}, getTopNavDropDownTipOptions(), {
            //overwrite: true, do not destroy.
            content: { text: $allLinksHTML.html() },
            //style: { classes: ' qtip-shadow' },
            position: {
                target: $theLi.children('a,span').eq(0),
                my: 'top ' + (isRightAligned ? 'right' : 'left'),
                at: ($theLi.data('depth') > 2 ? 'bottom ' + (isRightAligned ? 'left' : 'right') : (isRightAligned ? 'left' : 'right') + ' top'),
                adjust: { x: (isRightAligned ? -20 : 20), y: -20 }
            },
            show: { delay: 200 },
            hide: {
                event: 'mouseleave ' + ((typeof cMemberInfo != 'undefined' && !cMemberInfo.isMobileDevice) ? 'unfocus' : ''),
                delay: 100, inactive: false
            },
            events: {
                visible: function (ae, aapi) {
                    var $tip = $(this);

                    $tip.on(_mobileAwareEventName, 'li', function (eee) {
                        // necessary to prevent leaving the parent tip visible (needed for the unfocus hide event)
                        // and to make a clickable.
                        eee.stopPropagation();
                        eee.stopImmediatePropagation();
                    });

                    aapi.focus();
                }
            }
        });

        $theLi.qtip(finalOptions);

        return false;
    });
}

function registerAdminMenus() {
    var mTitles = [ln.forumMenuSiteCPDesc, 'Pages & Announcements', 'Forum Management', 'User Management', 'Security Related Options',
                                    'Gallery Options', 'System Related Options', 'All Server Messages', 'Software Activation'];

    var mURLs = ['Default.aspx?tabval=site', 'news.aspx?tabval=editnews', 'forummanager.aspx?tabval=forum', 'user.aspx?tabval=user',
        'akismet.aspx?tabval=akismet', 'gallery.aspx?tabval=gallery', 'maintenance.aspx?tabval=maintain', 'allsrvmsg.aspx?tabval=allsrvmsg',
        'activation.aspx?tabval=activate'];

    var subTitleUrls = {
        admin0: { titles: ["Site Parameters", "Email Settings", "Theme & Display Options", "Home, Forums, Menu & Breadcrumb", "Posts, List View & Search Display", "Default Posting Options", 
            "Social Integration / Sharing", "Search Engine Optimization", "Upload & Download Processing", "Mobile Device Detection", "Valid RegEx Patterns"],
            urls: ["Default.aspx?tabval=site", "email.aspx?tabval=email", "theme.aspx?tabval=theme", "homepage.aspx?tabval=home", "mview.aspx?tabval=mview", "posting.aspx?tabval=posting", 
                "social.aspx?tabval=social", "seo.aspx?tabval=seo", "upload.aspx?tabval=upload", "mobile.aspx?tabval=mobile", "regex.aspx?tabval=regex" ]
        },
        admin2: { titles: ["Forum Management", "Moderator & Group Permissions", "Blogging Integration", "Google Authorship", "Subscription Options", 
                "Thread Labels", "Post Tagging", "PGDCode (BBCode)", "Smilies / Emoticons", "Delete Posts", "Related Server Messages"],
            urls: ["forummanager.aspx?tabval=forum", "forumpermission.aspx?tabval=permission", "blog.aspx?tabval=blog", "authorship.aspx?tabval=author", "subscription.aspx?tabval=subscription", 
                "topictype.aspx?tabval=topictype", "tags.aspx?tabval=tags", "pgdcode.aspx?tabval=pgdcode", "smiley.aspx?tabval=smiley", "mdelete.aspx?tabval=prune", "fsrvmsg.aspx?tabval=fsrvmsg"]
        },
        admin3: { titles: ["User Management", "Registration / Login", "Custom Registration Fields", "User Groups", "Private Message (PM)",
                "User Profile & Member List", "Stock Avatar Upload", "Delete User", "User Rankings", "Bot Detection", "Create Mailing List", "Batch Member Import"],
            urls: ["user.aspx?tabval=user", "reg.aspx?tabval=reg", "customreg.aspx?tabval=customreg", "ugroup.aspx?tabval=group", "pm.aspx?tabval=pm", "profile.aspx?tabval=profile",
                "avatarupload.aspx?tabval=avatar", "udelete.aspx?tabval=udelete", "urank.aspx?tabval=rank", "bot.aspx?tabval=bot", "maillist.aspx?tabval=maillist",
                "memimport.aspx?tabval=memimport"]
        },
        admin4: { titles: ["Akismet Spam Filter", "Report Tickets", "Post Flagging & Auto Ban", "Bad words, IP and Name Filters", "Captcha & ReCaptcha", "Link & PM Spam Prevention"],
            urls: ["akismet.aspx?tabval=akismet", "modticket.aspx?tabval=moderator", "warn.aspx?tabval=warn", "forumfilter.aspx?tabval=filters", "captcha.aspx?tabval=captcha", "linkpmspam.aspx?tabval=lpspam"]
        },
        admin6: { titles: ["Custom Stats", "Basic Maintenance", "Admin / Moderator Log", "Mail / Async Tasks Log", 
            "Error Log", "Scheduled Tasks", "Server Checker", "Config Editor"],
            urls: ["stats.aspx?tabval=stats", "maintenance.aspx?tabval=maintain", "logs.aspx?tabval=logs", "maillog.aspx?tabval=mlog",
                "errorlog.aspx?tabval=error", "schedule.aspx?tabval=sch", "serverchecker.aspx?tabval=srvcehck", "configedit.aspx?tabval=config"]
        }
    };

    var $rightTopMenu = $('#rightOptionTopMenu');
    var $rootAdminLi = $rightTopMenu.find('li.admin');
    
    function addItem($ItemsUL, $cli, $ca) {
        $ItemsUL.append($cli.append($ca));
    }
    
    var $ul = $('<ul class="none" />');
    
    for (var i = 0; i < mTitles.length; i++) {

        if (!cMemberInfo.isBMan) {
            if (cMemberInfo.isUMan && cMemberInfo.isFMan) {
                if (i != 2 && i != 3) continue;
            }
            else if (cMemberInfo.isUMan && i != 3) {
                continue;
            }
            else if (cMemberInfo.isFMan && i != 2) {
                continue;
            }
        }
        
        var $li = $('<li class="admin" />').data('depth', 1).addClass('admin' + i.toString());
        var $a = $('<a />').text(mTitles[i]).attr('href', cPathInfo.ForumDir + 'admincp/' + mURLs[i]);

        if (i == (mTitles.length - 1)) { // activation
            if (cMemberInfo.memID == 0) addItem($ul, $li, $a);
        } else {
            addItem($ul, $li, $a);
        }

    }

    for (var key in subTitleUrls) {
        var $subLi = $ul.find('li.' + key);
        
        if ($subLi.size() == 1) {
            
            var $subsubUL = $('<ul class="none" />');
            
            for (var ii = 0; ii < subTitleUrls[key].titles.length; ii++) {

                if ((key == 'admin6' && ii == 0) &&
                    !(cMemberInfo.memID == 0) && 
                    !(cMemberInfo.isBMan && !cFeatureInfo.isDemoMode)) continue; // custom stats

                if ((key == 'admin6' && ii == 7) &&
                    !(cMemberInfo.memID == 0)) continue; // config editor

                var $subsubLi = $('<li />').data('depth', 2);
                var $subsuba = $('<a />')
                    .text(subTitleUrls[key].titles[ii])
                    .attr('href', cPathInfo.ForumDir + 'admincp/' + subTitleUrls[key].urls[ii]);
                
                addItem($subsubUL, $subsubLi, $subsuba); 
            }

            $subLi.append($subsubUL);
        }
    }

    $rootAdminLi.append($ul);

    appendPrependArrowForLi($rightTopMenu, true);
    
}

function appendPrependArrowForLi($container, isRightAligned) {
    var iconHtml = '<span class="ui-icon ui-icon-triangle-1-{0}">';
    
    $container.find('li:has(ul)').each(function () {
        if (isRightAligned) {
            $(this).prepend(String.format(iconHtml, 'w'));
        }
        else {
            $(this).append(String.format(iconHtml, 'e'));
        }
    });
}

/*ForumHeaderJs_key*/
 /* Category Show/Hide Functions */

function CatStateToggler(theid) {

    ToggleCatState(theid, true);
    
    return false;
}

function ToggleCatState(catId, animated) {

    var $CatTable = $('#' + catId + '_mainTable');
    
    if (!animated) {
        $CatTable.hide();
        AfterCatToggle(catId);
    } else {
        $CatTable.slideToggle('fast', forumThemeInfo.jQueryEasing, 
            function () { AfterCatToggle(catId); });
    }
    
}

function AfterCatToggle(catId) {

    var $CatTable = $('#' + catId + '_mainTable');
    var isVisible = $CatTable.is(':visible');

    if ($CatTable.length == 0) return;

    $('#' + catId + '_img').attr('src', pageThemeImageURL +
            (isVisible ? ImageCloseFile : ImageOpenFile));

    RecordCatState(catId, isVisible);
}

var _catStateCookie = 'catState';

function RecordCatState(catId, state) {

    var currCookieValue = $.storage.get(_catStateCookie);
    
    if (currCookieValue=="null" || currCookieValue== null) currCookieValue = "";

    currCookieValue = currCookieValue.replace("|" + catId, "").replace("null", "");

    if (!state) currCookieValue += "|" + catId;

    $.storage.set(_catStateCookie, currCookieValue);
}

function RestoreCatState(){
    var currCookieValue = $.storage.get(_catStateCookie);

    if (currCookieValue=="" || currCookieValue=="null" || currCookieValue== null) return;
    
    var arrCurrCookieValue = currCookieValue.split("|");

    if (typeof pageThemeImageURL != 'undefined') {
        for (var i = 0; i < arrCurrCookieValue.length; i++) {

            if (arrCurrCookieValue[i] == '') continue;

            ToggleCatState(arrCurrCookieValue[i], false);

        }
    }
}
/*cssHackProgressive_key*/

var $_letteringDivSel;
$doc.ready(function () {
    $('html.ie7 table.maintable').attr('cellspacing', '1');

    $_letteringDivSel = $('div.ForumHeaderRow');
    $_letteringDivSel.find('.head').lettering();
    $_letteringDivSel.removeClass('hidden');

    var navMenuliColors = ['#B81800', '#17A341', '#009BFF', '#9418B1', '#20C3C2', '#FDBE2C', '#666666', '#FF536A', '#40AAEF'];
    var navRightMenuColor = '#F75F1F';

    $('ul.topnavTabList')
        .children('li')
        .each(function () {
            var $li = $(this);
            if ($li.hasClass('right'))
                $li.css('border-color', navRightMenuColor);
            else
                $li.css('border-color', navMenuliColors[$li.index()]);
        });

});

window.randomLatestListPaddingT = null;

function randomLatestListPadding() {

    if (window.randomLatestListPaddingT != null)
        window.clearTimeout(window.randomLatestListPaddingT);

    window.randomLatestListPaddingT = setTimeout(function () {
        var eachliWidth = 0;
        var paddingLeft = 0;
        var $allLis = $('div.defaultaspx').find('ul.newActiveList').find('li:odd');
        for (var i = 0; i < $allLis.length; i++) {
            var $li = $allLis.eq(i);
            if (eachliWidth == 0) {
                eachliWidth = $li.width();
                paddingLeft = parseInt($li.css('paddingLeft'));
                //consoleLog(_paddingLeft);
            }

            var totalChildrenWidth = 0;
            $li.children().each(function () {
                totalChildrenWidth += $(this).outerWidth(true);
            });

            var remainingWidth = eachliWidth - totalChildrenWidth;

            if (remainingWidth > 0) {
                $li.css({ 'paddingLeft': paddingLeft + Math.floor(Math.random() * (remainingWidth / 1.3)) });
            }

        };

    }, 100);
}

$win.load(function () {
    if (cMemberInfo.isMobileDevice) return;
    
    $('ul.topnavTabList').lavaLamp({ easing: 'easeOutBack' })
        .find('li.lavaback').css('border-top', 'none');

    /*
        use waypoint, dragged down over *px
        #topbannerbackground =     
        height: 56px;
        position: fixed;
        z-index: 10000;

        .topnavTabs = 
        position: fixed;
        z-index: 10001;
    */
});

WebFontConfig = {
    google: { families:
        [
            'Merienda+One::latin','Roboto+Slab::latin','Open+Sans::latin'
        ]
    }
};

(function() {
    var wf = document.createElement('script');
    wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
        '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
    wf.type = 'text/javascript';
    wf.async = 'true';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(wf, s);
})();

forumThemeInfo.forumIcons.forumUnRead = 'document_copies.png';
forumThemeInfo.forumIcons.forumRead = 'document_empty.png';
forumThemeInfo.forumIcons.forumLink = 'document_redirect.png';
forumThemeInfo.forumIcons.subforumRead = 'blank.gif';
forumThemeInfo.forumIcons.subforumUnRead = 'document_copies_small.png';
forumThemeInfo.forumIcons.subforumLink = 'document_redirect_small.png';
forumThemeInfo.forumIcons.threadUnRead = 'page.png';
forumThemeInfo.forumIcons.threadRead = 'page_white.png';
forumThemeInfo.forumIcons.threadNewestArrow = 'newestmsg.gif';
forumThemeInfo.forumIcons.threadLatestArrow = 'latestmsg.gif';

forumThemeInfo.forumIcons.subforumClose = 'bullet_toggle_minus.png';
forumThemeInfo.forumIcons.subforumOpen = 'bullet_toggle_plus.png';

$.fn.qtip.defaults.style.classes = 'qtip-youtube qtip-rounded qtip-shadow';

if (typeof $.elastislide != 'undefined') {
    $.extend(true, $.elastislide.defaults, {
        imageW: 80,
        minItems: 3,
        border: 4,
        margin: 10,
        easing: forumThemeInfo.jQueryEasing    
    });
}


document.write('<script type="text/javascript" src="' + cPathInfo.ForumDir + 'js/jqueryplugins/jquery.lavalamp.js"><\/script>');
document.write('<script type="text/javascript" src="' + cPathInfo.ForumDir + 'js/jqueryplugins/jquery.lettering.min.js"><\/script>');
