﻿// -------------------------------------------------
// gallery
// -------------------------------------------------

$(document).ready(function() {

    //do for each slider component

    $(".cjq-slider").each(function() {
        //set slider
        var slider = this;

        //default values
        var _itemWidth = 0;
        var _itemHeight = 0;
        var _galleryPosition = 0;
        var _galleryStartPos = 0;
        var _rows = 1;
        var _columns = 1;
        var _direction = "h";
        var _maxImagesVisible = _columns * _rows;

        //set values
        var jO = $(this);
        var rawparameters = ca_getModuleArg(jO, 'parameters');

        if (rawparameters != null) {
            var parameters = rawparameters.split('|');

            _rows = getParameter(parameters, "rows", 1);
            _columns = getParameter(parameters, "columns", 1);
            _direction = getParameter(parameters, "direction", "h");
        }
        var items = jO.find(".clipcontainer .item").length;
        _itemWidth = jO.find(".clipcontainer .item").width();
        _itemHeight = jO.find(".clipcontainer .item").height();
        var itemsRow = Math.ceil(items / _rows);
        var containerWidth = (itemsRow * _itemWidth);
        var itemsColumn = Math.ceil(items / _columns);
        var containerHeight = (itemsColumn * _itemHeight);

        //set width
        if (_direction == "v") {
            jO.find(".clipcontainer .itemcontainer").height(containerHeight);
        } else
            jO.find(".clipcontainer .itemcontainer").width(containerWidth);

        //show/hide buttons
        var buttonBack = jO.find(".back");
        var buttonNext = jO.find(".next");
        if (_galleryPosition == 0) {
            buttonBack.hide();
        }
        if (_galleryPosition == (itemsColumn - _rows)) {
            buttonNext.hide();
        }
        if (items > _maxImagesVisible) {
            //show buttons

            //back
            buttonBack.click(function() {
                if (_galleryPosition > 0) {
                    _galleryPosition--;
                    moveGallery(_galleryPosition, slider, _direction, _itemWidth, _itemHeight, _galleryStartPos);

                    //show&hide buttons
                    buttonNext.show();
                    if (_galleryPosition == 0) {
                        buttonBack.hide();
                    }
                }
            });

            //next
            buttonNext.click(function() {
                var maxpos = _direction == "v" ? (itemsColumn - _rows) : (itemsRow - _columns);

                if (_galleryPosition < maxpos) {
                    _galleryPosition++;
                    moveGallery(_galleryPosition, slider, _direction, _itemWidth, _itemHeight, _galleryStartPos);

                    //show&hide buttons
                    buttonBack.show();
                    if (_galleryPosition == maxpos) {
                        buttonNext.hide();
                    }
                }

            });
        } else {
            //hide buttons
            buttonBack.hide();
            buttonNext.hide();
        }
    });
});

function moveGallery(pos, slider, direction, itemWidth, itemHeight, galleryStartPos) {
    $(slider).find(".clipcontainer .itemcontainer:animated").stop(true, false);
    if (direction == "v") {
        //vertical

        var targetPos = pos * -itemHeight + galleryStartPos;
        $(slider).find(".clipcontainer .itemcontainer").animate({
            top: targetPos
        }, 600);

    } else {
        //horizontal
        var targetPos = pos * -itemWidth + galleryStartPos;
        $(slider).find(".clipcontainer  .itemcontainer").animate({
            left: targetPos
        }, 600);
    }
}

function getParameter(parameters, name, defaultValue) {
    var result = defaultValue;

    for (var i = 0; i < parameters.length; i++) {
        var param = parameters[i].split(":");

        if (param[0] == name) {
            result = param[1];
        }
    }
    return result;
}
