var AnimationPlayer = Class.create({
	
	initialize : function(targetDiv,frames) {
	
	this.frameImages = new Array();
	this.frameDurations = new Array();
    this.frameRate = 100;
    this.timeOut = null;
    this.currentFrame = 1;
    this.currentImg = null;
    this.targetDiv = targetDiv;
    this.loadingSymbol = null;
    this.dolinkToAnimation = false;
    this.link = null;
    
    if(frames!=null){
		for(var i=0;i<frames.length;i++){
			var img = new Element('img', {
				src : frames[i]
			});
			
		this.frameImages.push(img);
		this.frameDurations.push(this.frameRate);
		}
	}
    
  },
  
  linkToAnimation: function (url){
  	this.dolinkToAnimation = true;
  	this.link = url;
  },
  
  addFrame : function (url,timing){
  	var img = new Element('img', {
				src : url
			});
	this.frameImages.push(img);
	if(timing==null){
		this.frameDurations.push(this.frameRate);
	}else{
		this.frameDurations.push(timing);
	}
	if(this.dolinkToAnimation){
		img.onclick = function(){top.location = this.link}.bind(this);
		img.setStyle({
			cursor: 'pointer'
		});
	}

	//alert("there are "+this.frameImages.length+" images");
  },
  
  setSize : function (w,h){
  	//alert("setSize");
  	for(var i=0;i<this.frameImages.length;i++){
  		this.frameImages[i].width=w;
  		this.frameImages[i].height=h;
  		//alert(this.frameImages);
  	}
  	
  },
  
  setFrameRate : function(duration){
  	for(var i=0;i<this.frameDurations.length;i++){
  		this.frameDurations[i]=duration;
  	}
  },

  play : function() {
    
    if(this.frameImages.length>0){
    	this.goToFrame(this.currentFrame);
    	clearTimeout(this.timeOut);
		this.timeOut = setTimeout(this.goToNextFrame.bind(this), this.frameDurations[this.currentFrame-1]);
		if(this.loadingSymbol!=null){
			this.loadingSymbol.setStyle({display:'none'});
		}
    }
    
  },
  
  stop : function(){
	
	if(this.playing){
		this.pause();	
		this.gotoFrame(1);
	}
	
  },
  
  goToFrame : function(num){
  //alert("go to frame "+this.currentFrame);
	if(num>0 && num<=this.frameImages.length){
		this.currentFrame = num;
		this.targetDiv.innerHTML="";
		this.currentImg = this.frameImages[this.currentFrame-1];
		this.targetDiv.appendChild( this.currentImg );
	}
	
  },
  
  goToNextFrame : function(){
  
	if(this.currentFrame < (this.frameImages.length)){
		this.currentFrame++;
		
		this.goToFrame(this.currentFrame);
	}else{
		this.currentFrame = 1;
		this.goToFrame(this.currentFrame);
	}
	this.play();
	
  },
  
  pause : function(){
	clearTimeout(this.timeOut);	 	
  },
  
  resume:function(){
  	this.play();
  },
		  
  suspend : function(){
  	this.pause();
	this.targetDiv.innerHTML="";
  },
  
  setLoading : function (div){
	this.loadingSymbol = div;
  }
  
});

