/**
 * @require MooTools version 1.2.2
 */

window.addEvents({
	'domready': function() {
		initNewsTicker();
		initHomeTeasers();
		initFaqCategories();
		initNewslettersList();
		fixExternalLinks();
		initSearchForm();
	},
	'load': function() {
		initCenterElements();
		initMap();
	}
});


/**
 * makeEqualHeight
 *
 * makes multiple different elements all the same height,
 * assuming the height of the highest element
 *
 * @param arElements, Array of DOM elements to compare fix height
 *
 * @author Klaas Dieleman <klaas{AT}efocus.nl>
 *
 * @return h, height of highest element in px
 */
function makeEqualHeight(arElements) {
	var h = 0;
	
	for(var i = 0 ; i < arElements.length ; i++) {
		if(arElements[i].getSize().y > h) h = arElements[i].getSize().y;
	}
	
	arElements.each(function(item) {
		var ch = 0;
		var ah = item.getStyle('padding-top').toInt();
		ah += item.getStyle('padding-bottom').toInt();
		ah += item.getStyle('border-top-width').toInt();
		ah += item.getStyle('border-bottom-width').toInt();
		ch = h - ah;
		item.setStyle('height', ch);
	});
	
	return h;
}



/**
* initCenterElements
*
* Horizontally centers elements by comparing it to its parent element.
*
* @author Ralph Meeuws <ralph.meeuws{AT}efocus.nl>
* @return void
*/
function initCenterElements() {
	var arrCenters = $$('.center');
	if (arrCenters.length == 0) return;

	arrCenters.each(function(elCenter) {
		var intParentWidth = elCenter.getParent().getWidth() - (elCenter.getParent().getStyle('padding-left').toInt() + elCenter.getParent().getStyle('padding-right').toInt());
		elCenter.setStyle('margin-left', (intParentWidth - elCenter.getWidth()) / 2);
	});
}



/**
 * initNewsTicker()
 *
 * scrolls newsticker
 *
 * @author Klaas Dieleman <klaas{AT}efocus.nl>
 * @author Ralph Meeuws <ralph.meeuws{AT}efocus.nl>
 * @return void
 */
function initNewsTicker() {
	if(!$(document).getElement('.ticker_holder')) return false;
	
	var strCookieDomain = window.location.host;
	
	if (!$defined(Cookie.read('tickerClosed'))) {
		var tickerToggleCookie = Cookie.write('tickerClosed', 'false', {'domain': strCookieDomain, 'path': '/'});
	}
	
	var elTickerHolder = $(document).getElement('.ticker_holder');
	var elTickerViewport = elTickerHolder.getElement('.ticker_viewport');
	//var intTickerViewportWidth = 575;
	var intTickerViewportWidth = 475;
	var elTickerButton = elTickerHolder.getElement('.ticker_button');
	
	var elTickerContent = elTickerHolder.getElement('ul.ticker_content');
	var intTickerContentWidth = 0;
	elTickerContent.getChildren('li').each(function(elTickerContentItem){
		intTickerContentWidth += (elTickerContentItem.getWidth() + (elTickerContentItem.getStyle('margin-left').toInt() + elTickerContentItem.getStyle('margin-right').toInt() + elTickerContentItem.getStyle('padding-left').toInt() + elTickerContentItem.getStyle('padding-right').toInt()));
	});
	//elTickerContent.setStyle('width', intTickerContentWidth);
	
	var tickerViewportTween = new Fx.Tween(elTickerViewport);
	
	elTickerButton.addEvent('click', function(event){
		event.stop();
		this.blur();
		
		if (elTickerHolder.hasClass('closed')) {
			Cookie.write('tickerClosed', 'false', {'domain': strCookieDomain, 'path': '/'});
			elTickerHolder.removeClass('closed');
			elTickerButton.setProperty('title', elTickerButton.getElement('.close').get('text'));
			animate(intActiveTween);
			tickerViewportTween.start('width', intTickerViewportWidth);
		} else {
			Cookie.write('tickerClosed', 'true', {'domain': strCookieDomain, 'path': '/'});
			elTickerHolder.addClass('closed');
			elTickerButton.setProperty('title', elTickerButton.getElement('.open').get('text'));
			tickerViewportTween.start('width', 0).chain(function(){
				tweens[intActiveTween].cancel();
			});
		}
	});
	
	var tickerspeed = 20;
	var intActiveTween = 0;
	var newsList = new Array;
	var tweens = new Array;
	
	newsList[0] = elTickerContent;
	var tickerWidth = newsList[0].getWidth();
	if(tickerWidth <= elTickerHolder.getElement('.ticker_viewport').getWidth()) return false;
	
	newsList[1] = newsList[0].clone();
	var tweenDuration = tickerWidth * tickerspeed;
	
	newsList[0].setStyle('margin-left', intTickerViewportWidth);
	newsList[1].setStyle('margin-left', 0);
	
	tweens[0] = new Fx.Tween(newsList[0], {
		'duration':		tweenDuration,
		'transition':	'linear'
	});
	
	tweens[1] = new Fx.Tween(newsList[1], {
		'duration':		tweenDuration,
		'transition':	'linear'
	});
	
	var animate = function(index) {
		var index2;
		index == 0 ? index2 = 1 : index2 = 0;

		newsList.each(function(item) { item.setStyle('margin-left', 0) });
		newsList[index2].inject(newsList[index], 'after');
		
		tweens[index].start('margin-left', -tickerWidth).chain(function() {
			intActiveTween = index2;
			animate(index2);
		});
	};
	
	if (Cookie.read('tickerClosed') == 'false') {
		elTickerViewport.setStyle('width', intTickerViewportWidth);
		animate(0);
	} else if (Cookie.read('tickerClosed') == 'true') {
		elTickerViewport.setStyle('width', 0);
		elTickerHolder.addClass('closed');
	}
}



/**
 * initHomeTeasers()
 *
 * Aligns the teasers on the homepage
 *
 * @author Ralph Meeuws <ralph.meeuws{AT}efocus.nl>
 * @return void
 */
function initHomeTeasers() {
	var arrHomeTeasers = $$('.col_home .teaser');
	
	// remove youtube_teaser element from array
	arrHomeTeasers.erase($('youtube_teaser'));
	
	if (arrHomeTeasers.length == 0) return false;
	
	makeEqualHeight(arrHomeTeasers);
}


/**
* initMap()
*
* initializes googlemaps and markers
*
*
* @author Mirjam <mirjam{AT}efocus.nl>
* @author Klaas <klaas{AT}efocus.nl>
* @return void
*/

function initMap() {
	
	var map = $('map');
	if (!map) return false;
	
	
	if (GBrowserIsCompatible()) {
		
		// init
        var gmap = new GMap2(map);
		gmap.addControl(new GSmallMapControl());   
		gmap.addControl(new GMapTypeControl());
		
		// set boundaries
        var boundaries = new GLatLngBounds(new GLatLng(52.05154041396438, 4.262588024139404), new GLatLng(52.05655440222509, 4.275462627410889));
        
        // set center
        gmap.setCenter(new GLatLng(52.05404747843254, 4.26902532577514654), 16, G_HYBRID_MAP);
		
		// Create marker icon
		var customIcon = new GIcon(G_DEFAULT_ICON);
		customIcon.image = "/fileadmin/templates/img/map_marker.png";
		customIcon.iconAnchor = new GPoint(15, 16);
		customIcon.iconSize = new GSize(30, 33);
		markerOptions = { icon: customIcon }
        
		
		// Create custom overlay (balloon-like div)
		function customBalloon(latlong, text) {
			this.latlong_ = latlong;
			this.text_ = text;
		}
			
		customBalloon.prototype = new GOverlay();
		
		customBalloon.prototype.initialize = function(gmap) {
			var balloonHtml = '<h3>' + this.text_ + '</h3>\n' + '<div class="balloonArrow"></div>';
			var balloonDiv = new Element('div', {
				'class': 'mapBalloon',
				'html':	balloonHtml
			});

			gmap.getPane(G_MAP_MAP_PANE).appendChild(balloonDiv);

			this.gmap_ = gmap;
			this.balloonDiv_ = balloonDiv;
		}
		
		customBalloon.prototype.remove = function() {
			this.balloonDiv_.destroy();
		}

		customBalloon.prototype.copy = function() {
			return new customBalloon(this.latlong, this.text);
		}

		customBalloon.prototype.redraw = function(force) {
			if (!force) return;

			var pixelPos = this.gmap_.fromLatLngToDivPixel(this.latlong_);

			this.balloonDiv_.setStyle('right', (0 - pixelPos.x + 43));
			this.balloonDiv_.setStyle('top', (pixelPos.y - 23));
		}
		
		
		// add markers and overlays
		var markers = $$('ul.map_addresses li');
		
		for (var i = 0; i < markers.length; i++) {
			
			var latA = (markers[i].getElement('span.address_lat').get('text'));
			var longA = (markers[i].getElement('span.address_lon').get('text'));
			var nameA = (markers[i].getElement('span.address_name').get('text'));
			
			var point = new GLatLng(parseFloat(latA), parseFloat(longA));
        	var marker = new GMarker(point, markerOptions);
			
			gmap.addOverlay(marker);
			gmap.addOverlay(new customBalloon(point, nameA));

		}
		
	}	
	
}

/**
* initFaqCategories
* puts FAQ categories in an accordion and enables toggling of answers
*
* @author Klaas Dieleman <klaas[AT]efocus.nl>
* @author Ralph Meeuws <ralph.meeuws{AT}efocus.nl>
* @return void
*/
function initFaqCategories() {
	
	var arrFaqCats = $$('ul.faq li');
	if (arrFaqCats.length > 1) {

		var faqAccordion = new Accordion(arrFaqCats.getElements('h3.faq_category'), arrFaqCats.getElements('div.faq_questions_panel'), {
			onActive: function(toggler) {
				toggler.getParent().addClass('open');
			},
			onBackground: function(toggler) {
				toggler.getParent().removeClass('open');
			},
			alwaysHide: true,
			show: 0,
			opacity: false
		});
		$$('div.faq_questions_panel')[0].setStyle('height', $$('div.faq_questions_panel')[0].getSize().y);

	}

	if ($$('ul.faq dt').length == $$('ul.faq dd').length) {
		$$('ul.faq dt').each(function(item, index) {
			item.addEvent('click', function() {
				var oldHeight = item.getParent().getSize().y;

				if($$('ul.faq dt')[index].hasClass('open')) {
					$$('ul.faq dt')[index].removeClass('open');
					$$('ul.faq dd')[index].removeClass('open');
				} else {
					$$('ul.faq dt').removeClass('open');
					$$('ul.faq dd').removeClass('open');

					$$('ul.faq dt')[index].addClass('open');
					$$('ul.faq dd')[index].addClass('open');
				}
				
				var newHeight = item.getParent().getSize().y;

				item.getParent('div.faq_questions_panel').setStyle('height', (item.getParent('div.faq_questions_panel').getSize().y + (newHeight - oldHeight)));
			});
		});
	}
}



/**
 * initNewslettersList()
 *
 * Adds a class to all the right newsletter list items.
 *
 * @author Ralph Meeuws <ralph.meeuws{AT}efocus.nl>
 * @return void
 */
function initNewslettersList() {
	var arrNewslettersListItems = $$('.newsletters li');
	if (arrNewslettersListItems.length == 0) return false;
	
	var intNewslettersListItemMaxHeight = 0;
	var intNewslettersListItemPerRow = 2;
	
	arrNewslettersListItems.each(function(elNewslettersListItem, index) {
		if (elNewslettersListItem.getHeight() > intNewslettersListItemMaxHeight) {
			intNewslettersListItemMaxHeight = elNewslettersListItem.getHeight();
		}
		
		if (index % intNewslettersListItemPerRow) {
			elNewslettersListItem.setStyle('margin-right', 0);
			intNewslettersListItemMaxHeight = intNewslettersListItemMaxHeight - (elNewslettersListItem.getStyle('padding-top').toInt() + elNewslettersListItem.getStyle('padding-bottom').toInt());
			
			for (var i = 0; i < intNewslettersListItemPerRow; i++) {
				arrNewslettersListItems[index - i].setStyle('height', intNewslettersListItemMaxHeight);
			}
			intNewslettersListItemMaxHeight = 0;
		}
	});
}



/**
 * replaceFonts()
 *
 * Puts sIFR to work, replacing heads with custom font.
 *
 * @author Klaas Dieleman <klaas{AT}efocus.nl>
 * @return void
 */
function replaceFonts() {
	var dinmedium = { src: '/fileadmin/templates/flash/dinmedium.swf' };
	sIFR.activate(dinmedium);
	
	sIFR.replace(dinmedium, {
		selector: 'h1',
		wmode: 'transparent',
		css: [
			'.sIFR-root { color: #ff8f00; font-size: 24px; }',
			'.head_green { color: #afbd21 }'
		]
	});
	
	sIFR.replace(dinmedium, {
		selector: 'div.teaser h2, p.footer_tagline',
		wmode: 'transparent',
		css: [
			'.sIFR-root { color: #ffffff; text-transform: uppercase; font-size: 14px }',
			'a { color: #ffffff; text-decoration: none }',
			'a:hover { color: #ffffff; text-decoration: underline }'
		]
	});

}

/**
 * Opens external links without the target attribute
 * 
 * @author Ralph Meeuws <ralph.meeuws@efocus.nl>
 * @author Rocco Janse <rocco@efocus.nl>
 * @since 1.0, 14 aug, 2009
 * @return void
 */
 
function fixExternalLinks() {
	var arrExternalLinks = $$('a.external');
	if (arrExternalLinks.length == 0) return;
	
	arrExternalLinks.each(function(link) {
		link.addEvents({
			'click': function(event) {
				event.stop();
				window.open(this.get('href'));
			}   
		});
	});
}

/**
 * initSearchForm
 *
 * Submit search, show/hide search hint, add/remove search hint class
 *
 * @author Gijs Oliemans <gijs.oliemans{AT}efocus.nl>
 * @editor Phi Son Do <phison.do{AT}efocus.nl>
 * @return void
 */
 
function initSearchForm() {
	if (!document.getElement('.zoeken')) return;
	
	var arrFormInput = $$('.searchkeyword');	
	var arrSearchHint = $$('.search_hint');
	
	arrFormInput.each(function (elFormInput){
		arrSearchHint.each(function (searchHint){
			searchHint = searchHint.innerHTML;

			elFormInput.addEvent('blur', function (){
				if(elFormInput.value.trim() == '') {
					elFormInput.value = searchHint;
					elFormInput.removeClass('focus');
				}
			});
		
			elFormInput.addEvent('focus', function (){
				if(elFormInput.value.trim() == searchHint.trim()) {
					elFormInput.value = '';
					elFormInput.addClass('focus');
				}
			});
			
			if(elFormInput.value.trim() == ''){
				elFormInput.value = searchHint;
			}else if(elFormInput.value != searchHint){
				elFormInput.addClass('focus');
			}	
		});
	});
	
}
