var configNaviFadeDuration = 0.5;
var configNaviElementFadeDuration = 0.3;
var configSlideDuration = 0.7;
var configSliderHotArea = 735;

function addPageSliding()
{
	var pageURL = window.location.toString().toLowerCase();
	pageURL = pageURL.substring(7, pageURL.length);
	pageURL = pageURL.substring(0, pageURL.indexOf('/'));
	
	$('a').each(function()
	{
		var url = this.href.toLowerCase();

		if (url.indexOf('/') == 0 || url.indexOf('..') == 0 || url.indexOf(pageURL) >= 0)
		{
			this.onclick = function()
			{
				slideToPage(this.href);
				return false;
			}
		}
	});
}

function unslidePage()
{
	if (window.parent && window.parent.slideInfo != null)
	{
		var info = window.parent.slideInfo;
		
		info.slided.animate({ left : info.width + 'px' }, 1000, function() { info.slided.remove(); });
		info.unslided.animate({ left : '0px' }, 1000);
	}
}

var slideInfo = null;

function slideToPage(url)
{
	var width = window.innerWidth;
	
	var slider = $('<iframe frameborder="0" width="' + width + '" height="100%" scrolling="no"></iframe>');
	slider.css({ position : 'absolute', left : width + 'px', top : '0' });
	
	var bodyElement = $('body');
	bodyElement.append(slider);
	
	slider.attr('src', url);

	slider.load(function() 
    {
		var height = slider.contents().find('#all').height();
		slider.attr('height', height);

		var allElement = $('#all');
		allElement.css({ width: '100%' });
		
		slideInfo = { slided : slider, unslided : allElement, parent : bodyElement, width: width }; 
		
		allElement.css({ position : 'absolute' });
		
		slider.animate({ left : '0px' }, 1000);
		allElement.animate({ left : -width + 'px' }, 1000);
    });
}

function setCharAt(str,index,chr) {
	if(index > str.length-1) return str;
	return str.substr(0,index) + chr + str.substr(index+1);
}


function unscrambleEmail(text, permutation, spanID)
{
	var unscrambledEmail = text;
	var permutationLength = permutation.length;
	
	for (var i = 0; i < permutationLength; i++)
	{
		unscrambledEmail = setCharAt(unscrambledEmail, permutation[i], text.substring(i, i + 1));
	}
	
	document.getElementById(spanID).innerHTML = unscrambledEmail;
	
	var links = document.getElementsByTagName('a');
	var linkLength = links.length;
	
	var query = eval('/' + text + '/g');
	
	for (var i = 0; i < linkLength; i++)
	{
		if (links[i].href.indexOf(text) >= 0)
		{
			links[i].href = links[i].href.replace(query, unscrambledEmail);
		}
	}
}

function checkIsJavascriptEnabled()
{
	var url = 'http://www.gastraum.com/module/xml_parser/_includes/ajax.check_javascript.php';
	var parameters = [];
	var values = [];
	//doAjax(url, 'checkIsJavascriptEnabledCallback', parameters, values);
}

function checkIsJavascriptEnabledCallback(answer)
{ 
}

checkIsJavascriptEnabled();

//globale Variablen für AJAX-Funktion
var http_request = false;
var ajax_callback = null;

// Ajax-Anfrage durchführen
function doAjax(target, callback, parameters, values) {
	ajax_callback = callback;
	http_request = false;
	if (window.XMLHttpRequest) {
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
		//	http_request.overrideMimeType('text/xml');
		}
	} 
	else if (window.ActiveXObject) {
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}
	if (!http_request) {
		alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
		return false;
	}
	
	if (parameters.length > 0)
	{
	
		url = target+"?";
		for (param_i = 0; param_i < parameters.length; param_i++) {
			if ((url.indexOf('&'+parameters[param_i]+'=') < 0) && (url.indexOf('?'+parameters[param_i]+'=') < 0)) {
				if (param_i > 0) url += "&";
				url += parameters[param_i]+"="+escape(values[param_i]);
			}
		}

	}
	else url = target;

	http_request.onreadystatechange = processAjax;
	http_request.open('GET', url, true);
	http_request.send(null);
	
}

// Ajax-Funktion aufrufen
function processAjax() {
	if (http_request.readyState == 4) {
		
		var answer = http_request.responseText;
		answer = answer.replace(/\\n/, "\n");
		eval(ajax_callback + '(\'' + answer + '\');');
		
	}
}

function validateContactFormCallback(answer)
{
	var form = document.forms['contactform'];

	
	var validate = 	[
						['name', 'empty'],
						['email', 'email'],
						['phone', 'empty'],
						['comment', 'empty'],
					];
					
	var error = false;
	
	if (answer.indexOf('error') >= 0)
	{
		markField(form, 'captcha_code', true);
		error = true;	
	}
	else
	{
		markField(form, 'captcha_code', false);
	}
	
	for (v_i = 0; v_i < validate.length; v_i++)
	{
		if (validate[v_i][1]=='empty' && checkEmpty(form, validate[v_i][0]))
		{
			markField(form, validate[v_i][0], true);
			error = true;
		}
		else if (validate[v_i][1]=='email' && !checkEmail(form, validate[v_i][0]))
		{
			markField(form, validate[v_i][0], true);
			error = true;
		}
		else markField(form, validate[v_i][0], false);
	}
	
	
	if (error)
	{
		alert("Fehler!\n\nBitte korrigieren Sie die Angaben in den rot markierten Felder!");
		return false;
	}
	else 
	{
		getParams = getSearch();
		if (typeof(getParams['template_id']) != 'undefined') lastRirectURL += '&template_id=' + getParams['template_id'];
		window.location = lastRirectURL;
		return true;
	}
}

function getSearch()
{
	var params = {};
	
	var str = window.location.search;
	if (str.indexOf('?') == 0) str = str.substr(1);
	var keyValue = str.split('&');
	
	for (var i = 0, length = keyValue.length; i < length; i++)
	{
		var splitKeyValue = keyValue[i].split('=');
		params[splitKeyValue[0]] = splitKeyValue[1];
	}
	
	return params;
}

var lastRirectURL = '';
function validateContactForm(redirectURL)
{
	lastRirectURL = redirectURL;
	var captchaEntry = document.forms['contactform'].elements['captcha_code'].value;
	var url = 'http://www.gastraum.com/module/xml_parser/_includes/captcha/ajax.check_captcha.php';
	var parameters = ['captcha_code'];
	var values = [captchaEntry];
	doAjax(url, 'validateContactFormCallback', parameters, values);
}

function applyGalleryClicks(source, targetImage)
{
	var imgElements = document.getElementById(source).getElementsByTagName('img');
	var targetElement = document.getElementById(targetImage);
	
	for (ei = 0; ei < imgElements.length; ei++)
	{
		imgElements[ei].onclick = function(e) 
		{
			var image = getTarget(e).src.replace(/s\.jpg/, '.jpg');
			targetElement.src = image;
		}
		imgElements[ei].style.cursor = 'pointer';
	}
}

var originalBorderColors = [];
function markField(form, elementName, state)
{
	var element = form.elements[elementName];
	if (state && !in_array(originalBorderColors, elementName, 0))
	{
		originalBorderColors.push([elementName, element.style.borderColor]);
	}
	
	if (state) form.elements[elementName].style.borderColor = '#cc0000';
	else
	{
		for (b_i = 0; b_i < originalBorderColors.length; b_i++)
		{
			if (originalBorderColors[b_i][0]==elementName)
			{
				 element.style.borderColor = originalBorderColors[b_i][1];
			}
		}
	}
}

function checkEmpty(form, elementName)
{
	return (form.elements[elementName].value.replace(/^\s+/, '').replace(/\s+$/, '').length == 0);
}

function checkEmail(form, elementName)
{
	var email = form.elements[elementName].value;
	
	if (checkEmpty(form, elementName)) return false;

	if (email.indexOf("@") < 1) return false;	

	if (email.lastIndexOf('.') < 3 || email.lastIndexOf('.') > (email.length-3)) return false;
		
	return true;
}

function SubmitAndRedirect(redirectURL, formName)
{
	var redirect = true;
	if (formName=='contactform') redirect = validateContactForm(redirectURL + getFormGetString(formName));
	else if (redirect) window.location = redirectURL + getFormGetString(formName);
	return false;
}

function getFormGetString(formName)
{
	var currentForm = document.forms[formName];
	var formElements = currentForm.elements;

	var getString = '?';
	
	for (i = 0; i < formElements.length; i++)
	{
		if (i > 0) getString += '&';
		getString += formElements[i].name + '=' + formElements[i].value;
	}
	
	var action = currentForm.action;
	
	if (action.indexOf('?') > 0)
	{
		getString += '&' + action.substring(action.indexOf('?') + 1, action.length);
		action = action.substring(0, action.indexOf('?'));
	}
	
	getString += '&script=' + escape(action);
	
	return getString;
}


var subNavis = null;
var subNaviEffects = new Array();

function showNavi(mainNaviID, naviElementClass, state)
{
	
	if (subNavis == null)
	{
		
		subNavis = getElementsByClassName(naviElementClass, document.getElementById(mainNaviID));
			
		for (si = 0; si < subNavis.length; si++)
		{
			if (!isEmpty(subNavis[si].id)) 
			{
				adaptOnMouseOut(subNavis[si].id, "showNavi('"+mainNaviID+"', '" + naviElementClass + "', false)");
			}
		}		

	}		

	
	for (si = 0; si < subNavis.length; si++)
	{
		if (!isEmpty(subNavis[si].id)) 
		{
			
			if (subNaviEffects.length > si) subNaviEffects[si].cancel();
			
			if (state) 
			{
				subNaviEffects[si] = new Effect.Appear(subNavis[si].id, { duration: configNaviFadeDuration + (si/5) } );
			}
			else
			{
				subNaviEffects[si] = new Effect.Fade(subNavis[si].id, { duration: configNaviFadeDuration + (si/5) } );
			}
			
		}
	}
	
}

function isEmpty(text) 
{
	return text==null || typeof text=='undefined' || text.length < 1;	
}


function adaptOnMouseOut(containerID, functionString)
{
	document.getElementById(containerID).onmouseout = function(e) {
		
		if (!e) var e = window.event;
		var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
	
		while (reltg!=null && reltg.tagName != null && reltg.tagName != 'BODY'){
			if (reltg.id == this.id){return;}
			reltg = reltg.parentNode;
		}
		
		eval(functionString);
	
	}	
}

var subNaviElements = new Array();

function showNaviElement(containerID, state)
{
	
	if (subNaviElements.length < 1)
	{
	
		var subNaviItems = getElementsByClassName('naviPicture');
		var subNaviTriggers  = getElementsByClassName('inner');
			
		for (si = 0; si < subNaviItems.length; si++)
		{
			if (subNaviTriggers[si]!=null && !isEmpty(subNaviItems[si].id) && !isEmpty(subNaviTriggers[si].id)) 
			{
				subNaviElements[si] = new Object();
				subNaviElements[si].id = subNaviItems[si].id;
				subNaviElements[si].effect = null;
				adaptOnMouseOut(subNaviTriggers[si].id, "showNaviElement('"+subNaviItems[si].id+"', false)");
			}
		}		

	}		
	
	var currentItem = null;
	for (si = 0; si < subNaviElements.length; si++)
	{
		if (subNaviElements[si].id==containerID) currentItem = subNaviElements[si];
	}

	if (currentItem.effect != null)
	{
		currentItem.effect.cancel();
	}

	if (state) currentItem.effect = new Effect.Appear(containerID, { duration: configNaviElementFadeDuration });
	else currentItem.effect = new Effect.Fade(containerID, { duration: configNaviElementFadeDuration });
}

var slidingEffect = null;
var lastSlideDir = 0;
var slidingLayerID = '';
var lastMouseX = 0;

function showSlidingLayer(layerID, state, hotArea)
{
	if (!hotArea) hotArea = configSliderHotArea;
	
	var layer = document.getElementById(layerID);
	
	var slidingLayerID = layerID;
	
	var moveOffset = layer.offsetWidth;

  	if (state && mouseX < hotArea)
	{
		if (lastMouseX >= hotArea) state = false;
	}
	else lastMouseX = mouseX;
	
	if (state) 
	{
		 moveOffset *= -1;
	}
	
	if (lastSlideDir != moveOffset)
	{
		lastSlideDir = moveOffset;
		if (slidingEffect != null) slidingEffect.cancel();
		slidingEffect = new Effect.Move(layerID, { x: moveOffset, y: 0, mode: 'absolute',  duration: configSlideDuration });
	}
	
}


var scrollPortElements = [];
function adaptScrollPort(elementID, innerElementID)
{
	if (!is_mobile_device())
	{
		var element = document.getElementById(elementID);
		element.onmousemove = scrollElement;

		adaptOnMouseOut(elementID, "performScrolling('"+ innerElementID + "', 0, false, 0)");

		var innerElement = document.getElementById(innerElementID);
		innerElement.style.position = 'absolute';

		scrollPortElements.push([element, innerElement]);
	}
	else
	{
		var scroller = myScroll = new iScroll(innerElementID, {desktopCompatibility:true});
	}
}

function getTarget(e)
{
	if (!e) var e = window.event;
	if (e.srcElement) return e.srcElement;
	else if (e.target) return e.target;
}

function getPageY(e)
{
	if (!e) var e = window.event;
	if (e.pageY) return e.pageY;
	else return e.clientY;
}

function getPageX(e)
{
	if (!e) var e = window.event;
	if (e.pageX) return e.pageX;
	else return e.clientX;
}

function scrollElement(e)
{
	var parent = null;
	
	for (pari = 0; pari < scrollPortElements.length; pari++)
	{
		
		if (has_parent(getTarget(e), scrollPortElements[pari][0].id)) parent = scrollPortElements[pari];	
	}
	
	if (parent!=null)
	{
		
		var elementPosition = getElementPosition(parent[0]);
		var elementMouseY = getPageY(e) - elementPosition.y;
		var elementHeight = parent[0].offsetHeight;
		
		performScrolling(parent[1].id, 0, false, elementHeight);
	
		if (elementMouseY < elementHeight / 2 - 200)
		{
			performScrolling(parent[1].id, 1, true, elementHeight);
		}
		else if (elementMouseY > elementHeight / 2 + 200)
		{
			performScrolling(parent[1].id, -1, true, elementHeight);
		}
		
	}
	
}

/**
 * Liefert die Position eines HTML-Elements zurück
 * @param HTMLElement element
 * @return object object.x = x-Position, object.y = y-Position
 */
function getElementPosition(element) {
  var elem=element,tagname="",x=0,y=0;
  while (elem!=null && (typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined")) {
    y+=elem.offsetTop;
    x+=elem.offsetLeft;
    tagname=elem.tagName.toUpperCase();

    if (tagname=="BODY")
      elem=0;

    if (typeof(elem)=="object")
      if (typeof(elem.offsetParent)=="object")
        elem=elem.offsetParent;
  } // end while

  position=new Object();
  position.x=x;
  position.y=y;
  return position;
}

var moving = false;
var moveOffset = 0;
function performScrolling(element_id, offset, move, parentHeight, fromTimeout)
{
	if (!fromTimeout) moving = move;
	moveOffset = offset;
	var element = document.getElementById(element_id);

	if (moving && element.offsetHeight > parentHeight)
	{
		var newTop = element.offsetTop + moveOffset;

		if (newTop > 0) {
			moving = false;
			newTop = 0;
		}
		else if (newTop < -(element.offsetHeight-parentHeight))
		{
			moving = false;
			newTop = -(element.offsetHeight-parentHeight);
		}
		
		element.style.top = (newTop) + 'px';
		
		var movingString = (moving) ? 'true' : 'false';
		var timeOutFunc = "performScrolling('" + element_id + "', " + moveOffset + ", " + movingString + "," + parentHeight + ", true)";
		window.setTimeout(timeOutFunc, 50);
	}

}

var bool_mobile_device = null;
function is_mobile_device()
{
	if (bool_mobile_device === null)
	{
		var deviceList = [ 'iphone', 'ipad', 'ipod', 'symbian', 'android', 'blackberry', 'windows ce', 'palm', 'windows mobile' ];

		var deviceName = navigator.userAgent.toLowerCase();
		
		bool_mobile_device = false;
		
		for (var i = 0, length_i = deviceList.length; i < length_i; i++)
		{
			if (deviceName.indexOf(deviceList[i]) > 0)
			{
				bool_mobile_device = true;
				break;
			}
		}
	}
	
	return bool_mobile_device;
}

function in_array(arr, element, subindex)
{

	for (ei = 0; ei < arr.length; ei++)
	{
		if (subindex==null)
		{
			if (arr[ei]==element) return true;
		}
		else if (arr[ei][subindex]==element) return true;	
	}

	return false;

}

function has_parent(element, parent_id)
{
	var parent_ids = [parent_id];
	return has_parents(element, parent_ids);
}

function has_parents(element, parent_ids)
{
	while (element!=null && typeof element != 'undefined')
	{
		if (in_array(parent_ids, element.id)) return true;
		element = element.parentNode;
	}
	return false;
}


function adaptGallery(elementID, targetID)
{
	var imgElements = document.getElementById(elementID).getElementsByTagName('img');
	var targetElement = document.getElementById(targetID);
	
	for (ei = 0; ei < imgElements.length; ei++)
	{
		imgElements[ei].onclick = function(e) 
		{
			var image = getTarget(e).src.replace(/s\.jpg/, '.jpg');
			targetElement.style.backgroundImage = 'url(' + image + ')';
		}
		imgElements[ei].style.cursor = 'pointer';
	}
}

var onloads = [];
function performOnload(funcString)
{
	onloads.push(funcString);
}
 
function getElementsByClassName(classname, node) {

	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	for(var i=0,j=els.length; i<j; i++)
	if(re.test(els[i].className))a.push(els[i]);
	return a;
	
}

var clickQueue = null;

function redirect(expectedID, address)
{
	clickQueue = [expectedID, 'window.location = \'' + address + '\''];
}


document.onclick = function(e) 
{ 
	if (clickQueue != null && getTarget(e).id == clickQueue[0]) eval(clickQueue[1]);
}

var mouseX = 0;
var mouseY = 0;

document.onmousemove = function(e)
{
	mouseX = getPageX(e);
	mouseY = getPageY(e);
}

window.onload = function(e)
{
	for (oi = 0; oi < onloads.length; oi++)
	{
		eval(onloads[oi]);	
	}
}

function hideNavBar()
{
	window.setTimeout(function() { window.scrollTo(0, 0); } , 1000);
}

performOnload('hideNavBar()');

function hideUrlBar() 
{
	if (((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)))) {
		container = document.getElementById("container");
		if (container) {
			var cheight;
			switch(window.innerHeight) {
				case 208:cheight=268; break; // landscape
				case 336:cheight=396; break; // portrait, in call status bar
				case 356:cheight=416; break; // portrait 
				default:
					cheight=window.innerHeight;
			}
			if ((container.offsetHeight!=cheight) || (window.innerHeight!=cheight)) {
				container.style.height=cheight + "px";
				setTimeout(function() { hideUrlBar(); }, 1000);
			}
		}
	}
	
	if (window.pageYOffset==0) {
		window.scrollTo(0, 0);
	
	}
}
