

function isSafari()
{
	return navigator.userAgent.indexOf('Safari') != -1;
}

function isMemberOfCssClass(classes, thisClass)
{
	if(!classes)
	{
		return false;
	}
	var classArray = classes.split(" ");
	for(var i=0; i<classArray.length; ++i)
	{
		if(classArray[i] == thisClass)
		{
			return true;
		}
	}
	return false;
}


function addToCssClass(element, thisClass)
{
	element.className += ' ' + thisClass;
}

function removeFromCssClass(element, thisClass)
{
	var oldElementClass = element.className;
	var newClass = oldElementClass.replace(thisClass, "");
	element.className = newClass;
}




function showImage(element, targetID)
{
	imageSource = element.getElementsByTagName('img')[0].src;
	
	$(targetID).src = imageSource;
	
	return false;
}


function showThumbnailPage(element, targetID)
{
	
	var pageNumber = 0;
	
	var linkContainer = element.parentNode;
	var pageLinks = linkContainer.getElementsByTagName('a');
	for(var j=0; j < pageLinks.length; ++j)
	{
		if(isMemberOfCssClass(pageLinks[j].className, "selected") )
		{
			removeFromCssClass(pageLinks[j], "selected");
		}
		
		if(pageLinks[j] === element)
		{
			pageNumber = j;
			addToCssClass(pageLinks[j], "selected");
		}
	}
	
	
	var thumbnailPages = $(targetID).getElementsByTagName('div');
	for(var i=0; i< thumbnailPages.length; ++i)
	{
		if(!isMemberOfCssClass(thumbnailPages[i].className, 'invisible'))
		{
			addToCssClass(thumbnailPages[i], 'invisible');
		}
		
		if(i == pageNumber)
		{
			removeFromCssClass(thumbnailPages[i], 'invisible');
		}
	}
	return false;
}






function historyLight(element)
{
	addToCssClass(element, "highlighted");
	removeFromCssClass(element.getElementsByTagName('a')[0].getElementsByTagName('span')[0], 'invisible');
}

function historyDouse(element)
{
	removeFromCssClass(element, "highlighted");
	addToCssClass(element.getElementsByTagName('a')[0].getElementsByTagName('span')[0], 'invisible');
}






function impressionsForward(listId, numberId)
{

	var allListElements = jQuery("#"+listId).children('div');	
		
	var pictureElements = new Array();

	for(var j=0; j < allListElements.length; ++j )
	{
		if(isMemberOfCssClass(allListElements[j].className, 'visual' ))
		{
			pictureElements.push(allListElements[j]);
		}
	}
	
	
	var length = pictureElements.length;

	for(var i=0; i < length; ++i)
	{
		if(!isMemberOfCssClass(pictureElements[i].className, 'invisible'))
		{
			addToCssClass(pictureElements[i], 'invisible');
			var nextElementNum = 0;
			if((i + 1) < length)
			{
				nextElementNum = i+1;
				
			}
			else
			{
				nextElementNum = 0;
			}
			removeFromCssClass(pictureElements[nextElementNum], 'invisible');
			jQuery("#"+numberId).text(nextElementNum + 1);
			
			return false;
		}
	}

	return false;
}


function impressionsBack(listId, numberId)
{
	var allListElements = jQuery("#"+listId).children('div');	
		
	var pictureElements = new Array();

	for(var j=0; j < allListElements.length; ++j )
	{
		if(isMemberOfCssClass(allListElements[j].className, 'visual' ))
		{
			pictureElements.push(allListElements[j]);
		}
	}
	
	
	var length = pictureElements.length;
	
	for(var i=0; i < length; ++i)
	{
		if(!isMemberOfCssClass(pictureElements[i].className, 'invisible'))
		{
			addToCssClass(pictureElements[i], 'invisible');
			var nextElementNum = 0;
			if((i - 1) >= 0)
			{
				nextElementNum = i-1;
				
			}
			else
			{
				nextElementNum = length - 1;
			}
			removeFromCssClass(pictureElements[nextElementNum], 'invisible');
			jQuery("#"+numberId).text(nextElementNum + 1);
			
			
			return false;
		}
	}

	return false;
}




function setFontSize(textSize)
{
	
	removeFromCssClass(document.getElementsByTagName('body')[0], 'largeText');
	removeFromCssClass(document.getElementsByTagName('body')[0], 'veryLargeText');

	switch(textSize)
	{
		case 1:
			
			
			break;
		case 2:

			addToCssClass(document.getElementsByTagName('body')[0], 'largeText');
			break;
		case 3:
			addToCssClass(document.getElementsByTagName('body')[0], 'veryLargeText');
			break;
	}
	return false;
}




function hideSearchControls(element, rootNodeId, hideClass, showClass, button1Src, button2Src)
{
	element.src = button1Src;
	
	var containedElements = $(rootNodeId).getElementsByTagName('*');
	
	if(containedElements.length == 0)
	{
		containedElements = $(rootNodeId).all;
	}
	
	for(var i=0; i< containedElements.length; ++i)
	{
		var thisElement = containedElements[i];
		if( isMemberOfCssClass(thisElement.className, hideClass) )
		{

			new Effect.BlindUp(thisElement);
		}
		
		if( isMemberOfCssClass(thisElement.className, showClass) )
		{
			Element.setOpacity(thisElement, 0);
			removeFromCssClass(thisElement, 'invisible');
			
			new Effect.Opacity(thisElement, { from: 0.0, to: 1.0, duration: 0.7 });
		}
		
	}


	element.onclick = function() { return showSearchControls(element, rootNodeId, hideClass, showClass, button1Src, button2Src); }
	return false;
}



function showSearchControls(element, rootNodeId, hideClass, showClass, button1Src, button2Src)
{
	
	element.onclick = function() { return hideSearchControls(element, rootNodeId, hideClass, showClass, button1Src, button2Src); }
	
	element.src = button2Src;
	
	var containedElements = $(rootNodeId).getElementsByTagName('*');
	if(containedElements.length == 0)
	{
		containedElements = $(rootNodeId).all;
	}
	
	for(var i=0; i< containedElements.length; ++i)
	{
		var thisElement = containedElements[i];
		if( isMemberOfCssClass(thisElement.className, hideClass) )
		{
			
			new Effect.BlindDown(thisElement);
		}
		
		if( isMemberOfCssClass(thisElement.className, showClass) )
		{
			new Effect.Opacity(thisElement, { from: 1.0, to: 0.0, duration: 0.7});
		}
	}
	
	return false;
}


function enlargeMapHomepage(element, area)
{
	
	element.onclick = null;
	$('close-icon').parentNode.onclick = function() { return shrinkMapHomepage(); };
	
	addToCssClass($('flash-stage'), 'hidden');
	
	
	addToCssClass($('alta4minimap'), 'invisible');
	addToCssClass($('navigation-dropdown-form'), 'hidden');


	targetElement = $('map-replacement');
	removeFromCssClass(targetElement, 'invisible');	

	
	new Effect.Opacity('geofinder-large', { from: 0.1, to: 0.0, queue: {position: 'front', scope: 'mapresize'}, 
		afterFinish: function(obj) { removeFromCssClass($('geofinder-large'), 'invisible'); }
	} );
	

	new Effect.Parallel([		
		new Effect.Move(targetElement, { x: -709, y: 0, mode: 'relative' } ),
		new Effect.Scale(targetElement, 370, {scaleContent: false, scaleY: false
		})
	]
	)

	new Effect.Opacity('geofinder-large', { duration: 0.2, from: 0.0, to: 1.0, queue: {position: 'end', scope: 'mapresize'},
		
		afterFinish: function(obj) { 
			addToCssClass(targetElement, 'invisible');
			if(isSafari()) {
				$('pageitems').style.display = 'none'; 
				$('pageitems').style.display = 'block';
			}
		},

		//Safari hack
		beforeStart: function (obj) { 
			if(isSafari()) {
				$('pageitems').style.display = 'inline'; 
			}
		}
		
	
	 } );
	
	initBigMap(true, area);
	return false;
}



function enlargeMap(element, area)
{
	element.onclick = null;
	$('close-icon').parentNode.onclick = function() { return shrinkMap(); };
	
	addToCssClass($('alta4minimap'), 'invisible');
	addToCssClass($('navigation-dropdown-form'), 'hidden');


	targetElement = $('map-replacement');
	removeFromCssClass(targetElement, 'invisible');	

	
	new Effect.Opacity('geofinder-large', { from: 0.1, to: 0.0, queue: {position: 'front', scope: 'mapresize'}, 
		afterFinish: function(obj) { removeFromCssClass($('geofinder-large'), 'invisible'); }
	} );
	
	if(document.getElementById('flexarea') != undefined && $('mainteaser') == undefined )
	{
		var moveEffect = new Effect.Move($('colwrapper1'), { x: 0, y: 500, mode: 'relative' } );
		var scaleEffect = new Effect.Scale($('content'), 137, {scaleContent: false, scaleX: false,
		//Safari hack
		beforeStart: function () { 
			if(isSafari()) {
				$('pageitems').style.display = 'inline'; 
			}
		},
		
		afterFinish: function () { 
			if(isSafari()) {
				$('pageitems').style.display = 'none'; 
				$('pageitems').style.display = 'block';
			}
		}
		});
	}
	else
	{
		var moveEffect = new Effect.Move($('colwrapper1'), { x: 0, y: 150, mode: 'relative' } );
		var scaleEffect = new Effect.Scale($('content'), 110, {scaleContent: false, scaleX: false,

		//Safari hack
		beforeStart: function () { 
			if(isSafari()) {
				$('pageitems').style.display = 'inline'; 
			}
		},
		
		afterFinish: function () { 
			if(isSafari()) {
				$('pageitems').style.display = 'none'; 
				$('pageitems').style.display = 'block';
			}
		}
		});
	}
	new Effect.Parallel([		
		new Effect.Move(targetElement, { x: -709, y: 0, mode: 'relative' } ),
		new Effect.Scale(targetElement, 370, {scaleContent: false, scaleY: false}),
		moveEffect,
		scaleEffect
		
	]
	)

	new Effect.Opacity('geofinder-large', { duration: 0.2, from: 0.0, to: 1.0, queue: {position: 'end', scope: 'mapresize'},
		afterFinish: function(obj) { 
			addToCssClass(targetElement, 'invisible'); 
		}
	
	 } );
	
	initBigMap(true, area);
	return false;
}


function enlargeMapWithPoi(element, id)
{
	element.onclick = null;
	$('close-icon').parentNode.onclick = function() { return shrinkMap(); };
	
	addToCssClass($('alta4minimap'), 'invisible');
	addToCssClass($('navigation-dropdown-form'), 'hidden');


	targetElement = $('map-replacement');
	removeFromCssClass(targetElement, 'invisible');	

	
	new Effect.Opacity('geofinder-large', { from: 0.1, to: 0.0, queue: {position: 'front', scope: 'mapresize'}, 
		afterFinish: function(obj) { removeFromCssClass($('geofinder-large'), 'invisible'); }
	} );
	
	if(document.getElementById('flexarea') != undefined && $('mainteaser') == undefined )
	{
		var moveEffect = new Effect.Move($('colwrapper1'), { x: 0, y: 500, mode: 'relative' } );
		var scaleEffect = new Effect.Scale($('content'), 137, {scaleContent: false, scaleX: false,
		//Safari hack
		beforeStart: function () { 
			if(isSafari()) {
				$('pageitems').style.display = 'inline'; 
			}
		},
		
		afterFinish: function () { 
			if(isSafari()) {
				$('pageitems').style.display = 'none'; 
				$('pageitems').style.display = 'block';
			}
		}
		});
	}
	else
	{
		var moveEffect = new Effect.Move($('colwrapper1'), { x: 0, y: 150, mode: 'relative' } );
		var scaleEffect = new Effect.Scale($('content'), 110, {scaleContent: false, scaleX: false,

		//Safari hack
		beforeStart: function () { 
			if(isSafari()) {
				$('pageitems').style.display = 'inline'; 
			}
		},
		
		afterFinish: function () { 
			if(isSafari()) {
				$('pageitems').style.display = 'none'; 
				$('pageitems').style.display = 'block';
			}
		}
		});
	}
	new Effect.Parallel([		
		new Effect.Move(targetElement, { x: -709, y: 0, mode: 'relative' } ),
		new Effect.Scale(targetElement, 370, {scaleContent: false, scaleY: false}),
		moveEffect,
		scaleEffect
		
	]
	)

	new Effect.Opacity('geofinder-large', { duration: 0.2, from: 0.0, to: 1.0, queue: {position: 'end', scope: 'mapresize'},
		afterFinish: function(obj) { 
			addToCssClass(targetElement, 'invisible'); 
		}
	
	 } );
	
     initBigMapWithPOI(id);

	return false;
}

function shrinkMapHomepage()
{
	$('close-icon').parentNode.onclick = null;
	var linkElements = $('geofinder-magnifier-link').getElementsByTagName('a');
	
	for(var i=0; i < linkElements.length; ++i)
	{	
		linkElements[i].onclick = function() { return enlargeMapHomepage(this); };
	}
	
	removeFromCssClass($('alta4minimap'), 'invisible');
	
	new Effect.Move($('map-replacement'), { duration: 0.2, x: 709, y: 0, mode: 'relative' } );
	new Effect.Scale($('map-replacement'), 100, {scaleContent: false,  scaleMode: { originalHeight: 244, originalWidth: 266 }
	 });
	
	
	new Effect.Opacity('geofinder-large', { duration: 0.3, from: 1.0, to: 0.0,
		afterFinish: function(obj) {
			removeFromCssClass($('navigation-dropdown-form'), 'hidden');
			addToCssClass($('geofinder-large'), 'invisible');
			removeFromCssClass($('flash-stage'), 'hidden'); 
		}
	} );
	
		
	return false;
}


function shrinkMap()
{
	
	$('close-icon').parentNode.onclick = null;
	var linkElements = $('geofinder-magnifier-link').getElementsByTagName('a');
	for(var i=0; i < linkElements.length; ++i)
	{	
		linkElements[i].onclick = function() { 
			return enlargeMap(this); 
		};
	}
	
	removeFromCssClass($('alta4minimap'), 'invisible');
	
	new Effect.Move($('map-replacement'), { duration: 0.2, x: 709, y: 0, mode: 'relative' } );
	new Effect.Scale($('map-replacement'), 100, {scaleContent: false,  scaleMode: { originalHeight: 244, originalWidth: 266 }
	 });
	
	if($('flexarea') != undefined && $('mainteaser') == undefined)
	{
		new Effect.Move($('colwrapper1'), { x: 0, y: -500, mode: 'relative', duration: 0.5 } )
		new Effect.Scale($('content'), 72.9927, {scaleContent: false, scaleX: false, duration: 0.5,

		//Safari hack
		beforeStart: function(obj) { 
			if(isSafari()) { 
				$('pageitems').style.display = 'none'; 
			} 
		} ,
		afterFinish: function (obj) { 
			if(isSafari()) { 
				$('pageitems').style.display = 'block'; 
			}  
		}
	
		});
	}
	else
	{
		new Effect.Move($('colwrapper1'), { x: 0, y: -150, mode: 'relative', duration: 0.5 } )
		new Effect.Scale($('content'), 90.909090, {scaleContent: false, scaleX: false, duration: 0.5,

		//Safari hack
		beforeStart: function(obj) { 
			if(isSafari()) { 
				$('pageitems').style.display = 'none'; 
			} 
		} ,
		afterFinish: function (obj) { 
			if(isSafari()) { 
				$('pageitems').style.display = 'block'; 
			}  
		}

		});
	}
	
	new Effect.Opacity('geofinder-large', { duration: 0.3, from: 1.0, to: 0.0,
		afterFinish: function(obj) {
			removeFromCssClass($('navigation-dropdown-form'), 'hidden');
			addToCssClass($('geofinder-large'), 'invisible'); 

		}
	} );
	

	return false;
}


function startSlideShow(steps)
{
	var stepCounter = 0;
	for(var i=0; i<steps.length - 1; ++i)
	{
		new Effect.Opacity(steps[i], { duration: 0.9, from: 1.0, to: 0.0, delay: 1.3, queue: {position: 'end', scope: 'slideshow'}, 
			afterFinish: function() {
				addToCssClass($(steps[stepCounter]), 'invisible');
				Element.setOpacity(steps[stepCounter+1], 0);
				removeFromCssClass($(steps[stepCounter+1]), 'invisible');
				++stepCounter;
		} } );

		new Effect.Opacity(steps[i+1], { duration: 0.9, from: 0.0, to: 1.0, queue: {position: 'end', scope: 'slideshow'} } );
	}
}



function toggleCheckboxes(element)
{
	var parentUL = element.parentNode.getElementsByTagName('ul')[0];
	if (!parentUL) {
		//Wenn 3 Hierarchie erreicht, dann muss über zwei Ebenen navigiert werden (wegen <label>) 
		parentUL = element.parentNode.parentNode.getElementsByTagName('ul')[0];
	}
	var sublist = parentUL.getElementsByTagName('li');
		
	var found = false; //Wird bei Radios verwendet, damit nur der erste ausgewählt wird.
	for(var i=0; i < sublist.length; ++i)
	{
		var inputElement = sublist[i].getElementsByTagName('input')[0];

		if (inputElement.type == "checkbox" || element.checked == false) {
			inputElement.checked = element.checked;
		} else {
			if (!found) {
				inputElement.checked = element.checked;
				found = true;
			}
		}
	}
	
}


function toggleServiceSubEntries(element, inTransition)
{
	if(inTransition)
	{
		return;	
	}
	var sublist = element.parentNode.getElementsByTagName('ul')[0];
	var transitionDuration = .5;
	if(isMemberOfCssClass(sublist.className, 'invisible'))
	{
		element.onclick = function() { toggleServiceSubEntries(element, true); };
		removeFromCssClass(sublist, 'invisible');
		new Effect.BlindDown(sublist, 
			{duration: transitionDuration,
			 afterFinish: function(obj) { element.onclick = function() { toggleServiceSubEntries(element, false); }; } });
	}
	else
	{
		element.onclick = function() { toggleServiceSubEntries(element, true); };
		new Effect.BlindUp(sublist, 
			{duration: transitionDuration, 
			 afterFinish: function(obj) { addToCssClass(sublist, 'invisible'); element.onclick = function() { toggleServiceSubEntries(element, false); }; }
			});
	}
}



function closeWindow()
{
	window.close();
}

function showRememberedPages()
{
	window.open('merkliste.html', 'merkliste', 'toolbar=no,status=no,scrollbars=no,resizable=yes,location=no,menubar=no,scrollbars=yes,directories=no,width=795,height=560');
	return false;
}


function recommendPage()
{
	//alert('Seite weiterempfehlen');
	return false;
}

function printPage()
{
	//alert('Seite drucken');
	window.print();
	return false;
}


function showWebcamPopup()
{
	window.open('webcam_popup.html', 'merkliste', 'toolbar=no,status=no,scrollbars=no,resizable=yes,location=no,menubar=no,scrollbars=yes,directories=no,width=795,height=560');
	return false;
}


function rememberPage()
{
	//alert('Seite merken');
	return false;
}




function printMap()
{
	enableStyleSheet("printmap");		
	//Alte Content-Hoehe merken und danach zurueckschreiben
	var oldHeight = document.getElementById('content').style.height;
	document.getElementById('content').style.height = "800px";
	print();
	document.getElementById('content').style.height = oldHeight;
	disableStyleSheet("printmap");
}

function enableStyleSheet(title) 
{
    var i, a, main;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
        if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
            a.disabled = true;
            if(a.getAttribute("title") == title) a.disabled = false;
        }
    }
}
function disableStyleSheet(title) 
{
    var i, a, main;
    for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
        if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
            a.disabled = true;
            if(a.getAttribute("title") == title) a.disabled = true;
        }
    }
}

function clickEvent (type, id) {
	if (type == '')
		return enlargeMapWithPoi(this, id);
 	return enlargeMapWithPoi(this, type + '_' + id);
}