/***********
* Manage Saved Content
***********/
var _RootFolderID = 0;
var _AllItemsFolderID = -1;
var _MaxCheckedItems = 100;

// Select all item checkboxes
function MrcSelectAll(checkAll, disableWhenMaxed) {
    if ((checkAll && $('#selectAll').hasClass('disabled'))
     || (!checkAll && $('#deselectAll').hasClass('disabled'))) {
        return false;
    }

    //select / deselect
    if (disableWhenMaxed) {
        if (checkAll) {
            if (getTotalSelectionCount() + $(_checkboxesSelector).not(':checked').length > _MaxCheckedItems) {
                $(_checkboxesSelector).not(':checked').each(
                function() {
                    if (getTotalSelectionCount() < _MaxCheckedItems && !($(this).parent().parent().hasClass('invalid'))) {
                        $(this).attr('checked', checkAll);
                        $(this).removeAttr('disabled');
                        $(this).parent().parent().toggleClass("search-result-item-selected", checkAll);
                    }
                    else {
                        $(this).attr('disabled', 'disabled');
                    }
                }
                );
            }
            else {
                $(_checkboxesSelector).not(':checked').each(
                function () {
                    if ($(this).parent().parent().hasClass('invalid')) {
                        $(this).attr('disabled', 'disabled');
                    } else {
                        $(this).attr('checked', checkAll);
                        $(this).parent().parent().toggleClass("search-result-item-selected", checkAll);
                    }
                });
            }
        }
        else {
            $(_checkboxesSelector + ":checked").each(
            function() {
                $(this).attr('checked', checkAll);
                $(this).parent().parent().toggleClass("search-result-item-selected", checkAll);
            });
            enableAllCheckboxes();
        }
    }
    else {
        $(_checkboxesSelector).filter(function () { return $(this).parents('.invalid').length == 0; }).attr('checked', checkAll);

        // add / remove selected class to items
        $(".search-result-item, .folder_item").toggleClass("search-result-item-selected", checkAll);
    }

    setSelectAllLink(_checkListItems.length, checkAll ? _checkListItems.length : 0);
    setSelectedText();

    // action buttons will get set again after the ajax call
    // Post to the server
    var postList = [];
    var i;
    for (i = 0; i < _checkListItems.length; i++) {
        postList[i] = { ID: _checkListItems[i].ID, Checked: $('#chkSaved_' + _checkListItems[i].ID).is(':checked') };
    }
    PostSelection(postList);
}

// Handler called when one or more Mrc item checkboxes is checked or unchecked
function MrcSelectionChanged(checkbox) {
    var checkedCount = getTotalSelectionCount();

    if (checkbox) {
        if(checkbox.checked) {
            $(checkbox).parent().parent().addClass("search-result-item-selected");
            if ($('#disableWhenMaxed').val() && checkedCount >= _MaxCheckedItems) {
                $(_checkboxesSelector).not(':checked').each(
                    function() {
                        $(this).attr('disabled', 'disabled');
                    });
            }
        }
        else {
            $(checkbox).parent().parent().removeClass("search-result-item-selected");
            enableAllCheckboxes();
        }
        var item = $(checkbox).data('checkitem');
        var checkList = [{ ID: item.ID, Checked: checkbox.checked }];
        PostSelection(checkList);
    }
    setSelectedText();
    setActionButtons();
    var totalCount = $(_checkboxesSelector).not(':disabled').length;
    var pageCheckedCount = $(_checkboxesSelector + ':checked').length;
    setSelectAllLink(totalCount, pageCheckedCount);
}

function highlightCheckedBoxes() {
    $(".chkArticle:checked").each(function() {
        $(this).parent().parent().addClass("search-result-item-selected");
    });
}

function disableIfMaxed() {
    if (getTotalSelectionCount() >= _MaxCheckedItems) {
        $(".chkArticle").not(':checked').each(function() {
            $(this).attr('disabled', 'disabled');
        });
    }
}

function disableIfInvalid() {
    $(".chkArticle").each(function () {
        if ($(this).parent().parent().hasClass('invalid')) {
            $(this).removeAttr('checked');
            $(this).attr('disabled', 'disabled');
        }
    });
}

function enableAllCheckboxes() {
    $(_checkboxesSelector).filter(function () { return $(this).parents('.invalid').length == 0; }).removeAttr('disabled');
}

function setSelectedText() {
    if (getTotalSelectionCount() == 1) {
        $('#plurizer').css('display', 'none');
    }
    else {
        $('#plurizer').css('display', 'inline');
    }
}

$(document).ready(function () {
    highlightCheckedBoxes();
    disableIfInvalid();

    if ($('#disableWhenMaxed').val()) {
        disableIfMaxed();
        setSelectAllLink($(_checkboxesSelector).not(':disabled').length, $(_checkboxesSelector + ':checked').length);
    }
});

function PostSelection(checkList) {
    //do ajax call to update the list of selected items on server
    $.ajax({
        type: 'POST',
        url: '/selection/update/' + _currentSelection.ListName,
        data: {checkList:JSON.stringify(checkList)},
        success: saveSelectionSucceeded,
        dataType: 'json'
    });
}

function MrcClearSelection() {
    $.ajax({
        type: 'POST',
        url: '/selection/clear/' + _currentSelection.ListName,
        success: clearSelectionSucceeded,
        dataType: 'json'
    });
}

// enable / disable buttons
// checkedCount must be the total number of checked items, not just items on the current page
function setActionButtons() {
    var checkedCount = getTotalSelectionCount();
    var articleCount = _multiPage
        ? checkedCount
        : mrcGetSelection('Article').length;
    // move / copy / delete
    $('#fi_management_tools > a').toggleClass('disabled', checkedCount == 0);
    // print / export
    $('#fi_article_tools > a').toggleClass('disabled', articleCount == 0 || articleCount > _MaxCheckedItems);

    if ($('#disableWhenMaxed').val()) {
        if (articleCount >= _MaxCheckedItems) {
            $('#maxSelectedText').html('(maximum of 100 reached)').addClass("exceeded");
        } else {
            $('#maxSelectedText').html('(maximum of 100 articles)').removeClass("exceeded");
        }
    } else {
        if (articleCount > _MaxCheckedItems) {
            $('#maxSelectedText').html('(maximum of 100 exceeded)').addClass("exceeded");
        } else {
            $('#maxSelectedText').html('(maximum of 100 articles)').removeClass("exceeded");
        }
    }
        
    // Clear all selections
    $('#lnkClearSelection').toggleClass('disabled', checkedCount == 0);
    // selection count
    var counter = $('#checkedcount');
    if (counter.length >= 1) {
        $('#checkedcount').text(checkedCount);
    } else {
        // separate article and search counters (current page selection only)
        var articleCount = mrcGetSelection('Article').length;
        var searchCount = mrcGetSelection('Search').length;
        var listCount = mrcGetSelection('CompanyList').length;
        $('#checkedcount_articles').text(articleCount).siblings().text(articleCount == 1 ? 'article selected' : 'articles selected');
        $('#checkedcount_searches').text(searchCount).siblings().text(searchCount == 1 ? 'search selected' : 'searches selected');
        $('#checkedcount_lists').text(listCount).siblings().text(listCount == 1 ? 'list selected' : 'lists selected');
    }
}

// change text of select all link
function setSelectAllLink(pageTotalCount, pageCheckedCount) {
    $('#selectAll').toggleClass('disabled', pageCheckedCount == pageTotalCount);
    $('#deselectAll').toggleClass('disabled', pageCheckedCount == 0);
}

// reconcile the currently checked items with the list of checked items from the server
function getTotalSelectionCount() {
    var selectionCount = 0;
    var sii;
    for (sii = 0; sii < _currentSelection.Items.length; sii++) {
        //if (checkListItemsContains(_currentSelection.Items[sii].ID)) {
        var $checkbox = $('#chkSaved_' + _currentSelection.Items[sii]);
        if ($checkbox.length == 0) {  // checked on server, not listed on page.
            selectionCount++;
        }
    }
    // add in the ones checked on the current page:
    selectionCount += $(_checkboxesSelector + ':checked').length;
    return selectionCount;
}

var _checkboxesSelector = 'input[name=chkSavedContent][type=checkbox]';

function saveSelectionSucceeded(data) {
    if (data.Succeeded) {
        _currentSelection = data.Selection;
        setActionButtons();
    }
}

function clearSelectionSucceeded(data) {
    if (data.Succeeded) {
        _currentSelection = data.Selection;
        $(_checkboxesSelector).attr('checked', false);
        enableAllCheckboxes();
        setActionButtons();
        setSelectAllLink(_checkListItems.length, 0);
        $(".search-result-item-selected").removeClass("search-result-item-selected");
    }
    //TODO: display session error
}

function checkListOnReady() {
    $('input[name=chkSavedContent][type=checkbox]').each(function(index) {
        $(this).data('checkitem', _checkListItems[index]);
    });
    MrcSelectionChanged();
    if ($('#firstView').val() == 'true') {
        // set action buttons, etc
        $('#firstView').val(false);
    } else {
        // refresh selection count from server
        PostSelection([]);
    }
}


// Show the delete selected items confirmation dialog
function mrcDeleteSelected(button) {
    var ids = mrcGetSelectionIDs();
    if (ids.length == 0)
        return;
    OmnitureClick('MYRC|DeleteStep1');        
    mrcCancelDelete();  // cancel any single-item delete dialog
    $("#divDeleteFlyout").show();
    $('#frmDeleteItem > [name=itemIDs]').val(ids);
    $('#fi_tools').fadeOut('fast');
    $("#deleteMultipleConfirmation").fadeIn('fast').addClass("active");

    $("#frmDeleteItem").data("errors", $("#deleteMultipleConfirmation"));
}

function mrcFinishDeleteMultiple() {
    var ids = mrcGetSelectionIDs();
    $('#frmDeleteItem > [name=itemIDs]').val(ids);
    if (ids.length == 0) {
        mrcCancelDeleteMultiple();
        return false;
    }
    
    OmnitureClick('MYRC|DeleteStep2');
}

function mrcDeletePost(form) {
    var container = $("#frmDeleteItem").data("errors");    
    $.ajax({
        type: 'POST',
        url: '/mrc/deleteitems/',
        data: $(form).serialize(),
        success: function(data, msg, req) {
        if (mrcAjaxSuccess(data, msg, req, container)) {
                OmnitureClick('MYRC|DeleteStep2');
                deleteSuccess();
            }
        },
        error: function(req, msg, ex) {
            mrcAjaxFailure(req, msg, ex, container);
        }
    });
    return false;
}

function mrcMoveSelected() {
    var ids = mrcGetSelectionIDs();
    if (ids.length == 0)
        return;

    showMoveCopyFolderSelection("move", ids);
}

function mrcCopySelected() {
    var ids = mrcGetSelectionIDs();
    if (ids.length == 0)
        return;

    showMoveCopyFolderSelection("copy", ids);
}

function showMoveCopyFolderSelection(functionType, ids) {
    $("#hdnMoveCopyIds").val(ids);
    $("#hdnMoveCopyRequestType").val(functionType);
    $("#divDeleteFlyout").hide();
        
    if (functionType == "copy") {
        $("#divMoveCopy_CopyContent").show();
        $("#divMoveCopy_MoveContent").hide();
        $("#move_copy_btns").addClass("copy_btns").removeClass("move_btns");
    } else {
        $("#divMoveCopy_CopyContent").hide();
        $("#divMoveCopy_MoveContent").show();
        $("#move_copy_btns").addClass("move_btns").removeClass("copy_btns");
    }

    $("#btnMoveCopySubmit").attr("class", functionType + "_btn button");
    // Disable the Move button if there are no folders
    $("#btnMoveCopySubmit").toggleClass('disabled', !_mrcMoveCopyAllowed);

    $('#fi_tools').fadeOut('fast');
    $("#divMoveCopySelectFolder").fadeIn('fast', function() {
        $('.fi_tools_confirm').animate( { height: "60px" }, 200 );
    });
    
     

    }

function mrcCancelMoveCopyMultiple() {
    $('.fi_tools_confirm').animate({ height: "40px" }, 200, function() {
        $('#divMoveCopySelectFolder').fadeOut('fast');
        $("#fi_tools").fadeIn('fast');
    });
    
    
    mrcCancelNewFolder();
}

function mrcCancelNewFolder() {
    $('#selectFolderTextBox').hide();
    $('#selectFolderList').show();
    $('#FolderSource').val('FolderList');
    $('#selectFolderTextBox > div > input').val(_defaultNewFolderName);
    clearAddFolderError();
}
var _defaultNewFolderName = 'New folder';

function submitMoveCopyRequest(sender) {
    var ids = mrcGetSelectionIDs();
    $("#hdnMoveCopyIds").val(ids);
    if (ids.length == 0) {
        mrcCancelMoveCopyMultiple();
        return;
    }
    if ($(sender).hasClass('disabled'))   //no folders or no folder selected ignore click
        return;
    
    if ($('#hdnMoveCopyRequestType').val() == "copy")
        OmnitureClick('MYRC|Copy');
    else if ($('#hdnMoveCopyRequestType').val() == "move")
        OmnitureClick('MYRC|Move');

    $.ajax({
        type: 'POST',
        url: '/mrc/movecopyitems',
        data: $('#frmMoveCopySelectFolder').serialize(),
        success: function(data) { submitMoveCopyRequest_Success(data); },
        dataType: 'json'
    });
}

function submitMoveCopyRequest_Success(data) {
    if (data.Succeeded == true) {
        window.location.href = window.location.href;
    } else {
        $(".error-field").removeClass("error-field");
        ent = $("#frmMoveCopySelectFolder");
        if (data.ErrorMessage != null && data.ErrorMessage != "") {
            em = ent.find(("#ErrorMessage"));
            em.html(data.ErrorMessage);
            em.show();
        }

        if (data.Errors != null && data.Errors.length > 0) {
            for (i = 0; i < data.Errors.length; i++) {
                var item = data.Errors[i];
                err = ent.find(("#" + item.FieldName + "Error"));
                err.show();
                err.html(item.ErrorMessage);
                ent.find(("#div" + item.FieldName)).addClass("error-field");
            }
        }
    }
}

// get an array containing the ids of the selected Mrc items (or empty array if none)
function mrcGetSelectionIDs() {
    var result = [];
    $('input[name=chkSavedContent][type=checkbox]:checked').each(function(index) {
        result[index] = $(this).val();
    });
    return result;
}

function mrcGetSelection(itemType) {
    var result = [];
    var resultIndex = 0;
    $('input[name=chkSavedContent][type=checkbox]:checked').each(function(index) {
        var item = $(this).data('checkitem');
        if(!itemType || item.ItemType == itemType)
            result[resultIndex++] = item;
    });
    return result;
}

// Show the delete item confirmation dialog
function mrcDeleteItem(id, deleteLink, step2Click) {
    mrcCancelDeleteMultiple();  // cancel any multi-item delete dialog
    $('#frmDeleteItem > [name=itemIDs]').val(id);
    var left = (Math.round($(deleteLink).parent().position().left)) + "px";
    var top = Math.round($(deleteLink).parent().position().top) + "px";
    if ($("#divDeleteFlyout").is(":visible") == false) {
        $("#divDeleteFlyout").show();
    }
    
    $("#deleteItemConfirmation").show();
    $("#deleteItemConfirmation").css({ "position": "absolute", "left": left, "top": top });
    $("#deleteMultipleConfirmation").hide();

    if ($("#divMoveCopy_MoveContent").is(":visible")) {
        $("divMoveCopy_MoveContent").hide();
    }

    var deleteButton = $("#deleteItemConfirmation > .delete_btn");
    
    deleteButton.unbind(".omniture");
    deleteButton.bind("click.omniture", function() { OmnitureClick(step2Click); });
    OmnitureClick(step2Click);
    $("#frmDeleteItem").data("errors", $(deleteLink).parents(".fi_content"));
}

// close the delete item confirmation dialog
function mrcCancelDelete() {
    $("#deleteItemConfirmation").fadeOut('fast');
}
// close the delete selected items confirmation dialog
function mrcCancelDeleteMultiple() {
    $("#deleteMultipleConfirmation").fadeOut('fast').removeClass("active");
    $('#fi_tools').fadeIn('fast');
}
// after ajax delete succeeds, reload page
function deleteSuccess() {
    location.reload(true);
}

// open the rss confirmation dialog
function RssConfirm(aTag, omnitureClick) {
    OmnitureClick(omnitureClick);

    var $container = $(aTag).parent();  // container into which to add the confirmation
    if ($container.children("div[id^='rssconfirm']").size() > 0)
        return; // don't add more than one confirmation to each search
    
    var href = $(aTag).attr('href');

    var $conf = $('#rssconfirm').clone();
    $conf.attr('id', 'rssconfirm' + Math.random());
    $conf.children('p:last').text(href);
    $container.append($conf);
    $conf.show();
}

// Editing notes

// Show more / show less
function ShowNote(id, full) {
    if(full) {
        $("#notes_full_" + id).show();
        $("#notes_preview_" + id).hide();
    } else {
        $("#notes_full_" + id).hide();
        $("#notes_preview_" + id).show();
    }
}
// switch from label to edit box
function ShowEditNotes(id) {
    var originalText = $("#notes_full_" + id + " > span").text();
    $("#noteeditbox_" + id).val(originalText);
    updateBoundTextArea($("#noteeditbox_" + id));
    $("#divEdit_" + id).slideDown(300);
    $("#notes_preview_" + id).hide();
    $("#notes_full_" + id).hide();
    $("#editlink_" + id).hide();
}
// switch back from edit to label
// notesExpanded specifies whether 'read more' should be open or closed
function HideEditNotes(id, notesExpanded) {
    $("#divEdit_" + id).slideUp(300);
    ShowNote(id, notesExpanded);
    $("#editlink_" + id).show();
}
function SaveEditNotes(id) {
    var noteText = $("#noteeditbox_" + id).val();
    var ajaxData = { itemID: id, notes: noteText };

    $.ajax({
        type: 'POST',
        url: '/mrc/editnotes',
        data: ajaxData,
        success: EditNotesSuccess
    });
}
function EditNotesSuccess(data, resultCode, request) {
    var id = data.Id;
    // set preview, fulltext, and edit link
    var noteText = $("#noteeditbox_" + id).val();
    $("#notes_full_" + id + " > span").text(noteText);
    $("#notes_preview_" + id + " > span").text(data.TruncatedNotes);

    var $editLinkA = $("#editlink_" + id + " > a");
    if (noteText)
        $editLinkA.text("Edit notes");
    else
        $editLinkA.text("Add notes");

    // Show the expanded Read More if saved notes are long enough, and enable the read more link in the preview div
    var $readMoreLink = $("#notes_more_btn_" + id);
    if (data.ShowReadMore)
        $readMoreLink.show();
    else
        $readMoreLink.hide();
    HideEditNotes(id, data.ShowReadMore);
}
function CancelEditNotes(id) {
    HideEditNotes(id, false);
}
function clearAddFolderError() {
    $('#FolderNameError').hide();
    $('#divFolderName, #divSaveListFolderName').removeClass('error-field');
}

function closeDocFlyouts() {
    var $flyouts = $("#saveArticleResultWrapper, #EmailEntityOuter, #citeContent, #exportWrapper, #rssContent, #permalinkContent, #mrcfo, #alertContent");
    
    if($.browser.msie) {
        $flyouts.slideUp();    
    }
    else {
        $flyouts.fadeOut();
    }
    
    $(".selectedTab").css("height", "").removeClass("selectedTab");
}

/**************
* Save article from doc page
***************/
$().ready(function () {
    $("#saveArticleLink, .save .subscriber-tool").click(saveArticle);    
});

function saveArticle() {

    //don't allow save attempt if article has been saved
    var isArticleSaved = $("#saveArticleLink").hasClass("success-check");

    if (!isArticleSaved) {
        var isFlyoutHidden = $("#saveArticleResultWrapper").is(":hidden");

        closeDocFlyouts();

        //if flyout is closed and article unsaved, only then save article
        if (isFlyoutHidden) {

            $("#saveArticleLink").addClass("tools-spinner");

            if (typeof (window['s']) != 'undefined' && typeof (window['s']) != 'string') {
                var endpos = s.prop21.indexOf(' ');
                var docid = s.prop21.substring(0, endpos);
                s.prop7 = docid;
                s.eVar7 = docid;
                OmnitureClick('DocFull|Tools|SaveArticle', 'prop7,eVar7');
            }
            else {
                OmnitureClick('DocFull|Tools|SaveArticle');
            }

            $.ajax({
                type: 'POST',
                url: '/mrc/savearticle',
                data: $('#saveArticleForm').serialize(),
                success: saveArticleSuccess,
                dataType: 'html'
            });
        }
    }

}


function saveArticleSuccess(data) {
    var animationSpeed = 200;
    $("#saveArticleLink").removeClass("tools-spinner");
    $("#saveArticleLink").closest("li").addClass("selectedTab");
    var $trigger = $("#saveArticleTrigger");
    var $result = $("#saveArticleResult");
    var $wrapper = $("#saveArticleResultWrapper");
    $result.html(data);
    
    if (data.toString().indexOf("UpdateSavedEntity") < 0) {
        $("#saveArticleResultHeader").hide();
    }

    if($.browser.msie) {
        $wrapper.slideDown(animationSpeed);
    }
    else {
        $wrapper.fadeIn(animationSpeed);
    }        
   
    $("body").bind("savedEntityUpdated", savedArticleUpdated);
}

function savedArticleUpdated(eventArgument, success) {
    var animationSpeed = 200;
    $("body").unbind("savedEntityUpdated");
    if (success) {
        $("#saveArticleLink").closest("li").removeClass("selectedTab");
        $("#saveArticleLink").addClass("success-check");
        result = $("#saveArticleResultWrapper");
        complete = $("#saveArticleUpdateComplete");
        result.fadeOut(animationSpeed);
        complete.fadeOut(animationSpeed);
        result.animate({}, animationSpeed, function () {
            result.fadeOut(animationSpeed);        
        });
    }
}

/*********************
* Save Article Search
**********************/

function saveArticleSearch() {
    //Hide Other Flyouts
    $("#saveArticleAlertResultWrapper, #saveArticleRSSResultWrapper").fadeOut(50);
    
    //unhide selectbox for IE6
    if ($.browser.msie && $.browser.version < 7) {
        $("#resultsPerPage").css("display", "inline-block");
    }

    s.prop36 = s.prop1;
    s.eVar36 = s.eVar1;
    OmnitureClick('ArticleResults|Tools|SaveSearch', 'prop36,eVar36');
    $("#saveArticleSearchLink").unbind("click");

    $("#saveArticleSearchTrigger").addClass("open");

    $.ajax({
        type: 'POST',
        url: '/mrc/savesearch',
        success: function(data) {
            $("#saveArticleSearchResult").html(data);
            if (data.toString().indexOf("UpdateSavedEntity") < 0) {
                $("#saveArticleSearchResultHeader").hide();
                $("#saveArticleSearchResult").addClass("error-text");
            }
            
            if ($.browser.msie) {
                $("#saveArticleSearchResultWrapper").slideToggle(100);
            } else {
                $("#saveArticleSearchResultWrapper").animate({
                    opacity: 'toggle'
                },100);
            }

            $("body").bind("savedEntityUpdated", savedArticleSearchUpdated);
        },
        dataType: 'html'
    });
}

function savedArticleSearchUpdated(eventArgument, success) {
    $("body").unbind("savedEntityUpdated");
    if (success) {
        trigger = $("#saveArticleSearchTrigger, .button-save-search-outer");
        result = $("#saveArticleSearchResultWrapper");
        complete = $("#search-saved");
        complete.show();
        trigger.hide();

        if ($.browser.msie) {
            result.slideUp(250, function() {
                complete.fadeTo("slow", 1);
            });
        } else {
            result.fadeOut(250, function() {
                complete.fadeTo("slow", 1);
            });
        }
    }
}

function closeSaveArtcileSearchFlyout() {
    $('#saveArticleResultWrapper').hide();
    $(".selectedTab").removeClass("selectedTab");
}


/**********************
* Saved Entity Updated
***********************/

function updateSavedEntity(sender) {
    if ($(sender).hasClass('disabled'))   //no folders or no folder selected ignore click
        return;
    checkAndExecuteFunction('omnitureUpdateSavedEntity');
    // Hack to make this work. Should be reworked to generalize this again, if possible.
    var dataString = stripNotesHtmlSerialize($('#UpdateSavedEntityForm'));

    if ($("#FolderName").val() != null && $("#FolderName").val() != "undefined" && $("#FolderName").val() != "") {
        if (dataString == null || dataString == "" || dataString == "undefined") {
            dataString = "EntitiesToMove=" + $('#EntitiesToMove').val();
        }
        dataString += '&FolderName=' + $("#FolderName").val();
        
    }
    
    $.ajax({
        type: 'POST',
        url: '/mrc/updatesavedentity',
        data: dataString,
        success: updateSavedEntity_Complete,
        dataType: 'json'
    });
}

function updateSavedEntity_Complete(data) {
    if (data.Succeeded == true) {
        savedEntityUpdated(true);
    }
    else {
        $(".error-field").removeClass("error-field");
        ent = $("#UpdateSavedEntity");
        if (data.ErrorMessage != null && data.ErrorMessage != "") {
            savedEntityUpdated(false);
            em = ent.find(("#ErrorMessage"));
            em.html(data.ErrorMessage);
            em.show();
        }

        if (data.Errors != null && data.Errors.length > 0) {
            for (i = 0; i < data.Errors.length; i++) {
                var item = data.Errors[i];
                err = ent.find(("#" + item.FieldName + "Error"));
                err.show();
                err.html(item.ErrorMessage);
                ent.find(("#div" + item.FieldName)).addClass("error-field");
            }
        }
    }
}

function savedEntityUpdated(success) {
    $("body").trigger("savedEntityUpdated", [success]);
}

/***************
* Create Folder
****************/

// Create a new folder link (from SelectFolder.ascx)
function createFolderLinkClick(source) {
    $('#selectFolderTextBox input:text').val('New folder');
    $('#selectFolderList').fadeOut('fast', function() { 
        $('#selectFolderTextBox').fadeIn('fast', function() { $('#selectFolderTextBox #FolderName').select(); });
    });

    $('#FolderSource').val('FolderName');
    checkAndExecuteFunction('onCreateFolderLinkClick', source);    
}

// Cancel New Folder link (from SelectFolder.ascx)
function selectFolderCancelNewClick(source) {
    $('#selectFolderTextBox').fadeOut('fast', function() { 
        $('#selectFolderList').fadeIn('fast');
    });
    
    clearAddFolderError();

    $('#FolderSource').val('FolderList');
    checkAndExecuteFunction('onCancelNewFolderClick', source);
}

function createFolder() {
    OmnitureClick('MYRC|CreateNewFolder');
    $.ajax({
        type: 'POST',
        url: '/mrc/createfolder',
        data: $('#frmCreateFolderForm').serialize(),
        success: function(data) { createFolder_Success(data); },
        dataType: 'json'
    });
}

function createFolder_Success(data) {
    if (data.Succeeded == true) {
        window.location.href = window.location.href;
    } else {
        $("#frmCreateFolderForm > input[type='text']").addClass('error');
        $("#CreateFolderError").html(data.ErrorMessage).show();
        $("#FolderName").focus();
    }
}

/***************
* Rename Folder
****************/
function showrenameFolder(folderId) {
    $('#fname_' + folderId).fadeOut('fast', function() { $('#divRenameFolderForm' + folderId).slideToggle('fast', function() { $('#frmRenameFolderForm' + folderId + ' input#FolderName').select(); }); });
}

function renameFolder(folderId) {
    $.ajax({
        type: 'POST',
        url: '/mrc/renamefolder',
        data: $('#frmRenameFolderForm' + folderId).serialize(),
        success: function(data) { renameFolder_Success(data); },
        dataType: 'json'
    });
}

function renameFolder_Success(data) {
    if (data.Succeeded == true) {
        window.location.reload();
    } else {
        if (data.Id == "0")
            alert(data.ErrorMessage);
        else
            $("#frmRenameFolderForm" + data.Id + " > input[type='text']").addClass('error');
            $("#RenameFolderError" + data.Id).html(data.ErrorMessage).show();
    }
}

/***************
* Delete Folder
****************/

var deleteFolderId;
function deleteFolder(folderId) {
    $('#fname_' + folderId).fadeOut('fast', function() { $('#divDeleteFolder' + folderId).slideToggle('fast');});
}

function deleteFolder_Confirmed(folderId) {
    $.ajax({
        type: 'POST',
        url: '/mrc/deletefolder',
        data: { FolderId:folderId },
        success: function(data) { deleteFolder_Success(data); },
        dataType: 'json'
    });
}

function deleteFolder_Success(data) {
    if (data.Succeeded == true) {
        document.location.href = "/mrc/saved";
    } else {
        $('#deletefolder_error').html('Error: ' + data.ErrorMessage).fadeIn('fast');
    }
}

function cancelDeleteFolder(folderId) {
    $('#divDeleteFolder' + folderId).slideToggle('fast', function() { $('#fname_' + folderId).fadeIn('fast'); });
}


/* roll animation */
jQuery.fn.rollDown = function(duration, fadeCallback, slideCallback) {
    this.each(function() {
        if ($(this).queue().length > 0 || $(this).css("display") == "none") {
            $(this).css("opacity", 0).slideDown(duration, slideCallback).fadeTo(duration, 1, fadeCallback);
        }
    });
    return this;
}

jQuery.fn.rollUp = function(duration, slideCallback, fadeCallback) {
    this.each(function() {
        if ($(this).queue().length > 0 || $(this).css("display") != "none") {
            $(this).fadeTo(duration, 0, fadeCallback).slideUp(duration, slideCallback);
        }
    });
    return this;
}

jQuery.fn.rollSwap = function(duration, callback, showElement) {
    var showFn = function() {
        return showElement.rollDown(duration, callback);
    };

    if ((this.is(":hidden") || this.length == 0)) {
        this.hide(); // in case it's hidden because of its parent.
        return showFn(); //just show the thing
    }
    else {
        return this.rollUp(duration, null, showFn);
    }
}
/* end roll animation */

// mrc edit

function mrcItemEdit(idParam, button, settingsParam) {
    var settings =
    {
        animationSpeed : "fast"
    };

    $.extend(settings, settingsParam);

    if (settings.omnitureClick)
        OmnitureClick(settings.omnitureClick);
    var view = $(button).parents(".viewmrcitem");
    var container = $(button).parents(".fi_content");
    
    view.rollUp(settings.animationSpeed, null, function() {
        $.ajax({
            type: 'POST',
            url: settings.url,
            data: { id: idParam },
            success: function(data, msg, req) {
                if (mrcAjaxSuccess(data, msg, req, container)) {
                    var editContainer = view.siblings(".editmrcitem");
                    editContainer.html(data);
                    mrcSetUpItemEditInterface(editContainer);
                    editContainer.rollDown(settings.animationSpeed);
                }
                else {
                    view.rollDown(settings.animationSpeed);
                }
            },
            error: function(req, msg, ex) {
                mrcAjaxFailure(req, msg, ex, container);
                view.rollDown(settings.animationSpeed);
            }
        });
    });
    return false;
}

function mrcSetUpItemEditInterface(editContainer)
{
    setUpDateFilter(editContainer.find('.datefilter'));
    setUpPublicationFilter(editContainer.find('.pubFilterContainer'));
    bindTextAreaMaxLength(editContainer.find('textarea[maxlength]'));
}

function mrcItemNew(settingsParam) {
    if (mrcHasUnsavedNewItem()) {
        return false;
    }
    
    var settings =
    {
        animationSpeed: "fast"
    };

    $.extend(settings, settingsParam);

    if (settings.omnitureClick)
        OmnitureClick(settings.omnitureClick);

    $.ajax({
        type: 'POST',
        url: settings.url,
        success: function(data, msg, req) {
                if (mrcAjaxSuccess(data, msg, req, $("#mrc_content"))) 
                {
                    var addNewItem = function() {
                        var liElement = $(data).hide();
                        $("#contentlist").prepend(liElement);
                        mrcSetUpItemEditInterface(liElement);
                        liElement.rollDown(settings.animationSpeed);
                    };
                    var noContentMessage = $("#nocontentmessage:visible");
                    if (noContentMessage.length > 0)
                        noContentMessage.rollSwap("fast", addNewItem, $("#contentcontainer"));
                    else
                        addNewItem();
                }
        },
        error: function(req, msg, ex) { mrcAjaxFailure(req, msg, ex, $("#mrc_content")) }
    });
    return false;
}

function mrcItemUpdate(form, settingsParam) {
    var settings =
    {
        animationSpeed: "fast"
    };

    $.extend(settings, settingsParam);

    if (!doValidation(form, settings)) {
        $('.save_btn').removeAttr('disabled');
        return false;
    }
        
    if (settings.omnitureClick)
        OmnitureClick(settings.omnitureClick, settings.extraVars);
        
    var editBox = $(form).parents(".editmrcitem");
    var viewBox = editBox.siblings(".viewmrcitem");
    
    var container = $(form).parents(".fi_content");

    editBox.rollUp(settings.animationSpeed, null, function() {
        $.ajax({
            type: 'POST',
            url: settings.url,
            data: stripNotesHtmlSerialize(form),
            success: function(data, msg, req) {
                if (mrcAjaxSuccess(data, msg, req, container)) {
                    viewBox.html(data);
                    viewBox.rollDown(settings.animationSpeed);

                    // Show the expanded notes
                    var $notesPreview = viewBox.find(".fi_notes_preview");
                    var $notesFull = viewBox.find(".fi_notes_full");

                    //hide the show less button, if notes are short
                    if ($notesPreview.find("span").text() == $notesFull.find("span").text()) {
                        $notesFull.find(".notes_less_btn").hide();
                    }
                    
                    $notesPreview.hide();
                    $notesFull.show();

                    if (!mrcHasUnsavedNewItem())
                        setAlertButton(false);
                }
                else {
                    editBox.rollDown(settings.animationSpeed);
                }
            },
            error: function(req, msg, ex) {
                $('.save_btn').removeAttr('disabled');
                mrcAjaxFailure(req, msg, ex, container);
                editBox.rollDown(settings.animationSpeed);
            }
        });
    });

    return false;
}

function stripNotesHtmlSerialize(form) {
    var noteField = $(form).find(".EntityDataNote");
    noteField.val(stripHtml(noteField.val()));
    return $(form).serialize();
}

function stripHtml(string) {
    if (string)
        return string.replace(/<.*?>/g, "");
    return string;
}

function mrcHasUnsavedNewItem()
{
    return $(".newalertunsaved").length > 0;
}

function replaceDigitInId(element, newid)
{
    element.attr("id", element.attr("id").replace(/\d+/, newid));
}

function doValidation(form, settingsParam) {

    var settings =
    {
        queryOrPubNameRequired: false,
        queryRequired: true
    };

    $.extend(settings, settingsParam);
    var form = $(form);

    var nameIsBlank = $.trim(form.find(".nameinput").val()).length == 0;
    var queryIsBlank = $.trim(form.find(".queryinput").val()).length == 0;
    var queryOrPubNameAreBlank = queryIsBlank && ($.trim(form.find(".hdnPublicationFilterIds").val()).length == 0 || form.find(".articlefiltertype").val() != "publication");

    if (nameIsBlank) {
        form.find(".nameerror").show();
        form.find(".namebox").addClass("error-field");
    }
    else {
        form.find(".nameerror").hide();
        form.find(".namebox").removeClass("error-field");
    }
    var showQueryMessage = (settings.queryRequired && queryIsBlank)
        || (settings.queryOrPubNameRequired && queryOrPubNameAreBlank);
    if (showQueryMessage) {
        form.find(".queryerror").show();
        form.find(".querybox").addClass("error-field");
        
        if (settings.queryOrPubNameRequired)
            form.find(".pubnamebox").addClass("error-field");        
    }
    else {
        form.find(".queryerror").hide();
        form.find(".querybox").removeClass("error-field");
        form.find(".pubnamebox").removeClass("error-field");
    }

    if (nameIsBlank || showQueryMessage) {
        var $errorSummary = form.find(".error-summary");
        $errorSummary.rollDown("fast");

        //scroll to error message if not visible
        var documentScrollTop = $(document).scrollTop(),
        errorDivOffset = $errorSummary.offset().top,
        viewportHeight = $(window).height(),
        minTop = documentScrollTop,
        maxTop = documentScrollTop + viewportHeight;

            if (!(errorDivOffset > minTop && errorDivOffset < maxTop)) {
                window.scrollTo(0, errorDivOffset - 10);
            }
        
        return false;
    }

    form.find(".error-summary").rollUp("fast");
    return true;
}

function cancelEdit(clicked) {
    var editDiv = $(clicked).parents(".editmrcitem");
    var viewDiv = editDiv.siblings(".viewmrcitem");
    editDiv.rollSwap("fast", null, viewDiv);
}

function cancelNew(clicked) {
    var newLi = $(clicked).parents(".fi_content");
    newLi.remove();
    if ($("#contentlist").children().length == 0) {
        $("#contentcontainer").rollSwap("fast", null, $("#nocontentmessage"));
    }
    
}

function mrcAjaxSuccess(data, msg, req, errorContainer) {
    if (typeof data == 'string' || data.Succeeded) {
        $(errorContainer).children(".ajax_error").rollUp('fast');
        return true;
    } else {
        mrcAjaxFailure(req, data.ErrorMessage, null, errorContainer);
        return false;
    }
}

function mrcAjaxFailure(req, msg, ex, errorContainer) {
    var userMessageId;
    if (msg == "LoggedOut")
        userMessageId = "error_session";
    else
        userMessageId = "error_misc";

    var jqContainer = $(errorContainer);
    var shower = jqContainer.children("." + userMessageId);
    jqContainer.children(".ajaxerror:not(." + userMessageId + ")").rollSwap("fast", null, shower);
}

// end mrc edit

/* edit search */

function editSearch(id, button){
    return mrcItemEdit(id, button, { 
        omnitureClick : "MYRC|EditStep1",
        url: "/mrc/editsavedsearch"
    });
}

function editCompanyList(id, button) {
    return mrcItemEdit(id, button, {
        omnitureClick: "MYRC|EditCompanyListStep1",
        url: "/mrc/editsavedlist"
    });
}


function updateSearch(form) {
    return mrcItemUpdate(form, {
        omnitureClick: "MYRC|EditStep2",
        extraVars: "",
        url: "/mrc/updatesavedsearch"
    });
}

function updateCompanyList(form) {
    return mrcItemUpdate(form, {
        omnitureClick: "MYRC|EditCompanyListStep2",
        extraVars: "",
        queryRequired: false,
        url: "/mrc/updatesavedlist"
    });
}

/* end edit search */

/* edit alert */

function editAlert(id, button) {
    return mrcItemEdit(id, button, {
        //omnitureClick: "MYRC|EditStep1",
        url: "/mrc/editalert"
    });
}

function updateAlert(form, isNew) {
    s.prop37 = $('input[name=Name]').val() + '|' + $('input[name=SearchQuery]').val();
    s.eVar37 = s.prop37;

    return mrcItemUpdate(form, {
        omnitureClick: isNew ? "SaveAlert" : "MYRC|EditAlert",
        extraVars: "prop37,eVar37",
        url: "/mrc/updatealert",
        queryOrPubNameRequired: true,
        queryRequired: false
    });
}
function setAlertButton(disabled){
    var button = $("#new_alert_btn");
    if (disabled)
        button.attr('disabled', 'disabled');
    else
        button.removeAttr('disabled');
        
    button.toggleClass("alert_disabled", disabled)
            .toggleClass("alert_enabled", !disabled);
}

function newAlert() {
    setAlertButton(true);
    OmnitureClick('AddAlert');
    
    return mrcItemNew({
        url: "/mrc/editalert"
    });
}

function cancelNewAlert(button) {
    setAlertButton(false);
    return cancelNew(button);
}

function toggleAlertActivation(idParam, clicked) {
    var container = $(clicked).parents(".fi_content");
    $.ajax({
        type: 'POST',
        url: '/mrc/togglealertactivation',
        data: { id: idParam },
        success: function(data, msg, req) {
            if (mrcAjaxSuccess(data, msg, req, container)) {
                OmnitureClick(data.Enabled ? "MYRC|ActivateAlert" : "MYRC|SuspendAlert");
                $(clicked).html(data.Enabled ? "Suspend" : "Activate");
                $("#enabledtext-" + idParam)
                    .toggleClass("alert_active", data.Enabled)
                    .toggleClass("alert_susp", !data.Enabled)
                    .html(data.Enabled ? "Active" : "Suspended");
                if (data.Enabled)
                    $("#deliverytext-" + idParam).show();
                else
                    $("#deliverytext-" + idParam).hide();
            }
        },
        error: function(req, msg, ex) { mrcAjaxFailure(req, msg, ex, container); }
    });
}

function setAlertFrequencyDayMenu(enabled, radio) {
    if (enabled)
        $(radio).siblings("select").removeAttr("disabled");
    else
        $(radio).siblings("select").attr("disabled", "disabled"); 
}

/* end edit alert */

/* filter elements */
function filterElements() {
}

filterElements.prototype.getEncapsulated = function(container, selector) {
    var name = selector.replace(".", "");
    if (typeof this[name] == 'undefined')
        this[name] = container.find(selector);
    return this[name];
}

/* end filter elements */

/* date filter (search page and MRC) */

function dateFilterElements(container){
    this.container = container;
}
dateFilterElements.prototype = new filterElements();

dateFilterElements.prototype.getModeMenu = function() {
    return this.getEncapsulated(this.container, ".dateFilterMode");
}
dateFilterElements.prototype.getTextLabels = function() {
    return this.getEncapsulated(this.container, ".datefiltertextlabel");
}
dateFilterElements.prototype.getDateContainers = function() {
    return this.getEncapsulated(this.container, ".datefilterdatecontainer");
}
dateFilterElements.prototype.getDate1 = function() {
    return this.getEncapsulated(this.container, ".datefilterdate1");
}
dateFilterElements.prototype.getDate2 = function() {
    return this.getEncapsulated(this.container, ".datefilterdate2");
}
dateFilterElements.prototype.getFromDate = function() {
    return this.getEncapsulated(this.container, ".datefilterfromdate");
}
dateFilterElements.prototype.getToDate = function() {
    return this.getEncapsulated(this.container, ".datefiltertodate");
}
dateFilterElements.prototype.getPickerInputs = function() {
    return this.getEncapsulated(this.container, ".datefilterdatepicker");
}


function dateFilter(container, duration) {
    this.elements = new dateFilterElements(container);
    this.duration = typeof duration === "undefined" ? "fast" : duration;

    this.elements.getPickerInputs().datepicker({
        changeMonth: true,
        changeYear: true,
        duration: this.duration,
        showOn: 'button',
        buttonImage: '/capcontent/img/calendar.gif',
        buttonImageOnly: true,
        buttonText: 'Pick date',
        showAnim: 'slideDown',
        hideAnim: 'slideUp',
        yearRange: '1900:c',
        onSelect: dateFilterDateSelected
    });
}

dateFilter.prototype.showRefine = function() {
    $('.submit').attr('disabled', false).addClass('refine'); // display 'Refine' button 
    $('.submit-text').addClass('hidden'); // hide 'Please select options above'
    $('.reset').addClass('on'); // reposition 'Reset this filter'
}

dateFilterDateSelected = function() {
    return getDateFilter(this).showRefine(true);
}

//mrc doesn't (shouldn't!) use this, it assumes there is only one dateFilterMode menu
dateFilter.prototype.clearFilters = function() {

    //Select "All Dates" and fire the event handler
    var dateFilterMode = this.elements.getModeMenu();
    dateFilterMode.val("All");
    dateFilterMode.trigger('onchange');

    this.showRefine();
}

dateFilter.prototype.modeSet = function(setDefaults) {
    var theValue = this.elements.getModeMenu().val();

    if (theValue == null || theValue == 'undefined')
        return;

    if (theValue != "All")
        $('.dateFilterClearSettings').css('visibility', 'visible');
    else
        $('.dateFilterClearSettings').css('visibility', 'hidden');

    if (theValue == "All" || theValue.match(/^Past/i)) {
        this.elements.getTextLabels().rollUp(this.duration);  //hide from & to labels
        this.elements.getDateContainers().rollUp(this.duration); //hide from & to date pickers
        this.elements.getDate1().val('');
        this.elements.getDate2().val('');
    }
    else if (theValue == "Before" || theValue == "After") {
        this.elements.getTextLabels().rollUp(this.duration); //hide from & to labels
        this.elements.getFromDate().rollDown(this.duration); //show from date picker
        this.elements.getToDate().rollUp(this.duration); //hide to date picker

        if (setDefaults == true) {
            var msInDay = 1 * 24 * 60 * 60 * 1000;
            var todaysDate = new Date();
            var yesterdaysDate = new Date(todaysDate.getTime() - msInDay);

            if (theValue == "Before")
                this.elements.getDate1().val(this.getMMDDYYYY(todaysDate, "/"));
            else
                this.elements.getDate1().val(this.getMMDDYYYY(yesterdaysDate, "/"));

            this.elements.getDate2().val('');
        }
    }
    else if (theValue == "Range") {
        this.elements.getDateContainers().rollDown(this.duration); //show from & to picker
        this.elements.getTextLabels().rollDown(this.duration); //show from & to labels
        if (setDefaults == true) {
            this.elements.getDate1().val('mm/dd/yyyy');
            this.elements.getDate2().val('mm/dd/yyyy');
        }
    }

    if (setDefaults)
        this.showRefine();
}

dateFilter.prototype.isValidDate = function(d) {
    if (Object.prototype.toString.call(d) === "[object Date]") {
        // it is a date object, see if it has valid values
        if (isNaN(d.getTime()))
            return false;
        else
            return true;
    }
    return false;
}

dateFilter.prototype.validate = function() {
    var theValue = this.elements.getModeMenu().val();

    if (theValue == null || theValue == 'undefined')
        return true;

    var dateFromVal = this.elements.getDate1().val();
    var dateToVal = this.elements.getDate1().val();
    var dateFromDate = new Date(dateFromVal);
    var dateToDate = new Date(dateToVal);

    if ((theValue == "Before") || (theValue == "After")) {
        if ((dateFromVal == null) || (dateFromVal == 'undefined') || (dateFromVal == "")) {
            alert('Please enter a date.');
            return false;
        }
        if (this.isValidDate(dateFromDate) == false) {
            alert('Please enter a valid date.');
            return false;
        }
    }
    else if (theValue == "Range") {
        if ((dateFromVal == null) || (dateFromVal == 'undefined') || (dateFromVal == "")) {
            alert('Please enter a "from" date.');
            return false;
        }
        if (this.isValidDate(dateFromDate) == false) {
            alert('Please enter a valid "from" date.');
            return false;
        }

        if ((dateToVal == null) || (dateToVal == 'undefined') || (dateToVal == "")) {
            alert('Please enter a "to" date.');
            return false;
        }
        if (this.isValidDate(dateToDate) == false) {
            alert('Please enter a valid "to" date.');
            return false;
        }
    }
    return true;
}

dateFilter.prototype.getMMDDYYYY = function(dateValue, delim) {
    if (this.isValidDate(dateValue) == false)
        return "";

    return (dateValue.getMonth() + 1) + delim + dateValue.getDate() + delim + dateValue.getFullYear();
}

$(document).ready(function() {
    setUpDateFilter($(".datefilter"));
});

function setUpDateFilter(filters) {
    filters.each(function(index, element) {
        $(this).data("DF", new dateFilter($(this), "fast"));
    });
}

function getDateFilter(sender) {
    return $(sender).parents(".datefilter").data("DF");
}

/* end date filter */



/* pub filter */
function publicationFilterElements(container) {
    this.container = container;
}
publicationFilterElements.prototype = new filterElements();

publicationFilterElements.prototype.getServiceUrl = function() {
    return this.getEncapsulated(this.container, ".hdnServiceUrl");
}
publicationFilterElements.prototype.getFlyoutList = function() {
    return this.getEncapsulated(this.container, ".publicationFlyoutList");
}
publicationFilterElements.prototype.getFlyoutContainer = function() {
    return this.getEncapsulated(this.container, ".matchingpubcontainer");
}
publicationFilterElements.prototype.getFlyoutCaption = function() {
    return this.getEncapsulated(this.container, ".pubfilterseebelow");
}
publicationFilterElements.prototype.getSelectedCaption = function() {
    return this.getEncapsulated(this.container, ".nopubscaption");
}
publicationFilterElements.prototype.getSelectedFlyoutList = function() {
    return this.getEncapsulated(this.container, ".selectedPublicationsFlyoutList");
}
publicationFilterElements.prototype.getSelectedFlyoutContainer = function() {
    return this.getEncapsulated(this.container, ".selectedPublications");
}
publicationFilterElements.prototype.getPubFilterHiddenField = function() {
    return this.getEncapsulated(this.container, ".hdnPublicationFilterIds");
}
publicationFilterElements.prototype.getMaxMessage = function() {
    return this.getEncapsulated(this.container, ".pubFilterMaxMessage");
}
publicationFilterElements.prototype.getTypeAheadBox = function() {
    return this.getEncapsulated(this.container, ".publication2");
}
publicationFilterElements.prototype.getSourceFilterContainer = function() {
    return this.getEncapsulated(this.container, ".articleFilterSourceType");
}
publicationFilterElements.prototype.getPublicationFilterContainer = function() {
    return this.getEncapsulated(this.container, ".articleFilterPublication");
}

//ctor
function publicationFilter(container) {
    this.typeAheadChars = 3;
    this.typeAheadMs = 300;
    this.timerEvent;
    
    this.animationSpeed = "fast";
    
    this.separator = "|";

    this.elements = new publicationFilterElements(container);

    var hidden = container.find('.hdnInitialPubs');
    var pubs = $.parseJSON(hidden.val());

    for (var i in pubs) {
        this.addPublicationToTheSelectedList(null, pubs[i].id, pubs[i].name, true);
    }
}

publicationFilter.prototype.typeAheadChanged = function(item, overrideTimeout) {
    if (!item)
        item = this.elements.getTypeAheadBox();

    //If the length of item is >= min length
    var value = $(item).val();
    if (value.length >= this.typeAheadChars) {
        this.pendingSearchTerm = value;
        clearTimeout(this.timerEvent);
        this.elements.getPublicationFilterContainer().addClass("pendingSearch");
        if (overrideTimeout)
            this.typeAheadRequest();
        else
            this.timerEvent = setTimeout("getPubFilter($('.pendingSearch').first()).typeAheadRequest();", this.typeAheadMs);
    }
    else {
        this.elements.getFlyoutContainer(item).rollUp(this.animationSpeed);
        this.elements.getFlyoutList(item).empty();
        this.elements.getFlyoutCaption(item).fadeOut(this.animationSpeed);
    }
}

publicationFilter.prototype.pubFilterTypeChanged = function(sender) {
    var select = $(sender);
    var filterType = $(select).val();
    if (filterType == 'allPubs') {
        this.elements.getPublicationFilterContainer().rollUp(this.animationSpeed);
        this.elements.getSourceFilterContainer().rollUp(this.animationSpeed);
    }
    else if (filterType == 'publication') {
        this.elements.getSourceFilterContainer().rollSwap("fast", null, this.elements.getPublicationFilterContainer());
    }
    else if (filterType == 'source') {
        this.elements.getPublicationFilterContainer().rollSwap("fast", null, this.elements.getSourceFilterContainer());
    }
}

publicationFilter.prototype.setAllSources = function(value) {
    this.elements.getSourceFilterContainer().find("input[type='checkbox']").attr('checked', value);
}

publicationFilter.prototype.typeAheadRequest = function() {
    this.elements.getPublicationFilterContainer().removeClass("pendingSearch");
    $.ajax({
        url: this.elements.getServiceUrl().val(),
        dataType: "jsonp",
        jsonp: 'callbackfunction',
        jsonpCallback: 'callbackPubs',
        data: {
            startsWith: this.pendingSearchTerm,
            howMany: 30
        },
        success: function(data) {
            this.pubFilter.updatePublicationLists(data);
            this.pubFilter.elements.getFlyoutContainer().rollDown(this.animationSpeed);
            this.pubFilter.elements.getFlyoutCaption().fadeIn(this.animationSpeed);
        },
        pubFilter: this
        });
    }

publicationFilter.prototype.updatePublicationLists = function(data) {
    var flyoutList = this.elements.getFlyoutList();    

    //Show the flyout and position it properly
    flyoutList.empty();
    //Put the new publication list into the flyout
    if (data != null) {
        var hiddenFieldVal = this.elements.getPubFilterHiddenField().val();
        for (var i = 0; i < data.Items.length; i++) {
            if (!this.valueIsInList(data.Items[i].PublicationId, hiddenFieldVal))
                flyoutList.append(this.getPublicationListItem(data.Items[i].PublicationId, data.Items[i].PublicationName, true));
        }
    }
    this.showOrHideAddLinks();
}

publicationFilter.prototype.getPublicationListItem = function(pubId, pubName, add) {
    return $("<li value='" + pubId + "'><div>" + pubName + "</div>" + this.getListItemLink(add) + "</li>");
}
publicationFilter.prototype.getListItemLink = function(add){
    if (add)
        return "<a href='javascript:;' onclick='getPubFilter(this).addPublicationToTheSelectedList(this);'>Add</a>"; 
    return "<a href='javascript:;' onclick='getPubFilter(this).removeSelectedFilterPublication(this);'>Remove</a>";
}

publicationFilter.prototype.valueIsInList = function(value, list) {
    return list.indexOf(value + this.separator) >= 0;
}

publicationFilter.prototype.addTheValueToList = function(value, list, seperator) {
    var newList = list;

    if (newList.indexOf(value + this.separator) == -1)
        newList = list + value + this.separator;

    return newList;
}

publicationFilter.prototype.removeTheValueFromList = function(value, list) {

    var list1 = list2 = list;
    do {
        list2 = list1
        list1 = list2.replace(value + this.separator, '')
    }
    while (list1 != list2)

    return list1;
}

publicationFilter.prototype.showOrHideAddLinks = function(showImmediate) {
    var animationSpeed = showImmediate ? 0 : this.animationSpeed;

    //Get the number of pubs in the selected list
    var numPublications = this.elements.getSelectedFlyoutList().children('li').length;
    var maxMessage = this.elements.getMaxMessage();

    //We've reached the max number of publications.
    if (numPublications >= 5) {
        this.elements.getFlyoutList().find('a').fadeOut(animationSpeed).hide();
        maxMessage.html('maximum reached');
        maxMessage.css('color', 'red');
    }
    else {
        this.elements.getFlyoutList().find('a').fadeIn(animationSpeed).show();
        maxMessage.html('maximum of 5');
        maxMessage.css('color', 'black');
    }

    if (numPublications > 0) {
        this.elements.getSelectedCaption().rollSwap(animationSpeed, null, this.elements.getSelectedFlyoutContainer());
    }
    else {
        this.elements.getSelectedFlyoutContainer().rollSwap(animationSpeed, null, this.elements.getSelectedCaption());
    }
}

publicationFilter.prototype.addPublicationToTheSelectedList = function(addHrefClicked, pubId, pubName, showImmediate) {
    if (addHrefClicked) {
        var li = $(addHrefClicked).parent();
        pubId = li.attr("value");
    }

    //Get the hidden list of IDs
    var hiddenField = this.elements.getPubFilterHiddenField();
    list = hiddenField.val();

    //Keep from inserting same item twice.
    if (this.valueIsInList(pubId, list))
        return false;

    //Make sure we don't have 5 or more value already
    var strArray = list.split(this.separator);
    var numPublications = strArray.length - 1;
    if (numPublications > 4)
        return false;

    //Add the value to the hidden list of IDs
    hiddenField.val(this.addTheValueToList(pubId, list));

    //Remove the element from the matching list
    if (li) {
        li.detach();
        li.children("a").remove();
        var removeLink = $(this.getListItemLink(false));
        li.append(removeLink);
    }
    else {
        li = this.getPublicationListItem(pubId, pubName, false);
    }

    //Add the new publication to the selected list
    this.elements.getSelectedFlyoutList().append(li);

    this.showOrHideAddLinks(showImmediate);

    return false;
}

publicationFilter.prototype.removeSelectedFilterPublication = function(removeAnchor) {
    var hiddenField = this.elements.getPubFilterHiddenField();
    var li = $(removeAnchor).parent();

    //Remove the publication ID out of the hidden list
    var oldList = hiddenField.val();
    var newList = this.removeTheValueFromList(li.attr("value"), oldList, '|');
    hiddenField.val(newList);

    li.remove();

    this.showOrHideAddLinks(); //this will only be called by typeaheadchanged if it is in fact changed. we want it to be called regardless.
    this.typeAheadChanged();
    
}   

/* end pub filter */

function setUpPublicationFilter(filters) {
    filters.each(function(index, element) {
        $(this).data("PF", new publicationFilter($(this)));
    });
}
function getPubFilter(element) {
    return $(element).parents(".pubFilterContainer").data("PF");
}

/*************************
/ Alert settings
/************************/

function openArticleAlert() {

    //show flyout
    if ($.browser.msie) {
        $("div#saveArticleAlertResultWrapper").slideDown(150,
            function() {
                $("#SaveAlertName").select();
            }
        );
    } else {
        $("div#saveArticleAlertResultWrapper").fadeIn(150,
            function() {
                $("#SaveAlertName").select();
            }
        );
    }

    //hide error messaging
    $("div#divSaveAlertName").removeClass("error-field");
    $("#AlertNameError, div#divSaveAlertErrors, div#divSaveAlertErrors_LoggedOut").hide();  
    
    //Hide Other Flyouts
    $("div#saveArticleSearchResultWrapper, div#saveArticleRSSResultWrapper").fadeOut(50);

    $("#saveArticleAlertTrigger").addClass("open");
    
    //unhide selectbox for IE6
    if ($.browser.msie && $.browser.version < 7) {
        $("#resultsPerPage").css("display", "inline-block");
    }

    OmnitureClick('AddAlert');
}
function saveArticleAlert(enableWhenDone) {
    var sourceType; // not really the sourcetype. This is the terminology in use at the time.
    var searchName = ($("#SaveAlertName").val() == "") ? searchName = "" : searchName = $("#SaveAlertName").val();            

    switch (pageName) {
        case "CompanyDetail":
        case "IndustryProfile":
            sourceType = $("#Query").val();
            break;
        case "Article Search Results":
            sourceType = $("#search_field_inp").val();
            break;
        case "BackIssue":
        case "PubPage":
        case "Site Index: Article List":
        case "Site Index: Pub Home Page":
            sourceType = $("#PublicationName").val();
            break;        
        default:
            sourceType = "";
            searchName = "";                                            
    }
    
    s.prop37 = searchName+ '|' + sourceType;
    s.eVar37 = s.prop37;
    OmnitureClick('SaveAlert', "prop37,eVar37"); 

    // Validate form
    if ($('#SaveAlertName').val() == "") {
        $("#AlertNameError").show();
        $("#divSaveAlertName").addClass("error-field");
        if (enableWhenDone != null)
            enableWhenDone.disabled = false;
        return false;
    }
    else {
        $("#AlertNameError").hide();
    }

    // Get frequency
    var frequency = "Daily";
    if ($('#saveAlertFrequencyWeekly').is(':checked')) {
        frequency = $('#SaveAlertFrequency').val();
    }

    // Call to save
    $.ajax({
        type: 'POST',
        url: '/mrc/SaveAlert',
        data: {
            PublicationId: $("#PublicationId").val(),
            PublicationName: $("#PublicationName").val(),
            CompanyId: $("#CompanyId").val(),
            IndustryId: $("#IndustryId").val(),
            Query: $("#Query").val(),
            Name: $("#SaveAlertName").val(),
            Note: stripHtml($("#SaveAlertNotes").val()),
            Frequency: frequency
        },
        success: function(data, textStatus, xmlHttpRequest) { saveArticleAlertSuccess(data, textStatus, xmlHttpRequest); if (enableWhenDone!=null) enableWhenDone.disabled = false; },
        error: function(data, textStatus, xmlHttpRequest) { saveArticleAlertError(data, textStatus, xmlHttpRequest); if (enableWhenDone != null) enableWhenDone.disabled = false; }, 
        dataType: 'json'
    });

        

}
function saveArticleAlertSuccess(data, textStatus, xmlHttpRequest) {

    if (data.Succeeded) {
        // Change button img?
        $("#alert-saved").fadeIn(150);
        $(".button-save-alert-outer").css("visibility","hidden");

        // Hide form
        if ($.browser.msie) {
            $('#saveArticleAlertResultWrapper').slideUp(250);
        } else {
            $('#saveArticleAlertResultWrapper').fadeOut(250);
        }                
        // Clear form
        $('#SaveAlertName').val('');
        $('#SaveAlertNotes').val('');

        // Show success message for Site Index
        $("#siSaveAlertForm").hide();
        $("#siSaveAlertResult").show();
        
    }
    else {
        if (data.ErrorMessage == "LoggedOut") {
            $("#divSaveAlertErrors_LoggedOut").show();
        }
        else {
                $("#divSaveAlertErrors").text(data.ErrorMessage).show();
        }
    }
}

function saveArticleAlertError(data, textStatus, xmlHttpRequest) {
    $("#divSaveAlertErrors").text(textStatus).show();
}

function saveListSuccess(data) {

    if (data.Succeeded) {
    
        //Do Omniture
        s.prop32 = s.prop49;
        s.eVar32 = s.eVar49;
        OmnitureClick('List Criteria Saved', 'prop32,eVar32');
    
        // Change button img?
        $("#list-saved").fadeIn(150);
        $("#saveListTrigger").hide();

        // Hide form
        if ($.browser.msie) {
            $('#saveListFlyout').slideUp(250);
        } else {
            $('#saveListFlyout').fadeOut(250);
        }
        // Clear form
        $('#SaveListName').val('');
        $('#SaveListNotes').val('');

    }
    else {
        if (data.ErrorMessage == "LoggedOut") {
            $("#divSaveListErrors_LoggedOut").show();
        }
        else if (data.ErrorMessage == "A folder with this name already exists." || data.ErrorMessage == "Please provide a folder name.") {
            $("#FolderNameError").text(data.ErrorMessage).show();
            $("#divSaveListFolderName").addClass("error-field");
        }
        else {
            $("#divSaveListErrors").text(data.ErrorMessage).show();
        }
    }
}

function saveListError(data, textStatus, xmlHttpRequest) {
    $("#divSaveListErrors").text(textStatus).show();
}

function saveAlertSettings() {
    $.ajax({
        type: 'POST',
        url: '/preferences/save',
        data: $('#frmAlertSettings').serialize(),
        success: saveAlertSettingsSuccess,
        error: saveAlertSettingsFailure,
        dataType: 'json'
    });
}

function saveAlertSettingsSuccess(data, msg, req) {
    if (data.Succeeded) {
        $('#alertpreference_error').fadeOut('fast', function() { $("#alertpreference_success").fadeIn('fast'); });
    } else {
        saveAlertSettingsFailure(req, data.ErrorMessage, null);
    }
}

function saveAlertSettingsFailure(req, msg, ex) {
    var userMessageId;
    if (msg == "LoggedOut")
        userMessageId = "alertpreference_error_session";
    else
        userMessageId = "alertpreference_error_misc";

    $('#alertpreference_error > p').hide();
    $("#" + userMessageId).show();
    $('#alertpreference_success').fadeOut('fast', function() { $("#alertpreference_error").fadeIn('fast'); });
}

function openSaveList() {

    //show flyout
    if ($.browser.msie) {
        $("#saveListFlyout").slideDown(150,
            function() {
                $("#SaveListName").select();
            }
        );
    } else {
    $("#saveListFlyout").fadeIn(150,
            function() {
                $("#SaveListName").select();
            }
        );
    }

    //hide error messaging
    $("#divSaveListName, #divSaveListFolderName").removeClass("error-field");
    $("#ListNameError, #divSaveListErrors, #divSaveListErrors_LoggedOut, #FolderNameError").hide();

    //show the folder dropdown, and hide the new folder textbox
    $('#selectFolderTextBox').hide();
    $('#selectFolderList').show();
    $('#FolderSource').val('FolderList');
    $('#selectFolderTextBox > div > input').val(_defaultNewFolderName);

    //unhide selectbox for IE6
    if ($.browser.msie && $.browser.version < 7) {
        $("#resultsPerPage").css("display", "inline-block");
    }

    OmnitureClick('AddSaveCompanyList');

    //hide export flyout
    showExportFlyout(false);
}

function saveCompanyList(enableWhenDone) {
    // Validate form/// <reference path="../../Controllers/CapContentController.cs" />

    if ($('#SaveListName').val() == "") {
        $("#ListNameError").show();
        $("#divSaveListName").addClass("error-field");
        if (enableWhenDone != null)
            enableWhenDone.disabled = false;
        return false;
    }
    else {
        $("#ListNameError").hide();
    }
    
    $.ajax({
        type: 'POST',
        url: '/mrc/savecompanylist',
        data: { saveName: $('#SaveListName').val(),
            folderId: $('#FolderId').val(),
            folderName: $('#FolderName').val(),
            folderSource: $('#FolderSource').val(),
            notes: $('#SaveListNotes').val()
        },
        success: function(data, textStatus, xmlHttpRequest) { saveListSuccess(data); if (enableWhenDone != null) enableWhenDone.disabled = false; },
        error: function(data, textStatus, xmlHttpRequest) { saveListError(data, textStatus, xmlHttpRequest); if (enableWhenDone != null) enableWhenDone.disabled = false; },

        dataType: 'json'
    });
    
}


function hidePanel(panelID) {

    selectedPanel = $("#" + panelID);

    if ($.browser.msie) {
        selectedPanel.slideUp(250);
    } else {
        selectedPanel.fadeOut(250);
    }

    $("#search-tools .open").removeClass("open");

}

// countOtherPages: if true, use total selected item count (including other pages)
//                  if false, use count of selected Articles from current page
function mrcPrintSelected(cType) {
    if ($('#fi_article_tools > a').hasClass('disabled'))
        return;
    //this is done outside of the function related to the section where it is called
    //alert('print ' + items.length + ' selected articles');
    if (cType == 'mrc')
        OmnitureClick('MYRC|Print');
    if (cType == 'search')
        OmnitureClick('ArticleSearchResults|Print');    
//    var i = 0;
//    var docIds = "";
//    for (i = 0; i < items.length; i++) {
//        docIds += items[i].DocID;
//        if (i < items.length - 1) {
//            docIds += "_";
//        }
//    }
    var popupUrl = window.location.protocol + '//' + window.location.host + "/print/all/" + cType;
    var name = 'PrintArticleWindow';
    var features = 'width=725,height=600,left=75,top=75,scrollbars=1';
    var newWindow = window.open(popupUrl, name, features);
    if (window.focus) {
        newWindow.focus();
    }
    return false;
}

function mrcPDFSelected(cType) {
    if ((_multiPage && getTotalSelectionCount() == 0)
        || (!_multiPage && mrcGetSelection('Article').length == 0))
        return;
    if (cType == 'mrc')
        OmnitureClick('MYRC|PDF');
    if (cType == 'search')
        OmnitureClick('ArticleSearchResults|PDF');
    var popupUrl = window.location.protocol + '//' + window.location.host + "/article/pdf/" + cType;
    var name = 'PDFArticleWindow';
    var features = 'width=725,height=600,left=75,top=75,scrollbars=1';
    var newWindow = window.open(popupUrl, name, features);
    if (window.focus) {
        newWindow.focus();
    }
    return false;
}

//function mrcExportSelected(click) {
//    if ($('#fi_article_tools > a').hasClass('disabled'))
//        return false;

//    if (click)
//        OmnitureClick(click);
//        
//    return true;
//}

function mrcDisplayArticleTools(linkType) {
    if (linkType == 'ViewAll' || linkType == 'ViewArticles') {
        $("#fi_article_tools").show();        
    }
    if (linkType == 'ViewSearches') {        
	    $("#fi_article_tools").hide();
	}
}

function saveSelectedArticles(cType) {
    if ((_multiPage && getTotalSelectionCount() == 0)
        || (!_multiPage && mrcGetSelection('Article').length == 0))
        return false;

    OmnitureClick('ArticleSearchResults|SaveSelectedArticles');

    $.ajax({
        type: 'POST',
        url: '/mrc/saveselectedarticles?listName=' + cType,
        success: saveSelectedSuccess
    });
}

function printSelectedArticles(type) {
    if ((_multiPage && getTotalSelectionCount() == 0)
        || (!_multiPage && mrcGetSelection('Article').length == 0))
        return false;

    $.ajax({
        type: 'POST',
        url: '/mrc/CheckLoggedInForSelectedArticlesAction',
        success: function (data) {
                    if (typeof (data) == "object")
                    {
                        if (!data.Succeeded) {
                            UnAuthorized(data);

                            $('#fi_article_tools').fadeOut('fast')
                            $('#fi_tools_counter').fadeOut('fast');

                            $('.search-results').animate({ "padding-bottom": "35px" }, 200);
                        }
                    } else {
                        mrcPrintSelected(type);
                    }
                 }
    });
}

function exportSelectedArticles(click, type) {
    if ((_multiPage && getTotalSelectionCount() == 0)
        || (!_multiPage && mrcGetSelection('Article').length == 0)
        || $('#fi_article_tools > a').hasClass('disabled'))
        return false;

    $.ajax({
        type: 'POST',
        url: '/mrc/CheckLoggedInForSelectedArticlesAction',
        success: function (data) {
            if (typeof (data) == "object") {
                if (!data.Succeeded) {
                    UnAuthorized(data);

                    $('#fi_article_tools').fadeOut('fast')
                    $('#fi_tools_counter').fadeOut('fast');

                    $('.search-results').animate({ "padding-bottom": "35px" }, 200);
                }
            } else {
                OmnitureClick(click);
                window.location = '/article/export/?cartType=' + type;
            }
        }
});
}

function saveSelectedSuccess(data) {
    var $resultContainer = $("#saveArticlesResult");
    if (typeof (data) == "object") {    // json response object
        if (!data.Succeeded) {
            UnAuthorized(data);
        }
    } else {    // html partial view
        $resultContainer.html(data);
        $("body").bind("savedEntityUpdated", savedSelectedArticlesUpdated);

        if (getTotalSelectionCount() == 1) {
            $('#articlesSavedText').html('Your article has been saved!');
            $('#articlesSavedTextCont').html('You may choose to organize this article.');
        } else {
            $('#articlesSavedText').html('Your articles have been saved!');
            $('#articlesSavedTextCont').html('You may choose to organize these articles.');
        }
        $('#saveArticlesResultHeader').show();

        $('#fi_tools').animate({ height: "75px" }, 200, function () {
            $("#saveArticlesResultWrapper").fadeIn('fast');
        });
    }

    $('#fi_article_tools').fadeOut('fast')
    $('#fi_tools_counter').fadeOut('fast');
   
    $('.search-results').animate({ "padding-bottom": "35px" }, 200);

    moveSavedArticlesFolderChanged();
    $('#FolderId').change(moveSavedArticlesFolderChanged);
}

function UnAuthorized(data) {
    $('#saveArticlesResult, #selectedItemsResult').html('');
    mrcAjaxFailure(null, data.ErrorMessage, null, $('#saveArticlesResultWrapper'));
    mrcAjaxFailure(null, data.ErrorMessage, null, $('#selectedItemsResultWrapper'));
    $('#saveArticlesResultHeader, #selectedItemsResultWrapper').hide();
    $('#saveArticlesResultWrapper, #selectedItemsResultWrapper').fadeIn('fast');
}

function moveSavedArticlesFolderChanged(eventObject) {
    var folderSelected = $('#FolderId').length > 0 && $('#FolderId').val() > 0;
    $(".button-update").toggleClass('disabled', !folderSelected);  // disable button if no folder selected
}

function savedSelectedArticlesUpdated(eventArgument, success) {
    $("body").unbind("savedEntityUpdated");
    if (success) {
        $("#saveArticlesResultWrapper").fadeOut('fast', function() {
            $('#fi_article_tools').fadeIn('fast')
            $('#fi_tools_counter').fadeIn('fast')
        });

        $('#fi_tools').animate({ height: "40px" }, 200);

        $('.search-results').animate({ "padding-bottom": "0px" }, 200);
    } else {
        //hide the save article success message to show the update error message alone
        $('#saveArticlesResultHeader').hide();
        $('#UpdateSavedEntityFormContainer').hide();
    }
}

function mrcCancelMoveCopyMultiple() {
    $('.fi_tools_confirm').animate({ height: "40px" }, 200, function() {
        $('#divMoveCopySelectFolder').fadeOut('fast');
        $("#fi_tools").fadeIn('fast');
    });
    mrcCancelNewFolder();
}

function fixMrcTools() {

    var viewportHeight = $(window).height(),
        documentScrollTop = $(document).scrollTop(),

        $tools = $('#fi_tools'),
        $toolsWrap = $('.toolsWrapper'),

        elementOffset = $toolsWrap.offset(),
        elementHeight = $toolsWrap.height(),

        minTop = documentScrollTop,
        maxTop = documentScrollTop + viewportHeight;


    //console.log('elementOffset.top ' + elementOffset.top);
    //console.log('elementHeight ' + elementHeight);
    //console.log('maxTop ' + maxTop);
    //console.log('elementOffset.top ' + elementOffset.top);
    //console.log('_____________');

    if (elementOffset != null) {
        if (elementOffset.top + elementHeight < maxTop && elementOffset.top) {
            $tools.removeClass('fixed');
            $('.fi_tools_confirm').removeClass('fixed');

        } else {
            $tools.addClass('fixed');
            $('.fi_tools_confirm').addClass('fixed');
        }
    }

}

