/**
 * default.js JavaScript for Stichting PIV website
 *
 * @copyright eFocus
 * @since 31 aug 2010
 * @require MooTools 1.2.4 core (http:/www.mootools.net)
 */

window.addEvents({
	'domready': function() {
		setDefaultInputText();
		postFilter('form.participants');
		removeTagsWhenEmpty("div.subnav","h2");
		initAccordion();
		new RoutePlanner();
		facetNav();
		ie6ShowMenu();
    },
	'load': function(){
		findExternalLinks();
		initSubMenuWidth();
		setColumnSizes("div.contentsmall", "div.navigation");
		setColumnSizes("div.content", "div.navigation");
	}
});




/**
 * Submit Kluwer form
 *
 * @author Vincent
 * @version 1.0, 9 march, 2011
 * @return void
 */
function submitKluwerForm(username){
	
	username = username.replace(/\s+/g," ");

	// category, action, opt_label, opt_value
	_gaq.push(['_trackEvent', 'Kluwer', 'login', username]);
	
	document.kluwerlogin.submit();
}


/**
 * Ie6 fix for hiding and displaying menu
 *
 * @author Lowen <lowen@efocus.nl>
 * @version 1.0, 2 jul, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @return void
 */

function ie6ShowMenu() {
	isIE6 = navigator.userAgent.toLowerCase().indexOf('msie 6') != -1;
	arrSubmenus = document.getElements('ul.menu li div.submenu');
	if(!isIE6 || arrSubmenus.length == 0) return false;
	
	arrSubmenus.each(function(elSubmenu) {
		var elMainMenu = elSubmenu.getParent('li');
		elMainMenu.addEvents({
			'mouseover': function() {
				elMainMenu.addClass('showmenu');
			},
			'mouseleave': function() {
				elMainMenu.removeClass('showmenu');
			}
		});
	});
}


/**
 * Sets the width of submenu bg
 *
 * @author Phi Son Do <phison.do@efocus.nl>
 * @version 1.0, 2 jul, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @return void
 */
function initSubMenuWidth(){
	var arrMenuListItems = $$('div.menu ul li.mainlink');	 
	
	arrMenuListItems.each(function(elMenuListItem){
		var elMenuListItemWidth = elMenuListItem.getWidth();
		var elSubMenuBg = elMenuListItem.getElement('span.menubg');
		
		if(elSubMenuBg){
			elSubMenuBg.setStyle('width', elMenuListItemWidth);	
		};
	});	
}

function resetSearch() {
	tx_piv_facetnavigatieresetAll();
	
	var arrInputFields = $$('.defaultText');
	
	if(arrInputFields){
		arrInputFields.each(function(elInputField) {
			elInputField.value = "Vul zoekterm(en) in";
		});
	}
}

/**
 * Toggles default text in text inputfields
 *
 * @author Phi Son Do<phison.do@efocus.nl>
 * @author Lee Boonstra<lee.boonstra@efocus.nl>
 * @version 1.0, 6 mei, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @requires MooTools 1.2.4 More, <http://www.mootools.net> 
 * @return void
 */
function setDefaultInputText() {
	var arrInputFields = $$('.defaultText');
	
	if(arrInputFields){
		arrInputFields.each(function(elInputField) {
			elInputField.defaultText = "Vul zoekterm(en) in";
			
			elInputField.addEvents({
				'focus': function() {
					if (elInputField.value == elInputField.defaultText) {
						elInputField.value = '';
					}
				},
				'blur': function() {
					if (elInputField.value == '') {
						elInputField.value = elInputField.defaultText;
					}
				}
			});
			
			elInputField.getParent("form").addEvents({
				'submit': function() {
					if(elInputField.value == "Vul zoekterm(en) in" ||
					elInputField.value == "Vul een zoekterm in"){
						elInputField.value = "";
					}
				}
			});
		});
	}
	
}

/**
 * Resizes the page columns
 *
 * @author Lee Boonstra <lee.boonstra@efocus.nl>
 * @version 1.0, 2 jul, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @return void
 */
function setColumnSizes(elContentCol, elCol){
	if($$(elContentCol)[0] && $$(elCol)[0]){
		var intLeftColLength = $$(elCol)[0].getStyle("height").toInt();
		var intCenterColLength = $$(elContentCol)[0].getStyle("height").toInt();
		
		if(intCenterColLength > intLeftColLength) {
			$$(elCol)[0].setStyle("min-height",intCenterColLength);
		}
	}
}

/**
 * Opens external links valid in a new window without the target attribute.
 * 
 * @author Mirjam Verloop, <mirjam.verloop@efocus.nl>
 * @version 1.0, 12 feb, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @requires <a href="http://www.efocus.nl/" class="external">eFocus</a>
 * @return void
 */
function initExternalLinks() {
	var arrExternalLinks = $$('a.external');
	if (arrExternalLinks.length > 0) {
		arrExternalLinks.each(function(elExternalLink) {
			elExternalLink.addEvent('click', function(event) {
				event.stop();
				window.open(this.get('href'));
			});
		});	
	}
}

/**
 * Find all external links, and add class External
 * 
 * @author Mirjam Verloop, <mirjam.verloop@efocus.nl>
 * @version 1.0, 12 feb, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @requires <a href="http://www.efocus.nl/" class="external">eFocus</a>
 * @return void
 */
function findExternalLinks() {
	
	var allExternalLinks = $$('a[href^="http://"]');
	var thisDomain = window.location.host;
	
	allExternalLinks.each(function(thisLink) {
		
		if (!thisLink.get('href').contains(thisDomain) && thisLink.hasClass("linkBlocker") == false) {
			thisLink.addClass('external');
		}
				
	});
	
	initExternalLinks();	
}

/**
 * Loads a google map with a custom route for multiple locations.
 * 
 * @author Lee Boonstra <lee.boonstra@efocus.nl>
 * @version 2.0, 18 aug, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @requires Google Maps script: http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;key=...
 * @return void
 */
RoutePlanner = new Class({
	Implements: [Options],
	options: {
		blnOpenMapInSamePagePanel: "true",
		strElIdRoutePlanner: "routemap",
		strElIdRouteDirections: "routedirections",
		strElIdRouteForm: "routeinput",
		strElIdRouteButton: "routebutton",
		strLocale: "nl_NL", 
		strElClassName: "span.company_name",
		strElClassStreet: "span.company_street",
		strElClassPostal: "span.company_postal",
		strElClassCity: "span.company_city",
		strElClassRoutePanel: "div.routeplanner",
		strElClassPlanButton: "a.plan"
	},
	initialize: function(options) {
		this.setOptions(options);
		
		if($(this.options.strElIdRoutePlanner)){
			if (GBrowserIsCompatible()){
				this.url = window.location.href;
				this.objMap = new GMap2($(this.options.strElIdRoutePlanner));
				this.objGeocoder = new GClientGeocoder();
				this.objGdir = new GDirections(this.objMap, $(this.options.strElIdRouteDirections));
				this.strAddress = "";
				this.setMap(0);
				this.getEvents();		
			}	
		}
	},
	getName: function(i){
		return $$(this.options.strElClassName)[i].get('html');
	},
	getStreet: function(i){
		return $$(this.options.strElClassStreet)[i].get('html');
	},
	getPostal: function(i){
		var strPostal = $$(this.options.strElClassPostal)[i].get('html');
		return strPostal.slice(0,4);
	},
	getCity: function(i){
		return $$(this.options.strElClassCity)[i].get('html');		
	},
	getAddress: function(i){
		return this.getStreet(i) + ', ' + this.getPostal(i) + ' ' + this.getCity(i);	
	},
	getBalloonContent: function(i){
		return '<h4>' + this.getName(i) + '</h4>' + '<p>' + this.getStreet(i) + '<br />' + this.getCity(i) + '</p>';
	},
	getEvents: function(){
		var arrPlanRouteBtn = $$(this.options.strElClassPlanButton);
		var elRouteForm = $(this.options.strElIdRouteForm);
		var elRouteBtn = $(this.options.strElIdRouteButton);
				
		//multiple route links
		arrPlanRouteBtn.each(function(item,index){
			item.addEvent('click', function(){
				if(this.options.blnOpenMapInSamePagePanel == "true"){
					$$(this.options.strElClassRoutePanel)[0].setStyle("height","auto");	
					$$(this.options.strElClassRoutePanel)[0].setStyle('visibility', 'visible');
				}
				this.setMap(index);
				if(elRouteForm.value != ""){
					this.objGdir.load('from: ' + elRouteForm.value + ' to: ' + this.strAddress, { 'locale': this.options.strLocale });
				}
				window.location.href = this.url + "#anchor";
			}.bind(this));
		}.bind(this));
				
		//route planner form submit
		elRouteBtn.addEvent('click', function(){
			this.objGdir.load('from: ' + elRouteForm.value + ' to: ' + this.strAddress, { 'locale': this.options.strLocale });
			elRouteBtn.removeEvent('click');
		}.bind(this));
		elRouteForm.addEvent('keydown', function(e){
			if(e.key == 'enter') {
				this.objGdir.load('from: ' + elRouteForm.value + ' to: ' + this.strAddress, { 'locale': this.options.strLocale });	
			}
			elRouteBtn.removeEvent('keydown');
		}.bind(this));
				
	},
	setMap: function(i){
		this.strAddress = this.getAddress(i);
		var strBalloonContent = this.getBalloonContent(i);
		this.objGeocoder.getLatLng(
			this.strAddress,
			function(point) {
				if (!point) {
					alert(this.strAddress + " not found");
				} else {
					this.objMap.setCenter(point, 12);
											
					var objMarker = new GMarker(point);
					this.objMap.addOverlay(objMarker);

					this.objMap.setCenter();
					this.objMap.setUIToDefault();
					objMarker.openInfoWindowHtml(strBalloonContent);
					
					GEvent.addListener(objMarker, "click", function() {
						objMarker.openInfoWindowHtml(strBalloonContent);
					});		
				}
			}.bind(this)
		);	
	}
});


/**
 * Post on Change filter
 * @author Lee Boonstra <lee.boonstra@efocus.nl>
 * @param strElClass class name of the element above the select
 * @version 1.00, 16 aug, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @return void
 */
function postFilter(strElClass){
	if($$(strElClass).length > 0){
		var elForm = $$(strElClass)[0];
		var elSelect = elForm.getElement("select");
		if(elSelect){
			elSelect.addEvent('change', function(e){
				var elInputField = elForm.getElement("input");
				if(elInputField.value == "Vul zoekterm(en) in" ||
					elInputField.value == "Vul een zoekterm in"){
					elInputField.value = "";
				}
				
				elForm.submit();
			});	
		}
	}
}

/**
 * Check if element has no content (unless exception) or has a tag class="hidden", 
 * remove the tag from the DOM.
 * 
 * @param strClassNameEl - the class name of the element to check
 * @param strClassNameException - the class name of the element exeption
 * @author Lee Boonstra <lee.boonstra@efocus.nl>
 * @version 1.0, 6 jul, 2010
 * @requires MooTools 1.2.4 Core, <http://www.mootools.net>
 * @return void
 */
function removeTagsWhenEmpty(strClassNameEl, strClassNameException){
	var elToCheck = $$(strClassNameEl);
 	if(!$defined(elToCheck[0])) return  false;
		
	if((elToCheck[0].getChildren().length < 1) || 
	(elToCheck[0].getChildren().length == 1 && elToCheck[0].getElement(strClassNameException)) ||
	elToCheck[0].getChildren().get("class") == "hidden"){
		elToCheck[0].dispose();	
	}
}


/**
 * creates and shows notification
 *
 * @author Klaas Dieleman<klaas[AT]efocus.nl>
 * @param string - text to show in notification body
 * @return void
 */
function showNotification(strText) {
	objFormNotification = new notification({'cssClass': 'notification', 'text': strText, 'position': 'center', 'duration': 10, 'fadetime': 0.5});
    objFormNotification.show($(document.body));
}


/**
 * initializes accordion in F4 rightcol
 * @author Klaas Dieleman <klaas{AT}efocus.nl>
 * @author Phi Son Do <phison.do{AT}efocus.nl>
 * @return void
 */
function initAccordion() {
	var arrDivHolders = $$('div.newslettermenu');
	
	if (arrDivHolders) {
		var objAccordion = new Accordion(arrDivHolders.getElements('h3.title'), arrDivHolders.getElements('ul.sub'), {			
			opacity: 0,
			show: -1,
			onActive: function(toggler, element){
				toggler.addClass('open');
				element.addClass('open');
			},
			onBackground: function(toggler, element){
				toggler.removeClass('open');
				element.removeClass('open');
			}
		});
	};
}


/**
 * Filters the faceted results by showing only the first four items.
 * 
 * @author Ralph Meeuws <ralph.meeuws[AT]efocus.nl>
 * @since dec 2010
 * @return void
 */
function facetNav() {
	
	if (!$defined($('facetblock'))) return false;
	
	var intFacetLimit = 4;
	var elLink = new Element('a');
	var elListItemFilterControl = new Element('li', {'class': 'filter_control'});
	
	var elListItemFilterControlMore = elListItemFilterControl.clone();
	var elListItemFilterControlLess = elListItemFilterControl.clone();
	
	var elLinkMore = elLink.clone();
	elLinkMore.addClass('more');
	elLinkMore.set('text', 'Meer +');
	
	var elLinkLess = elLink.clone();
	elLinkLess.addClass('less');
	elLinkLess.set('text', 'Verbergen -');
	
	var elListItemMore = elLinkMore.clone().inject(elListItemFilterControlMore);
	var elListItemLess = elLinkLess.clone().inject(elListItemFilterControlLess);
	
	var arrMainFacets = $(document).getElements('#facetblock > ul > li');
	var arrAllSubFacets = $(document).getElements('#facetblock > ul > li > ul > li');
	
	var filterItems = function(elList, arrListItems){
		arrListItems.each(function(elListItem, intIndex){
			if (intIndex > intFacetLimit - 1) {
				elListItem.hide();
			}
		});
		var elMore = elListItemFilterControlMore.clone();
		elMore.getElement('a').addEvent('click', function(){
			var elParentList = elMore.getParent('ul');
			showItems(elParentList, elParentList.getChildren('li'));
		});
		elMore.inject(elList);
	}
	
	var showItems = function(elList, arrListItems){
		arrListItems.each(function(elListItem, intIndex){
			if (intIndex > intFacetLimit - 1) {
				elListItem.show();
			}
			if (elListItem.hasClass('filter_control')) elListItem.dispose();
		});
		var elLess = elListItemFilterControlLess.clone();
		elLess.getElement('a').addEvent('click', function(){
			var elParentList = elLess.getParent('ul');
			filterItems(elParentList, elParentList.getChildren('li'));
		});
		elLess.inject(elList);
	}
	
	arrMainFacets.each(function(elMainFacet){
		if (elMainFacet.getElement('ul')) {
			var elSubFacetList = elMainFacet.getElement('ul');
			var arrSubFacets = elSubFacetList.getChildren('li');
			if (arrSubFacets.length > intFacetLimit) filterItems(elSubFacetList, arrSubFacets);
			
			arrSubFacets.each(function(elSubFacet){
				if (elSubFacet.getElement('h4')) {
					elSubFacet.getElement('h4').addEvent('click', function(){
						elSubFacet.toggleClass('open');
					});
				}
				if (elSubFacet.getElement('ul')) {
					var elKeywordList = elSubFacet.getElement('ul');
					var arrKeywords = elKeywordList.getChildren('li');
					if (arrKeywords.length > intFacetLimit) filterItems(elKeywordList, arrKeywords);
					elSubFacet.getElements('a').each(function(elKeywordLink){
						if (elKeywordLink.hasClass('active')) elSubFacet.addClass('open');
					});
				}
			});
		}
	});
}
