



/**
 *
 * @access public
 * @return void
 **/





var lang = 'de';
if(document.location.pathname.indexOf('en/')==1) lang = 'en';





var SliderPosByName = {
		'home'			: 0,
		'vita'			: 1,
		'referenzen'	: 2,
		'galerie'		: 3,
		'demo'			: 4,
		'kontakt'		: 5,
		'impressum'		: 6
	}



/**
	 *
	 * @access public
	 * @return void
	 **/
function init(){
	setInterval('pollHash()',200);
	initHash();
	setInterval('verticalCenter()',500);
	verticalCenter();
}


/**
 *
 * @access public
 * @return void
 **/
function verticalCenter(){
	spacingTop = Math.max(0,Math.round(($('html').clientHeight - $('wrap').clientHeight) / 2));
	if(typeof verticalCenter.lastSpacingTop == 'undefined') verticalCenter.lastSpacingTop = -1;
	if(verticalCenter.lastSpacingTop != spacingTop) {
		$('wrap').style.marginTop = spacingTop + 'px';
		//$('html').style.backgroundPosition = 'center '+(spacingTop-255)+'px';
		$('html').style.backgroundPosition = 'center '+(spacingTop-255-100)+'px';
	}
	verticalCenter.lastSpacingTop = spacingTop;
}

/**
 *
 * @access public
 * @return void
 **/
function toLang(lang){
	document.location.href = document.location.href.replace(/\/(en|de)\//,'/'+lang+'/');
}


var AjaxMenuSliderPosLast = 0;
var AjaxMenuSliderPosTarget = 0;
function AjaxMenuSlider(idx){
	AjaxMenuSliderPosTarget = 126*idx;
	Koeff = QuadratScrollKoeff(40);
	for(i=0; i<Koeff.length; i++) {
		setTimeout('$(\'menu_slider\').style.backgroundPosition = \''+(AjaxMenuSliderPosLast + (AjaxMenuSliderPosTarget-AjaxMenuSliderPosLast)*Koeff[i])+'px top\';',i*10);
	}
	AjaxMenuSliderPosLast = AjaxMenuSliderPosTarget;
}



/**
 *
 * @access public
 * @return void
 **/
function AjaxLoadContent(url){
	if(/\?$/.test(url)) { url = url + 'ajax=1'; }
	else if(/\?/.test(url)) { url = url + '&ajax=1'; }
	else { url = url + '?ajax=1'; }
	new Ajax.Updater('content',url, {onSuccess : function(res){ContentFadeIn();}, evalScripts : true });
}


/**
 *
 * @access public
 * @return void
 **/
function AjaxLoadFromHash(){
	AllowPollHash = false;
	var TargetName = LastHash;
	AjaxMenuSlider(SliderPosByName[TargetName]);
	setTimeout('AjaxLoadContent(\'../'+TargetName+'/\')',400);
	ContentFadeOut();
	setTimeout('AllowPollHash = true;',800);
}



/**
 *
 * @access public
 * @return void
 **/
function MenuBtnClick(obj){
	var TargetName = obj.href.match(/\/(en|de)\/([a-z0-9]+)\/$/);
	document.location.href = '#'+TargetName[2];
	pollHash();
}





/**
 *
 * @access public
 * @return void
 **/
function ContentFadeOut2(){
	steps = 20;
	duration = 400;
	for(i=0; i<=steps; i++){
		setTimeout('setOpac(\'content\','+(100-(i/steps)*100)+')',i*(duration/steps));
	}
}

function ContentFadeOut(){
	Koeff = QuadratScrollKoeff(20);
	for(i=0; i<Koeff.length; i++) {
		setTimeout('$(\'content\').style.left = \''+(0 + (-900)*Koeff[i])+'px\';',i*20);
	}
}

function ContentFadeIn2(){
	steps = 20;
	duration = 400;
	for(i=0; i<=steps; i++){
		setTimeout('setOpac(\'content\','+((i/steps)*100)+')',i*(duration/steps));
	}
}

function ContentFadeIn(){
	Koeff = QuadratScrollKoeff(20);
	for(i=0; i<Koeff.length; i++) {
		setTimeout('$(\'content\').style.left = \''+(-900 + (900)*Koeff[i])+'px\';',i*20);
	}
}







/**
 *
 * @access public
 * @return void
 **/
function galerieImage(id,obj){
	steps = 20;
	duration = 200;
	$('galerie_image_img').writeAttribute('title',$(obj).readAttribute('title'));
	for(i=0; i<=steps; i++){
		setTimeout('setOpac(\'galerie_image\','+(100-(i/steps)*100)+')',i*(duration/steps));
	}
	setTimeout('galerieImage2('+id+');',duration);
}


/**
 *
 * @access public
 * @return void
 **/
function galerieImage2(id){
	img = new Image();
	img.onload = function() {
		steps = 20;
		duration = 200;
		$('galerie_image_img').writeAttribute('src','/de/img_image/'+id+'.jpg');
		for(i=0; i<=steps; i++){
			setTimeout('setOpac(\'galerie_image\','+((i/steps)*100)+')',i*(duration/steps));
		}
	}
	img.src = '/de/img_image/'+id+'.jpg';
}





/**
 *
 * @access public
 * @return void
 **/
AllowPollHash = true;
LastHash = '';
function pollHash(){
	if(AllowPollHash && window.location.hash.substring(1) != LastHash) {
		LastHash = window.location.hash.substring(1);
		AjaxLoadFromHash();
	}
}





/**
 *
 * @access public
 * @return void
 **/
function initHash(){
	AllowPollHash = false;
	if(window.location.hash.length) {
		// Seite mit Hash geöffnet -> Kontrolle ob Hash mit Dateiname übereinstimmt
		LastHash = window.location.hash.substring(1);
		if(document.location.pathname.indexOf(LastHash) == 4) {
			// passt alles, nur slider ggf in Position bringen
			AjaxMenuSlider(SliderPosByName[LastHash]);
		} else if(document.location.pathname.indexOf('ajax') == 4) {
			$('content').update('');
			new Ajax.Updater('content','/'+lang+'/'+LastHash+'/?ajax=1', {onSuccess : function(res){}, evalScripts : true });
			AjaxMenuSlider(SliderPosByName[LastHash]);
		} else {
			document.location.href = '/'+lang+'/ajax/#'+LastHash;
		}
	} else {
		if(m = document.location.pathname.match(/\/(de|en)\/([a-z0-9]+)\//)) {
			//document.location.href = document.location.pathname+'#'+m[2];
			document.location.href = '/'+lang+'/ajax/#'+m[2];
			LastHash = m[2];
		}
	}
	AllowPollHash = true;
}




/**
 *
 * @access public
 * @return void
 **/

var galerieScrollingDir = 1;
var galerieScrollInt = false;
var galerieScrollObj = false;

/**
 *
 * @access public
 * @return void
 **/
function galerieScroll(){
	if(!galerieScrollObj) galerieScrollObj = $$('.galerie_thumbnails')[0];
	var o = galerieScrollObj;
	if(o.scrollHeight - (o.scrollTop+o.clientHeight) > 4 || o.scrollTop > 0) {
		o.scrollTop += galerieScrollingDir;
	}
	if(o.scrollHeight - (o.scrollTop+o.clientHeight) <= 4) {
		$('galerie_down').style.display = 'none';
	} else {
		$('galerie_down').style.display = 'block';
	}
	if(o.scrollTop > 0) {
		$('galerie_up').style.display = 'block';
	} else {
		$('galerie_up').style.display = 'none';
	}
}

/**
 *
 * @access public
 * @return void
 **/
function galerieScrollInit(dir){
	if(dir == 0 && typeof(galerieScrollInt) == 'number') {
		clearInterval(galerieScrollInt);
		galerieScrollInt = false;
	}
	if(dir != 0 && typeof(galerieScrollInt) != 'number') {
		galerieScrollingDir = dir*4;
		galerieScrollInt = setInterval('galerieScroll();',20);
	}
}



/**
 *
 * @access public
 * @return void
 **/
function QuadratScrollKoeff(Steps){
	Koeff = new Array();
	Schwelle = Steps/2;
	for (i=0; i<Steps-1; i++) {
		if (i<=Schwelle) {
			Koeff[i] = (i/Schwelle)*(i/Schwelle)*0.5;
		} else {
			Koeff[i-1] = 1-Koeff[Steps-i];
		}
		Koeff[Steps-1] = 1;
	}
	return Koeff;
}

/**
 *
 * @access public
 * @return void
 **/
function SinScrollKoeff(Steps){
	Koeff = new Array();
	Schwelle = Math.ceil(Steps/2);
	for (i=0; i<Schwelle; i++) {
		x = 0.25*Math.PI*i/(Schwelle-1);
		xmax = 0.25*Math.PI;
		Koeff[i] = 0.5*Math.sin(x)*Math.sin(x)/(Math.sin(xmax)*Math.sin(xmax));
	}
	for (i=Schwelle; i<Steps; i++) {
		Koeff[i] = 1-Koeff[Steps-i-1];
	}
	return Koeff;
}

/**
 *
 * @access public
 * @return void
 **/

function SincScrollKoeff(Steps){
	Koeff = new Array();
	Schwelle = Math.ceil(Steps/2);
	for (i=0; i<Schwelle; i++) {
		x = i/(Schwelle-1)*Math.PI*2*0.8 - Math.PI*2;
		xmax = Math.PI*2*0.8 - Math.PI*2;
		Koeff[i] = 0.5 * (sinc(x))/(sinc(xmax)) * (i/(Schwelle-1));
	}
	for (i=Schwelle; i<Steps; i++) {
		Koeff[i] = 1-Koeff[Steps-i-1];
	}
	return Koeff;
}


/**
 *
 * @access public
 * @return void
 **/

function AsymSincScrollKoeff(Steps){
	Koeff = new Array();
	Schwelle = Math.ceil(Steps/2);
	for (i=0; i<Schwelle; i++) {
		x = i/(Schwelle-1)*Math.PI*2*0.8 - Math.PI*2;
		xmax = Math.PI*2*0.8 - Math.PI*2;
		Koeff[i] = 0.5 * (sinc(x))/(sinc(xmax)) * (i/(Schwelle-1));
	}
	for (i=Schwelle; i<Steps; i++) {
		Koeff[i] = 1-Koeff[Steps-i-1];
	}
	for (i=0; i<Schwelle; i++) {
		x = i/(Schwelle-1)*Math.PI*0.5 - Math.PI;
		xmax = Math.PI*0.5 - Math.PI;
		Koeff[i] = 0.5 * (sinc(x))/(sinc(xmax)) * (i/(Schwelle-1));
	}
	return Koeff;
}

/**
 *
 * @access public
 * @return void
 **/
function sinc(x){
	return (Math.sin(x) / x);
}

/**
 *
 * @access public
 * @return void
 **/
function sgn(x){
	if (x>0) return 1;
	else if (x<0) return -1;
	else return 0;
}



function setOpac(id, opacity) {
    var object = $(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
	if(Math.round(opacity) == 100) {
		object.opacity = '';
		object.MozOpacity = '';
		object.KhtmlOpacity = '';
		object.filter = '';
	}
}
