/**
 * file default.js
 *
 * contains javascript for Quintiq website
 *
 * @require MooTools version 1.2.4 core & more
 *
 */

window.addEvents({
    'domready': function() {
		
        initNewsline();
		initSearchForm(document.getElements('fieldset.search_submit'), false);
			
		startPushbox();
        setTeaserColHeight();
        
        setClassExternalLinks();
        
        positionPaginator();
        
        equalizeHeight(document.getElements('ul.customer_overview li h3'));
		equalizeHeight(document.getElements('ul.customer_overview li div div.customer_logo_box'));
		equalizeHeight(document.getElements('ul.customer_overview li div div.customer_grey_box'));
		equalizeHeight(document.getElements('ul.customer_overview>li'));
		equalizeHeight(document.getElements('div.teasers_home div.teaser_home'));
		
		centerElementVertically(document.getElements('ul.customer_overview li div div img'));
		centerElementVertically(document.getElements('ul.customer_overview li div div a'));
		        
    },
    'load': function() {
		
		//initAccordion('ul.sitemap li.submenu > span', 'ul.sitemap li.submenu ul');
		
    }
});


 /**
 * initializes newsline
 *
 * @author Mirjam <mirjam[AT]efocus.nl>
 * @since 1.0, 25 mar 2010
 *
 * @return void
 */

 function initNewsline () {

     var arrNewsMessages = document.getElements('ul.messages li');
     var elNewsNavButtonForward = document.getElement('ul.nav li.btn_forward a');
     var elNewsNavButtonBack = document.getElement('ul.nav li.btn_back a');
		
		
	 if (arrNewsMessages.length == 0 || !elNewsNavButtonForward || !elNewsNavButtonBack) return false;
	
	 var intNewsLineW = document.getElement('div.newsline div.newsline_mid').getStyle('width').toInt();
	 var intLinksW = document.getElement('div.newsline ul.links').getSize().x.toInt() + document.getElement('div.newsline ul.links').getStyle('margin-left').toInt() + document.getElement('div.newsline ul.links').getStyle('margin-right').toInt();
	 var intHeadW = document.getElement('div.newsline h6').getSize().x.toInt() + document.getElement('div.newsline h6').getStyle('margin-left').toInt() + document.getElement('div.newsline h6').getStyle('margin-right').toInt();
	 var intNavW = document.getElement('div.newsline ul.nav').getSize().x.toInt() + document.getElement('div.newsline ul.nav').getStyle('margin-left').toInt() + document.getElement('div.newsline ul.nav').getStyle('margin-right').toInt();
	 
	 document.getElements('ul.messages').setStyle('width',(intNewsLineW - intLinksW - intHeadW - intNavW - 10));
			
     var newsLine = new newsline({'messages': arrNewsMessages, 'btnForward': elNewsNavButtonForward, 'btnBack': elNewsNavButtonBack });
	
 }
 
 /**
 * initializes newsline
 *
 * @author Mirjam <mirjam[AT]efocus.nl>
 * @since 1.0, 25 mar 2010
 *
 * @return void
 */

function setTeaserColHeight() {
	
	var elColTeaser = document.getElement('div.col_side_right');
	if (!elColTeaser) return false;
	
	var arrContainers = elColTeaser.getElements('div.container');
	if (arrContainers.length == 0) {
		elColTeaser.addClass('hide_col_side_right');
	}
	
}
 
 /**
 * Vertically aligns an element inside it's parent container
 *
 * @author Rou-hun <lowen[AT]efocus.nl>
 * @since 1.0, 25 mar 2010
 *
 * @return void
 */
 
 function centerElementVertically(arrElements) {
 	if (arrElements.length == 0) return false;

 	arrElements.each(function(elElement) {
 		var intHeightImage = elElement.getStyle('height').toInt();
 		var intHeightParent = elElement.getParent().getStyle('height').toInt();
 		var intHeightOffset = (intHeightParent - intHeightImage) / 2;

 		elElement.setStyle('top', intHeightOffset);
 	});
 }  
 
 /**
 * Accordion
 *
 * @author Rou-hun <lowen[AT]efocus.nl>
 * @since 1.0, 25 mar 2010
 *
 * @return void
 */ 
 
 function initAccordion(toggler, container) {
	if (!toggler || !container) return false;

	var accordion = new Fx.Accordion(toggler, container, {
		onActive: function(toggler){
			toggler.blur();
		},
		onBackground: function(toggler){
		},
		display: -1,
		show: -1,
		alwaysHide: true
	});
 }
 
 /**
 * Equalizes the height of some elements
 * 
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 * @author Lowen Fan (lowen[AT]efocus.nl)
 * @since 1.0, 26 March 2009
 * @return void
 */
 
function equalizeHeight(arrElements) {
	if (arrElements.length == 0) return false;
	
	var intMaxHeight = 0;
	
	arrElements.each(function(el){
		var intHeight = el.getHeight() - (el.getStyle('padding-top').toInt() + el.getStyle('padding-bottom').toInt() + el.getStyle('border-top-width').toInt() + el.getStyle('border-top-width').toInt());
		if (intHeight > intMaxHeight) intMaxHeight = intHeight;
	});
	
	arrElements.each(function(el){
		el.setStyle('height', intMaxHeight);
	});	
}

/*
* initializes search form handling: enter en click
*
* @param forms element a form or fieldset containing button, fields, hidden input pageUrl
* @author Mirjam <mirjam{AT}efocus.nl>
* @since 1.0, 02 dec 2009
* @return void
*/


function initSearchForm(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 = createNewSearchUrl(arrFormfields);
                        window.location = url + "?" + newQString.substr(1);
                    }
                }
            });
        });

        // button

        var button = form.getElements('a.button_search');

        button.addEvents({
            'click': function(e) {
                e.stop();
                var newQString = createNewSearchUrl(arrFormfields);
                window.location = url + "?" + newQString.substr(1);
            },
            'keyup': function(e) {
                if (e.key == 'enter') {
                    e.stop();
                    var newQString = createNewSearchUrl(arrFormfields);
                    window.location = url + "?" + newQString.substr(1);
                }
            }
        });

    });
}


function pressKeyDown () {
	
	var code;
	if (!e) var e = window.event;
	if (e.keyCode) {
		code = e.keyCode;
	} else if (e.which) { 
		code = e.which;
	}
	
	/*if (code == 13) {
	
		var newQString = createNewSearchUrl();
        window.location = url + "?" + newQString.substr(1);
	
	}*/
	
}

/**
* creates url from fields in specific fieldset
*
* @param arrFormfields array all formfields 
*
* @author Mirjam <mirjam{AT}efocus.nl>
* @since 1.0, 02 dec 2009
* @return void
*/

function createNewSearchUrl(arrFormfields) {

    var strNewUrl = "";

    arrFormfields.each(function(elFormfield) {

        var strFieldName = elFormfield.get('name');
        var strFieldValue = elFormfield.get('value');

        if (strFieldName != "pageUrl" && strFieldName != "headerUrl" && strFieldName != '' && strFieldName != null && strFieldValue != '') {
            strNewUrl += "&" + strFieldName + "=" + strFieldValue;
        }
    });

    // paginator?
    var elPaginator = document.getElement('div.paginator_holder');
    if (elPaginator) {
        var arrPaginatorFields = elPaginator.getElements('input').combine(elPaginator.getElements('select'));

        arrPaginatorFields.each(function(elPaginatorfield) {

            var strFieldName = elPaginatorfield.get('name');
            var strFieldValue = elPaginatorfield.get('value');
            
            if (strFieldName != '' && strFieldName != null && strFieldValue != '') {
                strNewUrl += "&" + strFieldName + "=" + strFieldValue;
            }

        });
    }
            
    return strNewUrl;
} 

/**
 * starts pushbox
 *
 * @author Rocco Janse <rocco@efocus.nl>
 * @since 1.0, 14 aug, 2009
 * @return void
 */

function startPushbox() {
	
	if (!document.getElement('div.pushbox')) return;
	
	// slides same height
	document.getElement('div.pushbox').getElement('ul.slides').getElements('li').setStyle('height', document.getElement('div.pushbox').getElement('ul.slides').getSize().y.toInt());
	
	var pbox = new Pushbox({
		'viewport': document.getElement('div.pushbox').getElement('div.viewport'),
		'slides': document.getElement('div.pushbox').getElement('ul.slides').getElements('li'),
		'navigation': document.getElement('div.pushbox').getElement('ul.pushbox_nav').getElements('li'),
		'prevnext': document.getElement('div.pushbox').getElement('div.pushbox_nav_holder').getElements('a.buttons'),
		'transition': 'fade',
		'delay': 7
	});	
		
}

/**
 * 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].onclick = openLinkNewWindow;
	}
	
}


/**
 * 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 openLinkNewWindow() {
	
	window.open(this.href);
	return false;
	
 }
 

/**
 * find all external kinks, 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.href.contains('quintiq')) {
			thisLink.className += ' external';
		}
				
	});
	
	setTargetExternalLinks();
}

/**
* set language code in cookie
* 
* @author Egbert (egbert.wietses[AT]efocus.nl)
* @author Mirjam <mirjam@efocus.nl>
*/
function SetLanguage(code) {
    
    // uitlezen cookie:  readCookie("QuinticLanguage");
    
    var today = new Date();
	
    var domainparts = window.location.hostname.split('.');
    var strDomain = '.' + domainparts[domainparts.length - 2] + '.' + domainparts[domainparts.length - 1];
	
	var languageCookie  = Cookie.write('QuinticLanguage', code, {duration: 28, domain: strDomain});
        
}

/**
 * read cookie
 *
 * @author Mirjam <mirjam@efocus.nl>
 * @since 1.0, 8 apr, 2009
 * @param cookie name
 * @return string
 */

function readCookie(name) {
	
	return Cookie.read(name);
	
}

/**
 * centers paginator
 *
 * @author Mirjam <mirjam@efocus.nl>
 * @since 1.0, 8 apr, 2009
 * @return void
 */

function positionPaginator () {

	arrPaginator = document.getElements('div.paginator');
	if (arrPaginator.length == 0) return false;
	
	arrPaginator.each(function(elPaginator) {
	
		var intPaginator = elPaginator.getSize().x.toInt();
		var intPaginatorElementsW = 0;
			
		arrPaginatorElements = elPaginator.getChildren();
		arrPaginatorElements.each(function(thisEl) {
			intPaginatorElementsW += thisEl.getSize().x.toInt();
		});
		
		var intPaginatorMarginLeft = ((intPaginator - intPaginatorElementsW) / 2).round();
		elPaginator.setStyle('margin-left', intPaginatorMarginLeft);
	
	});
	
}



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 the url onselect list.
* @author Mark Martis
* @return false
*/
function listChange(qsvar, value) {
    var url = getUrl(location.href, true, false);
    url = removeQsParam(url, 'solution');
    url = removeQsParam(url, 'industry');
    if (value) url = setQsParam(url, qsvar, '' + value);
    else url = removeQsParam(url, qsvar);
    location.href = url;
    return false;
}

