(function($){
    $.fn.liquidcarousel = function(options) {

    var defaults = {
        height: 150,
        duration: 100,
        hidearrows: true
    };
    var options = $.extend(defaults, options);

    return this.each(function() {
            var divobj = $(this);

            $(divobj).height(options.height);
            $(divobj).css('overflow', 'hidden');

            $('> #wrappers', divobj).height(options.height);
            $('> #wrappers', divobj).css('overflow', 'hidden');
            $('> #wrappers', divobj).css('float', 'left');

            $('> #wrappers > ul', divobj).height(options.height);
            $('> #wrappers > ul', divobj).css('float', 'left');
            $('> #wrappers > ul', divobj).css('margin', '0');
            $('> #wrappers > ul', divobj).css('padding', '0');
            $('> #wrappers > ul', divobj).css('display', 'block');

            $('> #wrappers > ul > li', divobj).height(options.height);
            $('> #wrappers > ul > li', divobj).css('display', 'block');
            $('> #wrappers > ul > li', divobj).css('float', 'left');

            var originalmarginright = 0
            var originalmarginleft = 0;
            //var originalmarginright = parseInt($('> #wrappers > ul > li', divobj).css('marginRight'));
            //var originalmarginleft = parseInt($('> #wrappers > ul > li', divobj).css('marginLeft'));
            var visiblelis = 0;
            var totallis = $('> #wrappers > ul > li', this).length;
            var currentposition = 0;
            var liwidth = $('> #wrappers > ul > li:first', divobj).outerWidth(true);
            var additionalmargin = 0;
            var totalwidth = liwidth + additionalmargin;

            $(window).resize(function(e){
                var divwidth = $(divobj).width();
                var availablewidth = (divwidth - $('> #previous', divobj).outerWidth(true) - $('> #next', divobj).outerWidth(true));

                previousvisiblelis = visiblelis;
                visiblelis = Math.floor((availablewidth / liwidth));

                if (visiblelis < totallis) {
                    additionalmargin = Math.floor((availablewidth - (visiblelis * liwidth))/visiblelis);
                } else {
                    additionalmargin = Math.floor((availablewidth - (totallis * liwidth))/totallis);
                }
                halfadditionalmargin = Math.floor(additionalmargin/2);
                totalwidth = liwidth + additionalmargin;

                $('> #wrappers > ul > li', divobj).css('marginRight', originalmarginright + halfadditionalmargin);
                $('> #wrappers > ul > li', divobj).css('marginLeft',originalmarginleft + halfadditionalmargin);

                if (visiblelis > previousvisiblelis  || totallis <= visiblelis) {
                    currentposition -= (visiblelis-previousvisiblelis);
                    if (currentposition < 0 || totallis <= visiblelis ) {
                        currentposition = 0;
                    }
                }
                $('> #wrappers > ul', divobj).css('marginLeft', -(currentposition * totalwidth));

                if (visiblelis >= totallis || ((divwidth >= (totallis * liwidth)) && options.hidearrows) ) {
                    
                    if (options.hidearrows) {
                        $('> #previous', divobj).hide();
                        $('> #next', divobj).hide();

                        additionalmargin = Math.floor((divwidth - (totallis * liwidth))/totallis);
                        halfadditionalmargin = Math.floor(additionalmargin/2);
                        totalwidth = liwidth + additionalmargin;
                        $('> #wrappers > ul > li', divobj).css('marginRight', originalmarginright + halfadditionalmargin);
                        $('> #wrappers > ul > li', divobj).css('marginLeft', originalmarginleft + halfadditionalmargin);
                    }
                    $('> #wrappers', divobj).width(totallis * totalwidth);
                    $('> ul', divobj).width(totallis * totalwidth);
                    $('> #wrappers', divobj).css('marginLeft', 0);
                    currentposition = 0;
                } else {
                    $('> #previous', divobj).show();
                    $('> #next', divobj).show();
                    $('> #wrappers', divobj).width(visiblelis * totalwidth);
                    $('> ul', divobj).width(visiblelis * totalwidth);
                }
            });

            $('> #next', divobj).click(function(){

               //var currentposition1 = totallis/4;
                if (totallis <= visiblelis) {
                    currentposition = 0;
                } else if ((currentposition + (visiblelis*2)) < totallis) {
                    currentposition += visiblelis;
                } else if ((currentposition + (visiblelis*2)) >= totallis -1) {
                    currentposition = totallis - visiblelis;
                    
                }
                currentposition1 = currentposition+visiblelis;
                if(currentposition1 == totallis)
                {
                    $('> #next', divobj).css('opacity', 0.4);
                    $('> #next', divobj).css('cursor','default');
                    $('> #previous', divobj).css('opacity', 1);
                }
                else
                {
                   $('> #previous', divobj).css('opacity', 1);
                   $('> #next', divobj).css('opacity', 1);
                    $('> #next', divobj).css('cursor','pointer');
                    $('> #previous', divobj).css('cursor','pointer');
                    
                }
                $('> #wrappers > ul', divobj).stop();
                $('> #wrappers > ul', divobj).animate({'marginLeft': -(currentposition * totalwidth)}, options.duration);
            });

            $('> #previous', divobj).click(function(){
                if ((currentposition - visiblelis) > 0) {
                    currentposition -= visiblelis;
                } else if ((currentposition - (visiblelis*2)) <= 0) {
                    currentposition = 0;
                }
                currentposition1 = currentposition-visiblelis;
                if(currentposition1 < totallis)
                {
                    $('> #previous', divobj).css('opacity', 1);
                    $('> #next', divobj).css('opacity', 1);
                    $('> #next', divobj).css('cursor','pointer');
                }
                if(currentposition == 0)
                {
                    $('> #next', divobj).css('opacity', 1);
                    $('> #next', divobj).css('cursor','pointer');
                    $('> #previous', divobj).css('opacity', 0.4);
                    $('> #previous', divobj).css('cursor','default');
                    $('> #previous', divobj).click(function(){ return false; });
                }
                $('> #wrappers > ul', divobj).stop();
                $('> #wrappers > ul', divobj).animate({'marginLeft': -(currentposition * totalwidth)}, options.duration);
            });

            $('> #next', divobj).dblclick(function(e){
                e.preventDefault();
                clearSelection();
            });

            $('> #previous', divobj).dblclick(function(e){
                e.preventDefault();
                clearSelection();
            });

            function clearSelection() {
                if (document.selection && document.selection.empty) {
                    document.selection.empty();
                } else if (window.getSelection) {
                    var sel = window.getSelection();
                    sel.removeAllRanges();
                }
            }

            $(window).resize();
    });


 };
})(jQuery);

