window.addEvents({

	'domready': function() {

		initAccordion();
		initMenu();
		initMap();
		initMapFullScreen();
		filterMap();
		initSearchResult();
		findExternalLinks();

		if ($$('div.content_box div.teaser').length > 0) {

			var intCols = 1;

			if (document.getElements('div.col_content_large').length > 0) {
				intCols = 3;
			}
			if (document.getElements('div.col_content_mid').length > 0) {
				intCols = 2;
			}

			makeEqualHeight($$('div.content_box div.teaser'), intCols);

		}

		if (typeof (context_item_lat) != "undefined" && typeof (context_item_lng) != "undefined") {
			positionMap();
		}

		requestFormSituations();

		if (document.getElement('div.schoolsmap a.show_fullscreen')) {
			document.getElement('div.schoolsmap a.show_fullscreen').addEvent('click', function(e) {
				
				e.stop();
				window.open(this.getProperty('rel'), '', 'width=1000,height=612');
				return false;

			});
		}

	}

});

/**
* equals the height of the elements in an array
*
* @author Mirjam
* @since 1.0, dec 2010
* @param array - elements to equalize
* @param integer - optional amount of columns per row
*/

function makeEqualHeight(arrElements, intColumns) {
	
	var intMaxheight = 0;
	var arrCurrentRow = new Array();
	
	arrElements.each(function(item, index) {
		
		item.setStyle('height', 'auto');
		var intHeight = item.getSize().y;
		if (intHeight > intMaxheight) {
			intMaxheight = intHeight;
		}
		arrCurrentRow.push(item);
		
		
		if((index+1)%intColumns == 0) {
			arrCurrentRow.each(function(el) {
				el.setStyle('height', intMaxheight);
			});
			intMaxheight = 0;
			arrCurrentRow = [];
		}
		
	});
	
	arrCurrentRow.each(function(el) {
		el.setStyle('height', intMaxheight);
	});
	
}




/**
 *
 * puts faq list in an accordion
 *
 * @editor Phi Son Do <phison.do{AT}efocus.nl>
 * @return void
 */
function initAccordion() {	
	if (!$$('div.faq')[0]) return false;

	specsAccordion = new Accordion($$('div.faq ul li h3'), $$('div.pane'), {
		onActive: function(toggler){
			toggler.getParent().addClass('open');
		},
		onBackground: function(toggler){
			toggler.getParent().removeClass('open');
		},
		alwaysHide: true,
		show: 0,
		opacity: false
	});	
}


/**
 * Creates Googlemap with marker clustering
 * 
 * @author Mirjam
 * @since  dec 2010
 * @return void
 */
function initMap () {
	
	if (!$('map')) return false;
	if ($('map').hasClass('map_fullscreen')) { return false; }
	
	var clusterStyles = [
		 {
			url: '/img/Corporate/clusterer.png',
			height: 38,
			width: 25,
			anchor: [3, 0],
			textColor: '#ffffff',
			textSize: 11
		 }
	];
	
	var elAjaxLoader = document.getElement('div.schoolsmap div.ajaxloader');
	elAjaxLoader.getElement('div.bg').setOpacity(0.8);
	
	var arrSchoolsMap = [];
	
	document.getElementById('map').map = new GoogleMaps({
		'mapContainer'		: document.getElementById('map'), 
		'mapZoom'			: 2, // NOBSUP-11, bug van google, zet terug naar 1 als het weer opgelost is
		'mapCenter'			: {lat: 36.116579, lng: 0},
		'mapMapType'		: google.maps.MapTypeId.ROADMAP,
		'streetView'		: false,
		'mapMarkerData'		: arrSchoolsMap,
		'customIcon'		: '/img/Corporate/marker_1.png',
		'customActiveIcon'	: '/img/Corporate/marker_active.png',
		'clusterStyles'		: clusterStyles,
		'clusterMaxZoom'	: 5,
		'infoWindowClass'	: 'map_info',
		'ajaxLoader'		: document.getElement('div.ajaxloader')
	});
	filterMap();
	// cookie set?
	if (Cookie.read('nob_schools')) {

		var schoolsCookie = Cookie.read('nob_schools').split('|');
		var position = schoolsCookie[0].split(",");
		
		document.getElementById('map').map.positionMapCenterZoom(
			position[0].replace('(', ''),
			position[1].replace(')', '').trim(),
			schoolsCookie[1].toInt()
		);

		// cookie weg
		Cookie.dispose('nob_schools');
		
	}

	var arrMapFilterOptions = document.getElements('fieldset.map_filters input[name!=select_all]');
	if (arrMapFilterOptions.length > 0) { 
		
		arrMapFilterOptions.each(function(elFilterOption) {
			
			elFilterOption.addEvent('click', function(){
			    
			    if (elFilterOption.checked == false) {	
					elSelectAll.checked = false;
			    }
			    		    
			    filterMap();
			    
			});

		});
			
	}

	var elSelectCountry = document.getElements('fieldset.map_filters select');
	if (elSelectCountry) {

		elSelectCountry.addEvent('change', function() {

			document.getElementById('map').map.positionMapAddress(this.get('value'));
			filterMap();

		});
		
	}
	
	
	var elSelectAll = document.getElement('fieldset.map_filters input[name=select_all]');
	elSelectAll.addEvent('click', function() {
		
		if (elSelectAll.getProperty('checked') == true) {
			
			arrMapFilterOptions.each(function(elFilterOption) {
				elFilterOption.setProperty('checked', true);
			});	
			
		} else {
		
			arrMapFilterOptions.each(function(elFilterOption) {
				elFilterOption.setProperty('checked', false);
			});	
		
		}
			
	});
	
	var elShowAll = document.getElement('fieldset.map_filters a.more');
	elShowAll.addEvent('click', function(e){
		e.stop();
		resetMap();
	});	
	
}

/**
 * Creates Googlemap with marker clustering, fullscreen
 * 
 * @author Mirjam
 * @since  april 2010
 * @return void
 */
function initMapFullScreen() {

	if (!$('map')) return false;
	if ($('map').hasClass('map_fullscreen') == false) { return false; }
	
	var clusterStyles = [
		 {
		 	url: '/img/Corporate/marker.png',
		 	height: 38,
		 	width: 25,
		 	anchor: [3, 0],
		 	textColor: '#ffffff',
		 	textSize: 11
		 }
	];

	var elAjaxLoader = document.getElement('div.schoolsmap div.ajaxloader');
	elAjaxLoader.getElement('div.bg').setOpacity(0.8);

	var arrSchoolsMap = [];

	document.getElementById('map').map = new GoogleMaps({
		'mapContainer': document.getElementById('map'),
		'mapZoom': 2,
		'mapCenter': { lat: 36.116579, lng: 0 },
		'mapMapType': google.maps.MapTypeId.ROADMAP,
		'streetView': false,
		'mapMarkerData': arrSchoolsMap,
		'customIcon': '/img/Corporate/marker_1.png',
		'customActiveIcon': '/img/Corporate/marker_active.png',
		'clusterStyles': clusterStyles,
		'clusterMaxZoom': 5,
		'infoWindowClass': 'map_info',
		'ajaxLoader': document.getElement('div.ajaxloader'),
		'showInfoWindow': true,
		'fullScreenMode': true
	});
	
}


/**
 * Get new markerdata, refreshes map based on filter options
 * 
 * @author Mirjam
 * @since  dec 2010
 * @return void
 */
function filterMap (blnReset) {

	if (!document.getElementById('map')) { return false; }
	
	var strFilter = '';
	var arrFilterOptions = document.getElements('fieldset.map_filters input');
	
	var arrSchoolsMap = new Array();
	var arrSchools = new Array();
	
	for (var s = 0; s < arrFilterOptions.length; s++) {
		if (arrFilterOptions[s].checked == true) {
			if (s != 0) {
				strFilter += ",";
			}
			strFilter += arrFilterOptions[s].get('value');
		}
	}
	
	if (blnReset == true) {
		for (var s = 0; s < arrFilterOptions.length; s++) {
			arrFilterOptions[s].checked = false;
		}
		strFilter = '';
	}

	var elSelectCountry = document.getElements('fieldset.map_filters select');
	var strCountry = '';

	if (elSelectCountry.length > 0) {
		strCountry = elSelectCountry.get('value')[0];
	}

	if (blnReset == true) {
		strCountry = '';
		elSelectCountry.set('value', '');
	}

	eFocus.NOB.Corporate.services.Corporate.F19_School_pagina_kaart.GetFilteredScholen(strFilter, strCountry, function(result, params) {

		if (result) {
			arrSchools = result;

			for (i in arrSchools) {
			if (typeof (arrSchools[i]) == 'object') {
			arrSchoolsMap.push(arrSchools[i]);
			}
			}

			if (arrSchools.length == 0) {
				// show afstandsonderwijs
				getDefaultOrganisations();
				
			} else {

				// show on map
				document.getElementById('map').map.refreshMarkers(arrSchoolsMap);

				// and resultlist
				if ($('map').hasClass('map_fullscreen') == false) {
					createSchoolList(arrSchoolsMap);
				}

			}

		}
		else {

			arrSchools = [];

		}

	}, null, null);
		
}

/**
 * get default organisations to display with zero results
 * 
 * @author Mirjam
 * @since  april 2010
 * @return void
 */
function getDefaultOrganisations() {

	eFocus.NOB.Corporate.services.Corporate.F19_School_pagina_kaart.GetFilteredScholen('OV_AO_PO,OV_AO_VO', '', function(result, params) {
		if (result) {

			var arrSchoolsMap = new Array();
			var arrSchools = result;

			for (i in arrSchools) {
				if (typeof (arrSchools[i]) == 'object') {
					arrSchoolsMap.push(arrSchools[i]);
				}
			}

			createSchoolList(arrSchoolsMap);
			document.getElementById('map').map.refreshMarkers(arrSchoolsMap);
			
		}
	});
}

/**
 * positions map to specific lat/long
 * 
 * @author Mirjam
 * @since  dec 2010
 * @return void
 */
function positionMap () {
	
	// reposition map
	document.getElementById('map').map.positionMap(context_item_lat, context_item_lng);
		
}

/**
 * Resets map: zoom to start position, uncheck boxes
 * 
 * @author Mirjam
 * @since  dec 2010
 * @return void
 */
function resetMap () {
	
	filterMap(true);
	document.getElementById('map').map.resetMap();
	
}

/**
* Shows search result in list below map
* 
* @author Mirjam
* @since  april 2011
* @return void
*/
function createSchoolList(schools) {

	if (!document.getElement('div.school_default')) { return false; }
	
	if (schools.length > 0) {

		if (document.getElements('ul.school_result')) {
			document.getElements('ul.school_result').dispose();
		}
		
		// new list for every schooltype
		// ntc-po
		var elSchoolListNTCPO = new Element('ul');
		elSchoolListNTCPO.addClass('school_result');
		elSchoolListNTCPO.addClass('school_result_ntc_po');
		var elSchool = new Element('li', {
			html: '<h2>NTC - PO (deeltijd)</h2>'
		});
		elSchool.inject(elSchoolListNTCPO);
		elSchoolListNTCPO.inject(document.getElement('div.school_default'));

		// nederlandstalig po
		var elSchoolListNEDPO = new Element('ul');
		elSchoolListNEDPO.addClass('school_result');
		elSchoolListNEDPO.addClass('school_result_ned_po');
		var elSchool = new Element('li', {
			html: '<h2>Volledig Nederlandstalig PO</h2>'
		});
		elSchool.inject(elSchoolListNEDPO);
		elSchoolListNEDPO.inject(document.getElement('div.school_default'));

		// NTC-VO
		var elSchoolListNTCVO = new Element('ul');
		elSchoolListNTCVO.addClass('school_result');
		elSchoolListNTCVO.addClass('school_result_ntc_vo');
		var elSchool = new Element('li', {
			html: '<h2>NTC-VO (deeltijd) </h2>'
		});
		elSchool.inject(elSchoolListNTCVO);
		elSchoolListNTCVO.inject(document.getElement('div.school_default'));

		// nederlandstalig vo
		var elSchoolListNEDVO = new Element('ul');
		elSchoolListNEDVO.addClass('school_result');
		elSchoolListNEDVO.addClass('school_result_ned_vo');
		var elSchool = new Element('li', {
			html: '<h2>Volledig Nederlandstalig VO</h2>'
		});
		elSchool.inject(elSchoolListNEDVO);
		elSchoolListNEDVO.inject(document.getElement('div.school_default'));

		// afstandsonderwijs
		var elSchoolListAFSTAND = new Element('ul');
		elSchoolListAFSTAND.addClass('school_result');
		elSchoolListAFSTAND.addClass('school_result_afstand');
		var elSchool = new Element('li', {
			html: '<h2>Afstandsonderwijs </h2>'
		});
		elSchool.inject(elSchoolListAFSTAND);
		elSchoolListAFSTAND.inject(document.getElement('div.school_default'));

		schools.each(function(school) {

			if (school.title != undefined) {
					
				var arrSchoolTypes = school.onderwijsvormen.split(',');
				arrSchoolTypes.each(function(type) {

					type = type.split(' ').join('');
					
					if (type == 'NTC-PO(deeltijd)') {
						var elSchool = new Element('li', {
							html: '<a href="' + school.url + '"><strong>' + school.plaats + '</strong> : ' + school.title + '</a>'
						});
						elSchool.inject(elSchoolListNTCPO);
					}

					if (type == 'NTC-VO(deeltijd)') {
						var elSchool = new Element('li', {
							html: '<a href="' + school.url + '"><strong>' + school.plaats + '</strong> : ' + school.title + '</a>'
						});
						elSchool.inject(elSchoolListNTCVO);
					}

					if (type == 'VolledigNederlandstaligPO') {
						var elSchool = new Element('li', {
							html: '<a href="' + school.url + '"><strong>' + school.plaats + '</strong> : ' + school.title + '</a>'
						});
						elSchool.inject(elSchoolListNEDPO);
					}

					if (type == 'VolledigNederlandstaligVO') {
						var elSchool = new Element('li', {
							html: '<a href="' + school.url + '"><strong>' + school.plaats + '</strong> : ' + school.title + '</a>'
						});
						elSchool.inject(elSchoolListNEDVO);
					}

					if (type == 'Afstandsonderwijs') {
						var elSchool = new Element('li', {
							html: '<a href="' + school.url + '"><strong>' + school.plaats + '</strong> : ' + school.title + '</a>'
						});
						elSchool.inject(elSchoolListAFSTAND);
					}

				});

			}

		});
		
		var arrFilterOptions = document.getElements('fieldset.map_filters input');
		var checked = 0;
		arrFilterOptions.each(function(option) {
			if (option.checked == true) {
				checked++;
			}
		});


		document.getElements('ul.school_result').each(function(ul, index) {

			var thisOption = document.getElements('fieldset.map_filters input')[index + 1];
			if (checked > 0) {
				if (ul.getChildren().length == 1) {
					ul.setStyle('display', 'none');
				}
				if (thisOption.checked != true) {
					if (ul.hasClass('school_result_afstand') == false) {
						ul.setStyle('display', 'none');
					}
				}
			} else {
				if (ul.getChildren().length == 1) {
					if (ul.hasClass('school_result_afstand') == false) {
						ul.setStyle('display', 'none');
					}
				}
			}

		});
		
	}

}

/**
 * Initializes menu
 * 
 * @author Mirjam
 * @since  dec 2010
 * @return void
 */
function initMenu () {
	
	if (!document.getElement('ul.mainnav')) { return false };
	
	var arrMainItems = document.getElements('ul.mainnav>li');
	var timer;
	
	arrMainItems.each(function(elMainItem) {
		elMainItem.addEvent('mouseenter', function(){
		   
			arrMainItems.removeClass('hover');
			arrMainItems.getElement('ul').setStyle('left', '-9999em');
						   
			clearTimeout(timer);
			elMainItem.addClass('hover');
			
			var intStartMainnav = elMainItem.getParent('ul').getCoordinates(elMainItem.getParent('div.header')).left;
			var intStartPulldown = elMainItem.getCoordinates(elMainItem.getParent('div.header')).left - 15;
			var intWEl = elMainItem.getCoordinates(elMainItem.getParent('div.header')).width;
			var intMaxW = document.getElement('div.header').getSize().x;
			var intWPulldown = 550;
			
			if ((intStartPulldown + intWPulldown) > intMaxW) {
				intStartPulldown = intStartPulldown + intWEl - intWPulldown + 30;
			}
			
			elMainItem.getElement('ul').setStyle('left', intStartPulldown - intStartMainnav);
			
		});
		
		elMainItem.addEvent('mouseleave', function(){
		   timer = hideMenu.delay(250, this, elMainItem);
		});
		
	});
	
}

/**
 * Hides menu
 * 
 * @author Mirjam
 * @since  dec 2010
 * @return void
 */
function hideMenu (elMenu) {
	
	elMenu.removeClass('hover');
	elMenu.getElement('ul').setStyle('left', '-9999em');

}

/*
* Adds interactivity to the search field in the search page.
* 
* @author Barend van der Hout (barend[AT]efocus.nl)
*/
function initSearchResult() {
	
	if (document.getElements('fieldset.searchbox').length == 0) return false;
	
	document.getElements('fieldset.searchbox').each(function(elSearchForm) {
		
		var elHeaderSearchBox = elSearchForm;
		var elHeaderSearchText = elHeaderSearchBox.getElement('.search_text');
		var elHeaderSearchBtn = elHeaderSearchBox.getElement('.submit');
		
		if (!elHeaderSearchText || !elHeaderSearchBtn) return false;
	    
		var strHeaderSearchTextDefault = elHeaderSearchText.getProperty('value');
		
		elHeaderSearchText.addEvents({
                'focus': function() {
					if (elHeaderSearchText.getProperty('value') == strHeaderSearchTextDefault) elHeaderSearchText.setProperty('value', '');
				},
				'blur': function() {
					if (elHeaderSearchText.getProperty('value') == '') elHeaderSearchText.setProperty('value', strHeaderSearchTextDefault);
				},
                'keydown': function(e) {
                    if (e.key == 'enter') {
                        if (elHeaderSearchText.get('value') != '') {
							e.stop();
							elHeaderSearchBtn.fireEvent('click');
						}
                    }
                }
            });
		
		elHeaderSearchBtn.addEvent('click', function() {
			
			if (elSearchForm.getParent('div.searchresults')) {
				var searchType = $('searchTypeNews').checked ? $('searchTypeNews').value : ($('searchTypeSchools').checked ? $('searchTypeSchools').value : '');
	        } else {
	        	var searchType = '';
			}
			
			window.location = this.href + "?q=" + elHeaderSearchText.getProperty('value') + (searchType ? "&searchtype=" + searchType : '');
			return false;
			
		});
    
    });
    
}

/**
 * Opens external links valid in a new window without the target attribute.
 * 
 * @author Lowen (lowen[AT]efocus.nl)
 * @uses <a href="http://www.efocus.nl/" class="external">eFocus</a>
 */
function initExternalLinks() {
    var arrExternalLinks = $$('a.external');
    if (arrExternalLinks.length == 0) return false;
    
    arrExternalLinks.each(function(elExternalLink) {
        elExternalLink.addEvent('click', function(event) {
            event.stop();
            window.open(this.get('href'));
        });
    });
}


/**
 * add class external to external links
 * 
 * @author Mirjam (mirjam[AT]efocus.nl)
 * @author Lowen (lowen[AT]efocus.nl
  */
function findExternalLinks () {
    var allExternalLinks = $$('a[href^="http://"]').combine($$('a[href^="https://"]'));
    
    var thisDomain = window.location.host;
    
    allExternalLinks.each(function(thisLink) {
		
		if (!thisLink.get('href').contains(thisDomain) && !thisLink.rel.contains('shadowbox') && !thisLink.hasClass('addthis_button_compact')) {
			thisLink.addClass('external');
		}                        
    });
    
    initExternalLinks();
}


/**
 * Defines the interaction of the situations list of the request form.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 */
function requestFormSituations() {
	if (!$defined($(document).getElement('.situations'))) return false;
	
	var arrSituationRadios = $(document).getElements('.situations input[type=radio]');
	var elSituationRadioLast = arrSituationRadios[arrSituationRadios.length - 1];
	var elSituationText = $(document).getElement('.situations input[type=text]');
	
	arrSituationRadios.addEvent('focus', function(){
		if (this != elSituationRadioLast) {
			elSituationText.set('value', '');
		} else {
			elSituationText.focus();
		}
	});
	
	elSituationText.addEvent('focus', function(){
		elSituationRadioLast.set('checked', 'checked');
	});
}
