(function() {
function loadImage(img, appendee) {
  return $("<img>").appendTo(appendee).attr('src', img.url).attr('onload', img.fn).attr('title', '#'+img.name);
}
  
function appendToIntro(img) {
  loadImage(img, jQuery('#portfolio-slider'));
  //jQuery('#portfolio-slider').append('<img src="' + img.url + '" />');
}

function appendToPortfolio(img) {
  loadImage(img, jQuery('#portfolio-slider'));
  jQuery('#portfolio-slider').after('<div class="nivo-html-caption" id="' + img.name + '">' + img.desc + '</div>');
  //jQuery('#portfolio-slider').append('<img src="' + img.url + '" title="#' + img.name + '" />').after('<div class="nivo-html-caption" id="' + img.name + '">' + img.desc + '</div>');
}

function checkForIntro(name) {
  var startIndex = name.indexOf('_') + 1;
  return name.substr(startIndex, 5).toLowerCase() === "intro";
}

window.portfolio = {
  groupId: 10156,
  folderId: (window.location.hostname === "localhost" ? 11461 : 10512),
  baseImgUrl: "/image/image_gallery?",
  firstImageLoaded: false,
  allImagesLoaded: false,
  imageCount: 0,
  loadCount: 0,
  loadImagesPassthrough: function(into, cb) {
    cb && cb(true);
  },
  loadImages: function(into, firstLoadedCb, allLoadedCb) {
    var me = this;
    var postData = "groupId="+me.groupId + "&folderId=" + me.folderId + "&serviceClassName=com.liferay.portlet.imagegallery.service.IGImageServiceUtil&serviceMethodName=getImages&serviceParameters=%5B%22groupId%22%2C%22folderId%22%5D&doAsUserId=";
    jQuery.post('/c/portal/json_service', postData,
      function(images) {
        var success = false;
        if (typeof (images) === "string") {
          images = JSON.parse(images);
        }
        if (images) {
          me.imageCount = images.length;
          images.sort(function(a, b) {
            var aIndex = a.name.indexOf("_"), bIndex = b.name.indexOf("_"), aOrd = 0, bOrd = 0;
            if (aIndex > 0 && bIndex > 0) {
              aOrd = a.name.slice(0, aIndex)-0;
              bOrd = b.name.slice(0, bIndex)-0;
              return aOrd - bOrd;
            }
            return 0;
          });
          var img;
          var loadedFn = function() {
            me.loadCount += 1;
            if (me.loadCount === me.imageCount) {
              allLoadedCb && allLoadedCb();
            }
          };
          for (var i = 0; i < me.imageCount; i++) {
            img = {
              url: me.baseImgUrl + "uuid=" + images[i].uuid + "&groupId=" + images[i].groupId,
              name: images[i].name ? images[i].name.replace(/ /g, '_') : '999999_Unknown',
              isIntro: checkForIntro(images[i].name),
              desc: images[i].description,
              fn: loadedFn
            };
            if (i === 0) {
              img.fn = function() { 
                me.firstImageLoaded = true;
                firstLoadedCb && firstLoadedCb();
                loadedFn();
              };
            }
            if (into === "intro") {
              if (img.isIntro === true) { appendToIntro(img); }
            } else { // portfolio
              appendToPortfolio(img);
            }
          } // end for.
          success = true;
        }
      }
    );
  }
};
})();
