/*
 * Easy Slider 1.7 - jQuery plugin
 *written by Alen Grakalic
 *http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding
 *
 *Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *Dual licensed under the MIT (MIT-LICENSE.txt)
 *and GPL (GPL-LICENSE.txt) licenses.
 *
 *Built for jQuery library
 *http://jquery.com
 *
 */

(function($) {

    $.fn.easySlider = function(options){
  
        // default configuration properties
        var defaults = {
            prevId: 'prevBtn',
            prevText: 'Previous',
            nextId: 'nextBtn',
            nextText: 'Next',
            controlsShow:false,
            controlsBefore:'',
            controlsAfter:'',
            controlsFade:true,
            firstId: 'firstBtn',
            firstText: 'First',
            firstShow:false,
            lastId: 'lastBtn',
            lastText: 'Last',
            lastShow:false,
            vertical:false,
            speed: 500,
            auto:false,
            pause:2000,
            continuous:true, 
            numeric: false,
            numericId: 'controls',
            currentId: ''
        }; 

        var options = $.extend(defaults, options);  

        this.each(function() {  
            var obj = $(this); 
            var s = $("li", obj).length;
            var w = $("li", obj).width(); 
            var h = $("li", obj).height(); 
            var clickable = true;
            var ts = s-1;
            var t = 0;
            $("ul", obj).css('width',s*w);

            $("#"+options.nextId).click(function(){
                animate("next",true);
            });
            $("#"+options.prevId).click(function(){
                animate("prev",true);
            });
//            if(options.continuous){
//                $("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left","-"+ w +"px"));
//                $("ul", obj).append($("ul li:nth-child(2)", obj).clone());
//                $("ul", obj).css('width',(s+1)*w);
//            };

            function setCurrent(i){
                i = parseInt(i)+1;
                if (options.currentId!='') {
                $("." + options.numericId).fadeTo(0,0.2);
                $("." + options.numericId).removeClass("current");
                }
                $("#" + options.numericId + i).addClass("current");
                $("#" + options.numericId + i).fadeTo(500,1);
                options.currentId = options.numericId + i;
            };

            function adjust(){
                if(t>ts) t=0;
                if(t<0) t=ts;
                if(!options.vertical) {
                    $("ul",obj).css("margin-left",(t*w*-1));
                } else {
                    $("ul",obj).css("margin-left",(t*h*-1));
                }
//                clickable = true;
//                if(options.numeric) setCurrent(t);
            };

            function animate(dir,clicked){
//                if (clickable){
//                    clickable = false;
                    var ot = t;
                    switch(dir){
                        case "next":
                            t = (ot>=ts) ? (options.continuous ? t+1 : ts) : t+1;
                            break; 
                        case "prev":
                            t = (t<=0) ? (options.continuous ? t-1 : 0) : t-1;
                            break;
                        default:
                            t = dir;
                            break; 
                    };
                    var diff = Math.abs(ot-t);
                    var speed = diff*options.speed;
                    if(!options.vertical) {
                        p = (t*w*-1);
                        $("ul",obj).animate({marginLeft: p},{queue:false,duration:speed,complete:adjust});
                    } else {
                        p = (t*h*-1);
                        $("ul",obj).animate({marginTop: p},{queue:false,duration:speed,complete:adjust});
                    };
                    if(clicked) clearTimeout(timeout);
                    if(options.auto && dir=="next" && !clicked){
                        timeout = setTimeout(function(){
                            animate("next",false);
                        },diff*options.speed+options.pause);
                    };
//                };
            };
            // init
            var timeout;
            if(options.auto){
                timeout = setTimeout(function(){
                    animate("next",false);
                },options.pause);
            };
            if(options.numeric) setCurrent(0);
        });
    };
})(jQuery);
