/*
* Cache van javascripts.script.js
* Created: 2010-12-20 16:10:45
*/

var google = 'UA-5646535-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 (google) {
		var pageTracker = _gat._getTracker(google);
		pageTracker._initData();
		pageTracker._trackPageview();
	}

	new mouseOvers();

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

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

	$$('div.thumbnails').each(function(div) {
		var imglarge = new Element('div').setStyle('width', '3000px').inject($(div.get('id')+'_large'));
		var thumbs = div.getElements('a');
		var imgsfx;
		var imgs;
		function showimage(idx) {
 			imgsfx.start(
 				imglarge.getStyle('margin-left').toInt(),
 				-1 * idx * imglarge.getParent('div').getStyle('width').toInt()
 			);
			thumbs.removeClass('current');
			thumbs[idx].addClass('current');
		}
		thumbs.each(function(img, i) {
			new Asset.image(img.get('href')).inject(imglarge);
			img.addEvent('click', function(e) {
				new Event(e).stop();
				showimage(i);
			});
		});
		imgsfx = new Fx.Tween(imglarge, 'margin-left', {
			duration: 300,
			transition: Fx.Transitions.Sine.easeInOut
		});
		if (thumbs[0]) {
			showimage(0);
		}
	});
	
	if (Browser.Engine.trident) {
		/*$$('hr').each(function(hr) {
			new Element('div')
				.setStyles(hr.getStyles('background-image', 'background-repeat', 'height', 'margin', 'clear'))
				.replaces(hr);
		});*/
	}

	$$('.expandinglist').each(function(list) {
		var defopen = -1;

		if (list.get('id') == 'adv_list') defopen = 0;

		list.getElements('a.toggler').each(function(a, i) {
			if (defopen == i) {
				a.getParent('li').addClass('open');
			}
			
			a.addEvent('click', function(e) {
				new Event(e).stop();
				if (a.getParent('li').hasClass('open')) {
					list.getElements('li.open').removeClass('open');
				} else {
					list.getElements('li.open').removeClass('open');
					a.getParent('li').addClass('open');
				}
			});
			if (defopen == -1 && document.location.href.substr(document.location.href.indexOf('#')) == a.get('href')) {
				defopen = i;
			}
		});

		var listacc = new Accordion(list.getElements('a.toggler'), list.getElements('div.details'), {
			'display': defopen,
			'show': defopen,
			'alwaysHide': true
		});

		list.getElements('a.close').each(function(a, i) {
			a.addEvent('click', function(e) {
				new Event(e).stop();
				listacc.display(i);
			});
		});
	});

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

	if ($('searchstudio')) {
		var fields = ['country', 'province', 'city', 'name'];
		fields.each(function(fld, i) {
			if ($(fld)) {
				$(fld).addEvent('change', function(e) {
					for (var k=1; fields[i+k]; k++) {
						var values = '';
						fields.each(function(fld) {
							if ($(fld)) {
								values += '&' + fld + '=' + encodeURIComponent($(fld).get('value'));
							}
						});
						
						new Request({
							'url': $('searchstudio').get('action'),
							'method': 'post',
							'autoCancel': true,
							'onSuccess': function(respText, respXML) {
								var optionflds = respXML.getElementsByTagName('option');
								var numresponses = optionflds.length;
								var updatefield = $(respXML.getElementsByTagName('field')[0].getAttribute('value'));
								updatefield.set('html', '');
								for (var j=0; j<numresponses; j++) {
									new Element('option', {
										'value': optionflds[j].getAttribute('value')
									})
										.set('html', optionflds[j].getAttribute('name'))
										.inject(updatefield);
								}
							}
						}).send('field=' + fields[i+k] + values);
					}
				});
			}
		});

		$('searchstudio').addEvent('submit', function(e) {
			new Event(e).stop();
			var url = $('searchstudio').get('action');
			fields.each(function(fld, i) {
				if ($(fld)) {
					url += '/' + encodeURIComponent($(fld).get('value'));
				}
			});
			window.location.href = url;
		});
	}

	$$('input.spinner').each(function(el) {
		var spinnerwidth = 15;

		el.addEvent('mousemove', function(e) {
			var mouse  = new Event(e).page;
			var elpos  = el.getPosition();
			var elsize = el.getSize();
			var showpointer = mouse.x > elpos.x + elsize.x - spinnerwidth && mouse.x < elpos.x + elsize.x;
			el.setStyle('cursor', showpointer?'pointer':'default');
		});
		
		el.addEvent('click', function(e) {
			var mouse  = new Event(e).page;
			var elpos  = el.getPosition();
			var elsize = el.getSize();
			if (mouse.x > elpos.x + elsize.x - spinnerwidth && mouse.x < elpos.x + elsize.x) {
				var updown = 1;
				if (mouse.y > elpos.y + (elsize.y / 2)) {
					updown = -1;
				}
				if (!el.get('value').toInt()) {
					el.set('value', 0);
				}
				el.set('value', el.get('value').toInt() + updown);
				el.fireEvent('change');
			}
		});
		el.addEvent('change', function(e) {
			var options = el.get('class').match(/spinner\[(.*)\]/);
			if (options) {
				options = options[1].split(',');
				if ($chk(options[0]) && el.get('value').toInt() < options[0].toInt()) {
					el.set('value', options[0]);
				} else if ($chk(options[1]) && el.get('value').toInt() > options[1].toInt()) {
					el.set('value', options[1]);
				}
			}
		});
	});

	if ($('ordercard')) {

		if ($('actioncode')) {
			$('actioncode').addEvent('blur', function(e) {
				if ($('actioncode').get('value').substring(0, 4).toUpperCase == 'ELLE') {
					alert('U heeft gekozen voor €5 korting op de aanschafprijs van de kaart in plaats van het entreevoordeel.');
				} else if ($('actioncode').get('value').substring(0, 2).toUpperCase == 'WB') {
					alert('U heeft gekozen voor €5 korting op de aanschafprijs van de kaart in plaats van het entreevoordeel.');
				} else if ($('actioncode').get('value').substring(0, 2).toUpperCase == 'SA') {
					alert('U heeft gekozen voor €5 korting op de aanschafprijs van de kaart in plaats van het entreevoordeel.');
				} else if ($('actioncode').get('value').substring(0, 4).toUpperCase == 'WIEV') {
					alert('U heeft gekozen voor €5 korting op de aanschafprijs van de kaart in plaats van het entreevoordeel.');
				} else if ($('actioncode').get('value').substring(0, 3).toUpperCase == 'DEL') {
					alert('U heeft gekozen voor €5 korting op de aanschafprijs van de kaart in plaats van het entreevoordeel.');
				} else if ($('actioncode').get('value').substring(0, 3).toUpperCase == 'WIN') {
					alert('Gebruik van deze code is voor winnaars van acties en promoties, het entreevoordeel is hierbij niet van toepassing.');
				} else if ($('actioncode').get('value').substring(0, 3).toUpperCase == 'NKW') {
					alert('U heeft gekozen voor €7,50 korting op de aanschafprijs van de kaart in plaats van het entreevoordeel.');
				} else if ($('actioncode').get('value').substring(0, 3).toUpperCase == 'WNG') {
					alert('U heeft gekozen voor €5 korting op de aanschafprijs van de kaart in plaats van het entreevoordeel.');
				}
			});
		}
		
		var cardowners = $$('fieldset.cardowner');
		var cardownersfx = new Fx.Elements(cardowners, {
			onComplete: function() {
				var numcards = $('numcards').get('value').toInt();
				var numco = cardowners.length;
				for (var i=numcards; i<numco; i++) {
					cardowners[i].setStyle('display', 'none');
				}
			},
			onStart: function() {
				var numcards = $('numcards').get('value').toInt();
				var numco = cardowners.length;
				for (var i=0; i<numco && i<numcards; i++) {
					cardowners[i].setStyle('display', 'block');
				}
			},
			duration: 1000
		});
		$('numcards').addEvent('change', function(e) {
			var numcards = $('numcards').get('value').toInt();
			var obj = {};
			cardowners.each(function(fs, i) {
				obj[i] = {
					'opacity': [fs.getStyle('opacity'), i < numcards ? 1 : 0]
				};
			});
			cardownersfx.start(obj);
		});
		$('numcards').fireEvent('change');

		new iMask({
			onValid: function(event, obj) {
				obj.removeClass('imask-invalid');
			},

			onInvalid: function(event, obj) {
				if(!event.shift) {
     			obj.addClass('imask-invalid');
				}
			}
		});
		new fValidator('ordercard', {
			required: {msg: "Dit veld is verplicht."},
			alpha: {msg: "Dit veld mag alleen letters bevatten."},
			alphanum: {msg: "Dit veld mag alleen letters en cijfers bevatten."},
			integer: {msg: "Dit veld mag alleen gehele getallen bevatten."},
			real: {msg: "Dit veld mag alleen getallen bevatten."},
			date: {
				re: /^(((([1-9])|([0-2][0-9])|(3[01]))[\-]((0[13578])|([13578])|(1[02])))|((([1-9])|([0-2][0-9])|(30))[\-]((0[469])|([469])|(11)))|((([1-9])|([0-2][0-9]))[\-](2|02)))[\-]\d{4}$|^\d{4}$/,
				msg: "Dit is geen geldige datum (dd-mm-yyyy)."
			},
			email: {msg: "Dit is geen geldig e-mailadres."},
			phone: {msg: "Dit is geen geldig telefoonnummer."},
			url: {msg: "Dit is geen geldige url/link."},
			confirm: {msg: "De wachtwoorden komen niet overeen."},
			zipcode: {type: "zipcode", re: /^\d{4} [a-zA-Z]{2}$/, msg: "Dit is geen geldige postcode."}
		});

		var fields = ['firstname', 'middlename', 'lastname', 'phone', 'email', 'address', 'zipcode', 'city'];
		fields.each(function(fld) {
			if ($('co_'+fld+'1')) {
				$('co_'+fld+'1').addEvent('resize', function(e) {
					var val = $('co_'+fld+'1').get('value');
					if ($(fld) && ($(fld).get('value') == '' || $(fld).get('value') == '____ __')) {
						$(fld).set('value', val);
						$(fld).fireEvent('resize');
					}
					['del_', 'inv_'].each(function(pre) {
						if ($(pre+fld) && ($(pre+fld).get('value') == '' || $(pre+fld).get('value') == '____ __')) {
							$(pre+fld).set('value', val);
						}
					});
				});
				$('co_'+fld+'1').addEvent('blur', function(e) {
					this.fireEvent('resize');
				});
			}
		});
		var namefields = ['firstname', 'middlename', 'lastname'];
		namefields.each(function(fld) {
			if ($(fld)) {
				$(fld).addEvent('resize', function(e) {
					var name = '';
					namefields.each(function(field) {
						if ($(field)) {
							name += ' ' + $(field).get('value');
							name = name.trim();
						}
					});
					name = name.trim();
					if ($('del_name')) $('del_name').set('value', name);
					if ($('inv_name')) $('inv_name').set('value', name);
				});
				$(fld).addEvent('blur', function(e) {
					this.fireEvent('resize');
				});
			}
		});
		var fields = ['company', 'address', 'zipcode', 'city'];
		fields.each(function(fld) {
			if ($(fld)) {
				$(fld).addEvent('resize', function(e) {
					['del_', 'inv_'].each(function(pre) {
						if ($(pre+fld) && ($(pre+fld).get('value') == '' || $(pre+fld).get('value') == '____ __')) {
							$(pre+fld).set('value', $(fld).get('value'));
						}
					});
				});
				$(fld).addEvent('blur', function(e) {
					this.fireEvent('resize');
				});
			}
		});

		['invoiceaddress', 'deliveryaddress'].each(function(addr) {
			if ($(addr) && $('diff'+addr)) {
				var fx = new Fx.Tween($(addr), 'opacity', {
					onComplete: function() {
						if ($(addr).get('opacity') == 0) {
							$(addr).setStyle('display', 'none');
						}
					},
					onStart: function() {
						if ($(addr).get('opacity') == 0) {
							$(addr).setStyle('display', 'block');
						}
					},
					duration: 1000
				});
				$('diff'+addr).addEvent('click', function(e) {
					fx.start($('diff'+addr).get('checked') ? 1 : 0);
				});

				$('diff'+addr).fireEvent('click');
			}
		});
	}
});

function opennewwin(e) {
	var el = this.tagName.toLowerCase() == 'a' ? this : this.getParent('a');
	if (el) {
		new Event(e).stop();
		window.open(el.href, '_blank');
	}
}

var mouseOvers = new Class({
	initialize: function(elements) {
		elements = elements || $$('img.mouseover');
		elements.each(function(image) {
			if (image.hasClass('specialmo')) {
				image.set('src_mouseover', image.get('class').replace(/.*mouseover=/, ''));
				image.set('src_mouseout',  image.get('src'));
				image.addEvent('mouseenter', this.mouseover);
				image.addEvent('mouseleave', this.mouseout);
				new Asset.image(image.get('src_mouseover'));
			} else {
				var xsrc = image.src;
				if (xsrc.substring(xsrc.length-7, xsrc.length-3) == '_up.')	{
					image.set('src_mouseover', image.get('src').replace(/_up\.([a-z]{3})/, '_ov.$1'));
					image.set('src_mouseout',  image.get('src'));
				
					image.addEvent('mouseenter', this.mouseover);
					image.addEvent('mouseleave', this.mouseout);

					// Preload
					new Asset.image(image.get('src_mouseover'));
				}
			}
		}, this);
	},
	mouseover: function() {
		this.set('src', this.get('src_mouseover'));
	},
	mouseout: function()	{
		this.set('src', this.get('src_mouseout'));
	}
});

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 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);
	}
});

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);
