
(function($) {
	
	$.fn.bannerGallery = function(options) {
		
        var defaults = {
            speed: 1000,
            fx: 'fade',
            lx: 'load',
            index: 0,
            timeout: 3000,
            eventbox: false
        }
        var opt = $.extend(defaults, options);
		return this.each(function() {
            var _this = $(this),
            images = _this.find('img'),
            numImg = images.length,
            context = $.fn.extend(opt, {
                box: _this,
                images: _this.find('img'),
                next: parseInt(opt.index) + 1,
                prev: 0,
                prev_index: 0,
                timeout_id: null,
                interval_id: null,
                fx: $.fn.bannerGallery.fx[opt.fx],
                lx: $.fn.bannerGallery.fx[opt.lx],
                click:false,
                left:$(_this).find(".left-ico"),
                right:$(_this).find(".right-ico")
            }),
            firstRound = true,
            load_banner_cycle = function(){
                context.box.bind('banner_cycle.start', function(){
                    context.click = false;
                    var cycle_start = function() {
                        context.box.trigger('banner_cycle.next');
                    }
                    if(!firstRound) {
                        clearTimeout(context.timeout_id);
                        context.timeout_id= setTimeout( cycle_start, context.timeout + context.speed);
                    } else {
                        firstRound = false;
                        context.lx.call(_this, context);
                    }
                
                })
                .bind('banner_cycle.next', function() {
                    context.prev = context.index;
                    context.prev_index = context.prev;
                    context.index = context.next;
                    context.next++;
                    if(context.next >= context.images.length) {
                        context.next = 0;
                    }
                    context.fx.call(_this, context);                     
                })
                .bind('banner_cycle.prev', function() {
                    context.next = context.index;
                    context.prev = context.index;
                    context.prev_index=context.prev - 1;
                    if(context.prev_index < 0) {
                        context.prev_index = context.images.length - 1;
                    }
                    context.index = context.prev_index;
                    context.fx.call(_this, context);                    
                })
                if(context.eventbox) {
                    context.eventbox.bind('click', function(e) {
                        var x = Math.floor((e.pageX-context.eventbox.offset().left));
                        if(context.click) {
                            return;
                        }
                        var quad1 = context.eventbox.width()/4;
                        var quad2 = quad1 * 2 + quad1;
                        if(quad2 < x) {
                            clearTimeout(context.timeout_id);
                            context.click = true;
                            context.box.trigger('banner_cycle.next');
                        } else if(quad1 > x) {
                            clearTimeout(context.timeout_id);
                            context.click = true;
                            context.box.trigger('banner_cycle.prev');
                        } else {
                            $(context.images[context.index]).parent().click()
                        }
                    })
                    .bind('mousemove', function(e) {
                        var x = Math.floor((e.pageX-context.box.offset().left));
                        var quad1 = context.eventbox.width()/6;
                        var quad2 = quad1 * 4 + quad1;
                        var left = $(".left-ico", context.box);
                        var right = $(".right-ico", context.box);
                        if(quad2 < x) {
                            if(!context.eventbox.removeClass('zoomCursor').hasClass('pointerCursor')) {
                                context.eventbox.addClass('pointerCursor').removeClass('zoomCursor');
                            }
                            left.removeClass('hleft');
                            if(!right.hasClass('hright')) {
                                right.addClass('hright');
                            }
                        } else if(quad1 > x) {
                            if(!context.eventbox.removeClass('zoomCursor').hasClass('pointerCursor')) {
                                context.eventbox.addClass('pointerCursor');
                            }
                            right.removeClass('hright');
                            if(!left.hasClass('hleft')) {
                                left.addClass('hleft');
                            }
                        } else {
                            left.removeClass('hleft');
                            right.removeClass('hright');                            
                            if(!context.eventbox.removeClass('pointerCursor').hasClass('zoomCursor')) {
                                context.eventbox.addClass('zoomCursor').removeClass('pointerCursor');
                            }

                        }
                    }).bind('mouseout', function() {
                        var left = $(".left-ico", context.box);
                        var right = $(".right-ico", context.box);
                        left.removeClass('hleft');
                        right.removeClass('hright');
                    })
                }
                context.box.trigger('banner_cycle.start');
            }
            load_banner_cycle();

        });
    }
    
	$.fn.bannerGallery.fx = {
        load: function(context) {
            var img1 = $(context.images[context.index]);
            context.box.find("img").hide()
            img1.show();
                context.box.trigger('banner_cycle.start');
            
        },
		fade: function(context){
            var img1 = $(context.images[context.prev]);
            var img2 = $(context.images[context.index]);
            img1.css({zIndex:9})
            img2.css({zIndex:10})
            img2.fadeIn(context.speed,function(){
                img1.hide().css({zIndex:1});
                context.box.trigger('banner_cycle.start');
            })
		}
    }
})(jQuery);

