/**
* @author sundar
*/
ZOOMIN.namespace("ZOOMIN.albumview.Manager");

(function() {
    var shareWidget = ZOOMIN.ShareWidget;
    var opt = ZOOMIN.albumview.Options || {};
    var util = ZOOMIN.util.Util;
    var orderBy = opt.orderBy;
    var photoCount = opt.photoCount;
    var thumbnail = opt.thumbnail;
    var editList = [];
    var EditPhoto = ZOOMIN.util.Edit;
    var paginationEnabled = (opt.photoCount > opt.pageSize);
    var mgr = ZOOMIN.albumview.Manager;
    var objBoxy = new Boxy($(opt.editAlbumDiv), { title: "Edit album details", modal: true, height: "auto", fixed: false, unloadOnHide: false, show: false });
    var objBoxyComingSoon = new Boxy($(opt.comingSoonDiv), { title: "ZoomIn is in The Changing Room", modal: true, height: "auto", fixed: false, unloadOnHide: false, show: false });

    //End
    var pl = new ZOOMIN.util.PhotoList({
        page: opt.page,
        pageSize: opt.pageSize,
        total: opt.photoCount,
        /**
        * generates the request
        * @param {Object} ob
        */
        getRequestCallback: function(ob) {
            var url = opt.url;
            var index = url.indexOf("/page/");
            if (index > -1) {
                url = url.substring(0, index + 1);
            }
            url += "/page/" + ob.page;
            url = util.addUrlParam(url, opt.PARAM_REQUEST_TYPE, opt.REQUEST_TYPE);
            url = util.addUrlParam(url, opt.PARAM_PAGESIZE, ob.pageSize);
            url = util.addUrlParam(url, opt.PARAM_ORDERBY, orderBy);
            url = util.addUrlParam(url, opt.PARAM_THUMB, thumbnail);

            return {
                url: url,
                dataType: "json"
            };
        },
        initData: opt.initData,
        /**
        * updates the html
        * @param {Object} ob
        */
        updateHtmlCallback: function(ob) {
            var str = "";

            if ($.isArray(ob)) {
                for (var i = 0; i < ob.length; i++) {
                    str += ob[i].Html;
                }
                $(opt.photoContainer).html(str);
            }
        },
        cache: true
    });
    var paginationOptions = {
        current_page: opt.page,
        items_per_page: opt.pageSize,
        num_display_entries: opt.numPageItems,
        num_edge_entries: opt.numEdgeEntries,
        /**
        * handle page change
        * @param {Object} newPage
        */
        callback: function(newPage) {
            //change the page
            pl.changePage(newPage);
            return false;
        }
    };

    //on ready
    $(function() {
        // tools option on the album detail page;
        $tooloptions = $(opt.toolsEl);
        $tooloptions.hide();
        $(opt.toolsParentEl).click(function(e) {
            e.preventDefault();
            e.stopPropagation();
            //$tooloptions.fadeIn('normal');
            if ($tooloptions.css('display') == "none")
                $tooloptions.show();
            else
                $tooloptions.hide();
        });
        $('*:not(' + opt.toolsEl + ',' + opt.toolsParentEl + ')').click(function(e) { $tooloptions.hide(); });

        //handle close of right pane
        $(opt.rightPaneClose).click(function(event) {
            var newPage;
            $(opt.rightPane).hide();
            $(opt.mainContainer).removeClass(opt.removeMainClass);
            event.preventDefault();

            //change the pagesize
            newPage = pl.changePageSize(opt.maxPageSize);

            //update pagination
            if (paginationEnabled) {
                paginationOptions.items_per_page = opt.maxPageSize;
                paginationOptions.current_page = newPage;
                paginationInit = true;
                $(opt.paginationContainer).pagination(opt.photoCount, paginationOptions);
            }
        });
        //handle sort change
        $(opt.dropDownId).change(function(event) {
            orderBy = this.value;
            //need to clear the cache since the it cant be reused
            pl.reset();
            paginationOptions.current_page = 0;
            //going to the new page
            $(opt.paginationContainer).pagination(opt.photoCount, paginationOptions);
        });
    });
    /**
    * adding a property so that it can be extended
    */
    mgr.photoList = pl;
    mgr.onPhotoNameSave = function(name, ob) {
        if (!isFeatureEnabled("editphotoname")) {
            return false;
        }

        var saveUrl = opt.photoSaveUrl.replace(opt.PHOTO_ID_REPLACE, encodeURIComponent(ob.id));
        saveUrl = util.addUrlParam(saveUrl, opt.PARAM_PHOTO_NAME, encodeURIComponent(name));
        if (name != ob.originalValue) {
            $.ajax({
                url: saveUrl,
                method: "GET",
                cache: false
            });
        }
    };
    mgr.deleteAlbum = function() {
        if (isFeatureEnabled("delete")) {
            var countText = "";
            if (opt.photoCount == 1) {
                countText = " the " + opt.photoCount + " photos";
            }
            else {
                countText = "all " + opt.photoCount + " photos";
            }
            Boxy.confirm("<p class='text'>Are you sure you want to permanently delete this album and all " + opt.photoCount + " photos it contains? Once you've deleted an album, it cannot be restored.</p>", function() { mgr.deleteAlbumAjax(); }, { height: "100px", width: "300px", title: "Delete this album?", closeable: false, titleClass: "altHeader", buttonClass: "btn-orange" });
        }
    };

    mgr.deleteAlbumAjax = function() {
        $.ajax({
            url: util.addUrlParam(opt.deleteUrl, opt.PARAM_ALBUM_ID, encodeURIComponent(opt.albumId)),
            method: "GET",
            cache: false,
            success: function() {
                window.location = opt.backLink;
            }
        });
    };

    mgr.downloadCallback = function(data) {
        $("#loadingajax").hide();
        var result = data.result;
        var message;
        var objBoxyDownload = new Boxy($(opt.comingSoonDiv), { title: "ZoomIn - Download Album Request", modal: true, height: "auto", fixed: false, unloadOnHide: false, show: false });
        if (result == 3)
            message = "Sorry! you do not have permission to download this album."
        else if (result == 0)
            message = "We have recieved your request for download of this album. We will email you soon with the link to download the album."
        else if (result == -2)
            message = "There is already an active request for download of this album. We will mail you the link to download this album very soon.";
        else
            message = "Oops! some error occured while processing your request for downloading this album. Please try again later.";

        $(opt.comingSoonDiv + " p").html(message);

        objBoxyDownload.show();
    };

    mgr.downloadAlbum = function() {
        $("#loadingajax").css({
            opacity: 0.7,
            height: $("#main-content").height()
        });
        $("#loadingajax").show();
        $.ajax({
            url: util.addUrlParam(opt.downloadUrl, opt.PARAM_ALBUM_ID, encodeURIComponent(opt.albumId)),
            type: "GET",
            dataType: "json",
            success: function(result) {
                mgr.downloadCallback(result);
            }
        });
    };

    mgr.showComingSoon = function(type) {
        if (type == "share") $(opt.comingSoonDiv + " #text").html("Sharing of new albums");
        if (type == "download") $(opt.comingSoonDiv + " #text").html("Download of albums");
        if (type == "organize") $(opt.comingSoonDiv + " #text").html("Organization of albums");
        objBoxyComingSoon.show();
    };
    mgr.showeditAlbum = function() {
        objBoxy.show();
        //preset values
        $(opt.editAlbumTitle).val(opt.title);
        $(opt.editAlbumCaption).val(opt.desc);

    };

    mgr.exportAlbum = function() {
        window.location.href = "/Export?" + opt.PARAM_ALBUM_ID + "=" + opt.albumId;
    };

    mgr.shareAlbum = function(e) {
        e.preventDefault();
        shareWidget.show(opt.shareAlbumDiv, opt.albumId);
    }

    mgr.ShowShare = function() {
        shareWidget.showshares(opt.showsharediv, opt.albumId);
    }



    mgr.editAlbum = function() {
        var title = null;
        var caption = null;
        var makeCall = false, url;
        objBoxy.hide();

        title = $(opt.editAlbumTitle).val();
        caption = $(opt.editAlbumCaption).val();
        url = util.addUrlParam(opt.urlEditAlbum, opt.PARAM_ALBUM_ID, encodeURIComponent(opt.albumId));
        if (title && title.length) {
            url = util.addUrlParam(url, opt.PARAM_NAME, encodeURIComponent(title));
            makeCall = true;
        }
        if (caption && caption.length) {
            url = util.addUrlParam(url, opt.PARAM_DESC, encodeURIComponent(caption));
            makeCall = true;
        }


        if (makeCall) {
            $.ajax({
                url: url,
                method: "GET",
                cache: false,
                dataType: "json",
                success: function(data) {
                    if (data.result === 0) {
                        //change title and description to match it
                        changeTitle(title);
                        $(opt.titleEl).empty().text(title);
                        $(opt.descEl).empty().text(caption);
                         //set latest values
                        opt.title = title;
                        opt.desc = caption;
                        _typeface_js.renderDocument(function(e) { e.style.visibility = 'visible' });
                    }
                }
            });
        }
    };

    $(pl).bind(ZOOMIN.util.PhotoList.EVENT_AFTER_CHANGE, function(event, ob) {
        var photos = ob.data;
        var saveButton = document.createElement('img');
        saveButton.src = opt.saveButton;
        saveButton.title = "save changes";
        $(saveButton).addClass(opt.classSave);
        var emptyTitle;
        for (var i = 0; i < photos.length; i++) {
            if (isFeatureEnabled("editphotoname")) {
                emptyTitle = "";
            }
            else {
                emptyTitle = " ";
            }
            editList.push(
				new EditPhoto(
					"#" + opt.PHOTONAME_ID_PREFIX + photos[i].ImageId,
					photos[i].PhotoName,
					mgr.onPhotoNameSave,
					{
					    classHover: opt.classHover,
					    classSelect: opt.classSelect,
					    classDefault: opt.classDefault,
					    classDisabled: opt.classDisabled,
					    maxLength: opt.maxLength,
					    identifier: photos[i].ImageId,
					    saveButton: saveButton,
					    emptyTitle: emptyTitle,
					    editDisabled: !isFeatureEnabled("editphotoname")
					}
				)
			);
        }
    });
    $(pl).bind(ZOOMIN.util.PhotoList.EVENT_BEFORE_CHANGE, function(event) {
        for (var i = 0; i < editList.length; i++) {
            editList[i].unregister();
        }
        editList = [];
    });
    //register events
    var registerEvents = function() {
        $(opt.deleteAlbumEl).click(mgr.deleteAlbum);
        $(opt.editAlbumEl).click(mgr.showeditAlbum);
        $(opt.editAlbumButton).click(mgr.editAlbum);
        $(opt.exportAlbumEl).click(mgr.exportAlbum);
        $(opt.shareAlbumEl).click(mgr.shareAlbum);
        $(opt.downloadAlbumEl).click(function() { mgr.downloadAlbum(); });
        $(opt.organizeAlbumEl).click(function() { mgr.showComingSoon("organize") });


        //initialize pagination
        if (paginationEnabled) {
            $(opt.paginationContainer).pagination(opt.photoCount, paginationOptions);
        } else {
            //this is for handling no pagination case
            pl.changePage(opt.page);
            $(opt.paginationContainer).hide();
        }
    };

    var isFeatureEnabled = function(feature) {
        var res = false;
        for (var i = 0; i < opt.features.length; i++) {
            if (opt.features[i].toLowerCase() === feature.toLowerCase()) {
                res = true;
                break;
            }
        }
        return res;
    };
    //copying from photoview mgr, move this to util
    var changeTitle = function(newName) {
        var arr = $(document).attr('title').split('|');
        arr[arr.length - 1] = newName;

        $(document).attr('title', arr.join(" | "));
    };

    registerEvents();
})();
(function() {
    ZOOMIN.namespace("ZOOMIN.upload", "ZOOMIN.options");
    $(ZOOMIN).bind('updateSecurity', function(eve, det) {
        if (det.isPublic) {
            $('#userlistpublic').show();
            $('#userlistprivate').hide();
        } else {
            $('#userlistpublic').hide();
            $('#userlistprivate').show();
        }
    });
})();