
;(function($){

    $.fn.rotator = function(options){

    	return this.each(function(){

            options = $.extend({
            		slides: [
            			{url:'http://li.ru/go?www.zao-zeo.ru/catalog/communication/112-orion-s4',img:'/banners/adv/zao-zeo/1000/kazus_ru_728x90_2.jpg'},
            			{url:'http://li.ru/go?www.zao-zeo.ru/catalog',img:'/banners/adv/zao-zeo/1000/kazus_ru_728x90.jpg'}

            		],
            		speed: 800,
                    timeout: 10000,
                    width: 728,
                    height: 90,
                    random: true,
            		autorun: true,
            		fx: 'fade',
                    nav: false
                },options);

    		var $this = $(this), run = false,step = -1,
    		current = 0,prev = 0,count= 0,
    		slides, intervalID = 0,
    		nav_left = $('<a href="javascript:void(0);" class="rotator-nav" id="rotator-left"><div></div></a>'),
			nav_right = $('<a href="javascript:void(0);" class="rotator-nav" id="rotator-right"><div></div></a>'),
    		preloader = $('<div class="preloader_rotator"></div>'),
    		main_rotator = $('<div class="main_rotator"></div>'),
    		slides_rotator = $('<ul class="slides_rotator"></ul>'),
    	    rotator = {

    			init: function(){

    				count = options.slides.length - 1;

    				rotator.preloader();

    				nav_left.bind('click.rotator',function(){
    					rotator.prev();
    				});

    				nav_right.bind('click.rotator',function(){
    				    if(run) return false;
    					rotator.next();
    				});
    			},
    			preloader: function(){

    		    	$this.html(preloader.append('<img src="/images/rotator/ajax-loader.gif" width="32" alt="Загрузка..." />'));

    		        var images = rotator.render().find('img'),
    		            loaded = 0,
    	                pic = [];

                    slides = slides_rotator.find('li').css({'position': 'absolute','z-index': 1});

                    main_rotator.css({display: 'none'});
                    slides_rotator.css({width:options.width,height:options.height});

    		        if(options.fx == 'fade'){

        		        slides.css('opacity',0).eq(0).css({'z-index': 2,'opacity':1});
    		    	}
    		    	else{

    		    		slides_rotator.css('overflow','hidden');
	       		        slides.css('left',options.width).eq(0).css({'z-index': 2,'left':0});

                     }

    		        for (i=0; i < count; i++) {

    		           pic[i] = new Image();

    	               pic[i].onload = function() {

    		                loaded++;

    		                if(loaded == count){

    		                	main_rotator.show();
                                $('.rotator-nav').show();
    		                	preloader.hide();

    		                	if(options.autorun){

    		                		rotator.start();
    		                	}

    		                }
    		            };

    	                pic[i].src = images[i].src;
    		        }

    			},
    			render: function(){

    				$this.append(main_rotator);

                    if(options.nav){

                        $this.append(nav_left,nav_right);

                        $('.rotator-nav').hide();
                    }

                    if(options.random){

                        options.slides.sort(function() {return 0.5 - Math.random()});
                    }


    		    	var render = [];

    		    	$.each(options.slides,function(i,slide){

    		    		render.push('<li><div class="img_rotator"><a rel="nofollow" href="'+slide.url+'" target="_parent _blank"><img src="'+slide.img+'" options.width="'+options.width+'" height="'+options.height+'" alt="*" /></a></div></li>');
    		    	});

    		    	return slides_rotator.html(render.join('')).appendTo(main_rotator);

    		    },
    		    start: function(){
                    step = -1;
    		    	intervalID = setInterval(function(){rotator.next();},options.timeout);
    		    },
    	        stop: function(){
    	            clearInterval(intervalID);
    	        },
    	        next: function(){
                    step = -1;
    		    	if(current >= count) current = -1;

    		    	prev = current;
    		    	current++;

    		    	if(current == 0) prev = count;

    		    	rotator.run();

    		    },
    	        prev: function(){
                    step = 1;
    		    	prev = current;
    		    	current--;

    		    	if(current < 0) current = count;

    	        	rotator.run();
    	        },
    	        run: function(){

                    run = true;

                    if(options.autorun) rotator.stop();

    	        	if(options.fx == 'fade'){

                        slides.eq(prev).css('z-index',1).stop(true,true).animate({'opacity': 0},options.speed);
    	        		slides.eq(current).css('z-index',2).stop(true,true).animate({'opacity': 1},options.speed,function(){
                            run = false;
                        });
    	        	}
    	        	else{

                        slides.eq(prev).css('z-index',1).stop(true,true).animate({'left': step*options.width},options.speed,function(){

                            $(this).css('left',step*options.width);

                        });

                        var sc = slides.eq(current);

                        if(sc.css('left').match(/([-\d]+)/)[1] != -step*options.width){

                            sc.css('left',-step*options.width);
                        }

                        sc.css({'z-index':2}).stop().animate({'left': 0},options.speed,function(){

                            run = false;

                        });

    	        	}

                    if(options.autorun) rotator.start();
    	        }
    		};


    		rotator.init();

    	});
    };
})(jQuery);
