//thank you prototype
function $(o) {
  return document.getElementById(o);  
}


function ImageController() {
 
  var self = this;

  this.images;
  this.links;
	this.timeoutid;
  
  this.currentPosition;
  this.nextPosition;
  
  this.fadeid = null;
  this.fadeTween = [1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1, 0.0];
  this.fadeIndex = 0;
  
  this.fadeOutCurrentImage = function() {
  
    self.fadeid = null;
    self.fadeIndex = 0;
    self.fadeid = setInterval(self._fadeOutCurrentImage, 25); 
    
  }
  
  this._fadeOutCurrentImage = function() {
    
    self.images[self.currentPosition].style.opacity = self.fadeTween[self.fadeIndex];
    self.images[self.currentPosition].style.filter = "alpha(opacity="+self.fadeTween[self.fadeIndex]*100+")";
    
    self.fadeIndex++;
    
    if (self.fadeIndex == self.fadeTween.length) {
      
      clearInterval(self.fadeid);
      self.fadeid = null;

      self.images[self.currentPosition].style.visibility = 'hidden';
      self.links[self.currentPosition].className = "";
      
      self.currentPosition = self.nextPosition;
      self.nextPosition = self.currentPosition+1 < self.images.length ? self.currentPosition+1 : 0;
      self.links[self.currentPosition].className = "selected";
     
      self.fadeInCurrentImage();
    }
    
  }
  
  this.fadeInCurrentImage = function() {
  
    self.fadeid = null;
    self.fadeIndex = self.fadeTween.length-1;
    self.fadeid = setInterval(self._fadeInCurrentImage, 25); 
    
  }
  
  this._fadeInCurrentImage = function() {
    
    self.images[self.currentPosition].style.opacity = self.fadeTween[self.fadeIndex];
    self.images[self.currentPosition].style.filter = "alpha(opacity="+self.fadeTween[self.fadeIndex]*100+")";
    
    if (self.fadeIndex == self.fadeTween.length-1) {
      
      var oWidth = self.images[self.currentPosition].offsetWidth;
      
      self.images[self.currentPosition].style.left = (((967-oWidth)/2)+6)+'px'
      self.images[self.currentPosition].style.visibility = 'visible'; 
      
    }
    
    self.fadeIndex--;
    
    if (self.fadeIndex == -1) {
      
      clearInterval(self.fadeid);
      self.fadeid = null;
    
    }
    
  }
    
  
  this.switchImage = function(e) {

		//get rid of the timeout
		clearTimeout(self.timeoutid);
		self.timeoutid = null;
    
    e = e ? e : event;

    var targ = e.target || e.srcElement;
    while (targ.nodeName.toLowerCase() != "li") targ = targ.parentNode;

    for (var index=self.links.length;index--;) {
      if (self.links[index] == targ) self.nextPosition = index;  
    }
    
    
    if (!self.fadeid) {
      self.fadeOutCurrentImage();
    } 
    
    try {
      var targ = e.target || e.srcElement;
      targ.blur();
    } catch(e) {} //oh well
    
		self.timeoutid = setTimeout(self.nextImage, 6000);

    return false;
    
  }

	this.nextImage = function() {
		
		self.nextPosition = self.currentPosition+1;
		if (self.nextPosition >= self.links.length) self.nextPosition = 0;
		
		if (!self.fadeid) {
			self.fadeOutCurrentImage();
		}
		
		self.timeoutid = setTimeout(self.nextImage, 6000);
		
	}
  
  this.init = function() {
        
    self.images = $('img-con').getElementsByTagName('img'); 
    self.links = $('img-nav').getElementsByTagName('li');
    self.currentPosition = 0;
    self.timeoutid = setTimeout(self.nextImage, 6000);

    for (var i=self.links.length;i--;) {
      self.links[i].getElementsByTagName('a')[0].onclick = self.switchImage;
    }
    
  }
    
}

var ImageControl = new ImageController();
