/*
* Cache van javascripts.script.js
* Created: 2011-04-26 13:38:26
*/

/*
$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 $
*/

// Google analytics
var google = "UA-2008357-3";
google='';
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', winload);

var closeimage = new Asset.image('/images/navigatie/close.gif');

function winload()
{
	// Google analytics
	if (google && _gat) {
		var pageTracker = _gat._getTracker(google);
		pageTracker._initData();
		pageTracker._trackPageview();
	}

	if ($('menubar') && $('menubar').hasClass('english')) {
		$$('#menu li').each(function(el, i) {
			if (i > 0) el.setStyle('display', 'none');
		});
	}

	if ($('machinepark')) {
		var maxheight = 0;
		var maxel = null;
		new Asset.image('/images/interface/balk_ov.png');
		$$('div#machinepark div').each(function (el, i) {
			if (maxheight <= el.getSize().y) {
				maxheight = el.getSize().y;
				maxel = el;
			}
			el.setStyle('height', 0);
		});
		maxel.setStyle('height', maxheight);
	}

  correctbottom(new Array('contentwrapper', 'menubar', 'sidebar'));
  initmenu();
  initrotator();
  animatelangsel();

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

  var newwinlinks = document.getElements('.newwindow');
  newwinlinks.each(function(node) {
      node.addEvent('click', opennewwin);
    });

  new Asset.images([
  	'/images/navigatie/over.png',
  	'/images/navigatie/down.png',
  	'/images/navigatie/draaien_ov.jpg',
		'/images/navigatie/frezen_ov.jpg',
		'/images/navigatie/lassen_ov.jpg',
		'/images/navigatie/montage_ov.jpg',
		'/images/navigatie/diversen_ov.jpg'
  ]);

	$$('.imagescroller').each(function(scrollerset) {
		initImageFader(150, scrollerset.getElements('img'), {'previmg': $(scrollerset.id+'_prev'), 'nextimg': $(scrollerset.id+'_next')});
	});

	if ($('machinepark')) {
		var machinepark = new Accordion('div#machinepark h2', 'div#machinepark div', {
			opacity: false,
			alwaysHide: true,
			onActive: function(toggler, element){
				toggler.addClass('open');
			},
			onBackground: function(toggler, element){
				toggler.removeClass('open');
			}
		}, $('machinepark'));
	}
	
	new mouseOvers();
	//new SmoothScroll();

	new pngSupport({transparentImage: '/images/pnghack/transparent.gif'}).replace();
}

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

var rotatorimgs;
var curidx=0;
function initrotator()
{
	var maxh = 0;
	var maxw = 0;
	rotatorimgs = $$('img.imagerotator');
	for (var i=rotatorimgs.length-1; i>=0; i--)
	{
		rotatorimgs[i].fadein  = new Fx.Tween(rotatorimgs[i], {property: 'opacity', duration: 2000});
		rotatorimgs[i].fadeout = new Fx.Tween(rotatorimgs[i], {property: 'opacity', duration: 2000, onComplete: function(){setTimeout("rotateimg()", 3000);}});
		if (i != 0) rotatorimgs[i].fadein.set(0);
		maxh = rotatorimgs[i].height > maxh ? rotatorimgs[i].height : maxh;
		maxw = rotatorimgs[i].width > maxw ? rotatorimgs[i].width : maxw;
	}
	$('imagerotator').setStyles({
		'height': maxh + 'px',
		'width': maxw + 'px'
	});

	if (rotatorimgs.length > 0)
	{
		setTimeout("rotateimg()", 2000);
	}
}
function rotateimg()
{
	rotatorimgs[curidx].fadeout.start(0);
 	curidx = (curidx+1==rotatorimgs.length) ? 0 : curidx + 1;
  rotatorimgs[curidx].fadein.start(1);
}

function animatelangsel()
{
	var maxh = 0;
	langselimgs = $$('img.langselectors');
	for (var i=langselimgs.length-1; i>=0; i--)
	{
		langselimgs[i].fadein  = new Fx.Tween(langselimgs[i], {property: 'height', duration: 200});
		langselimgs[i].fadeout = new Fx.Tween(langselimgs[i], {property: 'height', duration: 400});
		langselimgs[i].fadein.set(22);
		langselimgs[i].onmouseover = function(){this.fadeout.cancel(); this.fadein.start(25);};
		langselimgs[i].onmouseout  = function(){this.fadein.cancel(); this.fadeout.start(22);};
	}
}

function correctbottom(els)
{
return;
	var footerpos = $('body').offsetHeight - $('footer').offsetHeight - 2;
	var curheight;
	for (var i=els.length-1; i>=0; i--)
	{
		curheight = $(els[i]).getTop() + $(els[i]).offsetHeight;
		footerpos = curheight > footerpos ? curheight : footerpos;
	}
	$('footer').setStyle('top', (footerpos -1) + 'px');
	$('footer').setStyle('visibility', 'visible');

	for (var i=els.length-1; i>=0; i--)
	{
		$(els[i]).setStyle('height', (footerpos - $(els[i]).getTop()) + 'px');
	}
}

function initImageFader(imgwidth, projimgs, buttons) {
	var curimg = 0;
	
	buttons.nextfx = new Fx.Tween(buttons.nextimg, {property: 'opacity', duration:300});
	buttons.prevfx = new Fx.Tween(buttons.previmg, {property: 'opacity', duration:300});
	var fx = new Fx.Elements(projimgs, {duration:500, transition: Fx.Transitions.Expo.easeOut,
		onStart: function() {
			if (curimg <= 0) {
				buttons.nextfx.start(1);
				buttons.prevfx.start(0);
				curimg = 0;
			} else if (curimg >= projimgs.length-1) {
				buttons.nextfx.start(0);
				buttons.prevfx.start(1);
				curimg = projimgs.length-1;
			} else {
				buttons.nextfx.start(1);
				buttons.prevfx.start(1);
			}
		}
	});

	projimgs.each(function(image, i) {
		image.setStyle('left', imgwidth*i);
	});

	if (projimgs.length <= 1) {
		buttons.nextfx.set(0);
		buttons.prevfx.set(0);
	} else {
		buttons.prevfx.set(0);

		buttons.previmg.addEvent('click', function(event) {
			eventObj = new Event(event);
			eventObj.stop();

			curimg--;
			var o = {};
			projimgs.each(function(image, i) {
				o[i] = {'left': [image.getStyle('left'), image.getStyle('left').toInt()+imgwidth]};
			});
			fx.start(o);
		});
		buttons.nextimg.addEvent('click', function(event) {
			eventObj = new Event(event);
			eventObj.stop();

			var o = {};
			curimg++;
			projimgs.each(function(image, i) {
				o[i] = {'left': [image.getStyle('left'), image.getStyle('left').toInt()-imgwidth]};
			});
			fx.start(o);
		});
	}
}

function initmenu()
{
	var menuitems = $$('ul#menu li ul');
	for (var i=0; i<menuitems.length; i++)
	{
		menuitems[i].fadein  = new Fx.Tween(menuitems[i], {property: 'opacity', duration:300});
		menuitems[i].fadeout = new Fx.Tween(menuitems[i], {property: 'opacity', duration:700});
		menuitems[i].fadein.set(0);
		menuitems[i].setStyle('display', 'block');
	}

	var menuitems = $$('ul#menu li');
	for (var i=0; i<menuitems.length; i++)
	{
		menuitems[i].onmouseover = menuitemover;
		menuitems[i].onmouseout  = menuitemout;

		if (menuitems[i].hasClass('current'))
		{
			setparentcur(menuitems[i]);
		}
	}
}
function menuitemover(el)
{
	this.addClass('hover');
	var submenu = this.getElementsByTagName('ul');
	if (submenu[0])
	{
		submenu[0].fadeout.stop();
		submenu[0].fadein.start(0.9);
	}
}
function menuitemout(el)
{
	this.removeClass('hover');
	var submenu = this.getElementsByTagName('ul');
	if (submenu[0])
	{
		submenu[0].fadein.stop();
		submenu[0].fadeout.start(0);
	}
}
function setparentcur(el)
{
	var par = searchtagup(el, 'LI');
	if (par)
	{
		par.addClass('current');
		setparentcur(par.parentNode);
	}
}

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

function include(file)
{
	new Asset.javascript(file);
}

function getURLParam(strParamName, strHref){
	var strReturn = "";
	if ( strHref.indexOf("?") > -1 ){
		var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
		var aQueryString = strQueryString.split("&");
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
			if (aQueryString[iParam].indexOf(strParamName + "=") > -1 ){
				var aParam = aQueryString[iParam].split("=");
				strReturn = aParam[1];
				break;
			}
		}
	}
	return strReturn;
}

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 pngSupport = new Class({
	options: {
		transparentImage: 'images/transparent.gif'
	},

	initialize: function(options) {
		this.setOptions(options);
 		this.needed = Browser.Engine.trident4 && Browser.Platform.win;
  },
  
  replace: function(parentel) {
  	if (!this.needed) {
  		return;
  	}

		if (!parentel) {
			parentel = document;
		}
    parentel.getElements('img').each(function(img) {
      if (img.src.indexOf(this.options.transparentImage) == -1) {
        if (img.src.indexOf("png") == -1) {
          img.runtimeStyle.filter = "";
        } else {
          var oldsrc = img.src;
          img.src = this.options.transparentImage;
          img.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + oldsrc + "',sizingMethod='scale')";
        }
      }
    }, this);
  }
});
pngSupport.implement(new Options);

var imageZoom = new Class({
	
	options: {
		zoomdiv: 'zoomdiv',
		padding: [20, 10, 10, 10],
		textheight: [15, 15]
	},
	
	initialize: function(images, options) {
		this.elements = images;
		if (this.elements.length == 0) {
			return;
		}
		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'), {property: '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, {property: '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);

