/**
 * Slideshows
 *
 * @package WordPress
 * @subpackage Supreme
 */

(function($) {

    $.fn.slider = function(settings) {

        var settings = $.extend({
	    time: [1000, 1000],
            slideTo: null,
            navigation: null
	}, settings),

        slider = {},

        _init = function(obj) {

            slider = {
                container: $(obj),
                input: $(obj).children('input[name="sliderPointer"]'),
                slides: $(obj).children('.slide'),
                buttons: $(obj).children('.btn'),
                navigation: $(settings.navigation),
                overhang: $(settings.navigation).children('.sliderOverhang')
            },
            
            ($(slider.container).hasClass('auto')) ? _auto(settings.time[0]) : null;

            $(slider.buttons).unbind('click').bind('click', function() {

                if ($(this).hasClass('btnPrevious')) {
                    _slide('previous', false);
                } else if ($(this).hasClass('btnNext')) {
                    _slide('next', false);
                }

            });

            $(slider.overhang).children('a').unbind('click').bind('click', function() {
                var className = $(this).attr('class').split(' ');
                var slideTo = Number(className[0].replace('slideTo_', ''));
                _slide(slideTo, false);
            });

            (settings.slideTo) ? _slide(settings.slideTo, true) : null;

            if ($(slider.overhang).width() > $(slider.navigation).width()) {
                $(slider.buttons).show();
            }

        },

        _slide = function(slideTo, strict) {

            var pointer = Number($(slider.input).val());

            var slides = $(slider.slides).length;

            var next;

            switch (slideTo) {

                case 'next':
                    next = (pointer == slides) ? 1 : pointer+1;
                break;

                case 'previous':
                    next = (pointer == 1) ? slides : pointer-1;
                break;

                default:
                    next = slideTo;
                break;

            }

            if (next != pointer && next <= slides) {

                $(slider.input).val(next);

                $(slider.container).children('.slide:eq('+(pointer-1)+')').removeClass('top');

                if (strict) {

                    $(slider.container).children('.slide:eq('+(next-1)+')').addClass('top').show();

                    $(slider.container).children('.slide:eq('+(pointer-1)+')').hide();

                } else {

                    $(slider.container).children('.slide:eq('+(next-1)+')').addClass('top').fadeIn(settings.time[1], function() {
                        $(slider.container).children('.slide:eq('+(pointer-1)+')').hide();
                    });

                }

                if (settings.navigation) {

                    var navigation = $(slider.navigation).width();

                    var middle = navigation/2;

                    var overhang = $(slider.overhang).width();

                    var left = $(slider.overhang).children('a:eq('+(next-1)+')').offset().left-$(slider.navigation).offset().left;

                    var adjust = $(slider.overhang).children('a:eq('+(next-1)+')').width()/2;

                    if (overhang > navigation) {

                        var pos = Number($(slider.overhang).css('left').replace('px', ''));

                        if (left < middle) {
                            pos += middle-left-adjust;
                        } else {
                            pos += middle-left-adjust;
                        }

                        if (pos > 0) {
                            pos = 0;
                        } else if (pos < (navigation-overhang)) {
                            pos = navigation-overhang;
                        }

                        if (strict) {

                            $(slider.overhang).css({
                                left: pos+'px'
                            });

                        } else {

                            $(slider.overhang).animate({
                                left: pos+'px'
                            });

                        }

                    }

                }

            }

        },

        _auto = function(time) {

            setTimeout(function() {

                _slide('next', false);

                _auto(time);

            }, time);

        };

        _init(this);

    };

})(jQuery);
