function BatchNavigation( prefix ) {
  
  var navi = this;
  
  var slideInProgress = false;
  
  var currSlideEndPosX = 0;
  var newSlideEndPosX = 0;
  
  var currSlideStartPosX = 0;
  var newSlideStartPosX = 0;
  
  var currNum = 1;
  var maxNum = 0; 
  var elemId = prefix; 
  var diff = 0;
  
  var list; 
  var slides;
  
  var currSlide;
  var newSlide;
  
  var numElem; 
  var btnForward;
  var btnBack;   
 
  this.doSlide = function( ) {
    
    var cpx = currSlide.offsetLeft;
    var npx = newSlide.offsetLeft;
    
    var rerunFunction = false;  
  
    if( diff > 0 ) {
      if( (cpx + diff) < currSlideEndPosX ) {
        rerunFunction = true;
    	} else {
    		rerunFunction = false;
    	}
    } else {
      if( (cpx + diff) > currSlideEndPosX ) {
        rerunFunction = true;
    	} else {
    		rerunFunction = false;
    	}
    }
    
    if(rerunFunction) {
      
      slideInProgress = true;
      currSlide.style.left = (cpx + diff) + 'px';
      newSlide.style.left = (npx + diff) + 'px';
      var callback = this;
      
      setTimeout( function() { callback.doSlide() }, BatchNavigation.prototype.slideTimer);
      
    } else {  
      currSlide.style.left = currSlideEndPosX + 'px';
      currSlide.style.display = 'none';
      newSlide.style.left = newSlideEndPosX + 'px';
  		slideInProgress = false;
      
    }
  
  }
  
  
  this.startSlide = function( dir ) {
    
    var newNum = currNum + (dir*-1);
    
    /* loop */
    if(newNum > maxNum) 
      newNum = 1;
    if(newNum < 1) 
      newNum = maxNum;
    
    currSlide = slides[currNum-1];
    newSlide = slides[newNum-1];
    
    if(slideInProgress || currSlide == null || newSlide == null) return;
    
    currNum = newNum;
    currSlideEndPosX = list.offsetLeft + ( dir*(currSlide.offsetWidth));
    newSlideStartPosX = list.offsetLeft + ( (-1)*dir*(currSlide.offsetWidth));
    
    currSlide.style.left = currSlideStartPosX + 'px';
    newSlide.style.left = newSlideStartPosX + 'px';
    
    currSlide.style.position = 'absolute';
    newSlide.style.position = 'absolute';
    
    currSlide.style.display = 'block';
    newSlide.style.display = 'block';
    

    diff = dir * BatchNavigation.prototype.slideSpeed;
    
    this.doSlide();
  
    numElem.innerHTML = currNum;
  
  }
  
  
  
  this.initBatchNavigation = function() {
    
    list = document.getElementById( elemId + '');
    list.navi = this;
    
    slides = new Array();
    for(var i=0; i<list.childNodes.length; i++) {
      if(list.childNodes[i].nodeType == 1)
        slides.push(list.childNodes[i]); 
    }
    
    maxNum = slides.length;
    list.style.width = slides[0].offsetWidth*2 + 'px';
    list.style.height = slides[0].offsetHeight+ 'px';
    
    numElem = document.getElementById( elemId + '_curr_num');
    
    btnForward = document.getElementById( elemId + '_btn_forward');
    btnForward.style.cursor = 'pointer';	
    btnForward.onclick = function () { 
      navi.startSlide(-1); 
      return false;
    };
    
    btnBack = document.getElementById( elemId + '_btn_back');
    btnBack.style.cursor = 'pointer';	
    btnBack.onclick = function () { 
      navi.startSlide(1);  
      return false;
    };
    
  }  
  
}

BatchNavigation.prototype.slideSpeed = 30;
BatchNavigation.prototype.slideTimer = 5;
