﻿var global = this;
var dailyView = (function($) {

    //**** Load Events When Document Ready ****
    $(document).ready(function() {


        // *** Send to Friend form ***
        $('a.emailFriendLink').click(function(e) {
            e.preventDefault();

            $('ul.shareLinks').trigger("mouseout");

            $("#emailToFriendContainer").modal({
                opacity: 70,
                containerId: "dialogContainer",
                overlayId: "dialogOverlay",
                onShow: refreshDialogContent
            });

        });

        // Send to friend ajax submit
        $('#emailToFriendForm').submit(function() {

            //@TODO: Make spinner

            //Insert sender name into email's subject
            var subject = $(this).find("input[name='subject']");
            var senderName = $(this).find("input[name='senderName']").attr("value");
            $(subject).attr("value", $(subject).attr("value").format(senderName));

            //Submit form
            $(this).submitAjax("/CodeBase/WebServices/EmailService.asmx/SendEmail", sendToFriendResponseHandler);

            return false;   //Prevents postback to page
        });

        // *** Social links ***
        $('.shareNav').initMenu("a.shareButton", "ul.shareLinks");

        $('ul.shareLinks li a').each(function() {
            if ($(this).hasClass("popup")) {
                $(this).click(function(e) {
                    e.preventDefault();
                    newWindow($(this).attr("href"), 800, 500);
                });
            }
            $(this).track("/Social/" + $(this).attr("name"), null, "click");
        });

        setupRatings();

    });  //end document.ready

    var refreshDialogContent = function() {

        var modal = this;

        $('.shareNav').initMenu("a.shareButton", "ul.shareLinks");


        //Setup new dialog dynamic width
        if (modal.dialog.data.selector == '#pollResultsContent') {

            var oldWidth = modal.dialog.data.width();
            var answerResultsWidth = 0;


            //Get the width of all the answers combined
            $('#pollResultsContent').find("ul.pollResults li").each(function() {
                answerResultsWidth += $(this).width();
            });

            //If wider than set dialog width, expand it
            if (answerResultsWidth > oldWidth) {
                modal.dialog.data.width(answerResultsWidth + 40);        //@WARNING - Adds padding values explicitly
                modal.dialog.container.width(answerResultsWidth + 64);
                modal.setPosition(); //Center dialog
            }

            $('#pollResultsContent').css("visibility", "visible");


        }
        else {
            modal.setPosition(); //Center dialog
        }

        if (typeof (Cufon) != "undefined" && Cufon != null) {
            Cufon.replace('#dialogContainer h2', { fontFamily: FontSettings.light });
            Cufon.replace('#dialogContainer h3', { fontFamily: FontSettings.normal });
            Cufon.replace('#dialogContainer p', { fontFamily: FontSettings.normal, hover: true });
            Cufon.replace('#dialogContainer strong', { fontFamily: FontSettings.normal });
            Cufon.replace('#dialogContainer label', { fontFamily: FontSettings.normal });
            Cufon.replace('#dialogContainer .shareNav a', { fontFamily: FontSettings.normal, hover: true });
        }


    }

    function sendToFriendResponseHandler(data, textStatus) {

        if (textStatus != "success") {
            alert("Error submitting form, please try again later");
            return;
        }

        //Clear old errors
        $('#emailToFriendErrors').find('p.error').remove();

        var hasErrors = false;

        function writeError(errorText) {
            $('<p></p>').html(errorText).addClass("error").appendTo('#emailToFriendErrors');
            $('#emailToFriendErrors').show();
        }

        $('Error', data).each(function() {
            hasErrors = true;
            var errorText = $(this).find("ErrorDescription").text();
            writeError(errorText);
        });

        if (hasErrors) {

            //Refresh fonts for displaying new errors
            refreshDialogContent();
        }
        else {
            //Form successfully submitted

            //Show thank you
            $('#emailToFriendWelcome').hide();
            $('#emailToFriendThankYou').show();

            //Clear form
            $('#emailToFriendForm').clearForm();

            //Track sucess
            $.tracker.track("/Social/Email");
        }
    }

    //*** Ratings ***
    function setupRatings() {
        //On button click
        var submitted = false, submitting = false;
        var currentOption;
        var ratingSent;

        initRatingHistory();

        $('#ratingHolder .ratingOption').each(function() {

            var button = $(this).find('a');
            var option = $(this);

            button.click(function(e) {

                e.preventDefault();

                if (submitted || submitting) { return; }
                submitting = true;

                currentOption = option;

                $(this).addClass("selected");
                option.find(".caption").addClass("waiting");

                //Send rating request
                //Fake delay to avoid "flash" of waiting animation

                var ratingToSend = $(this).attr("id");
                ratingSent = ratingToSend;

                setTimeout(function() {
                    submitRequest(ratingToSend);
                }, 800);

            });
        });

        var sucessResponse = function(result) {
            currentOption.find(".caption").removeClass("waiting").html("<p>Thank you!</p>");
            setTimeout(function() { $('.caption p').fadeOut("slow"); }, 1500);
            $('#ratingHolder .ratingOption a').addClass("disabled");
            submitted = true;
            saveRatingHistory(ratingSent);
        }

        var reset = function() {
            submitted = false;
            $('#ratingHolder .ratingOption .caption').removeClass("waiting");
            $('#ratingHolder .ratingOption a').removeClass("selected");
        }

        var submitRequest = function(rating) {

            $.ajax({
                type: "POST",
                url: "/CodeBase/WebServices/DailyContentService.asmx/SaveRating",
                data: "{'itemId': " + pageData.itemId + ",'rating':'" + rating + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(result) {
                    sucessResponse(result);
                },
                error: function(errObj) {
                    $.log("Error: Sorry, please try again later.\n\n" + errObj.status + ": " + errObj.statusText + "\n\n");
                    reset();
                }
            });

            $.tracker.track({ "item": pageData.itemId, "rating": rating }, "rating");

        }

        function getRatingHistory() {
            //Get the cookie value for this page's rating
            return $.cookie('rated-' + pageData.itemId);
        }

        function saveRatingHistory(rating) {
            //Set rating cookie
            $.cookie('rated-' + pageData.itemId, rating, { expires: 1 });
        }

        function initRatingHistory() {

            var ratingHistory = getRatingHistory();

            //If has rated
            if (Boolean(ratingHistory)) {

                //Flag to prevent submission
                submitted = true;

                //Disable hover on buttons
                $('#ratingHolder .ratingOption a').addClass("disabled");

                //Highlight selected rating
                $('#' + ratingHistory).addClass("selected");
            }
        }
    }

    return { refreshDialogContent: refreshDialogContent };

})(jQuery);