﻿(function() {
    function ShareTypesEnum() {
        this.email = "email";
        this.facebook = "facebook";
        this.outlook = "outlook";
        this.hotmail = "hotmail";
        this.gmail = "gmail";
        this.yahoo = "yahoo";
        this.addressbooklist = "addressbooklist";
    }

    var shareTypes = new ShareTypesEnum();
    ZOOMIN.namespace("ZOOMIN.ShareWidget");
    var shareWidget = ZOOMIN.ShareWidget;
    var common = ZOOMIN.Common;

    var txtEmail;
    var txtPassword;
    var errorEl;
    var loader;
    var emailListEl;
    var addressListEl;
    var continueButton;
    var tableBody;
    var currentCountEl;
    var currentCountAddressEl;
    var currentCount = 0;
    var messagelistEl;
    var shareBoxy = null;
    var shareCount = 0;
    var hasAccess = true;

    var ShareAlbumId, isAlbumPublic, widgetContentDiv;

    var RecipientUseremailid;



    var widget_div;
    var fb_login;
    var txtSubject;
    var txtMessage;
    var UserIdlist = new Array();
    var uid;
    var sql;

    shareWidget.currentShareType = shareTypes.email;

    shareWidget.callbackOnRemove = function(obj) {
        if (obj.type == 'box') {
            addressListEl.find("input:checkbox").each(function() {
                if ($(this).attr('value') == obj.value[0]) {
                    $(this).attr("checked", "").attr("disabled", "");
                }
            });
            currentCountAddressEl.html(addressListEl.find("input:checkbox:checked").length);
        }
    };

    shareWidget.callBackOnCreate = function(value) {
        var count = 0;
        //HACK: do not use user values in selectors, it can screwup jquery selector parser
        addressListEl.find("input:checkbox").each(function() {
            if ($(this).attr('value') == value) {
                $(this).attr("checked", "checked").attr("disabled", "disabled");
            }
        });

        currentCountAddressEl.html(addressListEl.find("input:checkbox:checked").length);
    };

    shareWidget.initTextBox = function() {
        shareWidget.currentShareType = shareTypes.email;
        $('#form_tags_input').val('');
        $('#form_tags_input').siblings('.textboxlist').remove();
        shareWidget.autoCompleteTextBox = new $.TextboxList('#form_tags_input', { unique: true, plugins: { autocomplete: {} }, bitsOptions: {} });
        shareWidget.initAutoComplete();
        var currentTab;
        $('#login').hide();
        $('#sharewidget #addmore .tabset li a').each(function() {
            $(this).removeClass('active');
            if (this.title.toLowerCase() == shareWidget.currentShareType) {
                $(this).addClass('active');
                currentTab = this;
            }
        });
        console.log(currentTab);
        shareWidget.resetTabs(currentTab);
        shareWidget.hideLoading();
        shareWidget.hideTrustedDesc();

        $(shareWidget.autoCompleteTextBox.getContainer()).keydown(shareWidget.handleKeyDown);
    };
    //handling comma's
    shareWidget.handleKeyDown = function(eve) {
        if (eve.keyCode === 188) {
            var curEl = $(shareWidget.getCurrent());
            var current = common.trim(curEl.val());
            if (current.length > 0) {
                shareWidget.autoCompleteTextBox.add(current, current);
                curEl.val('');
                eve.stopPropagation();
                eve.preventDefault();
            }
        }
    };

    shareWidget.BindAddressBook = function() {
        $.ajax({
            type: "GET",
            url: "/MyAccount/GetUserAddressdetails",
            dataType: "json",
            success: function(json) {
                var addressBook = [];
                if (json != null && json.useraddress != null && json.useraddress.length > 0) {
                    var innerHTML = "";
                    for (var loop = 0; loop < json.useraddress.length; loop++) {
                        if (json.useraddress[loop].FriendsEmailId != "" && !(shareWidget.existsInArray(addressBook, json.useraddress[loop].FriendsEmailId))) {
                            addressBook.push([json.useraddress[loop].FriendsEmailId, json.useraddress[loop].FriendsEmailId, null]);
                            innerHTML += "<tr><td><input type='checkbox' id='" + loop + "' value='" + json.useraddress[loop].FriendsEmailId + "'/> " + json.useraddress[loop].DisplayName.replace("(" + json.useraddress[loop].FriendsEmailId + ")", "") + "</td><td>" + json.useraddress[loop].FriendsEmailId + "</td></tr>";
                        }
                    }
                    shareWidget.addressBook = addressBook;
                    shareWidget.addressBookHtml = innerHTML;
                    shareWidget.autoCompleteInProg = false;
                    shareWidget.autoCompleteInit = true;
                    if (addressBook && addressBook.length > 0) {
                        addressListEl.find("tbody").append(innerHTML);
                        addressListEl.find("#totalbook").html(addressBook.length);
                        addressListEl.find("input:checkbox").bind("click", function() {
                            currentCountAddressEl.html(addressListEl.find("input:checkbox:checked").length);
                        });
                    }
                }
            }
        });
    };

    shareWidget.initAutoComplete = function() {
        if (shareWidget.addressBook && shareWidget.addressBook.length > 0) {
            shareWidget.autoCompleteTextBox.plugins['autocomplete'].setValues(shareWidget.addressBook);
        }
    };

    shareWidget.existsInArray = function(currentArray, email) {
        if (currentArray != null) {
            var currentLength = currentArray.length;
            for (var loop = 0; loop < currentLength; loop++) {
                if (currentArray[loop][1].toLowerCase() == email.toLowerCase()) {
                    return true;
                }
            }
        }
        return false;
    };
    shareWidget.showshares = function(contentDiv, albumid) {
        //        shareBoxyremove = new Boxy($(contentDiv), { title: "Share album", modal: true, height: "auto", width: "", fixed: false, unloadOnHide: false, show: false });
        //        shareBoxyremove.show();
        ShareAlbumId = albumid;
        $(contentDiv).toggle();
    }
    shareWidget.show = function(contentDiv, albumid) {
        ShareAlbumId = albumid;
        if ($("input[@name='share']:checked").val() == 'private') {
            isAlbumPublic = false;
        }
        else {
            isAlbumPublic = true;
        }
        widgetContentDiv = contentDiv;
        if (shareWidget.options.dialog) {
            if (shareBoxy == null) {
                shareBoxy = new Boxy($(contentDiv), { title: "Share album", modal: true, height: "auto", width: "570px", fixed: false, unloadOnHide: false, show: false });
            }
        } else {
            $(contentDiv).show();
        }
        if (isAlbumPublic) {
            if ($('#trusted-cnt').length) {
                $('#trusted-cnt').hide();
            }
        } else {
            if ($('#trusted-cnt').length) {
                $('#trusted-cnt').show();
            }
        }
        if (shareWidget.options.dialog) {
            shareBoxy.show();
        }
        shareWidget.initTextBox();
        txtEmail.val('e-mail');
        txtPassword.val('');
    };
    shareWidget.close = function() {
        if (shareWidget.options.dialog) {
            if (shareBoxy != null)
                shareBoxy.hide();
        }
        $(shareWidget.autoCompleteTextBox.getContainer()).unbind('keydown', shareWidget.handleKeyDown);
        shareWidget.show(widgetContentDiv, ShareAlbumId);
    };
    shareWidget.resetTabs = function(thisLink) {
        shareWidget.resetError();
        if ($(thisLink).find("em").length > 0) {
            shareWidget.currentShareType = shareTypes[$(thisLink).find("em").html().toLowerCase()];
            shareWidget.editList();
            emailListEl.hide();
            messagelistEl.hide();
            shareWidget.hideTrustedDesc();
        }
    };

    shareWidget.confirmChangePublic = function(eve) {
        if (!shareWidget.changePublicInProgress) {
            Boxy.confirm("<p class='text'>Are you sure want to make this album " + $("input[@name='share']:checked").val() + "?</p>", function() { shareWidget.changePublic(eve); }, { height: "80px", width: "240px", fixed: false, title: "Confirm access change", closeable: false });
        }
        else {
            return false;
        }
    }
    shareWidget.changePublic = function(eve) {
        if (!shareWidget.changePublicInProgress) {
            var url = ZOOMIN.ShareWidget.options.updateAlbum;
            if ($("input[@name='share']:checked").val() == 'private') {
                isAlbumPublic = false;
            }
            else {
                isAlbumPublic = true;
            }
            var postData = {
                "alb": ShareAlbumId,
                "public": isAlbumPublic.toString()
            };
            $('#public_loading').text('Updating...').show();
            shareWidget.changePublicInProgress = true;
            $.ajax({
                type: "GET",
                url: "/Album/ChangeSecurity",
                data: postData,
                cache: false,
                dataType: "json",
                success: function(result) {
                    $('#public_loading').text('Updated...').show();
                    shareWidget.updateShareCount(0);
                    if (isAlbumPublic) {
                        $("#trusted-cnt").hide();
                        $("#userlistdiv").hide();
                    }
                    else {
                        $("#trusted-cnt").show();
                        $("#userlistdiv").show();
                    }
                    window.setTimeout(function() {
                        $('#public_loading').hide();
                        shareWidget.changePublicInProgress = false;
                        $(ZOOMIN).trigger('updateSecurity', {
                            albumId: ShareAlbumId,
                            isPublic: isAlbumPublic
                        });
                    }, 400);

                }
            });
        } else {
            return false;
        }
    };

    shareWidget.getEmailList = function() {
        if (shareWidget.dataValid()) {
            shareWidget.showLoading("Loading your contacts from " + shareWidget.currentShareType + " ...");
            tableBody.empty();
            currentCount = 0;
            var param = ZOOMIN.util.Util.addUrlParam;

            var url = ZOOMIN.ShareWidget.options.importUrl;
            url = param(url, "email", encodeURIComponent(txtEmail.val()));
            url = param(url, "rawJSON", "true");
            url = param(url, "pwd", encodeURIComponent(txtPassword.val()));
            url = url + "&callback=?"
            $.getJSON(url, function(addressList) {
                shareWidget.hideLoading();
                if (addressList != null && addressList.addressList.length > 0) {
                    $("#btnContinueWithEmailList").show();
                    var innerHTML = "";
                    for (var loop = 0; loop < addressList.addressList.length; loop++) {
                        var address = addressList.addressList[loop];
                        innerHTML += "<tr><td><input type='checkbox' value='" + address.Email + "'/> " + address.Name + "</td><td>" + address.Email + "</td></tr>";
                    }
                    tableBody.append(innerHTML);
                    emailListEl.show();
                    emailListEl.find("#total").html(addressList.addressList.length);
                    tableBody.find("input").bind("click", function() {
                        if (this.checked) {
                            currentCount++;
                        } else {
                            currentCount--;
                        }
                        currentCountEl.html(currentCount);
                    });
                } else {
                    if (addressList.message == "no contacts") {
                        shareWidget.showError("Your account has no contacts saved. Please try another account.");
                    } else {
                        shareWidget.showError(addressList.message);
                    }
                }
            });
        }
    };
    shareWidget.showLoading = function(message) {
        var activeNode = $("#sharewidget .tabset a.active em").html();
        if (activeNode == "Gmail" || activeNode == "Hotmail" || activeNode == "Yahooo") {
            $("#login").hide();
        } else {
            $("#" + activeNode).hide();
        }
        messagelistEl.hide();
        loader.find("strong span").html(activeNode);
        loader.show();
        if (message) {
            loader.find("#loading-message").html(message);
        }
    };
    shareWidget.hideLoading = function() {
        loader.hide();
    };

    shareWidget.dataValid = function(val) {
        var valid = true;
        shareWidget.resetError();
        var emailAddress = val || txtEmail.val();
        if (common.trim(emailAddress) == "" || !common.ValidateEmailID(emailAddress)) {
            valid = false;
            shareWidget.showError("Please enter your email address");
        } else {
            if (common.trim(txtPassword.val()) == "") {
                valid = false;
                shareWidget.showError("Please enter your password.");
            }
        }
        return valid;
    };

    shareWidget.resetError = function() {
        errorEl.val("");
        errorEl.hide();
    };

    shareWidget.showError = function(msg) {
        errorEl.html(msg);
        errorEl.show();
    };

    shareWidget.getCurrent = function() {
        var cur;
        $('#sharewidget input.textboxlist-bit-editable-input').each(function() {
            if ($(this).css('display') !== "none") {
                cur = $(this);
            }
        });
        return cur;
    };


    shareWidget.getTypedEmail = function() {
        var mails = $('#form_tags_input').val();
        var lastEntered = "";
        var current = shareWidget.getCurrent();
        var emailsList = [];
        var emailId;
        var ret = { result: true, emails: [] };

        if (current) {
            lastEntered = current.val();
        }
        if (typeof mails === "string" && mails.length > 0) {
            emailsList = mails.split(',');
        }
        if (typeof lastEntered === "string" && common.trim(lastEntered).length > 0) {
            emailsList.push(lastEntered);
        }
        if (emailsList.length > 0) {
            for (var i = 0; i < emailsList.length; i++) {
                if (typeof emailsList[i] !== "string") {
                    ret.result = false;
                    break;
                }
                emailId = common.trim(emailsList[i]);
                if (emailId === "" || !common.ValidateEmailID(emailId)) {
                    ret.result = false;
                    break;
                } else {
                    ret.emails.push(emailId);
                }
                emailId = undefined;
            }
        }
        return ret;
    };

    shareWidget.checkAll = function() {
        tableBody.find("input:checkbox").attr("checked", "checked");
        currentCountEl.html(tableBody.find("input").length);

    };

    shareWidget.Unshare = function() {
        RecipientUseremailid = this.id;
        var obj = this;
        Boxy.confirm("<p class='text'>Are you sure want to stop sharing this ablum with  " + this.id + " ?</p>", function() { shareWidget.RemoveShare(ShareAlbumId, RecipientUseremailid, obj); }, { height: "80px", width: "240px", fixed: false, title: "Confirm removing access", closeable: false, titleClass: "altHeader" });
    }

    shareWidget.RemoveShare = function(albumid, useremailid, objremove) {
        var postData = {
            "alb": albumid,
            "Emailid": useremailid
        };
        $.ajax({
            type: "POST",
            url: "/Share/RemoveShare/",
            data: postData,
            cache: false,
            dataType: "json",
            success: function(result) {
                $(objremove).parent("li").remove();
                shareWidget.updateShareCount(-1);
                shareWidget.updateShareEmailList();
            }
        });
    };

    shareWidget.checkAllBook = function() {
        addressListEl.find("input:checkbox").attr("checked", "checked");
        currentCountAddressEl.html(addressListEl.find("input:checkbox").length);
    };

    shareWidget.uncheckAll = function() {
        tableBody.find("input:checkbox").attr("checked", "");
        currentCountEl.html("0");
    };

    shareWidget.uncheckAllBook = function() {
        addressListEl.find("input:checkbox").attr("checked", "");
        currentCountAddressEl.html("0");
    };
    shareWidget.continueWithEmailAB = function() {
        shareWidget.resetError();
        if (addressListEl.find("input:checkbox:checked").length == 0) {
            shareWidget.showError("Please select at least one email address.");
        } else {
            shareWidget.currentShareType = shareTypes.addressbooklist;
            currentCount = addressListEl.find("input:checkbox:checked").length;
            shareWidget.showNextStep();
        }
    };
    shareWidget.continueWithEmail = function() {
        shareWidget.resetError();

        if (emailListEl.find("input:checkbox:checked").length == 0) {
            shareWidget.showError("Please select at least one email address.");
        } else {
            shareWidget.showNextStep();
        }
    };

    shareWidget.continueWithTypedEmail = function() {
        var ret = shareWidget.getTypedEmail();
        shareWidget.resetError();
        if (ret.result) {
            if (ret.emails.length < 1) {
                shareWidget.showError("Please select at least one email address.");
                return;
            }
            currentCount = ret.emails.length;

            shareWidget.showNextStep();
        } else {
            shareWidget.showError("Please enter a valid email address");
        }
    };

    shareWidget.editList = function() {
        messagelistEl.hide();
        if (shareWidget.currentShareType == shareTypes.email) {
            $('#email').show();
        }
        else if (shareWidget.currentShareType == shareTypes.addressbooklist) {
            $(addressListEl).show();
        }
        else {
            emailListEl.show();

        }
    };
    shareWidget.showTrustedDesc = function() {
        $('#trustedDesc').show();
    };
    shareWidget.hideTrustedDesc = function() {
        $('#trustedDesc').hide();
    };

    shareWidget.sendInvites = function() {
        shareWidget.resetError();
        var emails = [];
        if (shareWidget.currentShareType == shareTypes.email) {
            var ret = shareWidget.getTypedEmail();
            if (!ret.result) {
                return;
            }
            for (var i = 0; i < ret.emails.length; i++) {
                emails.push(ret.emails[i]);
            }
        }
        else if (shareWidget.currentShareType == shareTypes.addressbooklist) {
            addressListEl.find("input:checkbox:checked").each(function() {
                emails.push($(this).val());
            });
        }
        else {
            tableBody.find("input:checkbox:checked").each(function() {
                emails.push($(this).val());
            });
        }

        var maillist = emails.join(",");
        var trusted = $('#chkTrusted').attr("checked");
        shareWidget.showLoading("Sending share invites...");
        var postData = {
            //            trusted: trusted,
            subject: "Checkout my photos on ZoomIn",
            message: txtMessage.val(),
            emailList: JSON.stringify(emails),
            itemId: ShareAlbumId,
            source: ZOOMIN.ShareWidget.options.source
        };

        if ($("#chkPublic:checked").val() == "public") {
            postData.isPublic = true;
            isAlbumPublic = true;
        } else {
            postData.trusted = trusted;
            isAlbumPublic = false;
        }
        $.ajax({
            type: "POST",
            url: "/Share/Invite/",
            data: postData,
            cache: false,
            dataType: "json",
            success: function(result) {
                //close boxy
                if (result.message == 0) {
                    shareWidget.showLoading("Share invites - Sent!");
                    $(ZOOMIN).trigger('shareSent', postData);
                    if (!isAlbumPublic) {
                        shareWidget.updateShareCount(emails.length);
                        shareWidget.updateShareEmailList();
                    }
                } else if (result.message == -1) {
                    shareWidget.hideLoading();
                    shareWidget.showError("Please enter the words as shown in the image.");
                } else {
                    shareWidget.showLoading("Share invites sending failed! ");
                }
                window.setTimeout(function() {
                    if (result.message == 0) {
                        shareWidget.close();
                    } else {
                        shareWidget.hideLoading();
                        shareWidget.showNextStep();
                    }
                }, 1000);
            }
        });

        //console.log(emails);
    };

    shareWidget.updateShareEmailList = function() {
        $.ajax({
            type: "POST",
            url: "/Album/GetShareDetailsHTML/",
            data: "albumID=" + ShareAlbumId,
            cache: false,
            dataType: "json",
            success: function(result) {
                //$("#userlistul").empty();
                $("#userlistul").html(result.message);
                $('.Unshare').bind("click", shareWidget.Unshare);
            }
        });
    };
    shareWidget.showNextStep = function() {
        emailListEl.hide();
        messagelistEl.show();
        $('#email').hide();
        $(addressListEl).hide();
        messagelistEl.find("#msgcurrentcount").html(currentCount);
        txtMessage.focus();
    };
    shareWidget.updateShareCount = function(addCount) {
        shareCount = shareCount + addCount;
        var isVisible = $('#addmore').is(':visible');
        console.log(shareCount);
        if (shareCount > 0) {
            $("#toptabs").show();
            if (!isVisible) {
                $("#userlist").show();
            }
            else {
                $("#toptabs ul li a").removeClass("active");
                $("#addmoretab").addClass("active");
            }
            if (shareCount == 1) {
                $(".countext").html("1 friend");
            }
            else {
                $(".countext").html(shareCount + " friends");
            }
        }
        else {
            $("#toptabs").hide();
            $("#userlist").hide();
            $("#addmore").show();
        }
    };

    shareWidget.init = function() {
        txtEmail = $("#txtEmail");
        txtPassword = $("#txtPassword");
        errorEl = $("#error");
        loader = $("#loading");
        emailListEl = $("#emaillist");
        addressListEl = $("#addressbooklist");
        continueButton = $('#btncontinue');
        tableBody = emailListEl.find("table > tbody");
        currentCountEl = emailListEl.find("#currentcount");
        currentCountAddressEl = addressListEl.find("#currentcountbook");
        currentCount = 0;
        messagelistEl = $("#messagelist");
        shareBoxy = null;
        widget_div = $("#profile_pics");
        fb_login = $("#fblogin");
        txtSubject = $("#txtSubject");
        txtMessage = $("#txtMessage");
        if (ZOOMIN.ShareWidget.options.updateShareCount) {
            shareCount = ZOOMIN.ShareWidget.options.shareCount;
        }
        if (ZOOMIN.ShareWidget.options.isPublicAlbum) {
            isAlbumPublic = ZOOMIN.ShareWidget.options.isPublicAlbum;
            $("#toptabs").hide();
            $("#userlist").hide();
            $("#addmore").show();
        }
        else {
            if (ZOOMIN.ShareWidget.options.updateShareCount) {
                setTimeout(function() { shareWidget.updateShareCount(0); }, 500);
            }
        }
        if (typeof (ZOOMIN.ShareWidget.options.hasAccess) != undefined) {
            hasAccess = ZOOMIN.ShareWidget.options.hasAccess;
        }
        if (hasAccess) {
            shareWidget.BindAddressBook();
        }
        $("#btnLogIn").bind("click", function() { shareWidget.getEmailList(); });

        $("#chkAll").bind("click", shareWidget.checkAll);
        $("#uncheckAll").bind("click", shareWidget.uncheckAll);
        $("#chkAllbook").bind("click", shareWidget.checkAllBook);
        $("#uncheckAllbook").bind("click", shareWidget.uncheckAllBook);
        $("#btnContinueWithEmailList").bind("click", shareWidget.continueWithEmail);
        $("#btncontinue").bind("click", shareWidget.continueWithTypedEmail);
        $("#btnContinueAB").bind("click", shareWidget.continueWithEmailAB);
        $("#lnkEditList").bind("click", shareWidget.editList);
        $("#btnSend").bind("click", shareWidget.sendInvites);

        $('.rdShare').bind("click", shareWidget.confirmChangePublic);
        //$('.rdShare').bind("click", shareWidget.changePublic);

        $('.Unshare').bind("click", shareWidget.Unshare);



        $("#sharewidget .tabset li a").bind("click", function() { shareWidget.resetTabs(this); });
        $('#lnkTrusted').bind('click', shareWidget.showTrustedDesc);
        txtPassword.after("<input id='passworddefault' type='text' value='Password' class='initial textfield' />");
        txtPassword.hide();

        txtEmail.bind("focus", function() {
            $(this).removeClass("initial");
            if (this.value == "e-mail") this.value = "";
        });
        txtEmail.bind("blur", function() {
            $(this).addClass("initial");
            if (common.trim(this.value) == "") this.value = "e-mail";
        });

        $("#passworddefault").bind("focus", function() {
            txtPassword.show();
            txtPassword.focus();
            $(this).hide();
        });
        txtPassword.bind("blur", function() {
            if (common.trim(this.value) == "") {
                $("#passworddefault").show();
                $(this).hide();
            }
        });
    };
})();