/*
* Cache van javascripts.script.js
* Created: 2009-04-17 18:20:41
*/

/*
$Author: sjors $
$LastChangedDate: 2006-10-19 14:05:31 +0200 (do, 19 okt 2006) $
$Id: javascripts.js 28 2006-10-19 12:05:31Z sjors $
$Rev: 28 $
*/

var google = 'UA-4454023-1';
if (google) {
	var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
	document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
}

window.addEvent('domready', function() {

	if ($('menu')) {
		$('menu').getChildren('li').each(function(li, i) {
			if (i != 0) {
				new Element('li', {
					'html': '|',
					'class': 'separator'
				}).injectBefore(li);
			}
		});
	}

	new imageZoom($$('img.zoom'));

	new imageFader($$('div.imagerotator img'), {duration: 2500, interval: 5000});

	$$('ul#langselector li').each(function(li, i) {
		if (i != 0) {
			new Element('li', {
				'html': '|',
				'class': 'separator'
			}).injectBefore(li);
		}
	});

	if ($('newsimages')) {
		new imageRotator($('newsimages').getElement('div.images'));
	}

	if (google) {
		var pageTracker = _gat._getTracker(google);
		pageTracker._initData();
		pageTracker._trackPageview();
	}

	var sb_elements = [];
	var sb_offsets = [];
	if ($('content')) {
		sb_elements.push($('content'));
		sb_offsets.push(0);
	}
	if ($('contentcolumn')) {
		sb_elements.push($('contentcolumn'));
		sb_offsets.push(0);
	}

	new sameBottom(sb_elements, sb_offsets, {
		'minBottom': $('address').getCoordinates().bottom + $('address').getStyle('margin-top').toInt()
	});

	$$('a.newwindow').each(function(node) {
		node.addEvent('click', opennewwin);
	});

	if (Browser.Engine.trident4) {
		$$('li.current').getChildren('a').each(function(child) {
			child.addClass('current');
			return;
		});
	}

	if ($('agents')) {
		var defopen = -1;

		$$('#agents a.regiontoggler').each(function(a, i) {
			a.addEvent('click', function(e) {
				new Event(e).stop();
			});
			if (defopen == -1 && document.location.href.substr(document.location.href.indexOf('#')) == a.get('href')) {
				defopen = i;
			}
		});

		var regions = new Accordion($$('#agents a.regiontoggler'), $$('#agents div.region'), {
			'display': defopen,
			'show': defopen,
			'alwaysHide': true
		});

		if ($('worldmap_map')) {
			var defimage = $('worldmap').get('src');

			var areas = $$('#worldmap_map area');
			
			var worldmaps = [];
			areas.each(function(area) {
				worldmaps.push(defimage.replace(/\/([a-z]+)\.([a-z]{3})$/, '/'+area.get('alt').substring(area.get('alt').indexOf('[')+1, area.get('alt').indexOf(']'))+'.$2'));
			});
			new Asset.images(worldmaps);
			
			areas.addEvent('mouseenter', function() {
				$('worldmap').set('src', defimage.replace(/\/([a-z]+)\.([a-z]{3})$/, '/'+this.get('alt').substring(this.get('alt').indexOf('[')+1, this.get('alt').indexOf(']'))+'.$2'));
			});
			areas.addEvent('mouseleave', function() {
				$('worldmap').set('src', defimage);
			});
			areas.addEvent('click', function(e) {
				new Event(e).stop();
				var classname = this.get('href');
				$$('#agents a.regiontoggler').each(function(a, i) {
					if (a.get('href') == classname) {
						regions.display(i);
					}
				});
			});
			$$('#agents a.regiontoggler').each(function(a, i) {
				a.addEvent('mouseenter', function(e) {
					areas[i].fireEvent('mouseenter');
				});
				a.addEvent('mouseleave', function(e) {
					areas[i].fireEvent('mouseleave');
				});
			});
		}
	}

	var defopen = -1;
	$$('h2.department_toggler a').each(function(a, i) {
		a.addEvent('click', function(e) {
			new Event(e).preventDefault();
		});
		if (defopen == -1 && document.location.href.substr(document.location.href.indexOf('#')) == a.get('href').substr(a.get('href').indexOf('#'))) {
			defopen = i;
		}
	});
	if (defopen == -1 && $$('h2.department_toggler a').length == 1) {
		defopen = 0;
	}
	new Accordion($$('h2.department_toggler'), $$('div.department'), {
		'display': defopen,
		'show': defopen,
		'alwaysHide': true
	});

	if ($('weatherreport')) {
		var wheateriframe = $('weatherreport').getElement('iframe');
		wheateriframe.setStyles({
			'overflow': 'hidden',
			'height': 0
		});
		new Element('a', {
			styles: {
				'display': 'block',
				'cursor': 'pointer',
				'margin-bottom': '10px'
			},
			events: {
				'click': function(e) {
					new Event(e).stop();
					if (wheateriframe.getStyle('height').toInt() == 0) {
						wheateriframe.tween('height', wheateriframe.get('height'));
					} else {
						wheateriframe.tween('height', 0);
					}
				}
			}
		})
			.set('html', $('weatherreport').getElement('h2').get('html'))
			.inject($('weatherreport'), 'top');
		$('weatherreport').getElement('h2').dispose();
	}
});

function opennewwin(event) {
	// Open link in new window
	window.open(searchtagup(this, 'A').href, '_blank');
	new Event(event).stop();
}

function searchtagup(el, tag) {
	tag = tag.toUpperCase();
	if (!el.parentNode) return false;
	return el.tagName.toUpperCase()==tag?el:searchtagup(el.getParent(), tag);
}

Native.implement([Element], {
	// Watch height and width of an element and call onResize when it changes
	watchResize: function(interval) {
		if (!interval) interval = 500;
		this.sizeChecksum = this.getSize().y + '_' + this.getSize().x;
		this.watchResizeInterval = this.checkResize.periodical(interval, this);
	},
	checkResize: function() {
		var size = this.getSize();
		if (this.sizeChecksum != size.y + '_' + size.x) {
			this.sizeChecksum = size.y + '_' + size.x;
			this.fireEvent('ygresize');
		}
	},
	// Replace heading with image
	replaceWithImg: function(imgsrc) {
		var imgsrc = imgsrc.replace('[text]', this.getText().toLowerCase().replace(/ /g, ''));
		this.setStyles({
			'background-image': 'url("' + imgsrc + '")',
			'background-repeat': 'no-repeat',
			'text-indent': '-1000px'
		});
		var me = this;
		new XHR({
			method: 'get',
			onFailure: function() {
				me.setStyle('text-indent', '0px');
			}
		}).send(imgsrc);
	}
});

var sameBottom = new Class({
	initialize: function(elements, offsets, options) {
		if (!$type(options)) {
			options = {};
		}
		var oco = options.onComplete;
		options.onComplete = function() {
			if (this.elements[this.lowest]) {
				this.elements[this.lowest].setStyle('height', 'auto');
			}
			this.elements.each(function (el) {
				el.watchResize();
			});
			if (oco) {
				oco();
			}
		};

		this.setOptions(options);
		this.elements = elements;
		this.offsets  = offsets;

		this.elements.each(function (el) {
			el.addEvent('ygresize', this.resize.bind(this));
		}, this);

		this.resize();
	},

	resize: function() {
		var lowest = 0;
		this.lowest = 0;
		this.elements.each(function (el, i) {
			$clear(el.watchResizeInterval);
		});
		this.elements.each(function (el, i) {
			el.setStyle('height', 'auto');
			var curbottom = el.getCoordinates().bottom + el.getStyle('margin-top').toInt();
			if (lowest < curbottom) {
				lowest = curbottom;
				this.lowest = i;
			}
			el.vpadding = el.getStyle('padding-top').toInt() + el.getStyle('padding-bottom').toInt();
			el.setStyle('height',	el.getSize().y - el.vpadding);
		}, this);
		
		// Correct offsets
		var corr = this.offsets[0] - this.offsets[this.lowest];
		this.offsets.each(function (offset) {
			offset -= corr;
		});

		if (lowest < this.options.minBottom) {
			lowest = this.options.minBottom;
			this.lowest = -1;
		}

		this.elements.each(function (el, i) {
			var newheight = (lowest - el.getCoordinates().bottom) + el.getStyle('height').toInt();
			el.setStyle('height', newheight + this.offsets[i]);
		}, this);
		this.fireEvent('onComplete');
	},

	beAlert: function() {
		this.elements.each(function (el) {
			el.watchResize(10);
		});
	},

	sleep: function() {
		this.elements.each(function (el) {
			el.watchResize(500);
		});
	}
});
sameBottom.implement(new Events, new Options);

var mouseOvers = new Class({
	initialize: function(elements) {
		elements = elements || $$('img.mouseover');
		elements.each(function(image) {
			var xsrc = image.src;
			if (xsrc.substring(xsrc.length-7, xsrc.length-3) == '_up.')	{
				image.addEvent('mouseenter', this.mouseover);
				image.addEvent('mouseleave', this.mouseout);

				// Preload
				new Asset.image(image.src.replace(/_up\.([a-z]{3})/, '_ov.$1'));
			}
		}, this);
	},
	mouseover: function() {
		this.src = this.src.replace(/_up\.([a-z]{3})/, '_ov.$1');
	},
	mouseout: function()	{
		this.src = this.src.replace(/_ov\.([a-z]{3})/, '_up.$1');
	}
});

var imageRotator = Fx.Tween.extend({
	options: {
  	controlEvent: 'click',
  	autoInterval: 5000
	},
	
	initialize: function(element, options) {
		this.element  = element;
		this.property = 'top';
		this.images   = this.element.getElements('img');
		this.setOptions(options);
		this.controls = [];

		var me = this;
		this.images.each(function(el, i) {
			this.controls.push(
				new Element('div', {
					'class': 'imgrotator'+(i == this.images.length-1?'last':''),
					'styles': {'top': (i*24)+'px'}
				})
					.setText(i+1)
					.addEvent('mouseenter', function() {this.addClass('hover'); $clear(me.autotimer)})
					.addEvent('mouseleave', function() {this.removeClass('hover'); me.autotimer = me.auto.periodical(me.options.autoInterval, me)})
					.addEvent(this.options.controlEvent, this.display.bind(this, i))
					.injectBefore(el.getParent('div'))
			);
		}, this);

  	if (this.controls[0]) {
			this.controls[0].fireEvent('mouseleave');
			this.display(0);
		}
	},

	auto: function() {
		this.curimage++;
		if (!this.controls[this.curimage]) {
			this.curimage = 0;
		}
		this.controls[this.curimage].fireEvent(this.options.controlEvent);
	},

	display: function(i) {
		this.curimage = i;
		this.controls.each(function(ctrl, j) {
			if (i == j) {
				ctrl.addClass('current');
			} else {
				ctrl.removeClass('current');
			}
		});
		this.start(i*-150);
	}
});

var imageZoom = new Class({
	
	options: {
		zoomdiv: 'zoomdiv',
		padding: [10, 10, 10, 10],
		textheight: [15, 15]
	},
	
	initialize: function(images, options) {
		this.elements = images;
		this.setOptions(options);
		
		this.elements.each(function(thumb, i) {
			thumb.getParent('a').addEvent('click', this.showImage.bindWithEvent(this, i));
		}, this);

		var windowscroll = window.getScrollSize();
		
		if (!$(this.options.zoomdiv)) {
			new Element('div', {'id': this.options.zoomdiv}).injectInside(document.body);
		}
		$(this.options.zoomdiv)
			.setStyles({
				'display': 'block',
				'top': windowscroll.y / 2,
				'left': windowscroll.x / 2
			})
			.store('fx',  new Fx.Morph($(this.options.zoomdiv), {duration: 1000, wait: false}))
			.store('fx2', new Fx.Morph($(this.options.zoomdiv), {duration: 1000, wait: false}));

		var me = this;
		$(this.options.zoomdiv).getElement('.close').addEvent('click', function(e) {
			new Event(e).stop();
			$(me.options.zoomdiv).retrieve('fx2').start({
				'top': [$(me.options.zoomdiv).getTop(), windowscroll.y / 2],
 				'height': [me.previmgsize.y+'px', 0]
			});
			$(me.options.zoomdiv).retrieve('fx').start.delay(600, $(me.options.zoomdiv).retrieve('fx'), {
				'width': [me.previmgsize.x+'px', 0],
		 		'padding': 0,
		 		'left': [$(me.options.zoomdiv).getLeft(), windowscroll.x / 2]
			});
			me.previmgsize = {x: 0, y: 0};
			$('bodyoverlay').retrieve('fx').start.delay(1200, $('bodyoverlay').retrieve('fx'), 0);
			$(me.options.zoomdiv+'_img').getElement('img').dispose.delay(1200, $(me.options.zoomdiv+'_img').getElement('img'));
			$(me.options.zoomdiv).getElement('.close')   .setStyle('visibility', 'hidden');
			$(me.options.zoomdiv).getElement('.next')    .setStyle('visibility', 'hidden');
			$(me.options.zoomdiv).getElement('.previous').setStyle('visibility', 'hidden');
		});
		$(this.options.zoomdiv).getElement('.next').addEvent('click', function(e) {
			new Event(e).stop();
			if (me.elements[me.curimg+1]) {
				me.elements[me.curimg+1].getParent('a').fireEvent('click');
			}
		});
		$(this.options.zoomdiv).getElement('.previous').addEvent('click', function(e) {
			new Event(e).stop();
			if (me.elements[me.curimg-1]) {
				me.elements[me.curimg-1].getParent('a').fireEvent('click');
			}
		});
	},
	
	createOverlay: function() {
		var windowscroll = window.getScrollSize();
		if (!$('bodyoverlay')) {
			new Element('div', {
				'id': 'bodyoverlay',
				'styles': {
					'opacity': 0,
					'width': windowscroll.x+'px',
					'height': windowscroll.y+'px'
				}
			})
				.injectInside(document.body)
				.store('fx', new Fx.Tween($('bodyoverlay'), 'opacity'), {duration: 1000});
		}
	},

	showImage: function(e, idx) {
		if (e) new Event(e).stop();

		this.createOverlay();
		if ($('bodyoverlay').getStyle('opacity') != 0.8) {
			$('bodyoverlay').retrieve('fx').start(0.8);
		}

		if (!this.previmgsize) {
			this.previmgsize = {x: 0, y: 0};
		}

		var removeimg = $(this.options.zoomdiv+'_img').getElement('img');
		if (removeimg) {
			removeimg.setStyle('z-index', 2);
		}

		this.curimg = idx;

		var me = this;
		var images = new Asset.images([this.elements[idx].getParent('a').getProperty('href')], {onComplete: function() {
			var image = images[0];
			image.setStyles({
				'opacity': 0,
				'z-index': 3
			});
			image.injectInside($(me.options.zoomdiv+'_img'));
			new Fx.Tween(image, 'opacity', {onComplete: function(){if(removeimg) {removeimg.dispose()}}}).start(1);
			var imgsize = image.getSize();
			imgsize = {x: imgsize.x, y: imgsize.y+me.options.textheight[0]+me.options.textheight[1]};

			var windowscroll = window.getScrollSize();

			var paddingtb = me.options.padding[0] + me.options.padding[2];
			var paddinglr = me.options.padding[1] + me.options.padding[3];

			$(me.options.zoomdiv).getElement('.close').setStyle('visibility',    'visible');
			$(me.options.zoomdiv).getElement('.next').setStyle('visibility',     me.elements[idx+1]?'visible':'hidden');
			$(me.options.zoomdiv).getElement('.previous').setStyle('visibility', me.elements[idx-1]?'visible':'hidden');

			var newtop  = (windowscroll.y - imgsize.y - paddingtb - me.options.textheight[0] - me.options.textheight[1]) / 2;
			var newleft = (windowscroll.x - imgsize.x - paddinglr) / 2;
			if (newtop  < 0) newtop  = 0;
			if (newleft < 0) newleft = 0;

			$(me.options.zoomdiv).retrieve('fx').start({
				'left': [$(me.options.zoomdiv).getLeft(), newleft],
				'width': [me.previmgsize.x+'px', imgsize.x+'px'],
				'padding-top': [$(me.options.zoomdiv).getStyle('padding-top').toInt(), me.options.padding[0]],
				'padding-right': [$(me.options.zoomdiv).getStyle('padding-right').toInt(), me.options.padding[1]],
				'padding-bottom': [$(me.options.zoomdiv).getStyle('padding-bottom').toInt(), me.options.padding[2]],
				'padding-left': [$(me.options.zoomdiv).getStyle('padding-left').toInt(), me.options.padding[3]]
			});
			$(me.options.zoomdiv).retrieve('fx2').start.delay(800, $(me.options.zoomdiv).retrieve('fx2'), {
				'top': [$(me.options.zoomdiv).getTop(), newtop],
				'height': [me.previmgsize.y+'px', imgsize.y+'px']
			});
			me.previmgsize = imgsize;
		}});
	}
});
imageZoom.implement(new Options);

var imageFader = new Class({

	Extends: Fx.Elements,

	options: {
		auto: true,
		interval: 10000
	},

	initialize: function(elements, options) {
		this.elements = elements;
		this.setOptions(options);

		this.elements.setStyle('opacity', 0);

		if (this.elements[0]) {
			this.elements[0].setStyle('opacity', 1);
			if (this.elements[0].getParent().getStyle('position') != 'absolute' && this.elements[0].getParent().getStyle('position') != 'relative') {
				this.elements[0].getParent().setStyle('position', 'relative');
			}
		}

		this.curel = 0;
		if (this.options.auto) {
			this.auto.periodical(this.options.interval, this);
		}
	},

	auto: function() {
		if (!this.elements[this.curel]) {
			this.curel = 0;
		}
		this.display(this.curel);
		
		this.curel += 1;
	},

	display: function(idx) {
		var obj = {};
		this.elements.each(function(el, i) {
			if (el.getStyle('opacity') != 0 && i != idx) {
				obj[i] = {'opacity': 0};
				el.setStyle('z-index', 1);
			} else if (i == idx) {
				obj[i] = {'opacity': 1};
				el.setStyle('z-index', 2);
			}
		});
		return this.start(obj);
	}
});