$(document).ready(function() {
	// show submenus
	$('div#accordion div.header div.submenu').show();
	// init meta
	$.meta.setType('class');
	// init accordion at startup
	if($('#accordion').length > 0) {
		initAccordion();
		// handle window resize event to replace accordion
		$(window).resize(function() {
			refreshPanelHeight();
		});
	}
	// init tooltips
	initTooltips();
	// handle validation
	initFormValidation();
});

// init accordion
function initAccordion() {
	// modify body to hide overflow
	$('body').css('overflow', 'hidden');
	// calculate current window height
	refreshPanelHeight();
	// remove active class
	$('div.header').removeClass('active');
	jQuery('#accordion').Accordion({
		showSpeed: 'fast',
		hideSpeed: 'fast',
		active: '#header-unternehmen',
    	selectedClass: 'active',
		header: 'div.header'
	});
	// handle submenu
	$('div#accordion div.header div.submenu').hide();
	$('div#accordion div.header div.submenu ul').hide();
	$('div#accordion div.header.active').click(function() {
		// toggle menu
		var subMenu = $(this).find('ul');
		$(subMenu).slideToggle('fast');
		$('div.submenu', this).toggleClass('open');
	});
	// handle internal links
	initInternalLinkHandler();
	// handle sub navigation links
	$('div#accordion div.header div.submenu ul li a:not(.headline, .external)').click(function() {	
		var area = $(this).data().area;
		var subArea = $(this).data().sub;
		handleSubnavigation(area, subArea, false);
		return false;
	});
	// handle change event of accordion
	$('#accordion').change(function() {
		$('div#accordion div.header div.submenu').hide();
		$('div#accordion div.header.active div.submenu').show();
		$('div#accordion div.header.active div.submenu ul').hide();
		$('div.submenu').removeClass('open');
		// re-init submenu toggler
		$('div#accordion div.header.active').unbind();
		$('div#accordion div.header.active').click(function() {
			// toggle menu
			var subMenu = $(this).find('ul');
			$(subMenu).slideToggle('fast');
			$(this).find('div.submenu').toggleClass('open');
		});
	});	
	// fix weird ie positioning error
	if($.browser.msie && $.browser.version.substr(0, 1) < 8) {
		$('div#accordion div.header div.submenu').css('margin-left', '10px');
	}
	// init
	$('#accordion').change();
}

function initFormValidation() {
	
	// validate service form
	var validateServiceForm = jQuery('form#service-form').validate({
		debug: true,
		rules: {
			company: {
				required: true
			},
			contactperson: {
				required: true
			},
			phone: {
				required: true
			},
			email: {
				required: true,
				email: true
			}
		},
		submitHandler: function(form) {
			$('form#service-form input.ajax').val('1');
			var options = {
				target: '#formresult',
				success: function(data) {
					$('form#service-form').fadeOut();
				}
			};
			jQuery(form).ajaxSubmit(options);
		}
	});
	
	// validate application form
	var validateApplicationForm = jQuery('form#application-form').validate({
		debug: true,
		rules: {
			name: {
				required: true
			},
			phone: {
				required: true
			}
		},
		submitHandler: function(form) {
			$('form#application-form input.ajax').val('1');
			var options = {
				target: '#application-formresult',
				success: function(data) {
					$('form#application-form').fadeOut();
				}
			};
			jQuery(form).ajaxSubmit(options);
		}
	});
	
	// validate feedback form
	var validateFeedbackForm = jQuery('form#feedback-form').validate({
		debug: true,
		rules: {
			total: {
				required: true
			},
			structure: {
				required: true
			},
			information: {
				required: true
			}
		},
		errorContainer: $('#feedback-formresult'),
		errorLabelContainer: $('#feedback-formresult'),
		onsubmit: true,
		wrapper: 'p',
		submitHandler: function(form) {
			$('form#feedback-form input.ajax').val('1');
			var options = {
				target: '#feedback-result',
				success: function(data) {
					$('form#feedback-form').fadeOut();
				}
			};
			jQuery(form).ajaxSubmit(options);
		}
	});
	
}

function initInternalLinkHandler() {
	$('a.internal').unbind();
	$('a.internal').click(function() {
		handleInternalLink(this);
		return false;
	});
}

function initTooltips() {
	// init tooltips
	$('.image-item img.tooltip').tooltip({ 
	    track: true, 
	    delay: 0, 
	    showURL: false, 
	    opacity: 1, 
	    fixPNG: true, 
	    showBody: " - ", 
	    extraClass: "pretty fancy", 
	    top: -15, 
	    left: 5 
	});
}

// handle internal links
function handleInternalLink(link) {
	var newArea = $(link).data().area;					
	var newSubArea = $(link).data().sub;
	var selector = 'div.header#header-' + newArea;
	// select new tab
	jQuery('#accordion').activate(selector);
	// handle submenu
	handleSubnavigation(newArea, newSubArea, true);
	$('#accordion').change();
	return true;
}

// handle subnavigation
function handleSubnavigation(area, subArea, internal) {
	// get current submenu
	var subMenu = 'div#header-' + area + ' div.submenu ul';
	$(subMenu).children('li').children('a').removeClass('active');
	// get current link
	var currentLink = null;
	$(subMenu).children('li').children('a').each(function() {
		if($(this).data().sub == subArea) {
			currentLink = this;
		}
	});
	$(currentLink).addClass('active');
	var newName = $(currentLink).html();
	var newLocation = $(currentLink).attr('href');
	var targetPanel = '#panel-' + area + ' div.panel-inner';
	$(targetPanel).fadeOut('fast', function() {
		$(targetPanel).load(newLocation, {ajax: '1'}, function() {
			// toggle menu
			if(!internal) {
				$(subMenu).slideToggle('fast', function() {
					// show new content
					$(targetPanel).fadeIn('fast');
					// rename tab
					$('div#accordion div#header-' + area + ' div.submenu h3 span span').html(newName);
				});
			} else {
				// show new content
				$(targetPanel).fadeIn('fast');
				// rename tab
				$('div#accordion div#header-' + area + ' div.submenu h3 span span').html(newName);
			}
			if(!internal) {
				$(subMenu).parent('div').toggleClass('open');
			}
			// re-init components
			initComponents();
		});
	});
	return true;
}

// refresh panel height after resize
function refreshPanelHeight() {
	var currentHeight = calculateDocumentHeight();
	$('div.panel').height(currentHeight);
}

// calculate current height of the document
function calculateDocumentHeight() {
	var numberPanels = $('div.header').length;
	var heightOffset = (numberPanels * 22) + $('div#header').height();
	return $(window).innerHeight() - heightOffset;
}

// init all components (for ajax use)
function initComponents() {
	initTooltips();
	$('a.thickbox').unbind();
	tb_init('a.thickbox');
	initInternalLinkHandler();
	initFormValidation();
}

