function hideChildNavigation(){
	var list_element = this;
	var anchor = list_element.getElement('a');
	var child_list = list_element.getElement('ul');
	var parent_list = child_list.getParent('ul');
	var parent_div = child_list.getParent('.subnav_bottom');
	var parent_size = parent_list.getSize();
	if(parent_list.className.indexOf('rex-navi1') > -1){
		// do nothing
	}else{
		anchor.setStyles(
			{
				'width': 'auto',
				'float': 'none'
			}
		);
		child_list.setStyles(
			{
				'width': 'auto',
				'float': 'none'
			}
		);
	}
	child_list.setStyle('display', 'none');
	parent_div.setStyle('height', 0);
	parent_div.setStyle('display', 'none');
}

function showChildNavigation(){
	var list_element = this;
	var anchor = list_element.getElement('a');
	var child_list = list_element.getElement('ul');
	var parent_list = child_list.getParent('ul');
	var parent_div = child_list.getParent('.subnav_bottom');
	var parent_size = parent_list.getSize();
	if(parent_list.className.indexOf('rex-navi1') > -1){
		// do nothing
	}else{
		list_element.setStyle('width', (2.5*parent_size.x)); // normalerweise nur 2x, allerdings floatet es dann nicht mehr
		anchor.setStyles(
			{
				'width': parent_size.x - anchor.getStyle('padding-left').toInt() - anchor.getStyle('padding-right').toInt(),
				'float': 'left'
			}
		);
		child_list.setStyles(
			{
				'width': parent_size.x,
				'float': 'left'
			}
		);
	}
	child_list.setStyle('display', 'block');
	parent_div.setStyle('display', 'block');
	var child_list_size = child_list.getSize();
	parent_div.setStyle('height', child_list_size.y);
}

function initNavigation(){
	var navigation = $('nav');
	var main_lists = navigation.getElements('.rex-navi1');
	main_lists.each(
		function(list){
			var list_elements = list.getElements('li'); // Children
			list_elements.each(
				function(list_element){
					var child_lists = list_element.getElements('ul');
					if(child_lists.length > 0){
						list_element.addEvents(
							{
								'mouseenter': showChildNavigation.bind(list_element),
								'mouseleave': hideChildNavigation.bind(list_element)
							}
						);
					}
				}
			);
		}
	);
}

function changeImage(){
	var anchor = this;
	var galleryId = anchor.getParent('li').get('class');
	if(galleryId.indexOf('last') > 0){
		galleryId = galleryId.split(' ')[0];
	}
	var numberNavigation = anchor.getParent('ul');
	var listElements = numberNavigation.getChildren('li');
	listElements.each(
		function(element){
			var link = element.getElement('a');
			if(link){
				link.className = '';
			}
		}
	);
	$(galleryId).get('morph').start( { 'opacity': 0 } ).chain(
		function(){
			var filename = anchor.get('rel').split('#')[0];
			var copyright = anchor.get('rel').split('#')[1];
			$(galleryId).set('src',filename);
			$(galleryId).set('title',copyright);
			var imagePreload = new Asset.images(filename,
				{
					onComplete: function(){
						$(galleryId).set('index', (anchor.get('name')*1-1));
						$(galleryId).get('morph').start( { 'opacity': 1 } );
						anchor.className = 'active';
					}
				}
			);			
		}
	);
	return false;
}

function showNextImage(){
	var image = this;
	var currentGalleryImage = image.get('index');
	currentGalleryImage++;
	var parentDiv = image.getParent('div.gallery');
	var numberNavigation = parentDiv.getElement('.numberNavigation');
	var anchors = numberNavigation.getElements('a');
	if(anchors[currentGalleryImage]){
		var fx = changeImage.bind(anchors[currentGalleryImage]);
		fx.delay(1);
	}else{
		currentGalleryImage = 0;
		var fx = changeImage.bind(anchors[0]);
		fx.delay(1);
	}
	image.set('index', currentGalleryImage);
	return false;
}

function showPreviousImage(){
	var image = this;
	var currentGalleryImage = image.get('index');
	currentGalleryImage--;
	var parentDiv = image.getParent('div.gallery');
	var numberNavigation = parentDiv.getElement('.numberNavigation');
	var anchors = numberNavigation.getElements('a');
	if(anchors[currentGalleryImage]){
		var fx = changeImage.bind(anchors[currentGalleryImage]);
		fx.delay(1);
	}else{
		currentGalleryImage = anchors.length - 1;
		var fx = changeImage.bind(anchors[currentGalleryImage]);
		fx.delay(1);
	}
	image.set('index', currentGalleryImage);
	return false;
}

function initGalleryFunctions(){
	if($$('.numberNavigation').length > 0){
		var numberNavigation = $$('.numberNavigation');
		var num_numberNavigation = numberNavigation.length;
		var anchor;
		var elements;
		var num_elements;
		var parentDiv;
		var image;
		var previous_button;
		var next_button;
		for(var i=0;i<num_numberNavigation;i++){
			parentDiv = numberNavigation[i].getParent('div.gallery');
			image = parentDiv.getElement('img');
			elements = numberNavigation[i].getChildren('li.'+image.get('id'));		
			num_elements = elements.length;
			for(var j=0;j<num_elements;j++){
				anchor = elements[j].getElement('a');
				if(anchor){
					anchor.addEvent('click',changeImage.bind(anchor));
				}
			}
			image.set('index', image.get('alt')); // (elements.length - 1)
			previous_button = parentDiv.getElement('.previous_button').getElement('a');
			next_button = parentDiv.getElement('.next_button').getElement('a');
			if(elements.length > 0){
				image.addEvent('click', showNextImage.bind(image));
				previous_button.addEvent('click', showPreviousImage.bind(image));
				next_button.addEvent('click', showNextImage.bind(image));
			}
		}
	}
}

function initAll(){
	initNavigation();
	initGalleryFunctions();
}

window.addEvent('domready',
	function(){
		initAll();
	}
);
