$j = jQuery;

self.PortfolioManager = {
    aThumbs: [],
    aThumb2Index: {},
    sContextItemType: "",
    sSlug: "",
    bInProgress: false,
    iActiveIndex: 0,
    onMediaLoad: null,
    init: function() {
        var oSelf = self.PortfolioManager;
        // parse url
        var aUrlBits = document.location.pathname.substr(1).split("/");
        // person|institution|event|document|group
        oSelf.sContextItemType = aUrlBits[0];
        // [.., "<slug>", "portfolio", ""]
        oSelf.sSlug = aUrlBits[aUrlBits.length - 3];
        var sFilename = document.location.hash.indexOf("#file_")==0?
            document.location.hash.substr(6): "";
        // parse list of photos
        // add onclick functions to them
        $j("#dyn_portfolio").removeClass("hidden");
        $j("#media_thumbs a").click(oSelf.activate).map(oSelf.registerImage);
        // check the currently selected
        if (sFilename && oSelf.aThumb2Index[sFilename]==null) {
            document.location.href = document.location.pathname;
        }
        // load if # defined
        $j("#media_next").click(oSelf.activateNext);
        $j("#media_previous").click(oSelf.activatePrevious);
        
        $j("#media_delete").click(oSelf.deleteMediaFile);
        
        self.PortfolioManager.activate(sFilename);
    },
    destruct: function() {
        self.PortfolioManager = null;
    },
    registerImage: function() {
        var oSelf = self.PortfolioManager;
        var oLink = $j(this);
        var sFilename = oLink.attr("href").split("#")[1].substr(5);
        oSelf.aThumb2Index[sFilename] = oSelf.aThumbs.length;
        oSelf.aThumbs[oSelf.aThumbs.length] = oLink;
        return oLink;
    },
    activateNext: function() {
        var oSelf = self.PortfolioManager;
        if (oSelf.iActiveIndex < oSelf.aThumbs.length - 1) {
            oSelf.aThumbs[oSelf.iActiveIndex+1].click();
        } else {
            return false;
        }
    },
    activatePrevious: function() {
        var oSelf = self.PortfolioManager;
        if (oSelf.iActiveIndex > 0) {
            oSelf.aThumbs[oSelf.iActiveIndex-1].click();
        } else {
            return false;
        }
    },
    activate: function(sFilename) {
        var oSelf = self.PortfolioManager;
        if (oSelf.bInProgress) {
            return false;
        }
        oSelf.bInProgress = true;
        if (!oSelf.aThumbs.length) {
            return
        } 
        if (typeof(sFilename) != "string") {
            sFilename = $j(this).attr("href").split("#")[1].substr(5);
        }
        if (!sFilename) {
            sFilename = oSelf.aThumbs[0].attr("href").split("#")[1].substr(5);
        }
        // activate another thumbnail
        oSelf.aThumbs[oSelf.iActiveIndex].parent().removeClass("active");
        oSelf.iActiveIndex = oSelf.aThumb2Index[sFilename];
        oSelf.aThumbs[oSelf.iActiveIndex].parent().addClass("active");
        // hide existing image and description
        $j("#media_file .hidable").fadeOut("slow", function() {oSelf.getNewImage(sFilename)});
        $j("#media_desc .hidable").fadeOut("slow");
        return true;
    },
    getNewImage: function(sFilename) {
        var oSelf = self.PortfolioManager;
        var sToken = oSelf.aThumbs[oSelf.iActiveIndex].attr("href").split("#")[1].substr(5);
        $j("#in_progress").show();
        $j.get(
            location.pathname + "file_" + sToken + "/json/",
            oSelf.showResults
        );
    },
    showResults: function(sData) {
        var oSelf = self.PortfolioManager;
        eval("var oData = " + sData);
        if (!oData) {
            $j("#media_file_content").html(gettext("Media file is broken."));
            return false;
        }
        // show new image and description
        $j("#in_progress").hide();
        $j("#media_file_content").html(oData.html);
        $j("#media_desc_content").html(oData.description);
        $j("#media_desc_content_detail").html(oData.description);
        $j("#media_file .hidable, #media_desc .hidable").fadeIn("slow");
        
        // previous navigation
        if (oSelf.iActiveIndex > 0) {
            $j("#media_previous>span").removeClass("disabled");
            $j("#media_previous").attr("href", oSelf.aThumbs[oSelf.iActiveIndex-1].attr("href"));
        } else {
            $j("#media_previous>span").addClass("disabled");
            $j("#media_previous").attr("href", "");
        }
        // next navigation
        if (oSelf.iActiveIndex < oSelf.aThumbs.length - 1) {
            $j("#media_next>span").removeClass("disabled");
            $j("#media_next").attr("href", oSelf.aThumbs[oSelf.iActiveIndex+1].attr("href"));
        } else {
            $j("#media_next>span").addClass("disabled");
            $j("#media_next").attr("href", "");
        }
        // administration links
        $j("#media_change").attr("href", document.location.pathname + "file_" + oData.token + "/");
        $j("#media_delete").attr("href", document.location.pathname + "file_" + oData.token + "/delete/");
        
        // hook for other libraries
        if (typeof(self.PortfolioManager.onMediaLoad)=="function") {
            self.PortfolioManager.onMediaLoad();
        }
        
        oSelf.bInProgress = false;
    },
    deleteMediaFile: function() {
        var oSelf = self.PortfolioManager;
        var sToken = oSelf.aThumbs[oSelf.iActiveIndex].attr("href").split("#")[1].substr(5);
        open_popup(
            gettext("Delete Media File"),
            532, "auto",
            location.pathname + "file_" + sToken + "/popup_delete/",
            true
        );
        return false;
    }
};

$j.get(
    settings.jetson_media_url + "js/jquery/jquery.popup.js",
    function(sData) {
        eval(sData);
        $j(document).ready(function(){
            self.PortfolioManager.init();
        });
    }
);

$j(window).unload(function() {
    self.PortfolioManager.destruct();
});
