

// window.onload = function() {
// 	smoothScroll.init(); // scrollTips.init();
// 	}
i=0;
YY=false;
XX=false;
var smoothscrollactive = false
function blurr() {
	this.blur();
}

var smoothScroll = {
	speedLnk : 0,     	//set here the scroll speed: when this value increase, the speed decrease. 
	speedImg : 2,
	maxStep: 120,	 	//set here the "uniform motion" step for long distances
	brakeKLnk: 4,		//set here the coefficient of slowing down
	brakeKImg: 5,
	hash:null,		
	currentBlock:null,
	requestedX:0,
	requestedY:0,
	init: function() {
		var lnks = document.getElementsByTagName('a');   
		for(var i = 0, lnk; lnk = lnks[i]; i++) {  
			if ((lnk.href && lnk.href.indexOf('#') != -1) &&  ( (lnk.pathname == location.pathname) ||
			('/'+lnk.pathname == location.pathname) ) && (lnk.search == location.search)) {
			addEvent(lnk,'click',smoothScroll.initScroll,false);
			addEvent(lnk, 'focus', blurLink);
			if(lnk.className=='backToLeftArea'){
				addEvent(lnk, 'mouseover', backLeftCursor);
				addEvent(lnk, 'mouseout', killBackLeftCursor);
				addEvent(lnk, 'click', killBackLeftCursor);
			}
			lnk.onclick=function(){return false;} // Safari
			// lnk.onclick=smoothScroll.initScroll; // without eventlistening (timo)
			if (IE6) lnk.onfocus=blurr; // IE6 active link outline hack
			}
		}    
	},
	getTarget: function(target){
		while(target.tagName.toLowerCase() != 'a')
			target = target.parentNode;
		return target;
	},
	getElementXpos: function(el){
		var x = 0;
		while(el.offsetParent){  
			x += el.offsetLeft;    
			el = el.offsetParent;
		}	return x;
	},
	getElementYpos: function(el){
			var y = 0;
			while(el.offsetParent){  
				y += el.offsetTop    
				el = el.offsetParent;
			}	return y;
	},
	getElementWidth: function(el){
		return el.offsetWidth;
	},
	getElementHeight: function(el){
		return el.offsetHeight;
	},
	getScrollLeft: function(){
		if(document.all) return (document.documentElement.scrollLeft) ? document.documentElement.scrollLeft : document.body.scrollLeft;
		else return window.pageXOffset;   
	},
	getScrollTop: function(){
			if(document.all) return (document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
			else return window.pageYOffset;   
	},
	getWindowWidth: function(){
		var doc_w = (window.innerWidth!=null)? window.innerWidth:(document.documentElement && document.documentElement.clientWidth)? document.documentElement.clientWidth:(document.body!=null)? document.body.clientWidth:0;
		return doc_w;
	},
	getWindowHeight: function(){
			var doc_h = (window.innerHeight!=null)? window.innerHeight:(document.documentElement && document.documentElement.clientHeight)? document.documentElement.clientHeight:(document.body!=null)? document.body.clientHeight:0;
			return doc_h;
	},
	getDocumentWidth: function(){
		return 12000;
	},
	getDocumentHeight: function(){
		return 12000;
	},
	initScroll: function(e){
		if(!zoomactive){
			warn('intScroll')
			var targ;
			if(!e) {
				return false;
				var e = window.event;
			}
			if(e.target) {
				targ = e.target;
				// debug(e.target);
			}
			else if (e.srcElement){
				targ = e.srcElement;
				// info(e.srcElement);
			}
			else if(!e.target&&!e.srcElement){
				targ = document.getElementById(e);
				if(!targ) return false;
			}

			// warn((targ.tagName.toLowerCase()=='a'));
			if(targ.tagName.toLowerCase()=='img' || (targ.className.toLowerCase()=='block')){
				
				// RESET OLD BLOCKLINK COLOR TO RED
				if(smoothScroll.currentBlock && smoothScroll.currentBlock.id!='top' && smoothScroll.currentBlock.className!='timo'){
					var subId = smoothScroll.currentBlock.id.substring(3, smoothScroll.currentBlock.id.indexOf('.'));
					$('block'+subId).className="block";
				}

				targ = smoothScroll.getTarget(targ);  //a fix by Skid X
				smoothScroll.hash = targ.href.substr(targ.href.indexOf('#')+1,targ.href.length); 
				smoothScroll.currentBlock = document.getElementById(smoothScroll.hash);   
				if(!smoothScroll.currentBlock) return;
				
				// SET NEW BLOCKLINK COLOR TO BLACK
				var targId = smoothScroll.currentBlock.id;
				if(targId.substring(targId.indexOf('.')+1, targId.length)=='1'){
					var subId = targId.substring(3, targId.indexOf('.'));
					$('block'+subId).className="firstblock";
				}

				var xPos = smoothScroll.getElementXpos(smoothScroll.currentBlock);
				var yPos = smoothScroll.getElementYpos(smoothScroll.currentBlock);
				var	imgWidthHalf = smoothScroll.getElementWidth(smoothScroll.currentBlock)/2;
				var winWidthHalf = smoothScroll.getWindowWidth()/2;
				var tuneTop = 130;

				// if allready centered:
				// error(xPos+imgWidthHalf-winWidthHalf+ScrollbarOffset);
				// error('(xpos='+xPos+')+(elmWidth/2='+imgWidthHalf+')-(winWidth/2='+winWidthHalf+')-(scllbarwidth='+ScrollbarOffset+')');
				// info(getWinScrollX())
				// info(Math.abs(window.scrollX - (xPos+imgWidthHalf-winWidthHalf)));
				info(getWinScrollX()+' - '+(xPos+imgWidthHalf-winWidthHalf))
				error((Math.abs(getWinScrollX() - (xPos+imgWidthHalf-winWidthHalf))) +' < '+10 +' && '+ (Math.abs(getWinScrollY() - yPos + tuneTop)) +'<'+ 10)
				if((Math.abs(getWinScrollX() - (xPos+imgWidthHalf-winWidthHalf))) < 10 && (Math.abs(getWinScrollY() - yPos + tuneTop)) < 10 || zoom==false)
				{
					//warn('focus')
			 		imageFocus.init(smoothScroll.currentBlock); tuneTop = 10; return;
				}
				smoothScroll.requestedX = xPos+imgWidthHalf-winWidthHalf;
				smoothScroll.requestedY = yPos-tuneTop;
				smoothScroll.speed = smoothScroll.speedImg;
				smoothScroll.brakeK = smoothScroll.brakeKImg;
			}
			else if(targ.tagName.toLowerCase()=='a'){
				
				// warn(this.href.charAt(this.href.length-1)!="#");
				if(link){
					if(targ.className.toLowerCase()=='timo'){
						// RESET OLD BLOCKLINK COLOR TO RED
						// if(smoothScroll.currentBlock){
						// 	var subId = smoothScroll.currentBlock.id.substring(3, smoothScroll.currentBlock.id.indexOf('.'));
						// 	$('block'+subId).className="block";
						// }

						targ = smoothScroll.getTarget(targ);  //a fix by Skid X
						smoothScroll.hash = targ.href.substr(targ.href.indexOf('#')+1,targ.href.length); 
						smoothScroll.currentBlock = targ;
						// error(smoothScroll.currentBlock) 
						if(!smoothScroll.currentBlock) return;

						// SET NEW BLOCKLINK COLOR TO BLACK
						var targId = smoothScroll.currentBlock.id;
						if(targId.substring(targId.indexOf('.')+1, targId.length)=='1'){
							var subId = targId.substring(3, targId.indexOf('.'));
							$('block'+subId).className="fisrtblock";
						}

						var yPos = smoothScroll.getElementYpos(smoothScroll.currentBlock) - 18;

						smoothScroll.requestedX = 0;
						smoothScroll.requestedY = yPos;
						//smoothScroll.getElementYpos(smoothScroll.currentBlock)+smoothScroll.getElementHeight(smoothScroll.currentBlock)/2-smoothScroll.getWindowHeight()/2;
						smoothScroll.speed = smoothScroll.speedLnk;
						smoothScroll.brakeK = smoothScroll.brakeKLnk;
					}
					else if(link.length>3&&targ.className.toLowerCase()!='timo'){
						// RESET OLD BLOCKLINK COLOR TO RED
						warn('hallo')

						targ = smoothScroll.getTarget(targ);  //a fix by Skid X
						smoothScroll.hash = targ.href.substr(targ.href.indexOf('#')+1,targ.href.length); 
						smoothScroll.currentBlock = document.getElementById(smoothScroll.hash);   
						if(!smoothScroll.currentBlock) return;

						// SET NEW BLOCKLINK COLOR TO BLACK
						var targId = smoothScroll.currentBlock.id;
						if(targId.substring(targId.indexOf('.')+1, targId.length)=='1'){
							var subId = targId.substring(3, targId.indexOf('.'));
							$('block'+subId).className="firstblock";
						}

						var xPos = smoothScroll.getElementXpos(smoothScroll.currentBlock);
						var yPos = smoothScroll.getElementYpos(smoothScroll.currentBlock);
						var	imgWidthHalf = smoothScroll.getElementWidth(smoothScroll.currentBlock)/2;
						var winWidthHalf = smoothScroll.getWindowWidth()/2;
						var tuneTop = 140;
					
						// if allready centered:
						// error(xPos+imgWidthHalf-winWidthHalf+ScrollbarOffset);
						// error('(xpos='+xPos+')+(elmWidth/2='+imgWidthHalf+')-(winWidth/2='+winWidthHalf+')-(scllbarwidth='+ScrollbarOffset+')');
						// info(Math.abs(window.scrollX - (xPos+imgWidthHalf-winWidthHalf)));
						if((Math.abs(window.scrollX - (xPos+imgWidthHalf-winWidthHalf))) < 10 && (Math.abs(window.scrollY - yPos + tuneTop)) < 10 || zoom==false)
						{
							//warn('focus')
					 		imageFocus.init(smoothScroll.currentBlock); tuneTop = 10; return;
						}
						smoothScroll.requestedX = xPos+imgWidthHalf-winWidthHalf;
						smoothScroll.requestedY = yPos-tuneTop;
						smoothScroll.speed = smoothScroll.speedImg;
						smoothScroll.brakeK = smoothScroll.brakeKImg;
					}
				}
				else if(targ.className.toLowerCase()!='backtoleftarea'&&targ.className.toLowerCase()!='timo'){
					// RESET OLD BLOCKLINK COLOR TO RED
					if(smoothScroll.currentBlock && smoothScroll.currentBlock.id!='top'){
						var subId = smoothScroll.currentBlock.id.substring(3, smoothScroll.currentBlock.id.indexOf('.'));
						$('block'+subId).className="block";
					}

					targ = smoothScroll.getTarget(targ);  //a fix by Skid X
					smoothScroll.hash = targ.href.substr(targ.href.indexOf('#')+1,targ.href.length); 
					smoothScroll.currentBlock = document.getElementById(smoothScroll.hash);   
					if(!smoothScroll.currentBlock) return;

					// SET NEW BLOCKLINK COLOR TO BLACK
					var targId = smoothScroll.currentBlock.id;
					if(targId.substring(targId.indexOf('.')+1, targId.length)=='1'){
						var subId = targId.substring(3, targId.indexOf('.'));
						$('block'+subId).className="firstblock";
					}

					var yPos = smoothScroll.getElementYpos(smoothScroll.currentBlock) - 130;
					// info(yPos)
				
					smoothScroll.requestedX = 0;
					smoothScroll.requestedY = yPos;
					//smoothScroll.getElementYpos(smoothScroll.currentBlock)+smoothScroll.getElementHeight(smoothScroll.currentBlock)/2-smoothScroll.getWindowHeight()/2;
					smoothScroll.speed = smoothScroll.speedLnk;
					smoothScroll.brakeK = smoothScroll.brakeKLnk;
				}

				else if(this.href.charAt(this.href.length-1)!='#'){
					// SET NEW BLOCKLINK COLOR TO BLACK
					if(smoothScroll.currentBlock){
						var targId = smoothScroll.currentBlock.id;
						var subId = targId.substring(3, targId.indexOf('.'));info(subId)
						$('block'+subId).className="firstblock";
					}
					smoothScroll.requestedX = 0; // actually 0, this prevents final jump in safari 
					smoothScroll.requestedY = smoothScroll.getScrollTop();
					smoothScroll.speed = smoothScroll.speedLnk;
					smoothScroll.brakeK = smoothScroll.brakeKLnk;
					
				}
				else return false;
			}

			smoothscrollactive = true; 
			killBackLeftCursor();
			smoothScroll.scroll(targ);
			link = ""; 
			return false;
		}
		// else{warn('prevented scroll')}
	},
	scroll: function(targ){
		// warn('smoothscrollactive='+smoothscrollactive)
		var left  = smoothScroll.getScrollLeft();
		if(smoothScroll.requestedX > left) {
			var endDistance = Math.round((smoothScroll.getDocumentWidth() - (left + smoothScroll.getWindowWidth())) / smoothScroll.brakeK);
			endDistance = Math.min(Math.round((smoothScroll.requestedX-left)/ smoothScroll.brakeK), endDistance);
			var offset = Math.max(2, Math.min(endDistance, smoothScroll.maxStep));
			// info('getDocumentWidth='+smoothScroll.getDocumentWidth()+' / getWindowWidth='+smoothScroll.getWindowWidth())
			// warn(endDistance);
		} 
		else { var offset = - Math.min(Math.abs(Math.round((smoothScroll.requestedX-left)/ smoothScroll.brakeK)), smoothScroll.maxStep);
		}
		
		var top  = smoothScroll.getScrollTop();
		if(smoothScroll.requestedY > top) { 
			var endDistanceY = Math.round((smoothScroll.getDocumentHeight() - (top + smoothScroll.getWindowHeight())) / smoothScroll.brakeK);
			endDistanceY = Math.min(Math.round((smoothScroll.requestedY-top) / smoothScroll.brakeK), endDistanceY);
			var offsetY = Math.max(2, Math.min(endDistanceY, smoothScroll.maxStep));
		} 
		else { var offsetY = - Math.min(Math.abs(Math.round((smoothScroll.requestedY-top) / smoothScroll.brakeK)), smoothScroll.maxStep);
		}
		window.scrollTo(left + offset, top + offsetY);
		// debug('top='+top+' / offsetY='+offsetY)
		
		if(XX==false){
			if(Math.abs(left-smoothScroll.requestedX) <= 1 || smoothScroll.getScrollLeft() == left) {
				window.scrollTo(smoothScroll.requestedX, smoothScroll.getScrollTop()); XX=true;
				//error(XX+'(=XX)')
			}
		}
		if(YY==false){
			if(Math.abs(top-smoothScroll.requestedY) <= 1 || smoothScroll.getScrollTop() == top) {
				window.scrollTo(smoothScroll.getScrollLeft(), smoothScroll.requestedY); YY=true;
				//error(YY+'(=YY)');
			}
		}
		if(XX==true&&YY==true){
			// if(typeof XULDocument != 'undefined') {
			// 	location.hash = smoothScroll.hash;
			// }
			smoothscrollactive = false;
			backLeftCursor();
			// warn('done!')
			smoothScroll.hash = null;
			XX=false;
			YY=false;
		}
		else{
			setTimeout(smoothScroll.scroll,smoothScroll.speed);
			i++;
		}	
	}
}

getWinScrollX = function() {
  var scrollX = 0;
  if( document.documentElement && document.documentElement.scrollLeft ) {
    scrollX = document.documentElement.scrollLeft;
  }
  else if( document.body && document.body.scrollLeft ) {
    scrollX = document.body.scrollLeft;
  }
  else if( window.pageXOffset ) {
    scrollX = window.pageXOffset;
  }
  else if( window.scrollX ) {
    scrollX = window.scrollX;
  }
  return scrollX;
};

getWinScrollY = function() {
  var scrollY = 0;
  if( document.documentElement && document.documentElement.scrollTop ) {
    scrollY = document.documentElement.scrollTop;
  }
  else if( document.body && document.body.scrollTop ) {
    scrollY = document.body.scrollTop;
  }
  else if( window.pageYOffset ) {
    scrollY = window.pageYOffset;
  }
  else if( window.scrollY ) {
    scrollY = window.scrollY;
  }
  return scrollY;
};
