jQuery(function(){
	jQuery('#sectionnav > li ul').css('opacity', 0);
	jQuery('#sectionnav > li').hover(
		function(){
			var self = jQuery(this);
			self.find('ul').stop().animate({
				'top': -self.find('ul').height(),
				'opacity': 1
			}, 500);
		},
		function(){
			var self = jQuery(this);
			self.find('ul').stop().animate({
				'top': 0,
				'opacity': 0
			}, 500);
		}
	);
	
	if ( !jQuery.browser.msie || (jQuery.browser.msie && jQuery.browser.version > 6) ) {
		jQuery('select').each(function(){
			var self = jQuery(this);
			var curSelection = self.find('option:selected');
			var options = self.children('option');
			self.after('<div class="select"></div>');
			var select = self.next('.select');
			
			select.append('<span class="selected">'+curSelection.text()+'</span><span class="trigger"></span>');
			select.append('<ul></ul>');
			
			options.each(function(){
				var option = jQuery(this);
				var isSelected = '';
				( option.is(':selected') ) ? isSelected = ' class="selected"' : isSelected;
				select.find('ul').append('<li'+isSelected+'>'+option.text()+'</li>');
			});
			
			self.hide();
			
			var selected = select.children('span.selected');
			var trigger = select.children('span.selected, span.trigger');
			var optionsList = select.children('ul');
			var options = optionsList.children('li');
			
			var selectionPaddings = parseFloat(selected.css('padding-left')) + parseFloat(selected.css('padding-right'));
			var selectionWidth = selected.width();
			var maxSelectWidth = parseFloat(select.css('max-width'));
			var triggerWidth = select.children('span.trigger').width();
			var listWidth = optionsList.outerWidth();
			
			if ( listWidth > (maxSelectWidth - triggerWidth) || !select.hasClass('dynamic') ) {
				listSize = maxSelectWidth - triggerWidth;
				selectedSize = listSize - selectionPaddings;
				selectSize = maxSelectWidth;
			} else {
				listSize = listWidth;
				selectedSize = listSize - selectionPaddings;
				selectSize = listWidth + triggerWidth;
			}
			
			selected.css('width', selectedSize);
			optionsList.css('width', selectSize);
			select.css('width', selectSize);
			
			trigger.bind({
				'click': function(){
					(selected.hasClass('triggered')) ? select.blur() : select.focus();
					selected.toggleClass('triggered');
					optionsList.toggle();
					select.toggleClass('show');
				}
			});
			
			select.bind({
				'clickoutside': function(){
					select.blur();
					selected.removeClass('triggered');
					optionsList.hide();
					select.removeClass('show');
				}
			});
			
			options.each(function(i, el){
				var e = jQuery(this);
				e.bind({
					'click': function(){
						optionsList.children('.selected').removeClass('selected');
						e.addClass('selected');
						selected.text(e.text());
						selected.removeClass('triggered');
						optionsList.hide();
						self.find('option:eq('+e.index()+')').attr('selected', true);
						self.trigger('change');
						self.find('option:eq('+e.index()+')').trigger('click');
					}
				});
			});
		});
	}
	
	jQuery('input[id^="rel-"]').each(function(){
		var self = jQuery('#' + jQuery(this).attr('id').substring(4));
		var related = jQuery(this);
		if ( self.is('input:radio') || self.is('input:checkbox') ) {
			var group = jQuery('[name="'+self.attr('name')+'"]');
		} else if ( self.is('option') ) {
			var group = self.parent().children('option');
		}
		related.data('default', related.val());
		related.addClass('prefilled');
		group.bind({
			'click': function(){
				var item = jQuery(this);
				if(jQuery('#rel-' + item.attr('id')).length){
					related.removeAttr('disabled');
					related.focus();
				} else {
					related.attr('disabled', true);
				}
			}
		});
		related.bind({
			'focus': function(){
				if ( !jQuery(this).is(':disabled') ) {
					if ( jQuery(this).val() == jQuery(this).data('default') ) {
						jQuery(this).val('');
						jQuery(this).removeClass('prefilled');
					}
				}
			},
			'blur': function(){
				if ( !jQuery(this).is(':disabled') ) {
					if ( jQuery(this).val() == '' ) {
						jQuery(this).val(jQuery(this).data('default'));
						jQuery(this).addClass('prefilled');
					}
				}
			}
		});
	});
	
	jQuery('.addfields button').bind({
		'click': function(e){
			e.preventDefault();
			
			var self = jQuery(this);
			var relatedContainer = jQuery('input[id^='+self.attr('id')+']').parent();
			var related = [];
			relatedContainer.each(function(i, el){
				var t = jQuery(this);
				if ( !t.hasClass('radiogroup') ) {
					related.push(t.children(':last-child')[0]);
				} else {
					related.push(t);
				}
			});
			var currentCount = jQuery(related[0]).attr('id').match(/[0-9]/);
			if (currentCount[0] == 9) return false;
			
			var add = jQuery(related).clone();
			
			var countUp = function(k,a,b){
				return Number(k)+1;
			}
			
			add.each(function(){
				var item = jQuery(this);
				if ( item.is('div') ) {
					item = item.children('input');
				}
				item.attr('id', item.attr('id').replace(/[0-9]/, countUp));
				item.attr('name', item.attr('name').replace(/[0-9]/, countUp));
			});
			
			jQuery(related).each(function(i, el){
				var t = jQuery(this);
				t.after(add[i]);
			});
			
		}
	});
	
	jQuery('form fieldset.hideable').each(function(){
		var self = jQuery(this);
		self.hide();
		self.children('div, h3').css({
			'opacity': 0
		});
		self.after('<div class="trigger"><a href="javascript:void(0);">+ Öffnen</a></div>');
		self.next('.trigger').children('a').bind({
			'click': function(){
				var fldSet = jQuery(this).parent().prev();
				var trigger = jQuery(this).parent('.trigger');
				if ( !fldSet.is(':visible') ) {
					fldSet.addClass('visible');
					trigger.css('border-top', '1px solid #c5cccf');
					jQuery(this).text('- Schließen');
					fldSet.slideDown(500, function(){
						jQuery(this).children('div, h3').each(function(){
							jQuery(this).animate({
								'opacity': 1
							}, 500);
						});
					});
				} else {
					jQuery(this).text('+ Öffnen');
					fldSet.children('div, h3').each(function(){
						jQuery(this).animate({
							'opacity': 0
						}, 500, function(){
							jQuery(this).parent().slideUp(500, function(){
								fldSet.removeClass('visible');
								trigger.css('border-top', '0 none');
							});
						});
					});
				}
			}
		});
	});
	
	jQuery('.toggle').each(function(){
		var self = jQuery(this);
		var trigger = self.prev();
		self.hide();
		trigger
			.prepend('<span class="marker">+ </span>')
			.addClass('trigger closed')
			.bind({
				'click': function(){
					var marker = jQuery('.marker', trigger);
					if ( trigger.hasClass('closed') ) {
						marker.text('- ');
					} else {
						marker.text('+ ');
					}
					trigger.toggleClass('closed');
					self.slideToggle();
				},
				'mouseover': function(){
					jQuery(this).addClass('hover');
				},
				'mouseout': function(){
					jQuery(this).removeClass('hover');
				}
			});
	});
	
	jQuery('form').validateEvents();
	jQuery('form').bind({
		'submit': function(){
			var validForm = jQuery(this).validate();
			
			if ( !validForm ) {
				var formPos = jQuery('form').offset();
				jQuery('html').animate({'scrollTop': formPos.top}, 750);
			}
			
			return validForm;
		}
	});
	
	if ( jQuery('.lightbox').length > 0 ) {
		jQuery('.lightbox').fancybox({
			'padding': 40,
			'margin': 15,
			'titleShow': false
		});
	}
	
	jQuery('#sectionnav > li').bind({
		'click': function(){
			var target = jQuery(this).children('a').attr('href');
			location.href = target;
		}
	});
});
