$(function(){
    $('.nav-top').navTop();

    $('label.placeholder').placeholder();

    $('.teasers').listFlow({speed: 300, timeout: 5000});

    $('.product-item .descr').productDescr();

    $('select.custom').jSelect();

    $('.cart').cartToggle({tabSpeed: 150, contentSpeed: 330});

    $('.product-item .img a').fancybox({
        autoScale: true,
        titleShow: false,
        overlayColor: '#000',
        overlayOpacity: 0.5,
        centerOnScroll: true
    });

    /*
    $('.product-item .links a, .product-item .descr-comments a.add_comment').fancybox({
        autoScale: true,
        titleShow: false,
        overlayColor: '#000',
        overlayOpacity: 0.5,
        centerOnScroll: true
    });
    */


/* auth */
    
});



/* PLUGINS
----------------------------------------------- */
/* jSelect */
(function($){
$.fn.jSelect = function(o){
    o = $.extend({
        speed: 'normal'
    }, o || {});

    var $doc = $(document),
        isExpanded = false;

    return this.each(function(){
        var $select = $(this),
            selectWidth = this.offsetWidth,
            $optionArray = $('option', $select),
            $optionSelected = $optionArray.filter(':selected'),
            optionSelectedText = $optionSelected.text(),

            $jSelect = $('<div class="jselect" />'),
            $jSelectTitle = $('<div class="jselect-title" />').appendTo($jSelect),
            $jSelectTitleWrap = $('<div class="jselect-title-wrap" />').appendTo($jSelectTitle),
            $jSelectTitleSPAN = $('<span class="placeholder" />').appendTo($jSelectTitleWrap),
            $jSelectList = $('<div class="jselect-list" />').appendTo($jSelect),
            $jSelectListUL = $('<ul />').appendTo($jSelectList),
            $jSelectListArr = $('<div class="jselect-arr"></div>').appendTo($jSelectTitle);

        $select.hide();
        $jSelect.width(selectWidth);
        $jSelectTitleSPAN.text(optionSelectedText);

        if ($optionSelected.hasClass('placeholder')) {
            $jSelectTitleSPAN.addClass('placeholder');
        }

        $optionArray.each(function(i){
            var $option = $(this);

            if ($option.hasClass('placeholder')) {
                return;
            }

            $('<li />', {
                text: $option.text(),
                click: function(){
                    set($option);
                }
            }).hover(
                function(){
                    $(this).addClass('hover');
                },
                function(){
                    $(this).removeClass('hover');
                }
            ).appendTo($jSelectListUL);
        });

        $jSelect.insertAfter($select);

        $jSelect.click(function(e){
            e.stopPropagation();

            if ($jSelect.hasClass('jselect-expanded')) {
                hide();
            } else {
                if (isExpanded) {
                    hide();
                    show();
                } else {
                    show();
                }
            }
        });

        $doc.click(function(){
            if (isExpanded) {
                hide();
            }
        });

        function show() {
            $jSelect.addClass('jselect-expanded');
            $jSelectList.show();
            isExpanded = true;
        }

        function hide() {
            $('.jselect').removeClass('jselect-expanded');
            $('.jselect-list').hide();
            isExpanded = false;
        }

        function set($option) {
            $jSelectTitleSPAN.text($option.text()).removeClass('placeholder');
            $select.val($option.val()).change();
        }
    });
};
})(jQuery);



/* productDescr */
(function($){
$.fn.productDescr = function(o){
    o = $.extend({
        speed: 'normal'
    }, o || {});

    var $root = this,
        $descrWrap = $('.descr-wrap', $root),
        $buttonDescrText = $('.button-descr-text', $root),
        $buttonDescrComments = $('.button-descr-comments', $root),
        $descrText = $('.descr-text', $root),
        $descrComments = $('.descr-comments', $root);

    $buttonDescrText.click(function(){
        $descrComments.hide();
        $descrText.fadeIn(o.speed, function(){

        });
            $buttonDescrComments.removeClass('button-act');
            $buttonDescrText.addClass('button-act');
    });

    $buttonDescrComments.click(function(){
        $descrText.hide();
        $descrComments.fadeIn(o.speed, function(){

        });
            $buttonDescrText.removeClass('button-act');
            $buttonDescrComments.addClass('button-act');
    });

    return this;
};
})(jQuery);



/* placeholder */
(function($){
$.fn.placeholder = function(value){
    var className = value || 'placeholder';

    return this.each(function(){
        var $label = $(this),
            placeholder = $label.text(),
            $input = $('#' + $label.attr('for')),
            isTextarea = ($input.get(0).nodeName.toLowerCase() == 'textarea');

        $input.data('placeholder', placeholder);

        if ($input.val() == '' || $input.val() == placeholder) {
            if (isTextarea) $input.text(placeholder);
            $input.val(placeholder).addClass(className);
        }

        $input.focus(function(){
            if ($input.val() == placeholder) {
                if (isTextarea) $input.text('');
                $input.val('').removeClass(className);
            }
        }).blur(function(){
            if ($input.val() == '') {
                if (isTextarea) $input.text(placeholder);
                $input.val(placeholder).addClass(className);
            }
        });
    });
};
})(jQuery);



/* navTop */
(function($){
$.fn.navTop = function(o){
    o = $.extend({
        speed: 'normal'
    }, o || {});

      
    var $root = this,
        $m1items = $('.m1-i', $root),
        $m1links = $('.m1 a', $root),
        $m2wrap = $('.m2-wrap', $root),
        $m2lists = $('.m2', $root),
        $iframe = $('iframe', $root),
        index,
        tShow,
        tHide,
        expanded = false;


    $m1items.hover(
        function(){
            index = $m1items.index(this);
            if (expanded) {
                navShow();
            } else {
                tShow = setTimeout(navShow, 500);
            }
        },
        function(){
            clearTimeout(tShow);
        }
    );

    $root.hover(
        function(){
            clearTimeout(tHide);
        },
        function(){
            tHide = setTimeout(navHide, 500);
        }
    );


    function navShow() {
        $m1links.removeClass('hover').eq(index).addClass('hover');
        $m2wrap.show();
        $m2lists.hide().eq(index).show();
        $iframe.height($m2lists.eq(index).height());
        expanded = true;
    }


    function navHide() {
        $m1links.removeClass('hover');
        $m2wrap.hide();
        $m2lists.hide();
        $iframe.height(0);
        expanded = false;
    }


    return this;
};
})(jQuery);



/* cartToggle */
(function($){
$.fn.cartToggle = function(o){
    o = $.extend({
        tabSpeed: 'normal',
        contentSpeed: 'normal'
    }, o || {});


    var doc = document.documentElement,
        $win = $(window);


    return this.each(function(){
        var $cart = $(this),
            $cartTab = $('.cart-tab', $cart),
            cartTabWidth = $cartTab.width(),
            $cartClose = $('.cart-close', $cart),
            $cartContent = $('.cart-content', $cart),
            $cartProducts = $('.cart-products'),
            cartContentWidth = $cartContent.width(),
            $iframe = $('iframe', $cart),
            $PNGs = $('.png', $cart);

        $cartTab.click(cartShow);
        $cartClose.click(cartHide);


        $cartProducts.height(doc.offsetHeight - 300);
        $win.resize(function(){
            $cartProducts.height(doc.offsetHeight - 300);
        });


        function cartShow() {
            $PNGs.refreshPNG();
            $cart.animate({
                width: 0
            }, {
                duration: o.tabSpeed,
                queue: false,
                complete: function(){
                    $cartTab.hide();
                    $cartContent.show();
                    $iframe.height($cartContent.height());
                    $cart.animate({
                        width: cartContentWidth
                    }, {
                        duration: o.contentSpeed,
                        queue: false
                    });
                    $PNGs.refreshPNG();
                }
            });
        }

        function cartHide() {
            $PNGs.refreshPNG();
            $cart.animate({
                width: 0
            }, {
                duration: o.contentSpeed,
                queue: false,
                complete: function(){
                    $cartTab.show();
                    $cartContent.hide();
                    $iframe.height(0);
                    $cart.animate({
                        width: cartTabWidth
                    }, {
                        duration: o.tabSpeed,
                        queue: false
                    });
                    $PNGs.refreshPNG();
                }
            });
        }

    });
};
})(jQuery);



/* listFlow */
(function($){
$.fn.listFlow = function(o){
    o = $.extend({
        speed: 'normal',
        vertical: false,
        resizeable: false,
        timeout: null
    }, o || {});

    var $win = $(window);

    return this.each(function(){
        var $root = $(this),

            $viewport = $('.list-viewport', $root),
            viewportWidth = 0,
            viewportHeight = 0,

            $canvas = $('.list-canvas', $root),
            canvasWidthCurrent = 0,
            canvasWidthNew = 0,
            canvasHeightCurrent = 0,
            canvasHeightNew = 0,

            $list = $('.list', $root),
            listWidth = 0,
            listHeight = 0,

            $listItems = $('.i', $list),
            listItemsCount = $listItems.length,

            colsWidth = $listItems.outerWidth(),
            colsGap = parseInt($listItems.css('margin-right')) || 0,
            colsWidthFull = colsWidth + colsGap,
            colsCount = 1,
            colsVisibleCount = 1,

            $br = $('.br', $list),

            rowsHeight = $listItems.outerHeight(),
            rowsGap = $br.outerHeight() || 0,
            rowsHeightFull = 0,
            rowsCount = 0,
            rowsVisibleCount = 0,

            $pages = $('.list-pages', $root),
            $pagesItem = $('<div />'),
            $pagesItems,
            pagesItemsCountCurrent = 0,
            pagesItemsCountNew = 0,
            pageIndexCurrent = 0,
            pageIndexNew = 0,
            
            $controls = $('.list-controls', $root),
            controlsHeight = $controls.outerHeight(),
            $controlPrev = $('.list-control-prev', $root),
            $controlNext = $('.list-control-next', $root),

            $counter = $('.list-counter', $root),

            t,
            busy = false;


        if (listItemsCount < 1) {
            return;
        }


        $listItems.each(function(){
            var listItemHeight = $(this).outerHeight();
            if (listItemHeight > rowsHeight) {
                rowsHeight = listItemHeight;
            }
        });
        rowsHeightFull = rowsHeight + rowsGap;


        $controls.height(0).show();


        $root.hover(controlsShow, controlsHide);


        $controlPrev.click(function(){
            if (busy) {
                return;
            }

            if (pageIndexCurrent - 1 < 0) {
                return;
            }

            pageIndexNew = pageIndexCurrent - 1;

            setPage();
        });


        $controlNext.click(function(){
            if (busy) {
                return;
            }

            if (pageIndexCurrent + 1 >= pagesItemsCountNew) {
                return;
            }

            pageIndexNew = pageIndexCurrent + 1;

            setPage();
        });


        renderList();


        if (o.resizeable) {
            $win.resize(function(){
                renderList(true);
            });
        }


        function renderList(animated) {
            setVars();

            if (canvasWidthNew == canvasWidthCurrent && canvasHeightNew == canvasHeightCurrent) {
                return;
            }

            $list.width(listWidth).height(listHeight);

            var completeCallback = function(){
                canvasWidthCurrent = canvasWidthNew;
                canvasHeightCurrent = canvasHeightNew;
                renderPages();
                renderControls();
                setPage();
            };

            if (animated) {
                $canvas.animate({
                    width: canvasWidthNew,
                    height: canvasHeightNew
                }, {
                    duration: o.speed,
                    queue: false,
                    complete: completeCallback
                });
            } else {
                $canvas.width(canvasWidthNew).height(canvasHeightNew);
                completeCallback();
            }
        }


        function renderPages() {
            if (pagesItemsCountNew == pagesItemsCountCurrent) {
                return;
            }

            if (pagesItemsCountNew < 2) {
                $pages.fadeOut(o.speed);
                return;
            }

            var pagesItemsHTML = '';
            for (i = 1; i <= pagesItemsCountNew; i++) {
                pagesItemsHTML += '<div />';
            }
            $pagesItems = $(pagesItemsHTML);

            $pagesItems.eq(pageIndexNew).addClass('act');
            $pages.html($pagesItems);

            pagesItemsCountCurrent = pagesItemsCountNew;

            $pagesItems.click(function(){
                if (busy) {
                    return;
                }

                pageIndexNew = $pagesItems.index(this);

                if (pageIndexNew == pageIndexCurrent) {
                    return;
                }

                setPage();
            });

            $pages.fadeIn(o.speed);
        }


        function renderControls() {
            if (pageIndexNew > 0) {
                $controlPrev.fadeIn(o.speed);
            } else {
                $controlPrev.fadeOut(o.speed);
            }

            if (pageIndexNew + 1 < pagesItemsCountNew) {
                $controlNext.fadeIn(o.speed);
            } else {
                $controlNext.fadeOut(o.speed);
            }
        }


        function controlsShow() {
            if (pagesItemsCountCurrent <= 1)
            {
              return;
            }
            $controls.animate({
                height: controlsHeight
            }, {
                duration: o.speed,
                queue: false
            });
        }


        function controlsHide() {
            $controls.animate({
                height: 0
            }, {
                duration: o.speed,
                queue: false
            });
        }


        function setPage() {
            busy = true;

            clearInterval(t);

            renderControls();

            var animateOpts = {
                duration: o.speed,
                queue: false,
                complete: function(){
                    if (pagesItemsCountCurrent > 1)
                    {
                      $pagesItems.removeClass('act').eq(pageIndexNew).addClass('act');
                    }
                    pageIndexCurrent = pageIndexNew;
                    counterUpdate();
                    if (o.timeout) {
                        autoFlow();
                    }
                    busy = false;
                }
            };

            if (o.vertical) {
                $list.animate({
                    top: -( ( canvasHeightNew + rowsGap ) * pageIndexNew )
                }, animateOpts);
            } else {
                $list.animate({
                    left: -( ( canvasWidthNew + colsGap ) * pageIndexNew )
                }, animateOpts);
            }
        }


        function autoFlow() {
            clearInterval(t);
            t = setInterval(function(){
                if (pageIndexCurrent + 1 < pagesItemsCountCurrent) {
                    pageIndexNew = pageIndexCurrent + 1;
                } else {
                    pageIndexNew = 0;
                }
                setPage();
            }, o.timeout);
        }


        function counterUpdate() {
            $counter.html(pageIndexCurrent + 1 + ' / ' + pagesItemsCountCurrent);
        }


        function setVars() {
            viewportWidth = $viewport.width();
            viewportHeight = $viewport.height();

            colsVisibleCount = Math.floor( ( viewportWidth + colsGap ) / colsWidthFull );
            rowsVisibleCount = Math.floor( ( viewportHeight + rowsGap ) / rowsHeightFull );

            if (o.vertical) {
                colsCount = colsVisibleCount;
                rowsCount = Math.ceil( listItemsCount / colsVisibleCount );
            } else {
                colsCount = Math.ceil( listItemsCount / rowsVisibleCount );
                rowsCount = rowsVisibleCount;
            }

            if (colsVisibleCount < 1) {
                colsVisibleCount = 1;
            } else if (colsVisibleCount > colsCount) {
                colsVisibleCount = colsCount;
            }

            if (rowsVisibleCount < 1) {
                rowsVisibleCount = 1;
            } else if (rowsVisibleCount > rowsCount) {
                rowsVisibleCount = rowsCount;
            }

            canvasWidthNew = ( colsVisibleCount * colsWidthFull ) - colsGap;
            canvasHeightNew = ( rowsVisibleCount * rowsHeightFull ) - rowsGap;

            if (rowsVisibleCount < rowsCount) {
                canvasHeightNew = ( rowsVisibleCount * rowsHeightFull ) - rowsGap;
            } else {
                canvasHeightNew = ( rowsCount * rowsHeightFull ) - rowsGap;
            }

            listWidth = colsCount * colsWidthFull;
            listHeight = ( rowsCount * rowsHeightFull ) - rowsGap;

            if (o.vertical) {
                pagesItemsCountNew = Math.ceil( rowsCount / rowsVisibleCount );
            } else {
                pagesItemsCountNew = Math.ceil( colsCount / colsVisibleCount );
            }

            if (pageIndexCurrent < pagesItemsCountNew) {
                pageIndexNew = pageIndexCurrent;
            } else {
                pageIndexNew = pagesItemsCountNew - 1;
            }
        }
    });
};
})(jQuery);



/* refreshPNG
----------------------------------------------- */
(function($){
$.fn.refreshPNG = function(){
    if (typeof(DD_belatedPNG) == 'object') {
        this.find('*').andSelf().each(function(){
            this.fireEvent('onblur');
        });
    }    
    return this;
};
})(jQuery);

