/home/coolpkct/www/websites/cake3.cool.rocks/_themes/zero/js/skgalleries.js
/**
 * Part of Showkase web site management package
 *
 * @package Showkase
 * @author Jack Hardie {@link http://www.jhardie.com}
 * @copyright Copyright (c) 2014, SimpleViewer Inc.
 */

/**
 * Setup gallery resize
 *
 * @param object parameters from template
 * pageType string
 * pageVersion string
 * containerId gallery container id
 * offset integer theme setting top of page to top of gallery in px
 * external integer user setting
 * internal integer user setting
 * targetWidth integer optimize for this image width
 * targetHeight integer optimize for this image height
 */
function fitGallery(settings) {
    if (!validFit(settings)) return;
    var jbPadding = 130,
        svPadding = 190,
        jbLogo    = 24,
        svLogo    = 30,
        pro = settings.pageVersion.toLowerCase().indexOf('pro') != -1;
    switch (settings.pageType) {
        case 'juicebox' :
            settings.padding = jbPadding - settings.internal;
            if (pro) {
                settings.padding -= jbLogo;
            }
            break;
        case 'simpleviewer' :
            settings.padding = svPadding - settings.internal;
            if (pro) {
                settings.padding -= svLogo;
            }
            break;
        default :
            return;
    }
    settings.offset -= settings.external;
    settings.containerParent = $('#' + settings.containerId).parent();
    if (!settings.containerParent.length) {
        return;
    }
    // closure to cope with .width() sometimes returning zero on leaving full screen mode
    var parentWidth = settings.containerParent.width();
    if (parentWidth <= 0) {
        return;
    }
    settings.aspectRatio = settings.targetHeight/settings.targetWidth;
    $(window).on(
        'resize', 
        settings,
        function(event) {
            var containerParent = event.data.containerParent,
                currentParentWidth = containerParent.width();
            if (currentParentWidth > 0) {
                parentWidth = currentParentWidth;
            }
            var winHeight = window.innerHeight ? window.innerHeight : $(window).height(),
                availableHeight = parseInt(winHeight)-event.data.offset,
                galleryHeight = Math.floor(parentWidth*event.data.aspectRatio) + event.data.padding;
            if (galleryHeight <= 0 || availableHeight <= 0) {
                return;
            }
            containerParent.height(Math.min(galleryHeight, availableHeight));
        }
    ); 
    $(window).triggerHandler('resize');
}

/**
 * Check settings for template errors
 *
 * @param object settings
 * @return boolean
 */
function validFit(settings) {
    var n = 'number',
        s = 'string';
    return (
        typeof settings.pageType        == s
        && typeof settings.pageVersion  == s
        && typeof settings.containerId  == s
        && typeof settings.offset       == n
        && typeof settings.external     == n
        && typeof settings.internal     == n
        && typeof settings.targetHeight == n
        && typeof settings.targetWidth  == n
        && settings.targetHeight        >= 0
        && settings.targetWidth         >= 0
    );
}