/**
 * Starts executing the initializing functions when either the DOM structure of the page has been loaded 
 * ('domready'), or the entire page ('load').
 * 
 * @author CSD <clientsidedevelopers@efocus.nl>
 * @uses Mootools 1.2.4 JavaScript Library
 */
window.addEvents({
	'domready': function() {		
		findExternalLinks();
		setDefaultInputText();
		initPageBrowserCentering();
		initFaqCategories();
		initOpenFaqQuestionByAnchor();
		initAgendaTabs();
		loadRouteMap();
		disposeSubmenuCol();
		
		if ($(document).getElement('.sort_by form')) submitFormOnChangeSelect($(document).getElement('.sort_by form'));
	},
	'load': function() {
		initMenuHover();
		
		if($('geboortedatum')) initDatePicker();
		
		if($('pushbox')) {
			var elPushbox = $('pushbox');
			
			var pb = new Pushbox(elPushbox, {
				viewport: elPushbox.getElement('div.viewport'),
				slides: elPushbox.getElements('ul.slides li'),
				navigation: elPushbox.getElements('ul.nav li'),
				progressBar: elPushbox.getElement('div.progressbar'),
				interval: 4
			});
		}

	}
});


/**
* Change tab content on click event
*
* @author phison do (phison.do[AT]efocus.nl)
* @since 2 mei, 2010
* @return void
*/

function initAgendaTabs() {
	var elTabContainer =  document.getElement('div.tabscontainer');
	if (!elTabContainer) return false;	
	
	var arrAgendaTabLinks = document.getElements('.tabmenu li');
	var arrAgendaTabContent = document.getElements('.tabcontent');	
	
	arrAgendaTabLinks[0].addClass('active');
	
	arrAgendaTabLinks.each(function(elAgendaTabLink, n){
		elAgendaTabLink.addEvent('click', function(event){
			event.stop();
			this.blur();
			
			arrAgendaTabLinks.removeClass('active');
			arrAgendaTabLinks[n].addClass('active');
		
			arrAgendaTabContent.addClass('hidden');
			arrAgendaTabContent[n].removeClass('hidden');
		});
	});
	arrAgendaTabContent.addClass('hidden');
	arrAgendaTabContent[0].removeClass('hidden');	
	
}


/**
 * Opens external links valid in a new window without the target attribute.
 * 
 * @author Mirjam Verloop, <mirjam.verloop@efocus.nl>
 * @since 1.0, 12 feb, 2010
 */
 
function initExternalLinks() {
	var arrExternalLinks = $$('a.external');
	if (arrExternalLinks.length == 0) return false;
	
	arrExternalLinks.each(function(elExternalLink) {
		//elExternalLink.appendText(" (external)");
		elExternalLink.addEvent('click', function(event) {
			event.stop();
			window.open(this.get('href'));
		});
	});
}


/**
 * add class external to external links
 * 
 * @author Mirjam Verloop <mirjam.verloop@efocus.nl>
 */
 
function findExternalLinks () {
	var allExternalLinks = $$('a[href^="http://"]');
	var thisDomain = window.location.host;
	
	allExternalLinks.each(function(thisLink) {
		if (!thisLink.get('href').contains(thisDomain) && !$('recaptcha_whatsthis_btn')) {
			thisLink.addClass('external');			
		}
	});
	initExternalLinks();
}



/**
 * Check if element has no content or has a tag class="hidden", 
 * remove the tag from the DOM.
 *
 * @author Lee Boonstra <lee.boonstra@efocus.nl>
 * @param strClassNameEl the class name of the element to check
 */
 
function removeTagsWhenEmpty(strClassNameEl){
	var elToCheck = $$(strClassNameEl);
 	if(!$defined(elToCheck[0])) return  false;
	
	if(elToCheck[0].getChildren().length < 1 ||
	elToCheck[0].getChildren().get("class") == "hidden"){
		elToCheck[0].dispose();	
	}
}


/**
 * toggles default text in text inputfields
 *
 * @author Lee Boonstra <lee.boonstra@efocus.nl>
 * @return void
 */

function setDefaultInputText() {
	var arrInputElements = $$('input');
	arrInputElements.each(function(el){
		if(el.get("alt")){
			new OverText(el);
		}
	});
}


/**
 * Centers the page browser.
 * 
 * @author Ralph Meeuws <ralph.meeuws@efocus.nl>
 * @copyright eFocus
 */
 
function initPageBrowserCentering() {
	arrPageBrowsers = $$('.tx-pagebrowse');
	if (arrPageBrowsers.length == 0) return;
	
	arrPageBrowsers.each(function(elPageBrowser){
		intPageBrowserWidth = elPageBrowser.getWidth();		
		
		elPageBrowser.setStyles({
			'position': 'relative',
			'left': '50%',
			'width': intPageBrowserWidth,
			'margin-left': -(intPageBrowserWidth / 2)
		});
	});
}


/**
 * Menu Hover, shows arrow if submenu is present
 * 
 * @author Phi Son Do <phison.do@efocus.nl>
 * @since 1.0, 12 mei, 2010
 */

function initMenuHover(){
	var elMenu = $$('ul.mainmenu')[0];
	var elMenuItemsList = elMenu.getElements('ul ul');	
	var arrMenuHasSub = elMenu.getElements('ul');	
	
	arrMenuHasSub.each(function(elMenuHasSub){
		var elMenuItem = elMenuHasSub.getParent().getElement('a');
		elMenuItem.addEvent('mouseenter', function(){elMenuItem.addClass('hassub')});
		elMenuItem.addEvent('mouseleave', function(){elMenuItem.removeClass('hassub')});
	});
		
	elMenuItemsList.each(function(elMenuItemsListInside){
		var elMenuItemsListParent = elMenuItemsListInside.getParent('li');
		var elMenuItemsListParentAnchor = elMenuItemsListParent.getElement('a');
		elMenuItemsListParentAnchor.addClass('arrow');
	});	
	
}

/**
 * set datepicker
 * 
 * @author Lee Boonstra <lee.boonstra@efocus.nl>
 * @since 1.0, 12 mei, 2010
 */
 
function initDatePicker(){
	if (!$('dateEvent')) return false;
	
	MooTools.lang.setLanguage("nl-NL");
	var myDatePicker = new DatePicker('geboortedatum', {
	  	additionalShowLinks:['iconcalendar'],
		format: '%d/%m/%Y'
	});
	
	var strInput = $('geboortedatum').get("value");
	$('dateEvent').addEvent('blur', function(){
		myDatePicker.hide();
	});
}

/**
* puts FAQ categories in an accordion and enables toggling of answers
*
* @author Phi Son Do <phison.do@efocus.nl>
* @since 1.0, 12 mei, 2010
*/

function initFaqCategories() {
	
	var arrFaqCats = $$('ul.faq li');
	if (arrFaqCats.length == 0) { return false; }
	
	arrFaqCats.each(function(elFaqCat) {
		
		elFaqCat.getElement('h3').addEvent('click', function() {
			
			arrFaqCats.removeClass('open');
			elFaqCat.addClass('open');
			
			var arrFaqQuestions = elFaqCat.getElements('dt');
			var arrFaqAnswers = elFaqCat.getElements('dd');
			
			arrFaqQuestions.removeClass('open');
			arrFaqAnswers.removeClass('open');
			
			if (arrFaqQuestions.length != arrFaqAnswers.length) { return false }
			arrFaqQuestions.each(function(elFaqQuestion, index) {
				
				elFaqQuestion.addEvent('click', function() {
					
					arrFaqQuestions.removeClass('open');
					arrFaqQuestions[index].addClass('open');
					
					arrFaqAnswers.removeClass('open');
					arrFaqAnswers[index].addClass('open');
					
				});
				
			});
			
		});
		
	});
}

/**
* Opens an FAQ question by anchor #f...
*
* @author Bas van der Togt <bas.vander.togt[AT]efocus.nl>
* @since 1.0, 23 september, 2010
*/

function initOpenFaqQuestionByAnchor() {

	var arrQuestions = $$('ul.faq li div dl dt');
	var arrAnswers = $$('ul.faq li div dl dd');
	if (arrQuestions.length == 0) { return false; }
	
	arrQuestions.each(function(elQuestion, index) {
				
		questionId = elQuestion.getAttribute('id');
		if (questionId==location.hash) {
			
			elParentLi = elQuestion.getParent('li');
						
			elParentLi.addClass('open');
			arrQuestions[index].addClass('open');
			arrAnswers[index].addClass('open');
		}
		
	});
	
}

/**
 * Loads a map with a custom route
 * 
 * @editor Phi Son Do <phison.do{AT}efocus.nl>
 * @since 1.0, 12 mei, 2010
 */
 
function loadRouteMap() {
	if (!$('routemap')) return;
	
	var elRouteMap = $('routemap');
	var elRouteZip = $('routezip');
	var elRouteBtn = $('routebutton');
	var elRouteDir = $('routedirections');	
	
	var strCompanyName = $('company_name').innerHTML;
	var strCompanyStreet = $('company_street').innerHTML;
	var strCompanyCity = $('company_city').innerHTML;
	var strBalloonContent = '<h4>' + strCompanyName + '</h4>' + '<p>' + strCompanyStreet + '<br />' + strCompanyCity + '</p>';
	var locale = 'nl_NL';

	if (GBrowserIsCompatible()) {
		var map = new GMap2(elRouteMap);
		var geocoder = new GClientGeocoder();
	
		var gdir = new GDirections(map, elRouteDir);
		
		var strAddress = strCompanyStreet + ', ' + strCompanyCity;

		function showAddress(address) {
			geocoder.getLatLng(
				address,
				function(point) {
					if (!point) {
						alert(address + " not found");
					} else {
						map.setCenter(point, 12);
												
						var marker = new GMarker(point);
						map.addOverlay(marker);

				        map.setUIToDefault();
						marker.openInfoWindowHtml(strBalloonContent);
						
						GEvent.addListener(marker, "click", function() {
							marker.openInfoWindowHtml(strBalloonContent);
						});			
					}
				}
			);
		}		
		showAddress(strAddress);
	}
		
	elRouteBtn.addEvent('click', function(){
	  	strRouteZip = elRouteZip.value;
		gdir.load('from: ' + strRouteZip + ' to: ' + strAddress, { 'locale': locale });
	});
	
	$('routeform').addEvent('submit', function(){
	  	strRouteZip = elRouteZip.value;
		gdir.load('from: ' + strRouteZip + ' to: ' + strAddress, { 'locale': locale });
	});
	
	elRouteZip.addEvent('keydown', function(event){
		if (event.key == 'enter') {
	  		strRouteZip = elRouteZip.value;
			gdir.load('from: ' + strRouteZip + ' to: ' + strAddress, { 'locale': locale });	
		}
	});

}

/*
 * Submits form when changing select
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @author Phi Son Do <phison.do[AT]efocus.nl>
 * @since 1.0, 18 may, 2010
 */

function submitFormOnChangeSelect(elForm) {
	if (!$defined(elForm)) return false;
	
	elForm.getElements('select').addEvent('change', function(){	
		this.getElements('option').each(function(elOption){
			if (elOption.get('selected')) window.location.replace(elOption.get('value'));
		});
	});
}


/**
 * Disposes Submenu column if no submenu present
 * 
 * @author Phi Son Do, <phison.do@efocus.nl>
 * @since 1.0, 1 june, 2010
 */
 
function disposeSubmenuCol() {
	var elSubmenu = $$('div.submenu')[0];	
	if (elSubmenu) {
		var arrMenuList = elSubmenu.getElements('ul li');
		if(arrMenuList == 0){
			elSubmenu.getParent().setStyle('background', 'none');
		}
	};
};
