﻿window.addEvents({
	'domready': function() {
		setClassExternalLinks();
		setSubmitOnEnter(document.getElements('fieldset.quick_search'));
		setSubmitOnChange(document.getElements('div.side_filter'));
		initAccordion(document.getElements('ul.sessions_upcoming div.session_toggler'), document.getElements('ul.sessions_upcoming div.session_details'), true);
		initAccordion(document.getElements('ul.sessions_past div.session_toggler'), document.getElements('ul.sessions_past div.session_details'), false);
		initAccordion(document.getElements('div.lifestream_blogs ul div.blog_toggler'), document.getElements('div.lifestream_blogs ul div.blog_details'), true);
		initAccordionDirect(document.getElements('ul.phases div.phase_toggler'), document.getElements('ul.phases div.phase_more'));
		initCheckboxes();
		initSideBarNavigation();
		initPhotoTooltips($(document).getElement('.who_collaborated'));
		initPhotoTooltips($(document).getElement('.colleagues'));
		initPhotoTooltips($(document).getElement('.teaser_letsintroduce'));
		initTooltips($(document).getElements('div.container_phases dl.details a'));
		startPushbox();
		initDirectionsButton();
		initLocationForm();
		initCarouselNavigation(document.getElements('div.lifestream_slideshare ul.carousel_slides li'), document.getElement('div.lifestream_slideshare a.next'), document.getElement('div.lifestream_slideshare a.prev'), document.getElement('div.lifestream_slideshare div.carousel_viewport'));
		initCarouselNavigation(document.getElements('div.lifestream_youtube ul.carousel_slides li'), document.getElement('div.lifestream_youtube a.next'), document.getElement('div.lifestream_youtube a.prev'), document.getElement('div.lifestream_youtube div.carousel_viewport'));
		alignSitemapAsColumns();
		initScrollTo();
	},
	'load': function() {
		setClientsOverviewItemHeight();
		setPortfolioOverviewItemHeight();
		showMoreOverview($(document).getElement('div.portfolio_overview_container'), 9); 
		showMoreOverview($(document).getElement('div.clients_overview_container'), 9); 
		setEqualHeight($$('div.footer_sitemap div.container > ul > li'));
		loadEmployeeTooltips();
		loadWhatWeDoInteraction();
		initUrlLocationSlider();
		loadPortfolioDetailTabs();
	}
});

/**
* initializes url location to open active slide
*
* @author Phi Son Do <phison.do{AT}efocus.nl>
* @since 1, 16 aug 2011
* @return void
*/

function initUrlLocationSlider(){
	var elWhatWeDoContainer = $(document).getElement('div.whatwedo_container');
	if (!$defined(elWhatWeDoContainer)) return false;
	
	var currentUrl = location.href;
	var locationUrl = currentUrl.split('=').getLast();	
	
	var elWhatWeDoTabsHolder = elWhatWeDoContainer.getElement('div.whatwedo_tabs_holder');
	var arrWhatWeDoTabs = elWhatWeDoContainer.getElements('ul.whatwedo_tabs > li');
	var elWhatWeDoTabArrow = elWhatWeDoContainer.getElement('div.whatwedo_tab_arrow');
	var arrWhatWeDoCases = elWhatWeDoContainer.getElements('ul.whatwedo_cases > li');
	var elWhatWeDoPanelHolder = elWhatWeDoContainer.getElement('ul.whatwedo_panels');

	var elAll = arrWhatWeDoTabs[0];
	var elUtrecht = arrWhatWeDoTabs[1];
	var elAmsterdam = arrWhatWeDoTabs[2];
	var elAmersfoort = arrWhatWeDoTabs[3];

	var elAllCase = arrWhatWeDoCases[0];
	var elUtrechtCase = arrWhatWeDoCases[1];
	var elAmsterdamCase = arrWhatWeDoCases[2];
	var elAmersfoortCase = arrWhatWeDoCases[3];

	arrWhatWeDoTabs.each(function(tabListItem){
		tabListItem.removeClass('active');
		var urlText = tabListItem.get('text');
		
		if(locationUrl == urlText){
			tabListItem.addClass('active');			
			var intTabArrowOffsetX = 22;
			var intTabArrowPosX = tabListItem.getPosition(elWhatWeDoTabsHolder).x + intTabArrowOffsetX;
			elWhatWeDoTabArrow.setStyle('left', intTabArrowPosX);

			if (locationUrl == elAll.get('text')) {
			    elWhatWeDoPanelHolder.setStyle('left', '0');
			    elAllCase.setStyle('height', 'auto');
			    elUtrechtCase.setStyle('height', '0');
			    elAmsterdamCase.setStyle('height', '0');
			    elAmersfoortCase.setStyle('height', '0');
			    return false;
			}
			if(locationUrl == elUtrecht.get('text')){
			    elWhatWeDoPanelHolder.setStyle('left', '-770px');
			    elAllCase.setStyle('height', '0');
				elUtrechtCase.setStyle('height', 'auto');
				elAmsterdamCase.setStyle('height', '0');
				elAmersfoortCase.setStyle('height', '0');
				return false;
			}
			if(locationUrl == elAmsterdam.get('text')){
			    elWhatWeDoPanelHolder.setStyle('left', '-1540px');
			    elAllCase.setStyle('height', '0');
				elUtrechtCase.setStyle('height', '0');
				elAmsterdamCase.setStyle('height', 'auto');
				elAmersfoortCase.setStyle('height', '0');
				return false;
			}
			if(locationUrl == elAmersfoort.get('text')){
			    elWhatWeDoPanelHolder.setStyle('left', '-2310px');
			    elAllCase.setStyle('height', '0');
				elUtrechtCase.setStyle('height', '0');
				elAmsterdamCase.setStyle('height', '0');
				elAmersfoortCase.setStyle('height', 'auto');
				return false;
			}			
		}
	});
}


/**
* initializes smooth scrolling in the sidebar navigation
*
* @author Lowen <lowen{AT}efocus.nl>
* @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
* @since 1.1, 4 oct 2010
* @return void
*/

function initSideBarNavigation() {
	var elNavigationHolder = $(document).getElement('div.navigate_holder')
	var arrListItems = $$('ul.navigate_employees li');
	if(!elNavigationHolder || arrListItems.length == 0) return false;
	
	var elBtnScrollUp = $(elNavigationHolder).getElement('a.scroll_up');
	var elBtnScrollDown = $(elNavigationHolder).getElement('a.scroll_down');

	var myScroll = new Fx.Scroll(elNavigationHolder.getElement('ul.navigate_employees'), {
		duration: 500
	});
	
	var intItemsToScroll = 5;
	var intToElement = 0;
	
	var toggleButtons = function(intToElement){
		if (intToElement == 0) {
			elBtnScrollUp.fade('hide');
			elBtnScrollDown.fade('show');
		} else if (intToElement >= (arrListItems.length - 1) - intItemsToScroll) {
			elBtnScrollUp.fade('show');
			elBtnScrollDown.fade('hide');
		} else {
			elBtnScrollUp.fade('show');
			elBtnScrollDown.fade('show');
		}
	}
	
	elBtnScrollUp.addEvent('click', function() {
		intToElement = (intToElement <= 0) ? 0 : intToElement - intItemsToScroll;
		myScroll.toElement(arrListItems[intToElement]);
		toggleButtons(intToElement);
	});
	
	elBtnScrollDown.addEvent('click', function() {
		intToElement = (intToElement >= arrListItems.length) ? arrListItems.length - 1 : intToElement + intItemsToScroll;
		myScroll.toElement(arrListItems[intToElement]);
		toggleButtons(intToElement);
	});
	
	toggleButtons(intToElement);
}

/**
 * Adds dark blue tooltips.
 * 
 * @author Mirjam <mirjam[AT]efocus.nl>
 * @since 1.1, 11 aug 2010
 * @return void
 */

function initTooltips(arrLinks) {

	if (arrLinks.length == 0) return false;
	
	arrLinks.each(function(thisLink) {
		if (thisLink.get('title') != '') {
			thisLink.addClass('tipped');
		}
	});
	
	var arrTips = new Tips(arrLinks, {
		className : 'tooltip', 
		fixed : true,
		offset: {
			'x': 0,       
			'y': -80
		},
		onShow: function(tip, el) {
			
			var size = tip.measure(function(){
				return this.getSize().y;
			});		   
			this.setOptions({ 
				offset: {
				   x: 0,
				   y: 0 - 14 - size
			   }
			});	
			if (size > 14) {
				tip.setStyle('display', 'block');
			} else {
				tip.setStyle('display', 'none');
			}
		}    
	});
		
}


/**
 * Adds the get directions event to the directions button.
 * 
 * @author Mirjam <mirjam[AT]efocus.nl>
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.1, 4 oct 2010
 * @return void
 */
function initDirectionsButton() {
	var elDirectionsButton = $(document).getElement('div.contact_location_container fieldset.grey a.button_search');
	if (!$defined(elDirectionsButton)) return false;
	
	elDirectionsButton.addEvent('click', function(event) {
		event.stop();
		getDirections(elDirectionsButton.getParent('fieldset'));
	});
}


/**
 * set submit onenter locationform + clear input location form
 * 
 * @author Mirjam <mirjam[AT]efocus.nl>
 * @since 1.1, 12 aug 2010
 * @return void
 */

function initLocationForm() {
	
	var elLocationForm = document.getElement('div.contact_location_container fieldset.grey');
	if (!elLocationForm) return false;
	
	elLocationForm.addEvents({
		'keydown': function(e) {
			if (e.key == 'enter') {
				e.stop();
				getDirections(elLocationForm);
			}
		}, 
		'click': function(e) {
			this.getElement('input.text').set('value', '');
		}
	});
	
}


/**
 * Opens external links valid in a new window without the target attribute.
 * 
 * @author CSD (clientsidedevelopers[AT]efocus.nl)
 * @uses <a href="http://www.efocus.nl/" class="external">eFocus</a>
 */
function setTargetExternalLinks() {
	
	var arrExternalLinks = document.getElements('a.external');
	
	if (arrExternalLinks.length == 0) return false;
	
	for (var i = 0; i < arrExternalLinks.length; i++) {
		arrExternalLinks[i].addEvent('click', function(e){
			e.stop();
			if (this.getProperty('href')) {
				window.open(this.getProperty('href'));
			}
		});
	}
	
}

/**
 * Finds all external links, adds class external to links
 * 
 * @author Mirjam (mirjam[AT]efocus.nl)
  */
function setClassExternalLinks() {
	
	var allExternalLinks = $$('a[href^="http://"]');
	var thisDomain = window.location.host;
	
	allExternalLinks.each(function(thisLink, index) {
		
		if (!thisLink.href.contains(thisDomain) && !thisLink.rel.contains('shadowbox')) {
			thisLink.addClass('external');
		}
				
	});
	
	setTargetExternalLinks();
}


/**
 * Highlights photos and adds tooltips.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.1, 9 aug 2010
 * @return void
 */
function initPhotoTooltips(elHolder) {
	if (!$defined(elHolder)) return false;
	
	// create tooltip structure and inject into holder
	var elNewTooltip = new Element('div', {'class': 'tooltip'});
	var elNewTooltipInner = new Element('div', {'class': 'tooltip_inner'});
	var elNewTooltipTitle = new Element('div', {'class': 'tip_title'});
	var elNewTooltipCorner = new Element('div', {'class': 'tip_corner'});

	elNewTooltipTitle.inject(elNewTooltipInner);
	elNewTooltipCorner.inject(elNewTooltipInner);
	elNewTooltipInner.inject(elNewTooltip);
	elNewTooltip.inject(elHolder, 'top');
	
	// define settings
	var intOffsetX = 10;
	var intOffsetXRight = 40;
	var intOffsetY = -10;
	
	var arrTooltipTitles = new Array();
	
	var elTooltip = elHolder.getElement('.tooltip');
	elTooltip.getElement('.tooltip_inner').fade('hide');
	if (Browser.Engine.trident) elTooltip.getElement('.tip_corner').fade('hide');
	
	// save tooltip titles and remove normal title-attributes
	elHolder.getElements('a[class!=readmore]').each(function(elHolderLink) {
		arrTooltipTitles.push(elHolderLink.get('title'));
		elHolderLink.removeProperty('title');
	});
	
	var intThumbsReversed = 2;
	var intThumbsPerRow = 4;
	var arrTooltipDirection = new Array(elHolder.getElement('ul').getChildren('li').length);

	elHolder.getElements('a[class!=readmore]').each(function(elHolderLink, index) {
		// define which tooltips to reversed
		if ((index + 1) % intThumbsPerRow) {
			arrTooltipDirection[index] = 'left';
		} else {
			for (var i=0; i < intThumbsReversed; i++) {
				arrTooltipDirection[index-i] = 'right';
			}
		}
		
		elHolderLink.addEvents({
			'mouseenter': function(){
				elHolderLink.getElement('img').fade(1);
				elTooltip.getElement('.tip_title').set('html', arrTooltipTitles[index]);
				elTooltip.getElement('.tooltip_inner').fade('in');
				if (Browser.Engine.trident) elTooltip.getElement('.tip_corner').fade('in');
				
				elTooltip.setStyle('top', elHolderLink.getPosition($('mainform')).y + intOffsetY);
				if (arrTooltipDirection[index] == 'left') {
					elTooltip.removeClass('right');
					elTooltip.setStyles({
						'left': elHolderLink.getPosition($('mainform')).x + intOffsetX,
						'right': 'auto'
					});
				} else if (arrTooltipDirection[index] == 'right') {
					elTooltip.addClass('right');
					elTooltip.setStyles({
						'left': elHolderLink.getPosition($('mainform')).x + intOffsetXRight - elTooltip.getElement('.tooltip_inner').getWidth(),
						'right': 'auto'
					});
				}
			},
			'mouseleave': function(){
				elHolderLink.getElement('img').fade(0.8);
				elTooltip.getElement('.tooltip_inner').fade('out');
				if (Browser.Engine.trident) elTooltip.getElement('.tip_corner').fade('out');
			}
		});
	});
}

/**
 * Sets a checkbox label to a checked state when the checkbox input has been checked.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.0, 5 aug 2010
 * @return void
 */

function initCheckboxes() {

	var arrCheckboxes = $$('input.checkbox');
	if (arrCheckboxes.length == 0) return false;
	
	var setCheckbox = function(elCheckbox) {
		if (elCheckbox.getProperty('checked')) {
			if (elCheckbox.getParent('label.checkbox')) elCheckbox.getParent('label.checkbox').addClass('checked');
		} else {
			if (elCheckbox.getParent('label.checkbox')) elCheckbox.getParent('label.checkbox').removeClass('checked');
		}
	}
	
	arrCheckboxes.each(function(elCheckbox){
		elCheckbox.addEvent('click', function(){
			setCheckbox(elCheckbox);
		});
		setCheckbox(elCheckbox);
	});
}


/**
* initializes submit on enter in searchforms, 
* requires a.button.search, input.searchUrl and form fields
*
* 
* @author Mirjam <mirjam{AT}efocus.nl>
* @since 1.0, 30 july 2010
* @return void
*/

function setSubmitOnEnter(forms) {
	
	if (forms.length == 0) return false;

    forms.each(function(form) {
		
		var button = form.getElement('a.button_search');
		var arrFormfields = form.getElements('input').combine(form.getElements('select'));

		if (!form.getElement('input.searchUrl')) return false;
		var url = form.getElement('input.searchUrl').get('value');

		// enter in fields
		arrFormfields.each(function(elFormfield) {

			elFormfield.addEvents({
				'keydown': function(e) {
					if (e.key == 'enter') {
						e.stop();
						var newQString = createSearchUrl(arrFormfields);
						window.location = url + "?" + newQString.substr(1);
					}
				}
			});

		});
		
		// enter button

        var button = form.getElements('a.button_search');

        button.addEvents({
            'click': function(e) {
                e.stop();
                var newQString = createSearchUrl(arrFormfields);
                window.location = url + "?" + newQString.substr(1);
            },
            'keyup': function(e) {
                if (e.key == 'enter') {
                    e.stop();
                    var newQString = createSearchUrl(arrFormfields);
                    window.location = url + "?" + newQString.substr(1);
                }
            }
        });
		
	});
	
}

/**
* initializes submit on enter in searchforms, 
* requires a.button.search, input.searchUrl and form fields
*
* 
* @author Mirjam <mirjam{AT}efocus.nl>
* @since 1.0, 30 july 2010
* @return void
*/

function setSubmitOnChange(forms) {
	
	if (forms.length == 0) return false;
	
	var url = window.location.protocol + '//' + window.location.hostname + window.location.pathname;
	
    forms.each(function(form) {
		
		var arrFormfields = form.getElements('input').combine(form.getElements('select'));
		arrFormfields.each(function(elFormfield) {
			
			var evType = 'change';
			
			if (elFormfield.get('type') == 'checkbox' || elFormfield.get('type') == 'radio') {
				var evType = 'click';
			} 
			
			elFormfield.addEvent(evType, function(e){
				e.stop();
				var newQString = createSearchUrl(arrFormfields);
				window.location = url + "?" + newQString.substr(1);
			});
			
		});
		
	});
	
}


/**
* createSearchUrl
*
* creates url from fields in specific fieldset
*
* 
* @author Mirjam <mirjam{AT}efocus.nl>
* @since 1.0, 30 july 2010
* @return void
*/

function createSearchUrl(arrFormfields) {
		
    var strNewUrl = "";

    arrFormfields.each(function(elFormfield) {

        var strFieldName = elFormfield.get('name');
        var strFieldValue = elFormfield.get('value');
				
		if (elFormfield.get('type') == 'checkbox') {
			if (elFormfield.getProperty('checked') == false) {
				strFieldValue = 'off';
			} else {
				strFieldValue = 'on';
			}
		}
		
		if (elFormfield.get('type') == 'radio') {
			if (elFormfield.getProperty('checked') == true) {
				strFieldValue = elFormfield.get('value');
			} else {
				strFieldName = '';
				strFieldValue = '';
			}
		}
		
        if (strFieldName != 'pageUrl' && strFieldName != '' && strFieldName != null) {
            strNewUrl += "&" + strFieldName + "=" + strFieldValue;
        }

    });
    
    return strNewUrl;
    
}


/**
 * initializes accordion
 *
 * @author Mirjam <mirjam{AT}efocus.nl>
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.2, 4 oct 2010
 * @return void
 */

function initAccordion(arrTogglers, arrContent, blnShowFirst) {
	
	if (arrTogglers.length == 0 || arrContent.length == 0) { return false; }
			
	var myAccordion = new Fx.Accordion(arrTogglers, arrContent, {
		show : (blnShowFirst) ? 0 : -1,
		opacity: 0,
		alwaysHide: true, 
		onActive: function(elToggler){
			elToggler.getParent('li').addClass('active');
		}, 
		onBackground: function(elToggler){
			elToggler.getParent('li').removeClass('active');
		}
	});
    
}


/**
 * Initializes an accordion which opens directly based on a parameter in the address
 *
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.0, feb 2011
 * @return void
 */

function initAccordionDirect(arrTogglers, arrContent) {
	if (arrTogglers.length == 0 || arrContent.length == 0) return false;

	var intAccordionDirectItem = null;
	
	if (window.location.search != '') {
		var strUrlParam = window.location.search.split('=')[1].split('%20').join(' ');
		
		arrTogglers.each(function(elToggler, intIndex){
			if (elToggler.getElement('h2').get('text') == strUrlParam) intAccordionDirectItem = intIndex;
		});
	}
	
	var myAccordion = new Fx.Accordion(arrTogglers, arrContent, {
		show : (intAccordionDirectItem == null) ? -1 : intAccordionDirectItem,
		opacity: 0,
		alwaysHide: true, 
		onActive: function(elToggler){
			elToggler.getParent('li').addClass('active');
		}, 
		onBackground: function(elToggler){
			elToggler.getParent('li').removeClass('active');
		}
	});
	
	if (intAccordionDirectItem != null) new Fx.Scroll(window).toElement(arrTogglers[intAccordionDirectItem].getParent('li'));
}


/**
 * inits item carousel 
 *
 * @author Mirjam <mirjam@efocus.nl>
 * @since 1.0, 3 sep, 2010
 * @return void
 */

function initCarouselNavigation (arrItems, elForward, elBack, elViewport) {
	
	if (arrItems.length == 0 || !elForward || !elBack || !elViewport) return false;
	var carouselNav = new Carousel({'arrItems': arrItems, 'btnForward': elForward, 'btnBack': elBack, 'elViewport': elViewport, 'intTweenDuration': 500 });
	
}

/**
 * Shows more items when the "view more" button is pressed.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.0, 3 aug 2010
 * @return void
 */

function showMoreOverview(elOverviewHolder, intItemsPerBatch) {
	if (!$defined(elOverviewHolder)) return false;
	
	var elOverview = elOverviewHolder.getElement('ul.overview');
	var arrOverviewItems = elOverview.getChildren('li');
	var elButton = elOverviewHolder.getElement('a.button');

	if (!$defined(elOverview) || !$defined(elButton)) return false;
	
	var intItemsToShow = intItemsPerBatch;
	
	arrOverviewItems.each(function(elOverviewItem, index){
		if (index < intItemsToShow && elOverviewItem.hasClass('hidden')) {
			elOverviewItem.removeClass('hidden');
		}
	});
	if (arrOverviewItems.length <= intItemsToShow) elButton.dispose();
	
	extendOverview = function() {
		arrOverviewItems.each(function(elOverviewItem, index){
			if (index < intItemsToShow && elOverviewItem.hasClass('hidden')) {
				var intItemHeight = elOverviewItem.getHeight();
				elOverviewItem.setStyle('height', 0);
				elOverviewItem.removeClass('hidden');
				elOverviewItem.tween('height', intItemHeight);
			}
		});
		if (arrOverviewItems.length <= intItemsToShow) elButton.fade('out');
	}
	
	elButton.addEvent('click', function(event){
		event.stop();
		intItemsToShow += intItemsPerBatch;
		extendOverview();
	});
}


/**
 * Sets the height of the clients overview items to equalize row height.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.0, 3 aug 2010
 * @return void
 */

function setClientsOverviewItemHeight() {
	var elOverviewClients = $(document).getElement('.clients_overview');
	if (!$defined(elOverviewClients)) return false;
	
	var arrOverviewClients = elOverviewClients.getChildren('li');
	var intItemsPerRow = 3;
	var intMaxHeight = 0;
	
	var setMaxHeight = function(elOverviewClient) {
		if (intMaxHeight < elOverviewClient.getHeight()) intMaxHeight = elOverviewClient.getHeight();
	}
	
	arrOverviewClients.each(function(elOverviewClient, index){
		if ((index + 1) % intItemsPerRow) {
			setMaxHeight(elOverviewClient);
		} else {
			setMaxHeight(elOverviewClient);
			for (var i=0; i < intItemsPerRow; i++) {
				arrOverviewClients[index - i].setStyle('height', intMaxHeight);
			}
			intMaxHeight = 0;
		}
	});
}


/**
 * Sets the height of the portfolio overview items to equalize row height.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.0, 12 aug 2010
 * @return void
 */

function setPortfolioOverviewItemHeight() {

	var arrOverviewPortfolioLists = $(document).getElements('.portfolio_overview');
	if (arrOverviewPortfolioLists.length == 0) { return false };

	arrOverviewPortfolioLists.each(function(elOverviewPortfolioItem) {

		var arrOverviewPortfolio = elOverviewPortfolioItem.getChildren('li');
		var intItemsPerRow = 3;
		var intMaxHeightTitle = 0;
		var intMaxHeightTags = 0;
		var intMaxHeight = 0;

		var setMaxHeightTitle = function(elOverviewPortfolioTitleLink) {
			if (intMaxHeightTitle < elOverviewPortfolioTitleLink.getComputedSize().height) intMaxHeightTitle = elOverviewPortfolioTitleLink.getComputedSize().height;
		}

		var setMaxHeightTags = function(elOverviewPortfolioTagsLink) {
			if (intMaxHeightTags < elOverviewPortfolioTagsLink.getComputedSize().height) intMaxHeightTags = elOverviewPortfolioTagsLink.getComputedSize().height;
		}

		var setMaxHeight = function(elOverviewPortfolio) {
			if (intMaxHeight < elOverviewPortfolio.getHeight()) intMaxHeight = elOverviewPortfolio.getHeight();
		}

		arrOverviewPortfolio.each(function(elOverviewPortfolio, index) {
			if ((index + 1) % intItemsPerRow) {
				if (elOverviewPortfolio.getElement('h2 a')) setMaxHeightTitle(elOverviewPortfolio.getElement('h2 a'));
				if (elOverviewPortfolio.getElement('p a')) setMaxHeightTags(elOverviewPortfolio.getElement('p a'));
				setMaxHeight(elOverviewPortfolio);
			} else {
				if (elOverviewPortfolio.getElement('h2 a')) {
					setMaxHeightTitle(elOverviewPortfolio.getElement('h2 a'));
					for (var i = 0; i < intItemsPerRow; i++) {
						if (arrOverviewPortfolio[index - i].getElement('h2 a')) arrOverviewPortfolio[index - i].getElement('h2 a').setStyle('height', intMaxHeightTitle);
					}
					intMaxHeightTitle = 0;
				}

				if (elOverviewPortfolio.getElement('p a')) {
					setMaxHeightTags(elOverviewPortfolio.getElement('p a'));
					for (var i = 0; i < intItemsPerRow; i++) {
						if (arrOverviewPortfolio[index - i].getElement('p a')) arrOverviewPortfolio[index - i].getElement('p a').setStyle('height', intMaxHeightTags);
					}
					intMaxHeightTags = 0;
				}

				setMaxHeight(elOverviewPortfolio);
				for (var i = 0; i < intItemsPerRow; i++) {
					arrOverviewPortfolio[index - i].setStyle('height', intMaxHeight);
				}
				intMaxHeight = 0;
			}
		});


	});
	
}


/**
 * starts pushbox portfolio
 *
 * @author Mirjam <mirjam@efocus.nl>
 * @since 1.0, 10 aug, 2010
 * @return void
 */

function startPushbox() {
	
	if (!document.getElement('div.pushbox')) return false;
	
	var pbox = new Pushbox({
		'viewport': document.getElement('div.pushbox').getElement('div.viewport'),
		'slides': document.getElement('div.pushbox').getElement('ul.slides').getElements('li'),
		'transition': 'fade',
		'delay': 6
	});	
		
}


/**
 * initializes googlemaps, used on locationpage
 *
 * @param location
 * @author Mirjam <mirjam@efocus.nl>
 * @since 1.0, 10 aug, 2010
 * @return void
 */
 
function initGoogleMaps(location) {
	
	var geocoder = new google.maps.Geocoder();
	var latlng = new google.maps.LatLng(52.071043,5.108746);
	
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

	var address = location;
	geocoder.geocode( { 'address': address}, function(results, status) {
		if (status == google.maps.GeocoderStatus.OK) {
			map.setCenter(results[0].geometry.location);
			var marker = new google.maps.Marker({
				map: map, 
				position: results[0].geometry.location
			});
		}
	});
		
}


/**
 * get directions to location
 *
 * @param location
 * @author Mirjam <mirjam@efocus.nl>
 * @since 1.0, 11 aug, 2010
 * @return void
 */
 
function getDirections (form) {
	
	var strStart = form.getElement('input[name=location_from]').get('value');
	var strEnd = form.getElement('input[name=location_to]').get('value');
	
	var directionsDisplay = new google.maps.DirectionsRenderer();
	var directionsService = new google.maps.DirectionsService();

	var request = {
        origin: strStart, 
        destination: strEnd,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
	
	directionsService.route(request, function(response, status) {
		if (status == google.maps.DirectionsStatus.OK) {
			form.getElement('input[name=location_from]').removeClass('error');
			directionsDisplay.setDirections(response);
		} else {
			form.getElement('input[name=location_from]').addClass('error');
		}
	});
	
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	
	var geocoder = new google.maps.Geocoder();
	var latlng = new google.maps.LatLng(52.071043,5.108746);
	
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	
	document.getElement('div#map_directions').empty();
	
	var map = new google.maps.Map(document.getElement('div#map_canvas'), myOptions);
    directionsDisplay.setMap(map);
	directionsDisplay.setPanel(document.getElement('div#map_directions'));

}
  

/**
* equals the height of an array of items
* 
* @author Lowen <lowen[AT]efocus.nl>
* @since 1.0, 4 aug 2010
* @return void
*/

function setEqualHeight(arrElements) {
	if (arrElements.length == 0) return false;
	
	var intMaxHeight = arrElements.getHeight().max();

	arrElements.each(function(elItem) {
		elItem.setStyle('height', (intMaxHeight - (elItem.getStyle('padding-top').toInt() + elItem.getStyle('padding-bottom').toInt() + elItem.getStyle('border-top').toInt() + elItem.getStyle('border-bottom').toInt())));
	});
}


/**
 * Loads the tooltipcontent when hovering over an employee.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.1, 6 aug 2010
 * @return void
 */

function loadEmployeeTooltips() {
	
	var elEmployeeOverviewContainer = $(document).getElement('div.employee_overview_container');
	if (!$defined(elEmployeeOverviewContainer)) return false;
	
	// create tooltip structure and inject into container
	var elNewTooltipHolder = new Element('div', {'class': 'employee_tooltip_holder'});
	var elNewTooltip = new Element('div', {'class': 'employee_tooltip'});
	var elNewTooltipShadow = new Element('div', {'class': 'employee_tooltip_shadow'});
	
	elNewTooltipShadow.inject(elNewTooltipHolder);
	elNewTooltip.inject(elNewTooltipHolder);
	elNewTooltipHolder.inject(elEmployeeOverviewContainer, 'top');
	
	var elEmployeeOverview = elEmployeeOverviewContainer.getElement('ul.employee_overview');
	var elEmployeeTooltipHolder = elEmployeeOverviewContainer.getElement('div.employee_tooltip_holder');
	var elEmployeeTooltip = elEmployeeOverviewContainer.getElement('div.employee_tooltip');
	if (!$defined(elEmployeeOverview) || !$defined(elEmployeeTooltipHolder) || !$defined(elEmployeeTooltip)) return false;
	
	var elEmployeeTooltipShadow = elEmployeeTooltipHolder.getElement('.employee_tooltip_shadow');
	
	var intOffsetX = 20;
	var intOffsetY = 20;
	
	var intThumbsReversed = 3;
	var intThumbsPerRow = 10;
	var arrEmployeeTooltipDirection = new Array(elEmployeeOverview.getChildren('li').length);
	
	var blnTooltipHover = false;
	var blnEmployeeHover = false;
	
	var removeTooltip = function() {
		if (blnTooltipHover == false && blnEmployeeHover == false) {
			elEmployeeTooltip.getParent('div.employee_tooltip_holder').removeClass('show');
		}
	}
	var removeTooltipDelayed;

	elEmployeeOverview.getChildren('li').each(function(elEmployee, index) {
		// define which tooltips to reversed
		if ((index + 1) % intThumbsPerRow) {
			arrEmployeeTooltipDirection[index] = 'left';
		} else {
			for (var i = 0; i < intThumbsReversed; i++) {
				arrEmployeeTooltipDirection[index - i] = 'right';
			}
		}

		elEmployee.addEvents({
			'mouseenter': function() {

				blnEmployeeHover = true;
				$clear(removeTooltipDelayed);
				elEmployeeTooltip.set('html', elEmployee.getElement('.employee_details').get('html'));
				elEmployeeTooltipHolder.setStyles({
					'left': elEmployee.getPosition($('mainform')).x + intOffsetX,
					'top': elEmployee.getPosition($('mainform')).y + intOffsetY
				});

				elEmployeeTooltip.getParent('div.employee_tooltip_holder').addClass('show');
				elEmployeeTooltipShadow.setStyle('opacity', '0.3');

				// reverse tooltip for three most right thumbs
				if (arrEmployeeTooltipDirection[index] == 'left') {
					elEmployeeTooltip.setStyles({
						'background-image': 'url(../img/bg_tooltip_front.png)',
						'left': 0,
						'right': 'auto'
					});
					elEmployeeTooltipShadow.setStyles({
						'background-image': 'url(../img/bg_tooltip_back.png)',
						'left': 0,
						'right': 'auto'
					});
				} else {
					elEmployeeTooltip.setStyles({
						'background-image': 'url(../img/bg_tooltip_front_reversed.png)',
						'left': 'auto',
						'right': -33
					});
					elEmployeeTooltipShadow.setStyles({
						'background-image': 'url(../img/bg_tooltip_back_reversed.png)',
						'left': 'auto',
						'right': -33
					});
				}
			},
			'mouseleave': function() {
				blnEmployeeHover = false;
				removeTooltipDelayed = removeTooltip.delay('100');
			}
		});
	});
	
	elEmployeeTooltip.addEvents({
		'mouseenter': function(){
			blnTooltipHover = true;
		},
		'mouseleave': function(){
			blnTooltipHover = false;
			removeTooltipDelayed = removeTooltip.delay('100');
		}
	});
}


/**
 * Aligns the sitemap categories in a column-like structure.
 *
 * @author Ralph Meeuws <ralph.meeuws{AT}efocus.nl>
 * @since 1.0, 4 oct 2010
 * @return void
 */
function alignSitemapAsColumns() {
	var arrSitemapChildren = $$('ul.sitemap > li');
	if (arrSitemapChildren.length == 0) return false;
	
	arrSitemapChildren.each(function(elSitemapChild, intIndex) {
		if ((intIndex) % 2) elSitemapChild.addClass('right');
	});
}


/**
 * Loads the interaction of tabs, panels en cases overview for the What We Do landing page.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since 1.0, 11 aug 2010
 * @return void
 */

function loadWhatWeDoInteraction() {
	var elWhatWeDoContainer = $(document).getElement('div.whatwedo_container');
	if (!$defined(elWhatWeDoContainer)) return false;
	
	var intPreviousIndex = 0;
	
	var elWhatWeDoTabsHolder = elWhatWeDoContainer.getElement('div.whatwedo_tabs_holder');
	var arrWhatWeDoTabs = elWhatWeDoContainer.getElements('ul.whatwedo_tabs > li');
	var elWhatWeDoTabArrow = elWhatWeDoContainer.getElement('div.whatwedo_tab_arrow');

	var intTabArrowOffsetX = 22;
	var intTabArrowPosX = arrWhatWeDoTabs[0].getPosition(elWhatWeDoTabsHolder).x + intTabArrowOffsetX;
	elWhatWeDoTabArrow.setStyle('left', intTabArrowPosX)
	elWhatWeDoTabArrow.set('tween', {transition: Fx.Transitions.Cubic.easeOut});
	
	var elWhatWeDoPanelHolder = elWhatWeDoContainer.getElement('ul.whatwedo_panels');
	var arrWhatWeDoPanels = elWhatWeDoPanelHolder.getChildren('li');
	var intWhatWeDoPanelWidth = arrWhatWeDoPanels[0].getWidth();
	elWhatWeDoPanelHolder.setStyle('width', intWhatWeDoPanelWidth * arrWhatWeDoPanels.length);
	elWhatWeDoPanelHolder.set('tween', {transition: Fx.Transitions.Cubic.easeOut});
	
	var arrWhatWeDoCases = elWhatWeDoContainer.getElements('ul.whatwedo_cases > li');
	var arrWhatWeDoCasesHeights = new Array();
	if (arrWhatWeDoCases.length > 0) {

		arrWhatWeDoCases.each(function(elWhatWeDoCase) {
			arrWhatWeDoCasesHeights.push(elWhatWeDoCase.getHeight());
		});
		arrWhatWeDoCases.setStyles({
			'position': 'static',
			'top': 0,
			'left': 0,
			'height': 0
		});
		arrWhatWeDoCases[intPreviousIndex].setStyle('height', arrWhatWeDoCasesHeights[intPreviousIndex]);
	}
	
	arrWhatWeDoTabs.each(function(elWhatWeDoTab, index){
		elWhatWeDoTab.addEvent('click', function(){
			arrWhatWeDoTabs.removeClass('active');
			elWhatWeDoTab.addClass('active');
			elWhatWeDoTabArrow.tween('left', elWhatWeDoTab.getPosition(elWhatWeDoTabsHolder).x + intTabArrowOffsetX);
			elWhatWeDoPanelHolder.tween('left', -(intWhatWeDoPanelWidth * index));
			
			fxOutWhatWeDoCase = new Fx.Tween(arrWhatWeDoCases[intPreviousIndex], {property: 'height', transition: Fx.Transitions.Quad.easeOut});
			fxInWhatWeDoCase = new Fx.Tween(arrWhatWeDoCases[index], {property: 'height', transition: Fx.Transitions.Quad.easeInOut});
			fxOutWhatWeDoCase.start(0).chain(function(){
				fxInWhatWeDoCase.start(arrWhatWeDoCasesHeights[index]);
			});
			
			intPreviousIndex = index;
		});
	});
}
/**
* Loads the interaction of tabs and panels for the portfolio detail pages.
* 
* @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
* @since 1.0, 28 oct 2011
* @return void
*/
function loadPortfolioDetailTabs() {
    var elTabs = $(document).getElement('ul.portfolio_detail_tabs');
    var elPanels = $(document).getElements('div.portfolio_detail_panel');
    if (!$defined(elTabs) || elTabs.getChildren().length != elPanels.length) return false;

    var arrTabs = elTabs.getChildren();
    var elPanelsHolder = $(document).getElement('.portfolio_detail_panels_holder');
    var arrPanelHeights = new Array();

    elPanels.addClass('measure');
    elPanels.each(function (elPanel, index) {
        arrPanelHeights.push(elPanel.getHeight().toInt());
    });
    elPanels.removeClass('measure');

    var showPanel = function (intActive) {
        elPanelsHolder.tween('height', arrPanelHeights[intActive]);
        elPanels.fade('out');
        elPanels[intActive].fade('in');
    }

    arrTabs.each(function (elTab, index) {
        elTab.addEvent('click', function () {
            arrTabs.removeClass('active');
            elTab.addClass('active');
            showPanel(index);
        });
    });
	

    elPanels.addClass('portfolio_detail_panel_absolute');
    elPanels.fade('hide');
    elPanelsHolder.setStyle('height', arrPanelHeights[0]);
    elPanels[0].fade('show');
}


/**
* initScrollTo
* initialize scroll function
*
* @author martijn.de.valk <martijn.de.valk.do@efocus.nl>
* @since 2 febr 2012
*/
function initScrollTo() {	
	var myScroll = new Fx.Scroll(window, {
		duration: 500
	});
	 
	$('design').addEvent('click', function(event) {
		myScroll.toElement($('screenshots'));
	});	
}



