var Scroller = { 
  // Variables
  ArrowLeftSrc: SITE_ROOT + "/common/scripts/scroller/images/arrow-left.gif",
  ArrowRightSrc: SITE_ROOT + "/common/scripts/scroller/images/arrow-right.gif",

  // Functions - Don't edit anything below this line
  Interval: new Array(),
  Images: new Array(),
  Container: new Array(),
  Active: 0,
  Paused: false,
  Time: 0,
  Direction: "right",
  Target: 0,
  
  Init:  function(time, direction, target) {
    Scroller.addLoadEvent(function(){
      if (document.getElementById(target)) {
        Scroller.SetInterval(time, direction, target);
        Scroller.SetMouseEvents(target, direction, time);
        Scroller.SetImageEvents(target);
        
        Scroller.Target = target;
        Scroller.Direction = direction;
        Scroller.Time = time;
      }
    });
  },
  
  SetInterval: function(time, direction, target) {    
    if (time == 0) {
      for (var i=0;i<Scroller.Interval.length;i++) {
        clearTimeout(Scroller.Interval[i]);
      }
      Scroller.Interval = new Array();
    } else {
      if (Scroller.Interval.push) { // push() causes ie6 to freeze up
        Scroller.Interval.push(window.setInterval("Scroller.Scroll('" + direction + "','" + target + "')",time*1000));
      } else {
        window.setInterval("Scroller.Scroll('" + direction + "','" + target + "')",time*1000);
      }
    } 
  },
  
  SetMouseEvents: function (target, direction, time) {
    target = document.getElementById(target);
    
    Scroller.addEvent(target,"mouseover",function(e){Scroller.MouseOn(e,target);});    
    Scroller.addEvent(target,"mouseout",function(e){Scroller.MouseOff(e,target, direction, time);});
  },
  
  SetImageEvents: function(target) {
    target = document.getElementById(target);
    target.style.position = 'relative';
    
    imgContainer = document.createElement('div');
    imgContainer.setAttribute("id",target.id + "-container");
    imgContainer.setAttribute("isArrow","true");
    imgContainer.className = "Scroller-container";
    //imgContainer.style.display = "none";
    
    //Create Arrows
    newLeftImage = document.createElement('img');
    newRightImage = document.createElement('img');

    newLeftImage.setAttribute("src",Scroller.ArrowLeftSrc);
    newRightImage.setAttribute("src",Scroller.ArrowRightSrc);
    
    newLeftImage.setAttribute("id",target.id + "-left-arrow");
    newRightImage.setAttribute("id",target.id + "-right-arrow");
    
    newLeftImage.setAttribute("alt",target.id + "-left-arrow");
    newRightImage.setAttribute("alt",target.id + "-right-arrow");
    
    newLeftImage.setAttribute("isArrow","true");
    newRightImage.setAttribute("isArrow","true");
    
    newLeftImage.className = "Scroller-arrow";
    newRightImage.className = "Scroller-arrow";
    
    Scroller.addEvent(newLeftImage,"click",function(){Scroller.Scroll('left', target.id);});  
    Scroller.addEvent(newRightImage,"click",function(){Scroller.Scroll('right', target.id);});  
    
    // Create Pause Button
    newPause = document.createElement("span");
    newPause.className = "Scroller-number";
    newPause.innerHTML = "||";
    Scroller.addEvent(newPause,"click",function(){Scroller.Pause(this);});  
    imgContainer.appendChild(newPause);
    
    // Place arrows/images inside container
    imgContainer.appendChild(newLeftImage);
    
    var count = 0;
    for (var i=0; i < target.childNodes.length; i++) {
      if (target.childNodes[i].nodeType == "1") {       
        if (!target.childNodes[i].getAttribute("isArrow")) {
          count++;
          target.childNodes[i].id = "slide-" + count;
          if (Scroller.Images.length > 0) target.childNodes[i].style.display = "";
          Scroller.Images.push(target.childNodes[i]);
          
          newNumber = document.createElement("span");
          newNumber.setAttribute("id",target.id + "-" + count);
          newNumber.setAttribute("number",count);
          newNumber.innerHTML = count;
          
          if (count == 1) {
            newNumber.className = "Scroller-number-active";
          } else {
            newNumber.className = "Scroller-number";
          }
          
          Scroller.addEvent(newNumber,"click",function(e){
            target = e.target || e.srcElement;
            Scroller.GoTo(target.getAttribute("number")-1);
          });
          
          Scroller.Container.push(newNumber);
          imgContainer.appendChild(newNumber);
        }
      }
    }
    
    imgContainer.appendChild(newRightImage);
    target.appendChild(imgContainer);
  },
  
  MouseOn: function(e,target) {
    var container = document.getElementById(target.id + "-container");
    container.style.display = "";
    Scroller.SetInterval(0, "right", target);
  },
  
  MouseOff: function(e,target, direction, time) {
    if (!e) var e = window.event;
    var newTarget = e.relatedTarget || e.toElement;
    var isChildOf = false;
    
    if (newTarget) {
      do {
        if (newTarget.id == target.id) {
          isChildOf = true;
        }
      } while ((newTarget = newTarget.parentNode) && (isChildOf));
      
      if (!isChildOf) {
        var container = document.getElementById(target.id + "-container");
        //container.style.display = 'none';
        if (Scroller.Paused != true) {
          Scroller.SetInterval(time, direction, target.id);
        }
      }
    }
  },
  
  Scroll: function(direction, holder) {
    if (Scroller.Images[Scroller.Active]) {
      Scroller.Images[Scroller.Active].style.display = "none";
      Scroller.Container[Scroller.Active].className = "Scroller-number";
  
      if (direction == 'left') {
        Scroller.Active--;
        if (Scroller.Active < 0) {
          Scroller.Active = Scroller.Images.length - 1;
        }
      } else if (direction == 'right') {
        Scroller.Active++;
        if (Scroller.Active >= Scroller.Images.length) {
          Scroller.Active = 0;
        }
      }
      
      Scroller.Images[Scroller.Active].style.display = "";
      Scroller.Container[Scroller.Active].className = "Scroller-number-active";
    }
  },
  
  GoTo: function(target) {
    Scroller.Images[Scroller.Active].style.display = "none";
    Scroller.Container[Scroller.Active].className = "Scroller-number";
    
    Scroller.Active = target;
    
    Scroller.Images[Scroller.Active].style.display = "";
    Scroller.Container[Scroller.Active].className = "Scroller-number-active";
  },
  
  Pause: function(obj) {
    if (Scroller.Paused == true) {
      obj.innerHTML = "||";
      Scroller.Paused = false;
      
      for (var i=0;i<Scroller.Interval.length;i++) {
        clearTimeout(Scroller.Interval[i]);
      }
      Scroller.Interval = new Array();
    } else {
      obj.innerHTML = ">";
      Scroller.Paused = true;
      Scroller.SetInterval(Scroller.Time, Scroller.Direction, Scroller.Target.id);
    }
  },

  addEvent: function ( obj, type, fn ) {
    if (obj.addEventListener)
      obj.addEventListener( type, fn, false );
    else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
    }
  },

  addLoadEvent: function(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
      window.onload = func;
    } else {
      window.onload = function() {
        if (oldonload) oldonload();
        func();
      }
    }
  }
}