$.fn.gq_slider = function(settings) {
  settings = $.extend({}, settings);

  return this.each(function(){
    var slider = $(this);
    if(slider.hasClass('callfunction')){
        slider.data('call', 1);
    }
    
    var content = slider.find('.content');
    var panels = content.find('.panel');
    
    panels.wrapAll('<div class="scroll"/>');
    var scroll = content.find('.scroll');
    
    if(panels.length>1){
        content
          .before('<span class="prev">Previous</span>')
          .before('<span class="next">Next</span>');
    }
    var navigation = slider.find('.navigation');
    
    if(navigation.length == 0) {
      content.before('<ul class="navigation"></ul>');
      navigation = slider.find('.navigation');
          if(panels.length>1){
          panels.each(function(index, element){
            navigation.append('<li><a href="#">&#x25CF;</a></li>');
          });
      }
    }
    
    slider.css({
      position: 'relative'
    });
    
    scroll.css({
      'width':  (panels[0].offsetWidth + 20) * panels.length,
      'height': panels[0].offsetHeight,
      'position': 'relative',                     // IE fix to ensure overflow is hidden
      'clear': 'left'
    });
    
    panels.css({
      'width': $(this).width() + 0, // content[0].offsetWidth,
      'height': content[0].offsetHeight,
      'float': 'left',
      'position': 'relative' // IE fix to ensure overflow is hidden
    });
    
    content.css({
      'overflow': 'hidden'
    });
    
    
    
    slider.serialScroll({
      target: '.content',
      items: '.panel',
      prev: '.prev', 
      next: '.next',
      navigation: '.navigation li',
      axis: 'x',
      duration: 100,
      constant: true,
      easing: 'swing',
      stop: true,
      force: true,
      cycle: true,
      onBefore: function(event, panel, scroll, panels, position){
        if(slider.data('call')){
            calledFunction();
        }
        var element = navigation.find('li').get(position);
        $(element)
          .parents('ul:first').find('li').removeClass('selected')
          .end().end().addClass('selected');
        $(element).parents('.thumbs:first').scrollTo($(element), {
          'duration': 100,
          'offset': -260
        });
        if($('.ring_caption').length){
            var h= $('.ring_caption').height();
            var h1= $('.hidden_caption', $(panel)).height();
            $('.ring_caption').css({'height':h+'px', 'overflow':'hidden'}).html($('.hidden_caption', $(panel)).html()).animate({
            'height': h1+'px'}, 400);
        }
      }
    });
 
    navigation.find('li:first').addClass('selected');
    $('.ring_caption').html($('.hidden_caption:first').html());
    
    panels.find('img').lazyload({ 
      placeholder : "/_/img/white_1x1.gif",
      effect : "fadeIn",
      failurelimit : 1000,
      container: content
    });
  });
};

