﻿/// <reference path="~/js/jquery-1.4.1-vsdoc2.js" />
/// <reference path="~/js/json2_min.js" />
/// <reference path="~/js/moc.base.js" />

$(function() {
    moc.provide("portlet.manager"
        , {
            init: function() {

                $(".portletcategoryitem").hide();
                moc.portlet.selectors.portletOptionsContainer.hide();

                moc.portlet.selectors.aCustomize.click(function() {
                    var options = {};
                    moc.portlet.selectors.portletOptionsContainer.toggle('blind', options, 500);
                    return false;
                });

                $("span[wid='category']").click(function(e) {
                    var portletcategoryid = $(this).parent().attr("portletcategoryid");
                    $(".portletcategoryitem[portletcategoryid_item='" + portletcategoryid + "']").show().children().toggle();
                });

            } // moc.portlet.manager.init
        }) // moc.portlet.manager
});

$(function() {
    moc.provide("portlet.zones"
    , {
        getBaseLayoutVar: function(portlet) {
            var zones = new Array();
            var layout = {
                layoutid: portlet.parent().parent().attr("lid")
                    , list: zones
            }
            return layout;
        } // moc.portlet.zones.getBaseLayoutVar

        , removePortlet: function(instanceId) {
            var portlet = moc.portlet.getRootSelector(instanceId);

            var removalinfo = {
                layoutid: portlet.parent().parent().attr("lid")
                , instanceid: portlet.attr("pid")
            }

            var jsonText = JSON.stringify(removalinfo, moc.utility.replacer);
            var rurl = moc.serviceUtil.serviceUrls.wsPortlet + "layout/instance";

            $.ajax({
                type: 'DELETE'
                    , contentType: "application/json"
                    , data: jsonText
                    , dataType: "text"
                    , processData: false
                    , url: rurl
                    , error: function(request, status, errorThrown) {
                        alert(status);
                    }
                    , success: function() {
                        $("div[pid='" + removalinfo.instanceid + "']").remove();
                    }
            });
        } // moc.portlet.zones.removePortlet

        , updateCollapsed: function(sender) {
            var portlet = moc.portlet.getRootSelector(sender);
            var layout = moc.portlet.zones.getBaseLayoutVar(portlet);
            var portletZoneId = portlet.parent().attr("zid");
            var positions = {
                zoneid: portletZoneId
                , list: new Array()
            }
            layout.list[0] = positions;

            var position = {
                zoneid: $(portlet).parent().attr("zid")
                        , orgzoneid: $(portlet).attr("orgzid")
                        , instanceid: $(portlet).attr("pid")
                        , seqno: -1 // don't update
                        , collapsed: $(portlet).attr("collapsed")
            }

            positions.list[0] = position;

            var jsonText = JSON.stringify(layout, moc.utility.replacer);
            var rurl = moc.serviceUtil.serviceUrls.wsPortlet + "layout/position";

            $.ajax({
                type: 'POST'
                    , contentType: "application/json"
                    , data: jsonText
                    , dataType: "text"
                    , processData: false
                    , url: rurl
                    , error: function(request, status, errorThrown) {
                        alert(status);
                    }
                    , success: function() {

                    }
            });
        } // moc.portlet.zones.updateCollapsed

        , init: function() {
            var afterMoveListener = function(movedPortlet, location, allPortlets) {

                var layout = moc.portlet.zones.getBaseLayoutVar(movedPortlet);

                allPortlets.each(function(idx, portlet) {
                    var portletZoneId = $(portlet).parent().attr("zid");
                    var fnd = false;

                    for (var i = 0; i < layout.list.length; i++) {
                        if (layout.list[i].zoneid == portletZoneId) {
                            fnd = true;
                            break;
                        }
                    }
                    if (!fnd) {
                        var positions = {
                            zoneid: portletZoneId
                            , list: new Array()
                        }
                        layout.list[layout.list.length] = positions;
                    }
                });

                // Loop through each portlet in the list and update its sequence number.
                allPortlets.each(function(idx, portlet) {
                    var position = {
                        zoneid: $(portlet).parent().attr("zid")
                        , orgzoneid: $(portlet).attr("orgzid")
                        , instanceid: $(portlet).attr("pid")
                        , seqno: idx
                        , collapsed: $(portlet).attr("collapsed")
                    }

                    for (var i = 0; i < layout.list.length; i++) {
                        if (layout.list[i].zoneid == position.zoneid) {
                            layout.list[i].list[layout.list[i].list.length] = position;
                            break;
                        }
                    }
                });

                var jsonText = JSON.stringify(layout, moc.utility.replacer);
                var rurl = moc.serviceUtil.serviceUrls.wsPortlet + "layout/position";

                allPortlets.each(function(idx, portlet) {
                    if ($(portlet).parent().attr("zid") != $(portlet).attr("orgzid")) {
                        $(portlet).attr("orgzid", $(portlet).parent().attr("zid"));
                    }
                });

                $.ajax({
                    type: 'POST'
                    , contentType: "application/json"
                    , data: jsonText
                    , dataType: "text"
                    , processData: false
                    , url: rurl
                    , error: function(request, status, errorThrown) {
                        alert(status);
                    }
                    , success: function() {

                    }
                });
            }; // moc.portlet.zones.afterMoveListener   

            var opts = {
                selectors: {
                    columns: ".fluid-column",
                    modules: ".portlet",
                    lockedModules: ".locked",
                    dropWarning: ".flc-reorderer-dropWarning"
                }
                    , listeners: {
                        afterMove: afterMoveListener
                    }
            };

            fluid.reorderLayout("div[id$='PortletLayout1']", opts);

            // Set the layout instance id on all the portlet zones
            $(".fluid-column").attr("lid", $(".fluid-vertical-order").attr("lid"));

        } // moc.portlet.zones.init
    }); // moc.portlet.zones
});

$(function() {
    moc.provide("portlet"
    , {
        selectors: {

            aCustomize: null
            , portletOptionsContainer: null
            , portletCategories: null

            , init: function() {

                this.aCustomize = $("a[id$='aCustomize']");
                this.portletOptionsContainer = $("div[wid='portletmanageroptionscontainer']");

                this.portletCategories = $(".portletcategory");
            }

} // moc.portlet.selectors

        , resetCssOnMove: function(item, sender, reciever) {

            // old css
            var ocss_container = sender.attr('css_container');
            var ocss_h1 = sender.attr('css_h1');
            var ocss_h2 = sender.attr('css_h2');
            var ocss_content = sender.attr('css_content');
            // new css
            var css_container = reciever.attr('css_container');
            var css_h1 = reciever.attr('css_h1');
            var css_h2 = reciever.attr('css_h2');
            var css_content = reciever.attr('css_content');

            //item.find("#portlet").removeClass(ocss_container).addClass(css_container);
            item.attr("class", css_container + " portlet");
            item.find(".portlet-header0").attr("class", css_h1 + " portlet-header0");
            item.find(".portlet-header1").attr("class", css_h2 + " portlet-header1");
            item.find("." + ocss_content).attr("class", css_content);

        } // moc.portlet.resetCssOnMove

        , loading: function(container) {

            container.empty();
            var loadingGraphic = '<div id="loadingFeed" class="portlet-loading" style="display: none;"><img src="ektimages/gs/ajax-loader.gif" style="vertical-align: middle;" /> Loading....</div>';
            container.append($(loadingGraphic));
            container.find(".portlet-loading").show();

        } // moc.portlet.loading

        , clearLoading: function(container) {
            container.find(".portlet-loading").hide();
            container.empty();
        } // moc.portlet.clearLoading

        , error: function(container) {

            container.empty();
            var loadingGraphic = '<div id="failedFeed" class="failed" style="display: none;">Failed to Load...</div>';
            container.append($(loadingGraphic));
            container.find(".portlet-error").show();

        } // moc.portlet.error

        , clearError: function(container) {
            container.find(".portlet-error").hide();
            container.empty();
        } // moc.portlet.clearPortlet

        , getRootSelector: function(instanceId) {
            return $("div[wid='" + instanceId + "_root']");
        } // moc.portlet.getRootSelector

        , toggleSettings: function(instanceId) {
            var rootSelector = moc.portlet.getRootSelector(instanceId);
            var options = {};
            rootSelector.find('.portlet-settings').toggle();
            return false;
        } // moc.portlet.toggleSettings

        , maxMinPortlet: function(instanceId) {
            var rootSelector = moc.portlet.getRootSelector(instanceId);
            var isVisible = false;
            var options = {};
            //rootSelector.find('.portlet-content').toggle();
            if (rootSelector.attr("collapsed") == "true") {
                rootSelector.find('.portlet-content').show();
                rootSelector.attr("collapsed", "false");
                rootSelector.find("img[wid='" + instanceId + "_minmaxbutton']").removeClass("portlet-menu-expanded").addClass("portlet-menu-collapsed").attr("title", "Minimize");
            }
            else {
                rootSelector.find('.portlet-content').hide();
                isVisible = true;
                rootSelector.attr("collapsed", "true");
                rootSelector.find("img[wid='" + instanceId + "_minmaxbutton']").removeClass("portlet-menu-collapsed").addClass("portlet-menu-expanded").attr("title", "Maximize");
            }
            moc.portlet.zones.updateCollapsed(instanceId);
            return false;
        } // moc.portlet.maxMinPortlet

        , createSettingsDoc: function(layoutId, portletInstanceId, settingJson) {
            //<psettings xmlns="urn:Moc.Public.Document" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><layoutid>layoutid</layoutid><portletinstanceid>e584d1c6-1099-4803-a0b7-fff8982d5d03</portletinstanceid><settings>settings</settings></psettings>

            var doc = '<psettings xmlns="urn:Moc.Public.Document" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">';
            doc += '<layoutid>' + layoutId + '</layoutid>' + '<portletinstanceid>' + portletInstanceId + '</portletinstanceid><settings>' +
                moc.utility.urlencode(JSON.stringify(settingJson)) + '</settings></psettings>';

            return doc;

        } // moc.portlet.createSettingDoc

        , savePortletSetting: function(settingsDoc, successCb, errorCb) {

            var rurl = moc.serviceUtil.serviceUrls.wsPortlet + "layout/instance/settings";

            $.ajax({
                type: "POST"
                , url: rurl
                , contentType: "text/xml"
                , data: settingsDoc
                , cache: false
                , async: true
                , success: function(data, status, request) {
                    if (successCb)
                        successCb();
                }
                , error: function(request, status, errorThrown) {
                    if (errorCb)
                        errorCb();
                }
            }); // $.ajax
        } // moc.portlet.savePortletSetting

        , init: function() {
            moc.portlet.selectors.init();
            moc.portlet.manager.init();
            moc.portlet.zones.init();
        } // moc.portlet.init
        });
    });                             // moc.portlet

$(function() {
    moc.portlet.init();
});
