/////////////////////////////////////////// BASIC FUNCTIONS, DON'T EDIT ///////////////////////////////////////////

/*
 * 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[AT]efocus.nl)
 * @uses Mootools 1.2.1 JavaScript Library
 */
window.addEvents({
    'domready': function() { // Starts executing when the DOM structure of the page has been loaded.
        initExternalLinks();
        //	initRemoveLinkLines();
        initLightbox();

        fixLightboxHeightIE();
        fixPaginatorLastItem();
        //		initFieldsetSubmitButtons();

        initF1HeaderSearch();
        initF18Search();
        initF1HeaderLanguageDropDown();
        //loadF3PushboxSwiff();
        fixF9HoverIE6();
        initF9F10ProfileTabSwitcher();
        initF13TableBackgroundColor();
        initF15ListBackgroundColor();
        initF21OfficeMap();
        initF23LoginFieldInteraction();
        initF42ListBackgroundColor();
    },
    'load': function() { // Starts executing when the entire page has been loaded.

    }
});



/*
 * initExternalLinks
 * Used in order for certain links to open in a new window without the direct target attribute (so it validates properly).
 * 
 * @author CSD (clientsidedevelopers[AT]efocus.nl)
 * @uses <a href="http://www.efocus.nl/" rel="external">eFocus site</a>
 */
function initExternalLinks() {
	if (!document.getElementsByTagName) return; 
	var arrAnchors = document.getElementsByTagName("a"); 
	for (var i=0; i<arrAnchors.length; i++) { 
		var elAnchor = arrAnchors[i]; 
		if (elAnchor.getAttribute("href") && elAnchor.getAttribute("rel") == "external") {
			elAnchor.target = "_blank";
		}
	}
}



/*
 * initRemoveLinkLines
 * Removes the dotted lines around links, but breaks the Tab button on the keyboard: less accessability.
 * 
 * @author CSD (clientsidedevelopers[AT]efocus.nl)
 */
function initRemoveLinkLines() {
	$$('a').addEvent('focus', function(){this.blur()});
}



/*
 * initLightbox
 * Initializes the Shadowbox lightbox (shadowbox.js and shadowbox-mootools.js adapter needed!).
 * 
 * @author CSD (clientsidedevelopers[AT]efocus.nl)
 * @uses <a href="/siteimg/temp/visual.jpg" rel="shadowbox">View image in lightbox</a>
 */
function initLightbox() {
	var options = {
		animateFade: false,
		overlayOpacity: 0
	};

	Shadowbox.init(options);
}



/////////////////////////////////////////// CLIENT-SIDE JAVASCRIPT FUNCTIONS ///////////////////////////////////////////

/*
 * fixLightboxHeightIE
 * Fixes the height of the lightbox container in IE.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function fixLightboxHeightIE() {
	arrLinks = $$('a');
	if ((arrLinks.length == 0) || !(Browser.Engine.trident)) return;
	
	var intHeightOffset = 3;
	arrLinks.each(function(elLink){
		if (elLink.getProperty('rel')) {
			arrLinkRel = elLink.getProperty('rel').split('=');
			strHeightOld = arrLinkRel[arrLinkRel.length - 1];
			intHeightOld = strHeightOld.toInt();
			intHeightNew = intHeightOld + intHeightOffset;
			strHeightNew = intHeightNew.toString();
			arrLinkRel.erase(strHeightOld).include(strHeightNew);
			strLinkRel = arrLinkRel.join('=');
			elLink.setProperty('rel', strLinkRel);
			initLightbox();
		}
	});
}



/*
 * fixPaginatorLastItem
 * Fixes last item of paginator
 * 
 * @author Phison Do (phison.do[AT]efocus.nl)
 */
function fixPaginatorLastItem(){
	var arrPaginators = $$('.paginator');
	if (arrPaginators.length == 0) return;
	$$('.paginator').getElement(':last-child').addClass('last');
}



/*
 * initFieldsetSubmitButtons
 * Adds functionality to the submit button of a fieldset.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function initFieldsetSubmitButtons() {
	arrFieldsets = $$('fieldset');
	if (arrFieldsets.length == 0) return;
	
	arrFieldsets.each(function(elFieldset){
		elFieldsetLinkButton = elFieldset.getElement('a.link_button');
		if (elFieldsetLinkButton) {
			elFieldsetLinkButton.addEvent('click', function(){
	//			elFieldset.submit();
				// Login functionality goes here...
				alert('Submitting the form through JavaScript');
			});
		}
	});
}



/*
 * initF1HeaderSearch
 * Adds interactivity to the search field in the header.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function initF1HeaderSearch() {
	if (!$('header_search_box')) return;

	var elHeaderSearchBox = $('header_search_box');
	var elHeaderSearchText = elHeaderSearchBox.getElement('.header_search_text');
	var elHeaderSearchBtn = elHeaderSearchBox.getElement('.header_search_button');
	
	var strHeaderSearchTextDefault = elHeaderSearchText.getProperty('value');
	
	Element.Events.keyup_enter = {
		base: 'keyup',
		condition: function(event){
			return (event.key == 'enter');
		}
	};

	elHeaderSearchText.addEvents({
		'focus': function(){
			if (elHeaderSearchText.getProperty('value') == strHeaderSearchTextDefault) elHeaderSearchText.setProperty('value', '');
		},
		'blur': function(){
			if (elHeaderSearchText.getProperty('value') == '') elHeaderSearchText.setProperty('value', strHeaderSearchTextDefault);
		},
		'keyup_enter': function(){
			elHeaderSearchBtn.fireEvent('click');
		}
	});
	
	elHeaderSearchBtn.addEvent('click', function(){
		// Search action goes here...
	//alert('Search button clicked (or enter pressed)');
	window.location = '/Search.aspx' + "?q=" + elHeaderSearchText.getProperty('value');	
	});
}


/*
* initF18Search
* Adds interactivity to the search field in the search page.
* 
* @author Pim Bualert (pim.bualert[AT]efocus.nl)
*/
function initF18Search() {
    if (!$('searchbox')) return;

    var elHeaderSearchBox = $('searchbox');
    var elHeaderSearchText = elHeaderSearchBox.getElement('.search_text');
    var elHeaderSearchBtn = elHeaderSearchBox.getElement('.search_button');

    var strHeaderSearchTextDefault = elHeaderSearchText.getProperty('value');

    Element.Events.keyup_enter = {
        base: 'keyup',
        condition: function(event) {
            return (event.key == 'enter');
        }
    };

    elHeaderSearchText.addEvents({
        'focus': function() {
            if (elHeaderSearchText.getProperty('value') == strHeaderSearchTextDefault) elHeaderSearchText.setProperty('value', '');
        },
        'blur': function() {
            if (elHeaderSearchText.getProperty('value') == '') elHeaderSearchText.setProperty('value', strHeaderSearchTextDefault);
        },
        'keyup_enter': function() {
            elHeaderSearchBtn.fireEvent('click');
        }
    });

    elHeaderSearchBtn.addEvent('click', function() {
        // Search action goes here...
        //alert('Search button clicked (or enter pressed)');
        window.location = '/Search.aspx' + "?q=" + elHeaderSearchText.getProperty('value');
    });
}


/*
 * initF1HeaderLanguageDropDown
 * Adds interactivity to the language dropdown menu in the header.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function initF1HeaderLanguageDropDown() {
	if (!$('language_selector')) return;
	var elLanguageSelector = $('language_selector');
	
	var elLanguageSelectorList = elLanguageSelector.getElement('ul');
	var arrLanguageSelectorListItems = elLanguageSelectorList.getElements('li');
	
	elLanguageSelector.addEvents({
		'mouseenter': function(){
			elLanguageSelector.addClass('open');
		},
		'mouseleave': function(){
			elLanguageSelector.removeClass('open');
		}
	});

	arrLanguageSelectorListItems.each(function(elLanguageSelectorListItem){
		elLanguageSelectorListItem.addEvent('click', function(){
			arrLanguageSelectorListItems.each(function(elLanguageSelectorListItemOther, n){
				if (elLanguageSelectorListItem == arrLanguageSelectorListItems[n]) {
					elLanguageSelectorListItemOther.addClass('active');
				} else {
					elLanguageSelectorListItemOther.removeClass('active');
				}
			});
			elLanguageSelector.removeClass('open');
		});
	});
}



/*
 * initF3PushboxSwiff
 * Loads the F3 Pushbox Swiff in its holder.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function loadF3PushboxSwiff() {
	var arrF3 = $$('.f3_pushbox');
	if (arrF3.length == 0) return;
	
	arrF3.each(function(elF3){
		var elF3PushboxHolder = elF3.getElement('.page');
		elF3PushboxSwiff = new Swiff('../flash/main.swf', {
			id: 'homepage_pushbox',
			width: 944,
			height: 312,
			container: elF3PushboxHolder,
			params: {
				wMode: 'opaque'
			},
			vars: {
				xml: 'pushbox.aspx'
			}
		});
	});
	
}



/*
 * fixF9HoverIE6
 * Fixes the hover pseudoclass in IE6.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function fixF9HoverIE6() {
	var arrF9 = $$('.f9_profile_selection');
	if ((arrF9.length == 0) || !Browser.Engine.trident4) return;
	
	arrF9.each(function(elF9){
		elF9.getElements('li a').each(function(elF9ListLink){
			elF9ListLink.addEvents({
				'mouseenter': function(){
					elF9ListLink.addClass('hover');
				},
				'mouseleave': function(){
					elF9ListLink.removeClass('hover');
				}
			});	
		});
	});
}



/*
 * initF9F10ProfileTabSwitcher
 * Switches the profile data (F10) when navigating the profile selection (F9).
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function initF9F10ProfileTabSwitcher() {
	var arrF9F10 = $$('.f9f10_profile');
	if (arrF9F10.length == 0) return;
	
	arrF9F10.each(function(elF9F10){
		var elF9ProfileSelection = elF9F10.getElement('ul.f9_profile_selection');
		var elF10ProfileDataViewport = elF9F10.getElement('div.f10_profile_data');
		var elF10ProfileDataList = elF10ProfileDataViewport.getElement('ul');
		
		elF10ProfileDataList.set('tween', {duration: 500, transition: Fx.Transitions.Quart.easeOut});
		
		var arrF9ProfileSelectionListItems = elF9ProfileSelection.getElements('li');
		arrF9ProfileSelectionListItems.erase(arrF9ProfileSelectionListItems[0]);
		var arrF9ProfileSelectionLinks = elF9ProfileSelection.getElements('a');
		var arrF10ProfileDataListItems = elF10ProfileDataList.getChildren('li');
		var intProfileDataListItemWidth = arrF10ProfileDataListItems[0].getStyle('width').toInt();

		var intProfileDataListTotalWidth = 0;
		var intProfileDataListItemMaxHeight = 0;
		
		arrF9ProfileSelectionLinks.each(function(elF9ProfileSelectionLink, n){
			intProfileDataListTotalWidth = intProfileDataListTotalWidth + arrF10ProfileDataListItems[n].getStyle('width').toInt();
			intProfileDataListItemMaxHeight = (arrF10ProfileDataListItems[n].getSize().y > intProfileDataListItemMaxHeight) ? arrF10ProfileDataListItems[n].getSize().y: intProfileDataListItemMaxHeight;
			
			elF9ProfileSelectionLink.addEvent('click', function(){
				arrF9ProfileSelectionListItems.each(function(elF9ProfileSelectionListItem, p){
					if (elF9ProfileSelectionLink.getParent() == arrF9ProfileSelectionListItems[p]) {
						elF9ProfileSelectionListItem.addClass('active');
					} else {
						elF9ProfileSelectionListItem.removeClass('active');
					}
				});
				
				elF10ProfileDataList.tween('left', elF10ProfileDataList.getStyle('left').toInt(), -(n * intProfileDataListItemWidth));
			});
		});
		
		elF10ProfileDataList.setStyle('width', intProfileDataListTotalWidth);
		
		arrF10ProfileDataListItems.each(function(el10ProfileDataListItem){
			el10ProfileDataListItem.setStyle('height', intProfileDataListItemMaxHeight);
		});
		
		elF10ProfileDataList.tween('left', 0);
	});
}



/*
 * initF13TableBackgroundColor
 * Gives list background color
 * 
 * @author Phison Do (phison.do[AT]efocus.nl)
 */
function initF13TableBackgroundColor(){
	var arrF13 = $$('.f13_overview_clients_cases');
	if (arrF13.length == 0) return;
	
	arrF13.each(function(elF13){
		var elMainTable = elF13.getElement('table');
		var arrMainTableCellOdd = elMainTable.getElements('tr:even');		
			
		arrMainTableCellOdd.each(function (elMainTableCellOdd){
			elMainTableCellOdd.addClass('odd');
		});
	});
}



/*
 * initF15ListBackgroundColor
 * Gives list background color
 * 
 * @author Phison Do (phison.do[AT]efocus.nl)
 */
function initF15ListBackgroundColor(){
	var arrF15 = $$('.f15_overview_vacancies');
	if (arrF15.length == 0) return;
	
	arrF15.each(function(elF15){
		var elMainList = elF15.getElement('ul');
		var arrMainListItemsOdd = elMainList.getElements('li:even');
		
		arrMainListItemsOdd.each(function (elMainListItemOdd){
			elMainListItemOdd.addClass('odd');
		});
	});
}



/*
 * initF21OfficeMap
 * Loads a map using Google Maps.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 * @editor Phison Do (phison.do[AT]efocus.nl)
 */
function initF21OfficeMap() {
	if (!$('office_map')) return;
	
	var elOfficeMap = $('office_map');

	var strOfficeName = $('office_name').get('html');
	var strOfficeStreet = $('office_street').get('html');
	var strOfficeCity = $('office_city').get('html');
	var strBalloonContent = '<h4>' + strOfficeName + '</h4>' + '<p>' + strOfficeStreet + '<br />' + strOfficeCity + '</p>';
//	var strBalloonContent = strBalloonContent + '<p>' + 'Get directions: <a href="#" title="To here">To here</a> - <a href="#" title="From here">From here</a> <br/><a href="#" title="Search nearby">Search nearby</a>  ' + '</p>';
//	var locale = 'nl_NL';

	if (GBrowserIsCompatible()) {
		var map = new GMap2(elOfficeMap);
		var geocoder = new GClientGeocoder();
	
//		var gdir = new GDirections(map, elRouteDir);
		
		var strAddress = strOfficeStreet + ', ' + strOfficeCity;

		function showAddress(address) {
			geocoder.getLatLng(
				address,
				function(point) {
					if (!point) {
						alert(address + " not found");
					} else {
						map.setCenter(point, 12);

/*						
						var humanInferenceIcon = new GIcon();
						humanInferenceIcon.image = "/siteimg/icon_hi_logo.png";
						humanInferenceIcon.iconSize = new GSize(24, 32);
						humanInferenceIcon.iconAnchor = new GPoint(9, 34);
						humanInferenceIcon.infoWindowAnchor = new GPoint(7, 38);
						humanInferenceIcon.shadow = "/siteimg/icon_hi_logo_shadow.png";
						humanInferenceIcon.shadowSize = new GSize(40, 32);
						
						markerOptions = { icon:humanInferenceIcon };
						var marker = new GMarker(point, markerOptions);
*/					
						
						var marker = new GMarker(point);
						map.addOverlay(marker);
						map.addControl(new GLargeMapControl());
						map.addControl(new GMapTypeControl());
						marker.openInfoWindowHtml(strBalloonContent);
						
						GEvent.addListener(marker, "click", function() {
							marker.openInfoWindowHtml(strBalloonContent);
						});

					}
				}
			);
		}
		
		showAddress(strAddress);
	}	
}



/*
 * initF23LoginFieldInteraction
 * Adds interaction to the inputfields of the login f-block.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function initF23LoginFieldInteraction(){
	var arrF23 = $$('.f23_login');
	if (arrF23.length == 0) return;
	
	Element.Events.keyup_enter = {
		base: 'keyup',
		condition: function(event){
			return (event.key == 'enter');
		}
	};

	arrF23.each(function(elF23){
		elLoginBtn = elF23.getElement('.link_button');
		
		elLoginBtn.addEvent('click', function(){
			// Submit form goes here...
			//alert("Submit form using JavaScript");
		});

		arrLoginInputs = elF23.getElements('input');
		arrLoginInputs.each(function(elLoginInput){
			elLoginInput.addEvent('keyup_enter', function(){
				elLoginBtn.fireEvent('click');
			});
		});
	});
}



/*
 * initF42ListBackgroundColor
 * Gives list background color
 * 
 * @author Phison Do (phison.do[AT]efocus.nl)
 */
function initF42ListBackgroundColor(){
	var arrF42 = $$('.f42_partner_overview');
	if (arrF42.length == 0) return;
	
	arrF42.each(function(elF42){
		var elMainList = elF42.getElement('ul');				
		var arrMainListItemsOdd = elMainList.getElements('li:even');
		
		arrMainListItemsOdd.each(function (elMainListItemOdd){
			elMainListItemOdd.addClass('odd');						
		});
	});
}



/*
 * demoFunction
 * Just a temporary function to demonstrate a basic function.
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 */
function demoFunction() {
	var arrF00 = $$('.f00_name');
	if (arrF00.length == 0) return;
	
	arrF00.each(function(elF00){
		alert(elF00);
	});
	
	if (Browser.Engine.gecko) console.log(arrF00.length);
}



/////////////////////////////////////////// SERVER-SIDE JAVASCRIPT FUNCTIONS ///////////////////////////////////////////

// return url, optionally with querystringpart and anchorpart

function getUrl(url, withQs, withAnchor) {
    var splits1 = url.split('#');
    var splits2 = splits1[0].split('?');
 
    var urlwithoutqs = splits2[0];
    var urlwithqs = splits2[1] ? splits2[0] + '?' + splits2[1] : splits2[0];
    var urlwithanchor = splits1[1] ? urlwithqs + '#' + splits1[1] : urlwithqs;
 
    if (!withQs && !withAnchor) return urlwithoutqs;
    else if (!withAnchor) return urlwithqs;
    else return urlwithanchor;
}
 
// parse querystring to assoc array
function parseQuerystring(url) {
    var arr = {};
    var que = url;
    if (que.indexOf('?') >= 0)
        que = que.substring(que.indexOf('?') + 1);
    else que = "";
 
    if (que != "") {
        que = que.split("&");
 
        for (var i = 0; i < que.length; i++) {
            var inter = que[i].split("=");
            var inter2 = inter[1];
            var inter3 = inter[0];
            que[i] = inter2;
            arr[inter3] = inter2;
        }
    }
    return arr;
}
 
// read param from current url and return value
function getQsParam(param) {
    var querystring = parseQuerystring(location.href);
    return querystring[param] ? querystring[param] : '';
}
 
// remove param from url and return result
function removeQsParam(url, param) {
    var querystring = parseQuerystring(url);
    delete (querystring[param]);
 
    var vars = [];
    for (var i in querystring) vars.push(i + '=' + querystring[i]);
    url = getUrl(url, false, false);
    if (vars.length > 0) url += '?' + vars.join('&');
 
    return url;
}
 
// update or add param to url and return result
function setQsParam(url, param, value) {
    var querystring = parseQuerystring(url);
    querystring[param] = value;
 
    var vars = [];
    for (var i in querystring) vars.push(i + '=' + querystring[i]);
    url = getUrl(url, false, false);
    if (vars.length > 0) url += '?' + vars.join('&');
 
    return url;
}
 
/**
* listChange
*
* changes list period without disturbing other querystring parameters, but reset pagnr
*
* @author Barend van der Hout <barend{AT}efocus.nl>
* @return false
*/
function listChange(qsvar, value) {
    var url = getUrl(location.href, true, false);
    url = removeQsParam(url, 'pagnr');
    if (value) url = setQsParam(url, qsvar, '' + value);
    else url = removeQsParam(url, qsvar);
    location.href = url;
    return false;
}
 