dojo.provide("com.maddesa.ContentRotator");
dojo.declare("com.maddesa.ContentRotator", null, {
  //{resources: nodes, duration: dur}
  constructor : function(node, params){
    this._node = dojo.byId(node);
    this._index = params.index || 0;
    this._resources = params.resources;
    this._wait = params.dur||  5000;
    this._animDuration = params.fade || 1000;

    this._keepRunning = true; 
    this._timeout; 
    this._animIn; 
    this._animOut;    

    this._makeAnimations();
    this._setConnects(); 
  },
  
  start: function(){
    this._keepRunning = true;
    this._run();

  },
  stop: function(){
    this._keepRunning =false;
    clearTimeout(this._timeout);
    this._animOut.stop();
    this._animIn.stop();
    this._animIn.gotoPercent(50, true);
    
  },
  flip : function(idx){
    this._index = idx;
    this._flip();
    this.stop();
  },
  _run: function(){
  this._animOut.gotoPercent(0, true);

  },
  _makeAnimations : function(){
    this._animOut = dojo.fadeOut({node: "animDiv", duration: this._animDuration, onEnd:dojo.hitch(this, this._flip)});
    this._animIn = dojo.fadeIn({node: "animDiv", duration: this._animDuration}); 
  },
  _setConnects : function(){
    dojo.connect(this._animOut, "onEnd", this._animIn, "play");
    dojo.connect(this._animIn, "onEnd", this, function(){
      console.log(this._keepRunning);
      if (this._keepRunning) {
        this._timeout = setTimeout(dojo.hitch(this, "_run"), this._wait);
      }
    }); 
    //dojo.connect(this._node, "onmouseover", this, "stop");
    //dojo.connect(this._node, "onmouseout", this, "start");          
  },
  _flip : function(){
   console.log("flipping content")
   var self = this;
   var idx = this._index 
   var url = this._resources[this._index]  
   dojo.xhrGet({
    url: url,
    load: function(response, ioArgs){
      self._node.innerHTML = response;
      dojo.publish("content.changed", [idx])
      return response;
    },
    error: function(response, ioArgs){
      this._node.innerHTML = 
        "An error occurred, with response: " + response;
      return response;
    },
    handleAs: "text"
  });
  ++this._index;
  if (this._index == this._resources.length)  this._index = 0;
  }

});
