
function Fader(faderId, contentClassName)
{
 var self = this;
 var contents = new Array();
 var currentContentIndex = 0;
 var autoPlay = true;

 var intervalId;
 var currentContent = new Content();
 var pager;
 
 this.contentCount = 0;
 
 this.init = function(){
    var faderEl = YAHOO.util.Dom.get(faderId);
    var contentEls = YAHOO.util.Dom.getElementsByClassName(contentClassName, "div", faderEl);
    self.contentCount = contentEls.length;
    if (self.contentCount <2) {return;}
    for (var i = 0; i<self.contentCount; i++)
    {
        self.AddContent(contentEls[i]);
    }
 }
 
 this.AddContent = function(contentEl)
 {
    var content = new Content();
    content.setId(contentEl);
    contents.push(content);
 }
 
 this.SwitchContents = function()
 {
	currentContent = contents[currentContentIndex];
	currentContent.Hide();
    currentContentIndex++;
	currentContentIndex = currentContentIndex%contents.length;
	currentContent = contents[currentContentIndex];
	currentContent.Show();
	//pager.SetSelected(currentContentIndex);
 }
 
 this.StartAutoPlay = function(autoPlayDuration)
 {
 if (self.contentCount <2) {return;}
  intervalId = setInterval(this.SwitchContents,autoPlayDuration*1000);
 }
 
 this.StopAutoPlay = function()
 {
  clearInterval(intervalId);
 }
 
 this.AddPager = function(_pager)
 {
    pager = _pager;
    pager.onButtonSelected1.subscribe(ButtonSelected);
 }
 
 function ButtonSelected(type, args, scope)
 {
    if(intervalId!=null)
    {
        self.StopAutoPlay();
    }
    autoPlay = false;

    self.SwitchContentsByIndex(args[0]);
 }
 
 this.SwitchContentsByIndex = function(contentIndex)
 {
	currentContent = contents[currentContentIndex];
	currentContent.Hide();
    currentContentIndex = contentIndex;
	currentContentIndex = currentContentIndex%contents.length;
	currentContent = contents[currentContentIndex];
	currentContent.Show();
 }
}



//////////////////////////////////


function Content()
{
 var contentEl, showAnim, hideAnim;
 
 this.setId = function(contentEl)
 {
  showAnim = new YAHOO.util.Anim(contentEl, {opacity: {to: 1}}, 0.5);
  showAnim.onStart.subscribe(function(){
    YAHOO.util.Dom.setStyle(contentEl, "z-index", 1);
  });
  
  hideAnim = new YAHOO.util.Anim(contentEl, {opacity: {to: 0}}, 0.5);
  hideAnim.onStart.subscribe(function(){
    YAHOO.util.Dom.setStyle(contentEl, "z-index", 0);
  });
 }
 
 this.Show = function()
 {
 	if (hideAnim.isAnimated()) {hideAnim.stop();}
  showAnim.animate();
 }
 
 this.Hide = function()
 {
 	if (showAnim.isAnimated()) {showAnim.stop();}
  hideAnim.animate();
 }
}

////////////////////////////// 

function Pager(cfg)
{
 var self = this;
 var buttons = new Array();
 var currentlySelectedButtonIndex = -1;
 var pager_buttons;
 var numOfPagerLinks;

 this.init = function(_numOfPagerLinks)
 {
    numOfPagerLinks = _numOfPagerLinks;
    if (numOfPagerLinks < 2){return;}
    var pager = YAHOO.util.Dom.get(cfg.elementId);
    pager_buttons = pager.getElementsByTagName("div")[0];
    
    for (var i = 0; i<numOfPagerLinks; i++){
        self.AddButton(i); 
    }

    if (cfg.pagerLinksWidth){
        centerlizePager(pager, cfg.pagerLinksWidth, numOfPagerLinks);
    }
    YAHOO.util.Dom.setStyle(pager, "visibility", "visible");
 }
 
 this.Next = function()
 {
  var selectedButtonIndex = (currentlySelectedButtonIndex+1)%buttons.length;
	ButtonSelected("", [selectedButtonIndex]);
 }
 
 this.Previous = function()
 {
  var selectedButtonIndex = currentlySelectedButtonIndex-1;
	if(selectedButtonIndex < 0)
	{
	 selectedButtonIndex = buttons.length - 1;
	}
	ButtonSelected("", [selectedButtonIndex]);
 }

 this.AddButton = function(buttonIndex)
 {
    var btn = new Button();
    var buttonEl = btn.init(buttonIndex);
    btn.onButtonSelected.subscribe(ButtonSelected);
    buttons.push(btn);
    pager_buttons.appendChild(buttonEl);
 }
 
 this.onButtonSelected1 = new YAHOO.util.CustomEvent("onButtonSelected1", this);
 var ButtonSelected = function(type, args, scope)
 {
    var buttonIndex = args[0];
    self.SetSelected(buttonIndex);
    self.onButtonSelected1.fire(buttonIndex);
 }
 
 this.SetSelected = function(buttonIndex)
 {
    if (numOfPagerLinks < 2) {return;}
    if (currentlySelectedButtonIndex != buttonIndex) {
        if (currentlySelectedButtonIndex != -1){
            buttons[currentlySelectedButtonIndex].DeselectPage();
        }
        buttons[buttonIndex].SelectPage();
        currentlySelectedButtonIndex = buttonIndex;
    }
 }
 
 this.SetClass = function(buttonId,className)
 {
  YAHOO.util.Dom.replaceClass(buttonId,"-",className);
 }
 
 var centerlizePager = function(pager, pagerLinksWidth, pagerLinksCount)
 {
    var width = pagerLinksWidth * pagerLinksCount;
    YAHOO.util.Dom.setStyle(pager, "width", width+"px");
    
    var left = parseInt((width / 2), 10);
    if (YAHOO.env.ua.ie !== 0){
        YAHOO.util.Dom.setStyle(pager, "margin-right", left+"px");
    }
    else{
        YAHOO.util.Dom.setStyle(pager, "margin-left", "-" +left+"px");
    }
    
 }
}



///////////////////////////////

function Button()
{
 var self = this;
 var buttonEl;
 var buttonIndex;

 this.init = function(_buttonIndex)
 {    
    buttonIndex = _buttonIndex;
    
    buttonEl = document.createElement("a");
    buttonEl.appendChild(document.createTextNode(buttonIndex+1));
    YAHOO.util.Dom.addClass(buttonEl, "lnk_pager");
    buttonEl.id = "btn"+buttonIndex+1;
    buttonEl.setAttribute("href", "javascript://");
    YAHOO.util.Event.addListener(buttonEl, "click", function(){
        self.onButtonSelected.fire(buttonIndex);
    });
    
    return buttonEl;
 }
  
 this.onButtonSelected = new YAHOO.util.CustomEvent("onButtonSelected", this);
 this.SelectPage = function()
 {
	YAHOO.util.Dom.addClass(buttonEl,"selected");
 }
 this.DeselectPage = function()
 {
	YAHOO.util.Dom.removeClass(buttonEl,"selected");
 }
}
