;// Shut down curvy corners script
var curvyCornersNoAutoScan = true;

(function() {
    //common imports
    var $ = jQuery;
    fitbit.namespace("fitbit.app.user.friends");
    fitbit.app.user.friends = {
        facebookFindInputToken: null,
        mixpanel: {},

        showErrorMessages: function(errors){
            var errorsHTML = fitbit.app.convertErrorsToList(errors, null, true);
            fitbit.app.user.friends.showSimpleErrorMessage(errorsHTML);
        },

        showSimpleErrorMessage: function(errorMessage) {
            var errorsElement = YAHOO.util.Dom.get('friendInvitationModalErrors');
            fitbit.util.setContent(errorsElement, errorMessage);
        },

        clearErrorMessages: function(){
            var errorsElement = YAHOO.util.Dom.get('friendInvitationModalErrors');
            fitbit.util.setContent(errorsElement, "");
        },

        sendInvitationsToAllMembers: function() {
            if (jQuery("[id=facebookSendAllForm] [name=invitedUsersIds]").length == 0) {
                return; //we have nothing to do
            }
            fitbit.app.user.friends.mixpanel.sendInvitationsToAllMembersCount = jQuery("[id=facebookSendAllForm] [name=invitedUsersIds]").length;
            var form = YAHOO.util.Dom.get("facebookSendAllForm");
            var formActionURL = form.action;
            YAHOO.util.Connect.setForm(form);
            YAHOO.util.Connect.asyncRequest('POST', formActionURL,
                {
                    success: function(o) {
                        fitbit.util.setContent(Y.Dom.get("facebookTabContent"), o.responseText);
                        // potential timing issue here
                        if ( jQuery("#sendToAll").hasClass("disabled")  ) {
                            jQuery("#sendToAll").addClass("debug_multi");

                            var invitesSend = fitbit.app.user.friends.mixpanel.sendInvitationsToAllMembersCount || null;
                            var	mixpanelCount = null;

                            if(invitesSend <= 1) {
                                mixpanelCount = "1";
                            } else if (invitesSend < 6) {
                                mixpanelCount = "2-5";
                            } else if (invitesSend > 5 && invitesSend < 11) {
                                mixpanelCount = "6-10";
                            } else if (invitesSend > 10 && invitesSend < 21) {
                                mixpanelCount = "11-20";
                            } else if (invitesSend > 20) {
                                mixpanelCount = "20over";
                            }

                            // Mixpanel Tracking
                            mpq.push(["track", "Invite via FB Email: Success",
                                {
                                    "!SEGMENT": mixpanelCount,
                                    "!INVITED": invitesSend,
                                    "!FB_LINKED": true,
                                    "token": mpqSignupPrj
                                }
                            ]);
                            // Mixpanel Tracking

                        }
                    },
                    failure: function(o) {
                        try {
                            var result = YAHOO.lang.JSON.parse(o.responseText).result;
                            fitbit.app.user.friends.showErrors(result.errors, "facebookTabContentError");
                        }
                        catch (x) {
                            fitbit.app.user.friends.showErrors(null, "facebookTabContentError");
                        }
                    }
                }
            );
        },

        loadMoreFriends: function() {
            var currMember = parseInt(Y.Dom.get("currentLastNum").value);
            var lastMember = currMember + 10;

            while(currMember < lastMember) {
                currMember++;
                var memberInfo = Y.Dom.get("facebookMemberInfo" + currMember);
                if (memberInfo == null) {
                    currMember--;
                    break;
                } else {
                    Y.Dom.removeClass(memberInfo, "invisible");
                }

            }

            Y.Dom.get("currentLastNum").value = currMember;
        },

        sendInvitationsToEmails: function() {
            var form = YAHOO.util.Dom.get("friendInvitation");
            var formActionURL = form.action;
            YAHOO.util.Connect.setForm(form);
            YAHOO.util.Connect.asyncRequest('POST', formActionURL,
                {
                    success: function(o) {
                        var result = eval("(" + o.responseText + ")").result,
                            invitesSend = result.countEmails || null,
                            mixpanelCount = null;

                        if(invitesSend <= 1) {
                            mixpanelCount = "1";
                        } else if (invitesSend < 6) {
                            mixpanelCount = "2-5";
                        } else if (invitesSend > 5 && invitesSend < 11) {
                            mixpanelCount = "6-10";
                        } else if (invitesSend > 10 && invitesSend < 21) {
                            mixpanelCount = "11-20";
                        } else if (invitesSend > 20) {
                            mixpanelCount = "20over";
                        }

                        if (result.status) {
                            Y.Dom.get("successMsg").innerHTML = result.countEmails + " invitation" + (result.countEmails == 1 ? "" : "s") + " sent successfully";
                            jQuery("[id=inviteViaEmailForm]").addClass("invisible");
                            jQuery("[id=inviteViaEmailSuccess]").removeClass("invisible");

                            // Mixpanel Tracking
                            mpq.push(["track", "Invite via Email: Success",
                                {
                                    "!SEGMENT": mixpanelCount,
                                    "!INVITED": invitesSend,
                                    "token": mpqSignupPrj
                                }
                            ]);
                            // Mixpanel Tracking
                        } else {
                            fitbit.app.user.friends.showErrors(result.errors, "friendInvitationModalErrors");
                        }
                    },
                    failure: function(o) {
                        try {
                            var result = YAHOO.lang.JSON.parse(o.responseText).result;
                            fitbit.app.user.friends.showErrors(result.errors, "friendInvitationModalErrors");
                        }
                        catch (x) {
                            fitbit.app.user.friends.showErrors(null, "friendInvitationModalErrors");
                        }
                    }
                }
            );
        },

        sendInvitationToMember: function(id, memberId) {
            var form = YAHOO.util.Dom.get("facebookSendForm" + id);
            var formActionURL = form.action;
            YAHOO.util.Connect.setForm(form);
            YAHOO.util.Connect.asyncRequest('POST', formActionURL,
                {
                    success: function(o) {
                        var result = eval("(" + o.responseText + ")").result;
                        if (result.status) {
                            var sendButton = Y.Dom.get("memberSendButton" + id);
                            Y.Dom.addClass(sendButton, "bRequestSent");
                            sendButton.innerHTML = "Request Sent";
                            sendButton.onclick = null;
                            jQuery("#invitedUsersIds" + memberId).remove();
                            if (jQuery("[id=facebookSendAllForm] [name=invitedUsersIds]").length == 0) {
                                jQuery("[id=sendToAll]").addClass("disabled");
                            }
                            jQuery("#sendToAll").addClass("debug_single");

                            // Mixpanel Tracking
                            mpq.push(["track", "Invite via FB Email: Success",
                                {
                                    "!SEGMENT": "1",
                                    "!INVITED": 1,
                                    "!FB_LINKED": true,
                                    "token": mpqSignupPrj
                                }
                            ]);
                            // Mixpanel Tracking
                        } else {
                            fitbit.app.user.friends.showErrors(result.errors, "facebookTabContentError");
                        }
                    },
                    failure: function(o) {
                        try {
                            var result = YAHOO.lang.JSON.parse(o.responseText).result;
                            fitbit.app.user.friends.showErrors(result.errors, "facebookTabContentError");
                        }
                        catch (x) {
                            fitbit.app.user.friends.showErrors(null, "facebookTabContentError");
                        }
                    }
                }
            );
        },

        submitFacebookFindForm: function() {
            var form = YAHOO.util.Dom.get("facebookFindForm");
            var formActionURL = form.action;
            YAHOO.util.Connect.setForm(form);
            YAHOO.util.Connect.asyncRequest('POST', formActionURL,
                {
                  success: function(o){
                        var result = eval("(" + o.responseText + ")").result;
                        if (result.status) {
                            alert( result.successMessage );
                        } else {
                            var errors = "";
                            for ( i = 0 ; i < result.errors.length ; i++ ) {
                                if ( i != 0 ) {
                                    errors += ",";
                                }
                                errors += result.errors[i].message;
                            }
                            alert( errors );
                        }
                  },
                  failure: function ( o ) {
                        alert( o.responseText );
                  }
                }
            );
        },

        submitFacebookInviteForm : function() {
            var form = YAHOO.util.Dom.get("facebookInviteForm");
            var formActionURL = form.action;
            YAHOO.util.Connect.setForm(form);
            YAHOO.util.Connect.asyncRequest('POST', formActionURL,
                {
                  success: function(o){
                        var result = eval("(" + o.responseText + ")").result;
                        if (result.status) {
                            alert( result.successMessage );
                        } else {
                            var errors = "";
                            for ( i = 0 ; i < result.errors.length ; i++ ) {
                                if ( i != 0 ) {
                                    errors += ",";
                                }
                                errors += result.errors[i].message;
                            }
                            alert( errors );
                        }
                  },
                  failure: function ( o ) {
                        alert( o.responseText );
                  }
                }
            );
        },

        removeNode: function (node) {
            if (node) {
              node.parentNode.removeChild(node);
            }
        },

        /**
         * Google analytics tracking for close invitation modal event.
         */
        onClose: function() {
            // tracking event for ga
            _gaq.push(['_trackEvent', 'FriendInvite', 'Close', 'FriendInviteDialogClose']);
        },

        resetFieldToDefaultValue : function( fieldSelector ) {
            var element = $( fieldSelector );
            if (element != null) {
                element.val( element.attr('data-defaultvalue') );
            }
        },

        /**
         * Sends invitation via modal dialog on the invitee fitbit profile.
         * Uses email as transport.
         */
        sendInvitationViaProfile : function ( event ) {
            this.clearErrorMessages();
            this.sendingOperationInProgress();
            var form = $('#friendInvitation');
            var formActionUrl = form.attr('action');
            var params = form.serialize();
            var that = this;
            $.ajax({
                type:       'POST',
                url:        formActionUrl,
                data:       params,
                dataType:   'json',
                success:    function( response ){
                    var result = response.result;
                    if (result.status) {
                        // tracking event for ga
                        _gaq.push(['_trackEvent', 'FriendInvite', 'Click', 'FriendEmailSentSuccess']);
                        _gaq.push(['_trackPageview', '/3558214901/goal']);
                        // Mixpanel Tracking
                        mpq.push(["track", "Invite via Profile: Success",
                            {
                                "!SEGMENT": "1",
                                "!INVITED": 1,
                                "token": mpqSignupPrj
                            }
                        ]);
                        that.showFriendInvitationSuccessDialog();
                    } else {
                        that.showErrorMessages(result.errors);
                    }
                    that.sendingOperationFinished();
                },
                error: function( response ) {
                    if ( _.isDefined( response ) && _.isDefined( response.errors ) ) {
                        that.showErrorMessages( response.errors );
                    } else {
                        that.showErrorMessages( [{ message: com.fitbit.app.error.general_fatal_error }]);
                    }
                    that.sendingOperationFinished();
                }
            });

        },

         /** Shows invite success modal. */
        showFriendInvitationSuccessDialog: function () {
            $('#friendInvitationModal .modalContent').toggleClass('invisible');
            $('.bAddFriend').addClass('bRequestSent')
                    .html(fitbit.i18n.getResource('com.fitbit.app.user.profile.label.request_sent_button'));
            $('#addFriend').unbind('click');
        },

        //todo - zhugrov a refactor all logic related to a friend invitation standalone modal dialog to a separate file.
        sendingOperationInProgress: function() {
            $('#sendInvite').unbind('click');
            $('#message').attr('disabled', 'disabled');
        },

        sendingOperationFinished:   function() {
            $('#sendInvite').click(_.bind( this.sendInvitationViaProfile , this ));
            $('#message').removeAttr('disabled');
        },

        /**
         * Shows a standalone invite friend modal dialog.
         */
        showFriendInvitationDialog : function(  ) {
            // Modal Dialog
            // Based on jQuery UI 1.8.1
            var that = this;
            $('#friendInvitationModal').dialog({
                modal: true,
                position: 'center',
                width: 660,
                title: '',
				dialogClass : 'ui-fitbitDialog',
				show: 'fade',
				hide: 'fade',

                create: function( event , ui ){
                    var dialog = jQuery(this);
                    $('#friendInvitationModalClose').click(
                        function() {
                            dialog.dialog('close');
                            that.onClose();
                        }
                    );

                    $('#sendInvite').click(_.bind( that.sendInvitationViaProfile , that ));

                    $('#updateUserName').click(_.bind( that.updateUserName , that ));

                    $('#editUserName').click(function( event ) {
                        $('#updateUserNameBlock .panelSwitch').toggleClass('invisible');
                    })
                },

                open: function(event, ui){
					
                }
            });
            // tracking event for ga
            _gaq.push(['_trackEvent', 'FriendInvite', 'Display', 'FriendInviteDialogOpen']);
            _gaq.push(['_trackPageview', '/3558214901/test']);
            // Mixpanel Tracking
            mpq.push(["track", "Invite via Profile: Open", { "token": mpqSignupPrj }]);
            // Mixpanel Tracking
        },

        updateUserName: function() {
            $('#updateUserNameBlock .panelSwitch').toggleClass('invisible');
            var name = Y.Dom.get('nameFrom').value;
            if (name != null && name != "") {
                $('#userName').html( fitbit.app.escapeHtml(name) );
            } else {
                $('#nameFrom').val(  fitbit.app.unEscapeHtml( $('#userName').html() ));
            }
        },

        handleSelectedAddresses: function(data) {
            for (var i = 0; i < data.length; i++) {
                fitbit.app.user.friends.facebookFindInputToken.add_token(data[i][1]);
            }

            var plaxoWin = window.open('', 'PlaxoABC');
            plaxoWin.close();
        },

        addEmailsManually: function() {
            Y.Dom.removeClass("addedEmails", "invisible");
            Y.Dom.removeClass("manualNextBtn", "invisible");
        },

        showErrors: function(errors, errorDivId) {
            var aErrors = ( errors == null || errors.length == 0 ) ? [
                {errorType:"system"}
            ] : errors;
            fitbit.util.setContent(Y.Dom.get(errorDivId), fitbit.app.convertErrorsToList(aErrors));
        },

        nextToNonMembers: function(areNonMembersEmpty) {
            Y.Dom.addClass("emailMembers", "invisible");
            if (areNonMembersEmpty) {
                fitbit.app.user.friends.nextToInviteForm();
            } else {
                Y.Dom.removeClass("emailNotMembers", "invisible");
            }
        },

        sendInvitationToEmails: function() {
            var addedEmails = YAHOO.util.Dom.get("emailsToSend").value;
            var message = YAHOO.util.Dom.get("message").value;
            var nameFrom = YAHOO.util.Dom.get("nameFrom").value;
            YAHOO.util.Connect.asyncRequest('POST', "/friends/friendInvitation?apiFormat=htmljson&sendToEmails=on&newDialog=true&emails=" + addedEmails
                    + "&message=" + message + "&nameFrom=" + nameFrom,
                {
                    success: function( o ) {
                        var result = eval("(" + o.responseText + ")").result;
                        if (result.status) {
                            fitbit.app.messageBox.show(fitbit.i18n.getResource('com.fitbit.app.groups.message.invitation_sent'), result.successMessage);
                            fitbit.app.user.friends.openEmailTab();
                        } else {
                            fitbit.app.user.friends.showErrors(result.errors, "sendErrors");
                        }
                    },
                    failure: function(o) {
                        try {
                            var result = YAHOO.lang.JSON.parse(o.responseText).result;
                            fitbit.app.user.friends.showErrors(result.errors, "sendErrors");
                        }
                        catch (x) {
                            fitbit.app.user.friends.showErrors(null, "sendErrors");
                        }
                    }
                });
        },

        facebookLogin: function() {
            var windowReference = window.open("/friends/friendInvitation?requestAuthorization=on", "_blank",
                "width=627,height=243");
        },

        showDetectedMembers : function() {
            YAHOO.util.Connect.asyncRequest('GET', "/friends/friendInvitation?apiFormat=htmljson&getDetectedMembers=on",
                {
                    success: function( o ) {
                        fitbit.util.setContent(Y.Dom.get("facebookTabContent"), o.responseText);
                    },

                    failure: function(o) {
                        try {
                            var result = YAHOO.lang.JSON.parse(o.responseText).result;
                            fitbit.app.user.friends.showErrors(result.errors, "facebookFindErrors");
                        }
                        catch (x) {
                            fitbit.app.user.friends.showErrors(null, "facebookFindErrors");
                        }
                    }
                });
        },

        showFacebookConnectErrors : function( errorMsg ) {
            var container = YAHOO.util.Dom.get("facebookConnectErrors");
            container.innerHTML = "Unable to link. " + errorMsg;
        },

        isMaxLength: function(element){
            var length = element.value.length;
            var maxLength = 65520;
            if (length > maxLength) {
                element.value = element.value.substring(0, maxLength+1);
                return false;
            }
        },

        /**
         *	Shows popup "Preview Email" with iframe inside
         */
        showEmailPreview: function() {
            var tokenControl = jQuery("#token-input-values");
            if (tokenControl.val() == '') {
                return;
            }

            jQuery("#emailPreviewPopup").dialog({
                modal: true,
                draggable: false,
                position: "center",
                width: 711,
                title: '',
				dialogClass : 'ui-fitbitDialog',
				show: 'fade',
				hide: 'fade',

                create: function(event, ui){
                    var html = jQuery('html');
                    if(html.hasClass('ie8')){
                        // IE8 css3pie fix
                        jQuery('#emailPreviewPopup .dialogContent').prev().css('top','13px').css('left','13px');
                    }

                    jQuery("#emailPreviewPopup .bClose").click(
                        function(){
                            jQuery("#emailPreviewPopup").dialog('close');
                        }
                    );

                    var message = $("#message").val();
                    var nameFrom = $("#nameFrom").val();
                    var url = "/friends/friendInvitation?emailPreview=on&emails=" + encodeURIComponent(tokenControl.val())
                        + "&message=" + encodeURIComponent(message) + "&nameFrom=" + encodeURIComponent(nameFrom);

                    $('.modalContent').html('<iframe scrolling="no" frameborder="0" width="610" height="620" src="' + url + '"></iframe>');
                },
                open: function(event, ui){
                    if($('html').hasClass('ie7') || $('html').hasClass('ie8')){
						// Force css3pie refreshing
						$('#emailPreviewPopup .dialogContent').prev().css('top','13px').css('left','13px');
					}
                }
            });
        }

    };
})();
