/**
 * custom scripts for website kairichter.com
 * @author Martin Sprekelsen <martin@sintesilabs.eu>
 */

/**
* globaler intervallstopper
* 
* stoppt intervalle, die nach folgendem schema initialisiert werden:
* intervals.push(window.setInterval(funktion, timer));
* 
* @author Martin Sprekelsen <martin@sintesilabs.eu>
*/
intervals = new Array();
clearAllIntervals = function(){
	for(var i=0; i<intervals.length; i++){
		clearInterval(intervals[i]);
	}
	intervals = new Array();
}


function ffMove (scrollfieldFrame, scrollfield){
	this.scrollfieldFrame = document.getElementById(scrollfieldFrame);
	this.scrollfield      = document.getElementById(scrollfield);
}



/**
 * horizontal/vertical scrollfield for pagination
 * @author Martin Sprekelsen <martin@sintesilabs.eu>
 */
function ffScroller(scrollFieldFrame,scrollField,scrollStepwidth,scrollCycles){
	this.scrollfieldFrame = document.getElementById(scrollFieldFrame);
	this.scrollfield      = document.getElementById(scrollField);
	this.indicator        = document.getElementById(scrollField + "Indicator");
	this.clockPulse       = 5;
	this.scrollSteps      = scrollStepwidth;
	this.maxCycles        = scrollCycles;
	this.maxCyclesTemp    = scrollCycles;
	
	/**
	 * constructor
	 */
	this.initMe = function(){
		//show scroll controlers if offset was detected 
		if(this.scrollfield!=null){
			if(this.scrollfield.offsetHeight - this.scrollfieldFrame.offsetHeight > 1){
				//document.getElementById('descriptionScrollControl').style.display = 'block';
			}
		}
		
		//add actual pagination position to menu links
		this.paginatorJsTweak();
	};

	this.overflowTop = function(){
		return (this.scrollfield.offsetHeight - this.scrollfieldFrame.offsetHeight + this.scrollfield.offsetTop);
	}
	
	
	this.overflowBottom = function(){
		return (this.scrollfield.offsetTop);
	}
	

	this.overflowRight = function(){
		return (this.scrollfield.offsetWidth - this.scrollfieldFrame.offsetWidth + this.scrollfield.offsetLeft);
	}
	
	this.overflowLeft = function(){
		//alert(this.scrollfield.offsetLeft);
		return (this.scrollfield.offsetLeft);
	}
	
	/**
	 * hochscrollen
	 */
	this.scrollUp = function(){
		var over = this.overflowTop();
		//window.defaultStatus = over + " -- " + this.maxCyclesTemp + " -- " + intervals.length;
		if(this.maxCyclesTemp>0){
			if(over >= this.scrollSteps){
				var newtp = this.scrollfield.offsetTop - this.scrollSteps;
				var newtop = newtp + "px";
				this.scrollfield.style.top = newtop;
			}
			this.maxCyclesTemp--;
		} else {
			this.maxCyclesTemp = this.maxCycles;
			clearAllIntervals();
			if(this.indicator!=null){
				var total  = Math.round(this.scrollfield.offsetHeight  / this.scrollSteps / this.maxCycles);
				var actual = Math.round((this.scrollfield.offsetHeight - over) / (this.maxCycles * this.scrollSteps));
				this.indicator.innerHTML = actual + "/" + total;
			}
		}
	}

	 
	/**
	 * hochscroll-befehl
	 */
	this.btnScrollUp = function(){
		this.setInt("this.scrollUp()");
	}
	
	 this.setInt = function(func){
		 this.maxCyclesTemp = this.maxCycles;
		 clearAllIntervals();
		 intervals.push(window.setInterval(func, this.clockPulse));
	 }
	 
	 
	/**
	 * runtercrollen
	 */
	this.scrollDown = function(){
		var over = this.overflowBottom();
		//window.defaultStatus = over + " -- " + this.maxCyclesTemp + " -- " + intervals.length;
		if(this.maxCyclesTemp>0){
			if(over < 0){
				var newtp = this.scrollfield.offsetTop + this.scrollSteps;
				var newtop = newtp + "px";
				this.scrollfield.style.top = newtop;
			}
			this.maxCyclesTemp--;
		} else {
			this.maxCyclesTemp = this.maxCycles;
			clearAllIntervals();
			if(this.indicator!=null){
				var total  = Math.round(this.scrollfield.offsetHeight  / this.scrollSteps / this.maxCycles);
				var actual = Math.round(1 + total - ((this.scrollfield.offsetHeight - (over*-1)) / (this.maxCycles * this.scrollSteps)));
				this.indicator.innerHTML =  actual + "/" + total;
			}
		}
	}
	 
	 
	/**
	 * runtercroll-befehl
	 */
	this.btnScrollDown = function(){
		this.setInt("this.scrollDown()");
	}

	/**
	 * scroll left
	 */
	this.scrollLeft = function(){
		var over = this.overflowRight();
		window.defaultStatus = over + " -- " + this.maxCyclesTemp + " -- " + intervals.length;
		if(this.maxCyclesTemp>0){
			if(over > 0){
				var newl = this.scrollfield.offsetLeft + this.scrollSteps *(-1);
				var newleft = newl + "px" ;
				this.scrollfield.style.left = newleft;
			}
			this.maxCyclesTemp--;
		} else {
			this.maxCyclesTemp = this.maxCycles;
			clearAllIntervals();
			this.paginatorJsTweak();
		}
	}
	 
	 
	/**
	 * scroll left button
	 */
	 this.btnScrollLeft = function(){
		 this.setInt("this.scrollLeft()");
	}	 
	 
	/**
	 * scroll right
	 */
	this.scrollRight = function(){
		var over = this.overflowLeft();
		window.defaultStatus = over + " -- " + this.maxCyclesTemp + " -- " + intervals.length;
		if(this.maxCyclesTemp>0){
			if(over < 0){
				var newl = this.scrollfield.offsetLeft + this.scrollSteps;
				var newleft = newl + "px" ;
				this.scrollfield.style.left = newleft;
			}
			this.maxCyclesTemp--;
		} else {
			this.maxCyclesTemp = this.maxCycles;
			clearAllIntervals();
			this.paginatorJsTweak();
		}
	}
	 
	 
	/**
	 * scroll right button
	 */
	 this.btnScrollRight = function(){
		 this.setInt("this.scrollRight()");
	}	
	
	 this.paginatorJsTweak = function(){
			var scrollPosH   = this.scrollfield.offsetLeft;
			var replaces = getElementsByClass('menu','a');
			
			for(i=0;i<replaces.length;i++){
				var alreadySet = replaces[i].href.search(/&scrollPosH=.+/);
				if (alreadySet != -1){
					var temp = replaces[i].href.slice(0,alreadySet);
					replaces[i].href = temp;
				}
				
				var newHref = replaces[i].href + "&scrollPosH=" + scrollPosH;
				//only change, if not yet set
				replaces[i].href = newHref;
			}
		}
	
	/**
	 * constructor aufrufen
	 */
	this.initMe();
	return this;
}


window.onload = function(){
	if(document.getElementById('menuLevel2PaginatorLeftBtn')!= null){
		document.getElementById('menuLevel2PaginatorLeftBtn').onclick = function(){
			var menuLevel2Paginate = ffScroller('menuLevel2','menuLevel2Content',75,8);
			menuLevel2Paginate.btnScrollRight();
		}
	}
	if(document.getElementById('menuLevel2PaginatorRightBtn')!= null){
		document.getElementById('menuLevel2PaginatorRightBtn').onclick = function(){
			var menuLevel2Paginate = ffScroller('menuLevel2','menuLevel2Content',75,8);
			menuLevel2Paginate.btnScrollLeft();
			
		}
	}
	if(document.getElementById('contentPaginatorRightBtn')!= null){
		document.getElementById('contentPaginatorRightBtn').onclick = function(){
			var paginate = ffScroller('contentImageFrame','contentImage',26,10);
			paginate.btnScrollUp();
		}	
	}
	if(document.getElementById('contentPaginatorLeftBtn')!= null){
		document.getElementById('contentPaginatorLeftBtn').onclick = function(){
			var paginate = ffScroller('contentImageFrame','contentImage',26,10);
			paginate.btnScrollDown();
		}	
	}
	/*
	contentPaginate    = function(){
		ffScroller('contentImageFrame','contentImage');
		this.me = new ffScroller('contentImageFrame','contentImage');
		up = function (){
			this.me.btnScrollUp();
		}
	}*/
	
}
