var slides = [], projects = [], cimg = 0, ot = 5000, t = ot, ra = 5000, rat = null, as = null, o = 100, d = 0, ft = null, st = null, div = null, imgo = null, rc = null;
function initSlideshow_neu() {
	alert('initSlideshow_neu');
	var tmpSlides = arguments;
	for(s=0; s<tmpSlides.length; s++) {
		slides[s] = new Image();
		slides[s].src = tmpSlides[s];
	}
	cimg=0;
	as = setTimeout('autoslide()', t);
}
function initProjects() {
	alert('init projects');
	var tmpProjects		= arguments;
	for(s = 0; s < tmpProjects.length; ++s) {
		projects[s]		= tmpProjects[s];
	}
}
function autoslide() {
	alert('autoslide');
	slide(1);
}
function openProject() {
	alert('openProject');
	project = projects[cimg];
	openPic(unescape(project[0]), unescape(project[1]), unescape(project[2]));
	return false;
}

/**
 * Initialisieren der Diashow
 */
function initSlideshow() {
	var tmpSlides		= arguments;
	slides = [];
	for(s = 0; s < tmpSlides.length; ++s) {
		var alt			= tmpSlides[s][1] || '';
		s ? null : $('tx-twblauhaus-img-link').appendChild(div	= new Element('div', {'id': 'tx-twblauhaus-img-title', 'style': 'visibility:' + (alt.length ? 'visible' : 'hidden')}, alt));
		slides[s]		= new Image();
		slides[s].src	= tmpSlides[s][0];
		slides[s].alt	= alt;
	}
	imgo				= $('tx_twblauhaus_img');
	cimg				= 0;
	as 					= setTimeout(slide.bind(null, 1), t);
}

/**
 * Einblenden eines Dias
 * 
 * @param {Number} n			Distanz
 * @return {Boolean}			FALSE
 */
function slide(n) {
	cimg				+= n;
	if (cimg < 0) {
		cimg			= slides.length - 1;
	} else if(cimg == slides.length) {
		cimg			= 0;
	}
	rc.setStyle({'backgroundImage': 'url('+slides[cimg].src+')'});
	fadeout();
	return false;
}

/**
 * Springen zum nächsten / vorherigen Dia und Deaktivieren des automatischen Dia-Durchlaufs
 * 
 * @param {Number} dir		Richtung / Distanz
 * @return {Boolean}		FALSE
 */
function skipSlide(dir) {
	
	// Wenn die Diashow automatisch abläuft ...
	if (t) {
		t				= 0;
		if (as != null){
			clearTimeout(as);
			as			= null;
		}
	}
	
	// Wenn ein Timer zur Reaktivierung des automatischen Ablaufs aktiv ist ...
	if (rat !== null) {
		clearTimeout(rat);
		rat				= null;
	}
	
	// Aktivieren eines Timers zur Reaktivierung des automatischen Ablaufs ...
	rat					= setTimeout(function(){
		rat				= null;
		t				= ot;
		slide(1);
	}, ra);
	
	return slide(dir);
}

/**
 * Gezieltes Einblenden des nächste Dias
 * 
 * @return {Boolean}		FALSE
 */
var nextSlide			= skipSlide.bind(null, 1);

/**
 * Gezieltes Einblenden des vorherigen Dias
 * 
 * @return {Boolean}		FALSE
 */
var prevSlide			= skipSlide.bind(null, -1);

/**
 * Diaüberblendung
 */
function fadeout() {
	
	// Ggf. Deaktivieren eines Überblendungs-Timeouts
	if (ft != null) {
		clearTimeout(ft);
	}
	
	// Opazität anpassen
	o					-= t ? 2 : 5;
	setOpacity();
	
	// Wenn das Dia noch sichtbar ist ...
	if (o > 0) {
		ft				= setTimeout(fadeout, t ? 30 : 20);
		
	// Ansonsten: Diawechsel
	} else {
		cimgLength		= new String((cimg + 1));
		imgo.src		= slides[cimg].src;
		div.setStyle({'visibility': slides[cimg].alt.length ? 'visible' : 'hidden'}).update(slides[cimg].alt);
		switch(cimgLength.length) {
			case 1:
				$('first-char').src		= "fileadmin/templates/img/spacer.gif";
				$('second-char').src	= "fileadmin/templates/img/" + (cimg + 1) + ".gif";
				break;
			case 2:
				$('first-char').src		= "fileadmin/templates/img/" + cimgLength.charAt(0) + ".gif";
				$('second-char').src	= "fileadmin/templates/img/" + cimgLength.charAt(1) + ".gif";
				break;
		}
		o				= 100;
		setOpacity();
		if (t) {
			as			= setTimeout(slide.bind(null, 1), t);
		}
	}
}

/**
 * Aktualisieren der Bildopazität
 */
function setOpacity() {
	imgo.setOpacity(o / 100);
	imgo.setStyle({'filter': 'Alpha(opacity=' + o + ')'});
}


// Scrolling
var dw_scrollObjs = {};
dw_scrollObj.speed=15;
function dw_scrollObj(wnId,lyrId,cntId){
		this.id = wnId;
		dw_scrollObjs[this.id] = this;
		this.animString = "dw_scrollObjs." + this.id;
		this.load(lyrId,cntId);
}
dw_scrollObj.loadLayer = function(wnId,id,cntId) {
	if(dw_scrollObjs[wnId]) dw_scrollObjs[wnId].load(id,cntId);
};
dw_scrollObj.prototype.load = function(lyrId,cntId){
	if(!document.getElementById) return;
	var wndo,lyr;
	if(this.lyrId){
		lyr = document.getElementById(this.lyrId);
		lyr.style.visibility = "hidden";
	}
	lyr = document.getElementById(lyrId);
	wndo = document.getElementById(this.id);
	lyr.style.top = this.y = 0;
	lyr.style.left = this.x = 0;
	this.maxY = (lyr.offsetHeight-wndo.offsetHeight > 0) ? lyr.offsetHeight - wndo.offsetHeight : 0;
	this.wd = cntId ? document.getElementById(cntId).offsetWidth : lyr.offsetWidth;
	this.maxX = (this.wd - wndo.offsetWidth > 0) ? this.wd-wndo.offsetWidth : 0;
	this.lyrId = lyrId;
	lyr.style.visibility = "visible";
	this.on_load();
	this.ready = true;
};
dw_scrollObj.prototype.on_load = function(){};
dw_scrollObj.prototype.shiftTo = function(lyr,x,y){
	if(!lyr.style) return;
	lyr.style.left = (this.x = x) + "px";
	lyr.style.top = (this.y = y) + "px";
};
/* dw_glidescroll.js  version date: June 2004 
   glide onclick scrolling for dw_scrollObj (in dw_scrollObj.js)  */

dw_scrollObj.slideDur = 900; // duration of glide

// intermediary functions needed to prevent errors before page loaded 
dw_scrollObj.scrollBy = function(wnId, x, y, dur) {
  if ( dw_scrollObjs[wnId] ) dw_scrollObjs[wnId].glideBy(x, y, dur);
}

dw_scrollObj.scrollTo = function(wnId, x, y, dur) {
  if ( dw_scrollObjs[wnId] ) dw_scrollObjs[wnId].glideTo(x, y, dur);
}

// Resources for time-based slide algorithm: 
//  DHTML chaser tutorial at DHTML Lab - www.webreference.com/dhtml	
//  and cbe_slide.js from	www.cross-browser.com by Mike Foster
dw_scrollObj.prototype.glideBy = function(dx, dy, dur) {
  if ( !document.getElementById || this.sliding ) return;
  this.slideDur = dur || dw_scrollObj.slideDur;
  this.destX = this.destY = this.distX = this.distY = 0;
  this.lyr = document.getElementById(this.lyrId);
  this.startX = this.x; this.startY = this.y;
  if (dy < 0) this.distY = (this.startY + dy >= -this.maxY)? dy: -(this.startY  + this.maxY);
  else if (dy > 0) this.distY = (this.startY + dy <= 0)? dy: -this.startY;
  if (dx < 0) this.distX = (this.startX + dx >= -this.maxX)? dx: -(this.startX + this.maxX);
  else if (dx > 0) this.distX = (this.startX + dx <= 0)? dx: -this.startX;
  this.destX = this.startX + this.distX; this.destY = this.startY + this.distY;
  this.slideTo(this.destX, this.destY);
}

dw_scrollObj.prototype.glideTo = function(destX, destY, dur) {
  if ( !document.getElementById || this.sliding) return;
  this.slideDur = dur || dw_scrollObj.slideDur;
  this.lyr = document.getElementById(this.lyrId); 
  this.startX = this.x; this.startY = this.y;
  this.destX = -Math.max( Math.min(destX, this.maxX), 0);
  this.destY = -Math.max( Math.min(destY, this.maxY), 0);
  this.distY = this.destY - this.startY;
  this.distX =  this.destX - this.startX;
  this.slideTo(this.destX, this.destY);
}

dw_scrollObj.prototype.slideTo = function(destX, destY) {
	this.per = Math.PI/(2 * this.slideDur);
	this.sliding = true;
	this.slideStart = (new Date()).getTime();
	this.aniTimer = setInterval(this.animString + ".doSlide()", 10);
	this.on_slide_start(this.startX, this.startY);
}

dw_scrollObj.prototype.doSlide = function() {
	var elapsed = (new Date()).getTime() - this.slideStart;
	if (elapsed < this.slideDur) {
		var x = this.startX + this.distX * Math.sin(this.per*elapsed);
		var y = this.startY + this.distY * Math.sin(this.per*elapsed);
	    this.shiftTo(this.lyr, x, y);
	    this.on_slide(x, y);
	} else {	// if time's up
    	clearInterval(this.aniTimer); this.sliding = false;
		this.shiftTo(this.lyr, this.destX, this.destY);
//    	this.lyr = null;
    	this.on_slide_end(this.destX, this.destY);
	}
}
dw_scrollObj.prototype.on_slide_start = function() {}
dw_scrollObj.prototype.on_slide = function() {}
dw_scrollObj.prototype.on_slide_end = function() {}

dw_scrollObj.GeckoTableBugFix = function(){
	var ua = navigator.userAgent;
	if(ua.indexOf("Gecko") > -1 && ua.indexOf("Firefox") == -1 && ua.indexOf("Safari") == -1 && ua.indexOf("Konqueror") == -1){
		dw_scrollObj.hold=[];
		for(var i=0; arguments[i]; i++){
			if(dw_scrollObjs[arguments[i]]){
				var wndo = document.getElementById(arguments[i]);
				var holderId = wndo.parentNode.id;
				var holder = document.getElementById(holderId);
				document.body.appendChild(holder.removeChild(wndo));
				wndo.style.zIndex = 1000;
				var pos = getPageOffsets(holder);
				wndo.style.left = pos.x + "px";
				wndo.style.top = pos.y + "px";
				dw_scrollObj.hold[i] = [arguments[i],holderId];
			}
		}
		window.addEventListener("resize", dw_scrollObj.rePositionGecko, true);
	}
};
dw_scrollObj.rePositionGecko = function(){
	if(dw_scrollObj.hold){
		for(var i=0; dw_scrollObj.hold[i]; i++){
			var wndo = document.getElementById(dw_scrollObj.hold[i][0]);
			var holder = document.getElementById(dw_scrollObj.hold[i][1]);
			var pos = getPageOffsets(holder);
			wndo.style.left=pos.x + "px";
			wndo.style.top = pos.y + "px";
		}
	}
};
function getPageOffsets(el){
	var left = el.offsetLeft;
	var top = el.offsetTop;
	if(el.offsetParent && el.offsetParent.clientLeft || el.offsetParent.clientTop){
		left += el.offsetParent.clientLeft;
		top += el.offsetParent.clientTop;
	}
	while(el = el.offsetParent){
		left += el.offsetLeft;
		top += el.offsetTop;
	}
	return{x:left, y:top};
};

dw_scrollObj.stopScroll = function(wnId) {
  if ( dw_scrollObjs[wnId] ) dw_scrollObjs[wnId].endScroll();
}

// increase speed onmousedown of scroll links
dw_scrollObj.doubleSpeed = function(wnId) {
  if ( dw_scrollObjs[wnId] ) dw_scrollObjs[wnId].speed *= 2;
}

dw_scrollObj.resetSpeed = function(wnId) {
  if ( dw_scrollObjs[wnId] ) dw_scrollObjs[wnId].speed /= 2;
}

// algorithms for time-based scrolling and scrolling onmouseover at any angle adapted from youngpup.net
dw_scrollObj.initScroll = function(wnId, deg, sp) {
  if ( dw_scrollObjs[wnId] ) {
    var cosine, sine;
    if (typeof deg == "string") {
      switch (deg) {
        case "up"    : deg = 90;  break;
        case "down"  : deg = 270; break;
        case "left"  : deg = 180; break;
        case "right" : deg = 0;   break;
        default: 
          alert("Direction of scroll in mouseover scroll links should be 'up', 'down', 'left', 'right' or number: 0 to 360.");
       }
    } 
    deg = deg % 360;
    if (deg % 90 == 0) {
      cosine = (deg == 0)? -1: (deg == 180)? 1: 0;
      sine = (deg == 90)? 1: (deg == 270)? -1: 0;
    } else {
      var angle = deg * Math.PI/180;
      cosine = -Math.cos(angle); sine = Math.sin(angle);
    }
    dw_scrollObjs[wnId].fx = cosine / ( Math.abs(cosine) + Math.abs(sine) );
    dw_scrollObjs[wnId].fy = sine / ( Math.abs(cosine) + Math.abs(sine) );
    dw_scrollObjs[wnId].endX = (deg == 90 || deg == 270)? dw_scrollObjs[wnId].x:
      (deg < 90 || deg > 270)? -dw_scrollObjs[wnId].maxX: 0; 
    dw_scrollObjs[wnId].endY = (deg == 0 || deg == 180)? dw_scrollObjs[wnId].y: 
      (deg < 180)? 0: -dw_scrollObjs[wnId].maxY;
    dw_scrollObjs[wnId].startScroll(sp);
  }
}

// speed (optional) to override default speed (set in dw_scrollObj.speed)
dw_scrollObj.prototype.startScroll = function(speed) {
  if (!this.ready) return;
  if (this.timerId) clearInterval(this.timerId);
  this.speed = speed || dw_scrollObj.speed;
  this.lyr = document.getElementById(this.lyrId);
  this.lastTime = ( new Date() ).getTime();
  this.on_scroll_start();  
  this.timerId = setInterval(this.animString + ".scroll()", 10); 
}

dw_scrollObj.prototype.scroll = function() {
  var now = ( new Date() ).getTime();
  var d = (now - this.lastTime)/1000 * this.speed;
  if (d > 0) {
    var x = this.x + this.fx * d;
    var y = this.y + this.fy * d;
    if (this.fx == 0 || this.fy == 0) { // for horizontal or vertical scrolling
      if ( ( this.fx == -1 && x > -this.maxX ) || ( this.fx == 1 && x < 0 ) || 
        ( this.fy == -1 && y > -this.maxY ) || ( this.fy == 1 && y < 0 ) ) {
        this.lastTime = now;
        this.shiftTo(this.lyr, x, y);
        this.on_scroll(x, y);
      } else {
        clearInterval(this.timerId);
        this.timerId = 0;
        this.shiftTo(this.lyr, this.endX, this.endY);
        this.on_scroll_end(this.endX, this.endY);
      }
    } else { // for scrolling at an angle (stop when reach end on one axis)
      if ( ( this.fx < 0 && x >= -this.maxX && this.fy < 0 && y >= -this.maxY ) ||
        ( this.fx > 0 && x <= 0 && this.fy > 0 && y <= 0 ) ||
        ( this.fx < 0 && x >= -this.maxX && this.fy > 0 && y <= 0 ) ||
        ( this.fx > 0 && x <= 0 && this.fy < 0 && y >= -this.maxY ) ) {
        this.lastTime = now;
        this.shiftTo(this.lyr, x, y);
        this.on_scroll(x, y);
      } else {
        clearInterval(this.timerId); this.timerId = 0;
        this.on_scroll_end(this.x, this.y);
      }
    }
  }
}

dw_scrollObj.prototype.endScroll = function() {
  if (!this.ready) return;
  if (this.timerId) clearInterval(this.timerId);
  this.timerId = 0;
//  this.lyr = null;
}

dw_scrollObj.prototype.on_scroll = function() {}
dw_scrollObj.prototype.on_scroll_start = function() {}
dw_scrollObj.prototype.on_scroll_end = function() {}

function initScrollLayer() {
  // arguments: id of layer containing scrolling layers (clipped layer), id of layer to scroll, 
  // if horizontal scrolling, id of element containing scrolling content (table?)
  var wndo = new dw_scrollObj('textwidth', 'textcontent');
  
  // pass id's of any wndo's that scroll inside tables
  // i.e., if you have 3 (with id's wn1, wn2, wn3): dw_scrollObj.GeckoTableBugFix('wn1', 'wn2', 'wn3');
  dw_scrollObj.GeckoTableBugFix('textbox'); 
}

// Einblenden und Aktivieren der Scrollbuttons bei JavaScript-Präsenz und ausreichend Textinhalt
document.writeln('<style>div#textbox{overflow:hidden;width:405px;}div#textwidth{overflow:hidden;}</style>');
document.observe('dom:loaded', function(e) {
	var textwidth		= $('textwidth');
	var textcontent		= $('textcontent');
	var scrollbar		= $('scrollbar');
	if (textwidth && textcontent && scrollbar && (textcontent.getHeight() > textwidth.getHeight())) {
		scrollbar.setStyle({'display': 'block'});
	}
	rc					= $('right-content');
});