var Spry;
if (!Spry) 
    Spry = {};
if (!Spry.Widget) 
    Spry.Widget = {};

Spry.Widget.SlideShowControl = function(ele, options){
    Spry.Utils.Notifier.call(this);
    
    this.element = Spry.$(ele);
    this.interval = 4000;
    this.timerID = 0;
    this.active = false;
    
    this.playBtnSelector = ".playBtn";
    this.prevBtnSelector = ".previousBtn";
    this.nextBtnSelector = ".nextBtn";
    this.firstBtnSelector = ".firstBtn";
    this.lastBtnSelector = ".lastBtn";
    
    this.playClass = "playBtn";
    this.pauseClass = "pauseBtn";
    
    var self = this;
    
    this.playBtn = Spry.$$(this.playBtnSelector, this.element)[0];
    if (this.playBtn) 
        Spry.Utils.addEventListener(this.playBtn, "click", function(e){
            self.toggle();
            return false;
        }, false);
    
    this.prevBtn = Spry.$$(this.prevBtnSelector, this.element)[0];
    if (this.prevBtn) 
        Spry.Utils.addEventListener(this.prevBtn, "click", function(e){
            self.previous();
            return false;
        }, false);
    
    this.nextBtn = Spry.$$(this.nextBtnSelector, this.element)[0];
    if (this.nextBtn) 
        Spry.Utils.addEventListener(this.nextBtn, "click", function(e){
            self.next();
            return false;
        }, false);
    
    this.firstBtn = Spry.$$(this.firstBtnSelector, this.element)[0];
    if (this.firstBtn) 
        Spry.Utils.addEventListener(this.firstBtn, "click", function(e){
            self.first();
            return false;
        }, false);
    
    this.lastBtn = Spry.$$(this.lastBtnSelector, this.element)[0];
    if (this.lastBtn) 
        Spry.Utils.addEventListener(this.lastBtn, "click", function(e){
            self.last();
            return false;
        }, false);
    
};

Spry.Widget.SlideShowControl.prototype = new Spry.Utils.Notifier();
Spry.Widget.SlideShowControl.prototype.constructor = Spry.Widget.SlideShowControl;

Spry.Widget.SlideShowControl.prototype.isActive = function(){
    return this.slideShowIsActive;
};

Spry.Widget.SlideShowControl.prototype.startTimer = function(){
    this.killTimer();
    
    var self = this;
    this.timerID = setInterval(function(){
        self.next();
    }, this.interval);
};

Spry.Widget.SlideShowControl.prototype.killTimer = function(){
    if (this.timerID) 
        clearInterval(this.timerID);
    this.timerID = 0;
};

Spry.Widget.SlideShowControl.prototype.start = function(){
    this.slideShowIsActive = true;
    
    if (this.playBtn) {
        Spry.Utils.removeClassName(this.playBtn, this.playClass);
        Spry.Utils.addClassName(this.playBtn, this.pauseClass);
    }
    
    this.startTimer();
    this.notifyObservers("onStart");
};

Spry.Widget.SlideShowControl.prototype.stop = function(){
    this.slideShowIsActive = false;
    
    if (this.playBtn) {
        Spry.Utils.addClassName(this.playBtn, this.playClass);
        Spry.Utils.removeClassName(this.playBtn, this.pauseClass);
    }
    
    this.killTimer();
    this.notifyObservers("onStop");
};

Spry.Widget.SlideShowControl.prototype.toggle = function(){
    if (this.slideShowIsActive) 
        this.stop();
    else 
        this.start();
};

Spry.Widget.SlideShowControl.prototype.previous = function(stopSlideShow){
    if (stopSlideShow) 
        this.killTimer();
    this.notifyObservers("onPreviousSlide");
};

Spry.Widget.SlideShowControl.prototype.next = function(stopSlideShow){
    if (stopSlideShow) 
        this.killTimer();
    this.notifyObservers("onNextSlide");
};

Spry.Widget.SlideShowControl.prototype.first = function(stopSlideShow){
    if (stopSlideShow) 
        this.killTimer();
    this.notifyObservers("onFirstSlide");
};


Spry.Widget.SlideShowControl.prototype.last = function(stopSlideShow){
    if (stopSlideShow) 
        this.killTimer();
    this.notifyObservers("onLastSlide");
};
