/**
 * @author Edenspiekermann Amsterdam
 * @description	DEFAULT JAVASCRIPT Functions
 * 
 */

/* GLOBALS */
if (staticRootPath === undefined) { var staticRootPath = '..';  }

/* load Javascript Enabled specific + sIFR heading styles */
$('<link rel="stylesheet" href="'+ staticRootPath +'/style/js-enabled.css" type="text/css" />').appendTo($('head'));


/*
 * configuration
 * 
 */
config = {
	
	easing			 : 	'easeOutQuad',						// easing method
	onHoverClassName :	'hover',							// classname added on mouseOver event
	debug			 : 	false,								// tracing debug information (true/false)
	maxListItems	 :	4,									// maximum number of visible list items in expandable lists
	expandableText	 : 'meer',								// linkable text to expand list
	inflateText	 	 : 'minder'								// linkable text to inflate list
}	


/* at DOCUMENT READY initialize knaw object */
$(document).ready(function() {
	knaw.init();
});


/* knaw object, contains all knaw default functionality */

knaw = {
	
	defaults: {
		
		easing: config.easing,
		
		setEasing: function()
		{			
			jQuery.easing.def = knaw.defaults.easing;
		},
		
		scrollToTop: function()
		{
			$('a[href*="#top"]').click(function()
				{
					$.scrollTo($('#start'), 300);
					
					return false;
				}
			);
		},
		
		openExternalLink: function()
		{
			$('a[rel="nofollow"]').click(function()
				{
					window.open($(this).attr('href'));
					return false;	
				}
			);
		},
		
		hover: function(element, className)
		{
			if (className==null) className = config.onHoverClassName;
			$(element).hover(
				function()
				{
					$(this).addClass(className);
				},
				function (){
					$(this).removeClass(className);
				}
			);
		},			
		
		holdFieldValues: function()
		{
			$('input:text').each(function(){
				$(this).addClass('no-focus');
				var initValue = $(this).val();			
				
				if ( $(this).hasClass('label-value') ) {				
					var label = $(this).parent().find('label');
					$(label).addClass('text-only');
					$(this).val($(label).html());
					initValue = $(label).html();
				}
				
				if(initValue == '' || $(this).hasClass('hold-value') ) return;
				// onFocus remove default value + remove class no-focus
				$(this).focus(function(){
					$(this).removeClass('no-focus')
					if($(this).val() == initValue) $(this).val('');
						
				})
				// onBlur replace empty value with default value + add class no-focus
				$(this).blur(function(){				
					if ($(this).val() == '') {
						$(this).val(initValue);
						$(this).addClass('no-focus');
					}
				})
			});
			$('textarea').each(function(){
				$(this).addClass('no-focus');
				var initValue = $(this).val();			
				if ( $(this).hasClass('label-value') ) {				
					var label = $(this).parent().find('label');
					$(label).addClass('text-only');				
					$(this).val($(label).html());
					initValue = $(label).html();
				}
				
				if(initValue == '' || $(this).hasClass('hold-value') ) return;
				// onFocus remove default value + remove class no-focus
				$(this).focus(function(){
					$(this).removeClass('no-focus')
					if($(this).val() == initValue) $(this).val('');
						
				})
				// onBlur replace empty value with default value + add class no-focus
				$(this).blur(function(){				
					if ($(this).val() == '') {
						$(this).val(initValue);
						$(this).addClass('no-focus');
					}
				})
			});
		},
		
		toggleList: function(targetClassName)
		{
			if (config.debug) alert( 'found items: ' + $('.'+targetClassName).length );			
		
			$('ul.'+targetClassName).each(function()
				{
					if ($(this).children('li').length < config.maxListItems ) return; 					
					$(this).addClass('has-more');
					$(this).children('li').each(function()
						{
							if ( $(this).parent('ul').children('li').index(this) > config.maxListItems-1 ) {
								$(this).addClass('hide');								
							}
						}
					);
					$('<li class="item-link"><a href="#" class="link-style01 toggle-expand">'+config.expandableText+'</a></li>').appendTo($(this));
						
				}
			);
			
			$('ul.'+targetClassName+' a.toggle-expand').click(function()
				{
					if (!$(this).parent().parent('ul.'+targetClassName).hasClass('open')) {
						// switch to open
						$(this).parent().parent('ul.'+targetClassName).addClass('open');
						$(this).parent().parent('ul.'+targetClassName).children('li').each(
							function()
							{								
								$(this).removeClass('hide');								
							}
						);
						$(this).html(config.inflateText);						
					} 
					else 
					{
						// switch to hide
						$(this).parent().parent('ul.'+targetClassName).removeClass('open');
						$(this).parent().parent('ul.'+targetClassName).children('li').each(function()
							{
								if ( $(this).parent('ul.'+targetClassName).children('li').index(this) > config.maxListItems-1 ) {
									if ($(this).hasClass('item-link') ) return;
									$(this).addClass('hide');								
								}
							}
						);
						$(this).html(config.expandableText);
					}
					
					return false;	
				}
			);

			
			
		},
		
		enableButtonHover: function() 
		{
			$('input[type="button"], input[type="submit"]').each(function()
				{
					knaw.defaults.hover($(this))	
				}
			);	
		},
		
		styleSelectBox: function()
		{
			
			if ($.browser.msie && $.browser.version=="6.0") return;
			
			if ($.browser.msie && $.browser.version=="7.0") {
				$('select.select-month, select.select-year').parent('div.row').addClass('special-row');	// prevent invisible overflow		
				$("select.select-month, select.select-year").selectbox({listboxMaxSize: '30', animationSpeed: 'fast'});
				return;
			}
			
			$('select.selectbox, select.select-month, select.select-year').parent('div.row').addClass('special-row');	// prevent invisible overflow			
			$("select.selectbox, select.select-month, select.select-year").selectbox({listboxMaxSize: '30', animationSpeed: 'fast'});
			
		}
		
	},
	
	init: function()
	{
		knaw.defaults.holdFieldValues();
		knaw.defaults.scrollToTop();
		knaw.defaults.openExternalLink();
		knaw.defaults.enableButtonHover();
		knaw.defaults.styleSelectBox();
		knaw.defaults.toggleList('expandable');
		
		
		if (knaw.intranet != null) knaw.intranet.init();
	},
	
	/* INTRANET specific functionality */
	intranet: {
		
		init: function()
		{
			var intranet = knaw.intranet;									// shortcut to knaw.intranet object
			
			knaw.defaults.hover( $('div#Navigation ul#SiteNav > li') );
			intranet.addShadowContainer();
			intranet.checkFont();
			intranet.tabsNav();
			intranet.toggleMediaBox();
			intranet.showToolTip();	
		},
		addShadowContainer: function()
		{
			$('div#PageContainer').wrap($('<div id="ShadowContainer"></div>'))
		},
		checkFont: function()
		{
			detect = new Detector();
			var hasCambria = detect.test('Cambria');
			var hasCorbel = detect.test('Corbel');
			var isFirefoxWindows = $.browser.mozilla && $.client.os == 'Windows';
			
			$('link[@rel*=style][title]').each(function(i)
			{
				this.disabled = true;
				if (hasCambria && hasCorbel && !isFirefoxWindows) {
					if (config.debug) alert('switch to Alternate Stylesheet');
					if ($(this).attr('title') == 'altfonts') this.disabled = false;	
				}
				
			});
				
			
		},
		tabsNav: function()
		{
			// only do this when there is a classname 'on' on the tabs-nav div
			if ( $('.tab-navigation').hasClass('on') ) {
				
				// hide h2 headers in tab-content-blocks
				$('.tab-content h2').addClass('text-only')

				// get id name of active item
				var activeID = $('.tab-navigation .active').attr('id');
				// adjust name to get content id
				var activeTabContent = activeID.replace("tn-","")
				// add class hide to other tab content divs
				$('.tab-content').not('#'+activeTabContent).addClass('hide');
				// add toggle to nav links
				$('.tab-navigation a').click(function() {
					$('.tab-navigation .active').removeClass('active')
					$(this).parent().addClass('active')
					var thisID = $(this).parent().attr('id');
					var newActiveTabContent = thisID.replace("tn-","")
					$('#'+newActiveTabContent).removeClass('hide')
					$('.tab-content').not('#'+newActiveTabContent).addClass('hide');
					return false;
				});
			
			} else {
				return false;
			}
			// end if
		},
		toggleMediaBox: function()
		{
			// set max number of media items to show
			var maxMediaItems = 3;
			$('.media-block.hasmore').each(function() {
				var numMediaItems = $(this).find('a.media').length;
				if (numMediaItems > maxMediaItems) { showMoreLink = "yes"; } else { return true;}
				// count is 0
				itemcount = 0;
				$(this).find('a.media').each(function() {
					itemcount++;
					//alert(itemcount);
					if (itemcount > maxMediaItems) {
						$(this).parent().addClass('hide')
					}
				});
				// show toon alles link
				if (showMoreLink == "yes") {
					$('<a href="#" class="media-toggle showmore">Toon alles +</a></li>').appendTo($(this));
				} else { return false;}
				
			});
			// toggle link
			$('.media-toggle').each(function() {
				$(this).toggle(function() {
					// unhide
					$(this).parent().find('.hide').addClass('parked');					
					$(this).parent().find('.hide').removeClass('hide');
					// change text of toggle link
					$(this).text('Toon minder -');			
				},
				function() {
					// hide 
					$(this).parent().find('.hide').removeClass('parked');
					$(this).parent().find('.parked').addClass('hide');
					$(this).text('Toon alles +');					
				});
			});
		},
		showToolTip: function()
		{
			// only do this when there are elements with classname 'tooltip' on the page
			// otherwise this will generate an error message.
			var numToolTips = $('a.tooltip').length;
			if (numToolTips > 0) {
				$('a.tooltip').tooltip({
					showURL: false,
					fixPNG: true
				});
			} else {
				return true;
			}
		}
	}
	
}

