var GalSliding = new Class(
  {Implements:[Options], options:
    {holder: ".holder", elementsParent: "ul", elements: "li", nextItem: ".next", prevItem: ".prev", stop: ".stop", start: ".start", pause: ".btn-stop", speed: 600, duration: 4000, steps: 1, current: 0, transition: Fx.Transitions.linear, direction: "horizontal", mode: "callback", disableClass: "disable", currentClass: "active", random: false, pagingCreate: "gallery-paging", paging: ".gallery-paging li a", autoplay: 4000, autoplayOpposite: false, onStart: function(_1, _2, _3)
      {
      }, onPlay: function(_4, _5, _6) {
      }
    }, initialize: function(_7, _8) {
      if(_7) {
        this.gallery = _7;
        this.setOptions(_8);
        this.holder = this.gallery.getElement(this.options.holder);
        this.itemsParent = this.holder.getElement(this.options.elementsParent);
        this.items = this.itemsParent.getElements(this.options.elements);
        this.next = this.gallery.getElement(this.options.nextItem);
        var _9 = this.next;
        var _a;
        this.prev = this.gallery.getElement(this.options.prevItem);
        this.stop = this.gallery.getElement(this.options.stop);
        this.start = this.gallery.getElement(this.options.start);
        this.pause = this.gallery.getElement(this.options.pause);
        this.current = this.options.current;
        this.bound = {rotate: this.rotate.bind(this)};
        if(this.options.direction=="horizontal") {
          this.direction = "margin-left";
          this.size = this.items[0].getWidth()+parseInt(this.items[0].getStyle("margin-right"))+parseInt(this.items[0].getStyle("margin-left"));
          this.visible = Math.round(this.holder.getWidth()/this.size);
        }else {
          this.direction = "margin-top";
          this.size = this.items[0].getHeight();
          this.visible = Math.round(this.holder.getHeight()/this.size);
        }
        if(this.next==null) {
          this.next = new Element("a").injectInside(this.gallery);
        }
        if(this.prev==null) {
          this.prev = new Element("a").injectInside(this.gallery);
        }
        this.next.cl = this.next.className;
        this.prev.cl = this.prev.className;
        if(this.visible<this.items.length) {
          if(this.options.random) {
            Array.prototype.shuffle = function(b) {
              var i = this.length, j, t;
              while(i) {
                j = Math.floor((i--)*Math.random());
                t = b&&typeof this[i].shuffle!=="undefined"? this[i].shuffle(): this[i];
                this[i] = this[j];
                this[j] = t;
              }
              return this;
            };
            this.items.shuffle(this.items);
            this.hidden = new Element("div");
            this.items.each(function(el, i)
              {
                this.wrap = new Element("div").adopt(el);
                this.hidden.set("html", this.hidden.get("html"), this.wrap.get("html"));
              }.bind(this)
            );
            this.itemsParent.set("html", this.hidden.get("html"));
            this.items = this.itemsParent.getElements(this.options.elements);
          }
          this.options.steps = this.options.steps>this.visible? this.visible: this.options.steps;
          this.options.duration = this.options.duration<1000? 1000: this.options.duration;
          this.options.speed = this.options.speed>6000? 6000: this.options.speed;
          if(this.options.paging&&!this.options.pagingCreate) {
            this.paging = this.gallery.getElements(this.options.paging);
            for(var i = 0; i<this.paging.length; i++) {
              if(this.paging[i].hasClass(this.options.currentClass)) {
                this.current = i;
              }
            }
          }
          if(this.options.mode!="circle") {
            if(this.visible+this.current>=this.items.length) {
              this.margin = (this.items.length-this.visible)*this.size;
              this.current = this.items.length-this.visible;
            }else {
              this.margin = this.current*this.size;
            }
            if(this.options.paging) {
              for(var i = 0; i<this.items.length; i++) {
                if(this.items[i].hasClass(this.options.currentClass)) {
                  this.current = i;
                }
              }
              if(this.options.pagingCreate) {
                if(this.gallery.getElements("."+this.options.pagingCreate).length) {
                  this.paging = this.gallery.getElements("."+this.options.pagingCreate)[0];
                  this.paging.innerHTML = "";
                }else {
                  this.paging = new Element("ul").injectInside(this.gallery).addClass(this.options.pagingCreate);
                }
              }else {
                this.paging = new Element("ul").injectInside(this.gallery).addClass("paging");
              }
              for(var i = 0; i<this.items.length; i++) {
                this.paging.innerHTML += "<li><a href=\"#\">"+parseInt(i+1)+"</a></li>";
              }
              this.paging = this.paging.getElements("a");
              this.paging[this.current].addClass(this.options.currentClass);
              this.paging.each(function(el, i)
                {
                  el.addEvent("click", function()
                    {
                      if(i*this.options.steps+this.visible>=this.items.length) {
                        this.margin = (this.items.length-this.visible)*this.size;
                        this.current = this.items.length-this.visible;
                      }else {
                        this.current = i*this.options.steps;
                      }
                      this.margin = this.current*this.size;
                      this.play(this.options.speed);
                      return false;
                    }.bind(this)
                  );
                }.bind(this)
              );
            }
            this.play(0);
          }else {
            if(this.options.paging) {
              for(var i = 0; i<this.items.length; i++) {
                if(this.items[i].hasClass(this.options.currentClass)) {
                  this.current = i;
                }
              }
              if(this.options.pagingCreate) {
                if(this.gallery.getElements("."+this.options.pagingCreate).length) {
                  this.paging = this.gallery.getElements("."+this.options.pagingCreate)[0];
                  this.paging.innerHTML = "";
                }else {
                  this.paging = new Element("ul").injectInside(this.gallery).addClass(this.options.pagingCreate);
                }
              }else {
                this.paging = new Element("ul").injectInside(this.gallery).addClass("paging");
              }
              for(var i = 0; i<this.items.length; i++) {
                this.paging.innerHTML += "<li><a href=\"#\">"+parseInt(i+1)+"</a></li>";
              }
              this.paging = this.paging.getElements("a");
              _a = this.paging;
              this.paging[this.current].addClass(this.options.currentClass);
              this.paging.each(function(el, i)
                {
                  el.addEvent("click", function()
                    {
                      if(this.current<i) {
                        for(var _b = this.current; _b<i; _b++) {
                          _9.fireEvent("click");
                        }
                        _a.removeClass("active");
                        el.addClass("active");
                      }else {
                        if(this.current>i) {
                          for(var _b = this.current; _b<i+this.items.length; _b++) {
                            _9.fireEvent("click");
                          }
                          _a.removeClass("active");
                          el.addClass("active");
                        }
                      }
                      return false;
                    }.bind(this)
                  );
                }.bind(this)
              );
            }
            for(;this.items.length<this.options.steps+this.visible;) {
              this.items.clone().inject(this.itemsParent, "bottom");
              this.items = this.itemsParent.getElements(this.options.elements);
            }
            if(this.current>this.items.length-1) {
              this.current = this.items.length-1;
            }
            for(var i = 0; i<this.current; i++) {
              this.items[i].inject(this.itemsParent, "bottom");
            }
            this.options.paging = false;
          }
          this.next.addEvent("click", function()
            {
              if(this.options.mode!="circle") {
                if(this.visible+this.current>=this.items.length) {
                  if(this.options.mode=="callback") {
                    this.margin = 0;
                    this.current = 0;
                  }
                }else {
                  if(this.visible+this.current+this.options.steps>=this.items.length) {
                    this.margin = (this.items.length-this.visible)*this.size;
                    this.current = this.items.length-this.visible;
                  }else {
                    this.current = this.current+this.options.steps;
                    this.margin = this.current*this.size;
                  }
                }
                this.play(this.options.speed);
              }else {
                var _c = this;
                this.margin = this.size*this.options.steps;
                this.itemsParent.set("tween",
                  {duration: this.options.speed, transition: this.options.transition, property: this.direction, onComplete: function()
                    {
                      for(var i = 0; i<_c.options.steps; i++) {
                        if(_c.current>=_c.items.length) {
                          _c.current = 0;
                        }
                        _c.current++;
                        _c.items[_c.current-1].inject(_c.itemsParent, "bottom");
                      }
                      this.set(0);
                      _c.options.onPlay(_c.current, _c.visible, _c.items.length);
                    }, onCancel: function() {
                      this.onComplete();
                    }
                  }
                );
                this.itemsParent.tween(-this.margin);
                _a.removeClass("active");
                if(this.current+1<_a.length) {
                  _a[this.current+1].addClass("active");
                }else {
                  _a[this.current-_a.length+1].addClass("active");
                }
              }
              return false;
            }.bind(this)
          );
          this.prev.addEvent("click", function()
            {
              if(this.options.mode!="circle") {
                if(this.current<=0) {
                  if(this.options.mode=="callback") {
                    this.margin = (this.items.length-this.visible)*this.size;
                    this.current = this.items.length-this.visible;
                  }
                }else {
                  if(this.current-this.options.steps<=0) {
                    this.margin = 0;
                    this.current = 0;
                  }else {
                    this.current = this.current-this.options.steps;
                    this.margin = this.current*this.size;
                  }
                }
                this.play(this.options.speed);
              }else {
                for(var i = 0; i<this.options.steps; i++) {
                  if(this.current-1<0) {
                    this.current = this.items.length;
                  }
                  --this.current;
                  this.items[this.current].inject(this.itemsParent, "top");
                }
                this.itemsParent.setStyle(this.direction, -this.size*this.options.steps+"px");
                this.margin = 0;
                this.play(this.options.speed);
                _a.removeClass("active");
                if(this.current<_a.length) {
                  _a[this.current].addClass("active");
                }else {
                  _a[this.current-_a.length+1].addClass("active");
                }
              }
              return false;
            }.bind(this)
          );
          if(this.options.autoplay||this.start||this.stop) {
            if(!this.options.autoplay) {
              this.gallery.addClass("stopped");
            }
            this.timer = this.bound.rotate.delay(this.options.duration);
            this.gallery.addEvent("mouseenter", function()
              {
                this.options.autoplay = false;
                $clear(this.timer);
              }.bind(this)
            );
            this.gallery.addEvent("mouseleave", function()
              {
                if(!this.gallery.hasClass("stopped")) {
                  $clear(this.timer);
                  this.options.autoplay = true;
                  this.timer = this.bound.rotate.delay(this.options.duration);
                }
              }.bind(this)
            );
          }
          if(this.stop) {
            this.stop.addEvent("click", function()
              {
                this.gallery.addClass("stopped").fireEvent("mouseenter");
                return false;
              }.bind(this)
            );
          }
          if(this.start) {
            this.start.addEvent("click", function()
              {
                this.gallery.removeClass("stopped").fireEvent("mouseenter");
                return false;
              }.bind(this)
            );
          }
          if(this.pause) {
            this.pause.addEvent("click", function()
              {
                if(this.gallery.hasClass("stopped")) {
                  this.gallery.removeClass("stopped").fireEvent("mouseenter");
                }else {
                  this.gallery.addClass("stopped").fireEvent("mouseenter");
                }
                return false;
              }.bind(this)
            );
          }
        }else {
          this.next.addClass(this.next.cl+"-"+this.options.disableClass);
          this.prev.addClass(this.prev.cl+"-"+this.options.disableClass);
          this.next.addEvent("click", function()
            {
              return false;
            }.bind(this)
          );
          this.prev.addEvent("click", function()
            {
              return false;
            }.bind(this)
          );
          if(this.stop) {
            this.stop.addEvent("click", function()
              {
                return false;
              }.bind(this)
            );
          }
          if(this.start) {
            this.start.addEvent("click", function()
              {
                return false;
              }.bind(this)
            );
          }
          this.gallery.addClass("stopped");
        }
        this.options.onStart(this.current, this.visible, this.items.length);
      }
    }, play: function(_d) {
      this.sidesChecking();
      this.itemsParent.set("tween", {duration: _d, transition: this.options.transition});
      this.itemsParent.tween(this.direction, -this.margin);
      if(this.options.paging) {
        this.paging.removeClass("active");
        this.paging[Math.ceil(this.current/this.options.steps)].addClass("active");
      }
      this.options.onPlay(this.current, this.visible, this.items.length);
    }, rotate: function() {
      if(this.options.autoplay) {
        if(!this.options.autoplayOpposite) {
          this.next.fireEvent("click");
        }else {
          this.prev.fireEvent("click");
        }
        this.timer = this.bound.rotate.delay(this.options.duration);
      }
    }, sidesChecking: function() {
      if(this.options.mode=="line") {
        this.next.removeClass(this.next.cl+"-"+this.options.disableClass);
        this.prev.removeClass(this.prev.cl+"-"+this.options.disableClass);
        if(this.visible+this.current>=this.items.length) {
          this.next.addClass(this.next.cl+"-"+this.options.disableClass);
        }else {
          if(this.current==0) {
            this.prev.addClass(this.prev.cl+"-"+this.options.disableClass);
          }
        }
      }
    }
  }
);
window.addEvent("domready", function()
  {
    var _e = new GalSliding($$("#gallery1")[0], {holder: ".gallery-holder", mode: "circle", nextItem: ".btn-next", prevItem: ".btn-prev", pause: ".btn-stop", pagingCreate: "gallery-nav", paging: ".gallery-nav li a", speed: 600, duration: 7000});
  }
);

