﻿//web binder.
jQuery(document).ready(        
    function()
    {                
        var itemMetaPageUrl = ".webBinderPageUrl";
        var itemMetaPagePrintUrl = ".webBinderPagePrintUrl";
        var itemMetaPageTitle = ".webBinderPageTitle";
        var itemMetaPageData = ".webBinderPageData";
        var itemMetaPageSection = ".webBinderPageSection";
        var itemMetaIsPageInBinder = ".webBinderIsPageInBinder";   
        var itemMetaPageHandle = ".webBinderPageHandle";
                        
        var classNameWebBinderItemsHidden = "ico_addtobinder_hidden";
        var classNameWebBinderItems = "ico_addtobinder";    
        var classNameWebBinderListItem = "webBinderListItem";                        
        
        var webBinderItems = ".ico_addtobinder";
        var webBinderItemsHidden = ".ico_addtobinder_hidden";        
        var webBinderListItem = ".webBinderListItem";                
        
        var imageAddToBinder = ".imgAddToBinder";        
        var imageRemoveFromBinder = ".imgRemoveFromBinder";        
        
        var webBinderSummaryCount = $(".webBinderSummaryCount");
        var webBinderHoverArea = $(".webBinderHoverArea");
        var webBinderAddToBinder = $(".webBinderAddToBinder");
        var webBinderClear = $(".webBinderClearQueue");
        var webBinderRemove = $(".webBinderRemoveItem");   
        var webBinderListContents = $(".binder_content");
        var webBinderListInstructions = $(".richtext");
        var webBinderSummaryInstructions = $(".webBinderSummaryInstructions");
        var webBinderSummaryNotice = $(".webBinderSummaryNotice");        
        var webBinderErrorAdding = $(".webBinderErrorAdding");
        var webBinderErrorGeneral = $(".webBinderErrorGeneral");      
        
        var webBinderPdfLink = $(".pdf_link");
        var webBinderPdfEmpty = $(".pdf_empty");
        
        var addToBinderImages = $(imageAddToBinder);        
        var removeFromBinderImages = $(imageRemoveFromBinder);        
        
        var noticeTimeout = null;                     
        
        //web binder hover area mouse over.
        webBinderHoverArea.bind("mouseenter",
            function()
            {
                $(this).find(webBinderItemsHidden).removeClass(classNameWebBinderItemsHidden).addClass(classNameWebBinderItems);               
            }
        );
        
        //web binder hover area mouse leave.
        webBinderHoverArea.bind("mouseleave",
            function()
            {
                $(this).find(webBinderItems).removeClass(classNameWebBinderItems).addClass(classNameWebBinderItemsHidden);                
            }
        );                
        
        //add to/remove from binder.
        webBinderAddToBinder.click(
            function()
            {                                                                           
                var clickedElement = $(this);
                var isInBinder = clickedElement.find(itemMetaIsPageInBinder); 
                disableButton(clickedElement);              
                
                if (isInBinder.val() != "true")
                {
                    queuePage(
                        clickedElement.find(itemMetaPageUrl).val(),
                        clickedElement.find(itemMetaPagePrintUrl).val(),
                        clickedElement.find(itemMetaPageTitle).val(),
                        clickedElement.find(itemMetaPageData).val(),
                        clickedElement.find(itemMetaPageSection).val(),
                        function(webBinderItems)
                        {
                            updateBinderSummary(webBinderItems);
                            isInBinder.val("true");
                            clickedElement.find(imageAddToBinder).hide();                            
                            clickedElement.find(imageRemoveFromBinder).show();
                            enableButton(clickedElement);                            
                        },                        
                        function(response)
                        {
                            enableButton(clickedElement);
                            showError(response, true);                            
                        });                                      
                }
                else
                {                 
                    dequeuePage(clickedElement.find(itemMetaPageUrl).val(), 
                        function(webBinderItems)
                        {
                            updateBinderSummary(webBinderItems);
                            isInBinder.val("false");

                            clickedElement.find(imageRemoveFromBinder).hide();                                                             
                            clickedElement.find(imageAddToBinder).show();                                                   
                            enableButton(clickedElement);
                        },
                        function(response)
                        {
                            enableButton(clickedElement);
                            showError(response, false);                            
                        });                                                                        
                }
                
                return false;
            }            
        );
                        
        //web binder list: remove item
        webBinderRemove.click(
            function()
            {                                
                var clickedElement = $(this);                                
                dequeuePageByHandle(clickedElement.find(itemMetaPageHandle).val(),
                    function(webBinderItems)
                    {
                        clickedElement.find(itemMetaPageHandle).val("");
                        var parent = clickedElement.parent();
                        
                        while (parent.length > 0)
                        {                                     
                            if (parent.hasClass(classNameWebBinderListItem))
                            {
                                parent.fadeOut("fast");                                                                
                                break;
                            }
                            else
                                parent = parent.parent();
                        }                                                                                                                                                                                                                                                                      
                        updateBinderSummary(webBinderItems);
                        updateBinderList(webBinderItems);
                    },
                    function(response)
                    {
                        showError(response, false); 
                    });                                                               
                return false;
            }
        );                
        
        //web binder list: clear queue.
        webBinderClear.click(
            function()
            {                                                    
                clearQueue( 
                    function(webBinderItems)
                    {                        
                        $(itemMetaPageHandle).val("");
                        updateBinderSummary(webBinderItems);
                        updateBinderList(webBinderItems);
                    },
                    function(response)
                    {
                        showError(response, false);
                    });                                                     
                return false;
            }                        
        );                                                
                
        //update web binder contents.
        function updateBinderSummary(webBinderItems)
        {        
            webBinderSummaryNotice.hide();
            webBinderSummaryCount.html(webBinderItems.length);
            
            if (webBinderItems.length == 0)
            {
                if (webBinderPdfLink.is(":visible"))
                    webBinderPdfLink.hide();
                else
                    webBinderPdfLink.addClass("displaynone");
                                                
                webBinderPdfEmpty.fadeIn();
            }
            else
            {
                webBinderPdfLink.fadeIn();
                
                if (webBinderPdfEmpty.is(":visible"))
                    webBinderPdfEmpty.hide();
                else
                    webBinderPdfEmpty.addClass("displaynone");                    
            }
            
            webBinderSummaryInstructions.fadeOut("fast",            
                function()
                {            
                    webBinderSummaryNotice.show();
                    
                    if (noticeTimeout != null)
                        clearTimeout(noticeTimeout);
            
                    noticeTimeout = setTimeout(function() 
                    { 
                        webBinderSummaryNotice.hide();
                        webBinderSummaryInstructions.fadeIn("slow");                    
                    }, 3500);            
                }
            );
        }
        
        //update binder list.
        function updateBinderList(webBinderItems)
        {        
            if (webBinderItems.length == 0)
            {
                webBinderListContents.hide();
                webBinderListInstructions.fadeIn("slow");
            }                          
        }
        
        //enable button.
        function enableButton(button)
        {
            button.css("opacity", 1);
            button.removeAttr("disabled");
        }
        
        //disable button.
        function disableButton(button)
        {
            button.css("opacity", 0.4);
            button.attr("disabled", "disabled");
        }                                
        
        //show error.
        function showError(response, adding)
        {
            alert(adding && response.status == 400 ? webBinderErrorAdding.val() : webBinderErrorGeneral.val());    
        }
    }
);