var OrSliderClass = function(){};

OrSliderClass.prototype.init = function(inits)
{
  this.calibrated = false;
  
  this.toSlideObj     = document.getElementById(inits['to_slide']);
  this.slideLeftObj   = document.getElementById(inits['slide_left_id']);
  this.slideRightObj = document.getElementById(inits['slide_right_id']);
  
  // set fixed default values of width for Netscape, becouse  in that browser doesn't  the getWidth method
  this.netscape_item_width = (inits['netscape_item_width'] ? inits['netscape_item_width'] : 120);
  this.netscape_slider_width = (inits['netscape_slider_width'] ? inits['netscape_slider_width'] : 480);
  this.netscape_button_width = (inits['netscape_button_width'] ? inits['netscape_button_width'] : 40);
  
  this.parentWidth = (navigator.appName != "Netscape" ? this.getWidth(this.toSlideObj.parentNode) : parseInt(this.netscape_slider_width));
  this.toSlideWidth = this.getWidth(this.toSlideObj);

  this.setStyles();
  this.skip_value = inits['fluctuation'] ? inits['fluctuation'] : 1; // px
  this.interval = inits['interval'] ? inits['interval'] : 50; // ms
  this.offset = 0;
  
  this.inits = inits;
  

  
  if(this.isGoodMove())
  {
    if(inits['automove'] == true)
    {
      this.auto = true;
      this.switcher = true;
      this.initAutoMoves();
      this.move();
    }
    else
    {
      this.initMoves();
    }
  }
};

OrSliderClass.prototype.setStyles = function()
{
  this.toSlideObj.parentNode.style.overflow = 'hidden';
  
  if(this.getStyle(this.toSlideObj.parentNode, 'display') != 'block')
  {
    this.toSlideObj.parentNode.style.display = 'block';
  }
  
  if(this.getStyle(this.toSlideObj, 'display') != 'block')
  {
    this.toSlideObj.style.display = 'block';
  }
  
  if(this.getStyle(this.toSlideObj, 'height') != this.getStyle(this.toSlideObj.parentNode, 'height'))
  {
    this.toSlideObj.style.height = this.toSlideObj.parentNode.style.height;
  }
  

  this.slideLeftObj.style.display = 'none';
  this.slideRightObj.style.display = 'none';
    
  this.slideRightObj.style.overflow = 'hidden';
  
  var children = this.toSlideObj.childNodes;
  var new_size = 0;
  for(i = 0 ; i < children.length ; i++)
  {
    if(children[i].nodeType == 1)
    {
      new_size += this.getWidth(children[i]);
    }
  }
  // add 20 px for ie to display all elements in one line
  this.toSlideObj.style.width = new_size + 20 + 'px';
  this.toSlideWidth = new_size;

  
  if(this.isGoodMove())
  {
    this.slideLeftObj.style.position = 'absolute';
    this.slideRightObj.style.position = 'absolute';
    this.slideLeftObj.style.display = 'block';
    this.slideRightObj.style.display = 'block';


    var to_slide_pos = this.getAbsolutePosition(this.toSlideObj);
    
    if(!this.isIe6())
    {  
      this.slideLeftObj.style.top = to_slide_pos.top + 'px';
      this.slideRightObj.style.top = to_slide_pos.top + 'px';
      this.slideLeftObj.style.left = (to_slide_pos.left - (navigator.appName != "Netscape" ? this.getWidth(this.slideLeftObj) : this.netscape_button_width)) + 'px';
      this.slideRightObj.style.left = (to_slide_pos.left + this.parentWidth) + 'px';
    }
    else
    { 
      //ie 6 position absolute bug
      this.slideLeftObj.style.left = to_slide_pos.left - 371 -  this.getWidth(this.slideLeftObj) + 'px';
      this.slideRightObj.style.left = to_slide_pos.left - 371 + this.parentWidth + 'px';
    }
  

  }
  this.toSlideObj.style.position = 'relative';

};

OrSliderClass.prototype.isIe6 = function()
{


  if(navigator.appName == "Microsoft Internet Explorer")
  {
  
                var reg6 = new RegExp("MSIE 6.0");
                var version = navigator.appVersion;
                var reg7 = new RegExp("MSIE 7.0");
                var version2 = navigator.appVersion;
                if(reg6.exec(version) && !reg7.exec(version2))
                  return true;
  }
  
  return false;
}

OrSliderClass.prototype.isGoodMove = function()
{
  if(this.toSlideWidth - this.parentWidth <= 50 )
  {
    return false;
  }
  
  return true;
}

OrSliderClass.prototype.getStyle = function(el, styleProp)
{
  var x = el;
  if (x.currentStyle)
    var y = x.currentStyle[styleProp];
  else if (window.getComputedStyle)
    var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
  return y;
};

OrSliderClass.prototype.initMoves = function()
{
  OrSlider.slideLeftObj.onmouseover = this.startMoveLeft;
  OrSlider.slideRightObj.onmouseover = this.startMoveRight;
  
  OrSlider.slideLeftObj.onmouseout = this.stopMove;
  OrSlider.slideRightObj.onmouseout = this.stopMove;
};

OrSliderClass.prototype.initAutoMoves = function()
{
  OrSlider.slideLeftObj.onmouseover = this.startAutoMoveLeft;
  OrSlider.slideRightObj.onmouseover = this.startAutoMoveRight;
};

OrSliderClass.prototype.startMoveRight = function()
{
  OrSlider.switcher = true;
  OrSlider.move();
}

OrSliderClass.prototype.startMoveLeft = function()
{
  OrSlider.switcher = false;
  OrSlider.move();
}

OrSliderClass.prototype.startAutoMoveRight = function()
{
  OrSlider.switcher = true;
}

OrSliderClass.prototype.startAutoMoveLeft = function()
{
  OrSlider.switcher = false;
}

OrSliderClass.prototype.setPosiion = function()
{
  OrSlider.slideLeftObj.style.top = OrSlider.toSlideObj.style.top;
  OrSlider.slideRightObj.style.top = OrSlider.toSlideObj.style.top;

  if(!OrSlider.calibrated)
  {
    //var to_slide_pos = OrSlidergetAbsolutePosition(OrSlider.toSlideObj);
    //OrSlider.slideLeftObj.style.left = (to_slide_pos.left - (navigator.appName != "Netscape" ? OrSlider.getWidth(OrSlider.slideLeftObj) : OrSlider.netscape_button_width)) + 'px';
    //OrSlider.slideRightObj.style.left = (to_slide_pos.left + OrSlider.parentWidth) + 'px';
  }
  
  OrSlider.calibrated = true;
}


OrSliderClass.prototype.move = function()
{
  
    OrSlider.setPosiion();
    
    if(OrSlider.canMove())
    {
      if(OrSlider.getStyle(OrSlider.toSlideObj, 'position') != 'relative')
      OrSlider.toSlideObj.style.position = "relative";
  
      if(OrSlider.switcher)
      {
        OrSlider.toSlideObj.style.left = this.getLeft()  + OrSlider.skip_value + 'px';
      }
    
      else
      {
        OrSlider.toSlideObj.style.left =  this.getLeft() - OrSlider.skip_value + 'px';
      }
      
      OrSlider.offset = parseInt(OrSlider.getStyle(OrSlider.toSlideObj, 'left'));
      setTimeout('OrSlider.move()', OrSlider.interval);
    }
    
    else if(OrSlider.auto)
    {
      OrSlider.switcher = !OrSlider.switcher;
      OrSlider.move();
    }
};

OrSliderClass.prototype.getLeft = function()
{
  if(OrSlider.getStyle(OrSlider.toSlideObj, 'left') == 'auto')
  {
    return 0;
  }
  return parseInt(OrSlider.getStyle(OrSlider.toSlideObj, 'left'));
}

OrSliderClass.prototype.autoMove = function()
{
  OrSlider.auto = true;
  OrSlider.move();
}

OrSliderClass.prototype.stopMove = function()
{
  if((OrSlider.offset != 0) && (OrSlider.offset != (OrSlider.parentWidth - OrSlider.toSlideWidth)))
  {
    OrSlider.stop_moving = true;
  }
}

OrSliderClass.prototype.canMove = function()
{
  if(OrSlider.stop_moving)
  {
    retval = false;
    OrSlider.stop_moving = null;
  }
  
  else if((OrSlider.offset <= (OrSlider.parentWidth - OrSlider.toSlideWidth)) && (OrSlider.switcher == false))
  {
    OrSlider.offset = OrSlider.parentWidth - OrSlider.toSlideWidth;
    retval = false;
    OrSlider.stop_moving = null;

  }
  else if((OrSlider.offset >= 0) && (OrSlider.switcher == true))
  {
    OrSlider.offset = 0;
    retval = false;
    OrSlider.stop_moving = null;
  }
  else
    retval = true;
  
  return retval;
}

OrSliderClass.prototype.getWidth = function(element) 
{
  var display = this.getStyle(element, 'display');
  if (display != 'none' && display != null) // Safari bug
  {
    if(navigator.appName == "Netscape")
    {
      return this.netscape_item_width;
    }
    return parseInt(element.offsetWidth);
  }
  //konqueror bug ;/
    if(navigator.appName == "Netscape")
    {
      return this.netscape_item_width;
    }
  var els = element.style;
  var originalVisibility = els.visibility;
  var originalPosition = els.position;
  var originalDisplay = els.display;
  els.visibility = 'hidden';
  els.position = 'absolute';
  els.display = 'block';
  var originalWidth = element.clientWidth;
  var originalHeight = element.clientHeight;
  els.display = originalDisplay;
  els.position = originalPosition;
  els.visibility = originalVisibility;
  return parseInt(originalWidth);
}

OrSliderClass.prototype.getAbsolutePosition = function(object)
{

	var output = new Object();
	var mytop=0, myleft=0;
	var ob = object;
	

	while(object) 
  {
    mytop += object.offsetTop;
	 	myleft += object.offsetLeft;
	  object = object.offsetParent;
  } 
  
	output.left = parseInt(myleft);
	output.top = parseInt(mytop);
	output.right = parseInt(myleft) + this.getWidth(ob);
	return output;  
};

var OrSlider = new OrSliderClass();