/**
 * vyzaduje pro svuj beh
 * prototype.js
 * scriptaculous.js
 * effects.js (z knihovny scriptaculous)
 */ 
function sliderBox(container_id)
{ 
  this.container_id = container_id;

  this.containerElement = null;

  this.controlClass = 'sliderBox_control';
  
  this.contentClass = 'sliderBox_content';
  
  this.controlElements = [];
  
  this.contentElements = [];
  
  this.currentlyOpenOrder = 0;
  
  this.refresh = 10;
  
  this.speed = 7;
  
  sliderBox.prototype.initialize = function() {
    this.containerElement = document.getElementById(this.container_id); 
    this.controlElements = this.getDescendantsByClass(this.controlClass, this.containerElement);
    this.contentElements = this.getDescendantsByClass(this.contentClass, this.containerElement);
    
    for (var i = 0; i <this.controlElements.length; i++) {
      this.addEventListener(this.controlElements[i], "click", this.createSwitchCallback(i), this);
      this.disableTextSelection(this.controlElements[i]);
    }
    for (var i = 0; i <this.contentElements.length; i++) {
      this.contentElements[i].style.display='none';
			this.contentElements[i].style.overflow='hidden';
			this.contentElements[i].maxh = this.elementHeight(this.contentElements[i]);
			this.contentElements[i].s=(this.speed==undefined)? 7 : this.speed;
    }
    
    if(this.contentElements[this.currentlyOpenOrder]!=undefined) {
      this.contentElements[this.currentlyOpenOrder].style.display = 'block';
      this.contentElements[this.currentlyOpenOrder].style.height=this.contentElements[this.currentlyOpenOrder].maxh;
    }
    //this.switchTo(0, false);
  }
  
  sliderBox.prototype.switchTo = function(order, fancy) {
    if(order == this.currentlyOpenOrder) return false;
    if(this.contentElements[this.currentlyOpenOrder] != undefined) {
      if(fancy) { // fancy zajizdeni zruseno na Lakiho zadost
        this.collapse(this.contentElements[this.currentlyOpenOrder]);
      } else {
        this.contentElements[this.currentlyOpenOrder].style.display = 'none';
      }
    }
    if(this.controlElements[this.currentlyOpenOrder] != undefined) {
      this.removeClassName(this.controlElements[this.currentlyOpenOrder], 'active');
    }
    if(this.contentElements[order] != undefined) {
      if(fancy) {
        this.expand(this.contentElements[order]);
      } else {
        this.contentElements[order].style.display = '';
      }
      
    }
    if(this.controlElements[order] != undefined) {
      this.addClassName(this.controlElements[order], 'active');
    }
    this.currentlyOpenOrder = order;
    return false;
  }
  
  sliderBox.prototype.expand = function(element){
  	if(element.style.display == 'none'){
  		element.style.display = 'block';
  		element.style.height='0px';
  		clearInterval(element.t);
  		element.t=setInterval(this.createExpandTimerCallback(element),this.refresh);
  	}
  }
  
  sliderBox.prototype.collapse = function(element){
  	if(element.style.display=='block'){
  		clearInterval(element.t);
  		element.t=setInterval(this.createCollapseTimerCallback(element),this.refresh);
  	}
  }
  
  sliderBox.prototype.expandTimer = function(element){
  	if(this.elementHeight(element)<element.maxh){
  		v = Math.round((element.maxh-this.elementHeight(element))/element.s);
  		v = (v<1) ? 1 :v ;
  		v = (this.elementHeight(element)+v);
  		element.style.height=v+'px';
  		element.style.opacity = (v/element.maxh);
  		element.style.filter= 'alpha(opacity='+(v*100/element.maxh)+');';
  	}else{
  	  element.style.height=element.maxh;
  		clearInterval(element.t);
  	}
  }
  
  sliderBox.prototype.collapseTimer = function(element){
  	if(this.elementHeight(element)>0){
  		v = Math.round(this.elementHeight(element)/element.s);
  		v = (v<1) ? 1 :v ;
  		v = (this.elementHeight(element)-v);
  		element.style.height=v+'px';
  		element.style.opacity = (v/element.maxh);
  		element.style.filter= 'alpha(opacity='+(v*100/element.maxh)+');';
  	}else{
  		element.style.height=0;
  		element.style.display = 'none';
  		clearInterval(element.t);
  	}
  }
  
  sliderBox.prototype.elementHeight = function(element){
  	// if you are getting the height then display must be block to return the absolute height
		if(element.style.display!='none'&& element.style.display!=''){
			return element.offsetHeight;
		}
		viz = element.style.visibility;
		element.style.visibility = 'hidden';
		o = element.style.display;
		element.style.display = 'block';
		r = parseInt(element.offsetHeight);
		element.style.display = o;
		element.style.visibility = viz;
		return r;
  }
  
  sliderBox.prototype.createExpandTimerCallback = function(element) {
    var sliderBoxObj = this;
    return function () {
      return sliderBoxObj.expandTimer(element);
    };
  }
  
  sliderBox.prototype.createCollapseTimerCallback = function(element) {
    var sliderBoxObj = this;
    return function () {
      return sliderBoxObj.collapseTimer(element);
    };
  }
  
  sliderBox.prototype.createSwitchCallback = function(order) {
    var sliderBoxObj = this;
    return function () {
      return sliderBoxObj.switchTo(order, true);
    };
  }
  
  sliderBox.prototype.getDescendantsByClass = function(class_name, container_element) {
    if(container_element == undefined) return false;
    var elements = new Array();
    var reg = new RegExp('\\b'+class_name+'\\b');
    var all = container_element.getElementsByTagName('*');
    for (var i = 0; i < all.length; i++) {
      if (reg.test(all[i].className)) elements.push(all[i]);
    }
    return elements;
  }
  
  sliderBox.prototype.addEventListener = function(obj,evt,fnc,scope,useCapture) {
    if (!useCapture) useCapture=false;
    var scoped = scope ? function(e) { fnc.apply(scope, [e]); } : fnc;
  	if (obj.addEventListener){ 
  		obj.addEventListener(evt,scoped,useCapture);
  		return true;
  	} else if (obj.attachEvent) {
      return obj.attachEvent("on"+evt,scoped);
    }
  }
  
  sliderBox.prototype.hasClassName = function(element, class_name) {
    return element.className.match(new RegExp('(\\s|^)'+class_name+'(\\s|$)'));
  }
  
  sliderBox.prototype.addClassName = function(element, class_name) {
    if(!element.className) {
      element.className = class_name;
    } else if(!this.hasClassName(element, class_name)) {
      element.className = element.className + " " + class_name;
    }
  }
  
  sliderBox.prototype.removeClassName = function(element, class_name) {
  	if (this.hasClassName(element, class_name)) {
  		var reg = new RegExp('(\\s|^)'+class_name+'(\\s|$)');
  		element.className = element.className.replace(reg, ' ');
  	}
  }
  
  sliderBox.prototype.disableTextSelection = function(target){
    if(typeof target.onselectstart!="undefined") target.onselectstart = function() { return false; } //IE route
    else if(typeof target.style.MozUserSelect!="undefined") target.style.MozUserSelect="none" //Firefox route
    else target.onmousedown = function() { return false; } //All other route (ie: Opera)
  }
  
  this.initialize();
  
}