/*
* Cache van javascripts.script.js
* Created: 2010-04-02 17:29:47
*/

var shopcolors = ['b51f1f', 'd2c396'];
var google = 'UA-5233386-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'));

	$$('#students .image').each(function(el) {
		if (el.getElement('.first')) {
			new Element('img', {
				'src': '/images/fashioncontest/magnify.png',
				'alt': 'vergroot',
				'height': 20,
				'width': 20,
				'class': 'magnify-icon'
			})
				.inject(el)
				.addEvent('click', function(e) {
					el.getElement('.zoom').getParent('a').fireEvent('click');
				});
		}
	});

	$$('a.newwindow').each(function(node) {
		node.addEvent('click', opennewwin);
	});
	$$('a.externlink').each(function(node) {
		node.addEvent('click', opennewwin);
	});
	
	if (Browser.Engine.trident) {
		$$('hr').each(function(hr) {
			new Element('div')
				.setStyles(hr.getStyles('background-image', 'background-repeat', 'height', 'margin', 'clear'))
				.replaces(hr);
		});
	}

	if ($('poll')) {
		$$('a.pollvote').each(function(answer) {
			answer.addEvent('click', function(e) {
				e.stop();
				var theparent = $('pollwrapper');
				theparent.setStyle('opacity', 0.5);
				// Create overlay
				var overlay = new Element('div', {
					'styles': {
						'background-color': '#ffffff',
						'height': theparent.getSize().y + 'px',
						'width': theparent.getSize().x + 'px',
						'position': 'absolute',
						'top': '0px',
						'right': '0px',
						'opacity': '0.35'
					},
					'class': 'loading'
				}).inject(theparent, 'after');
				
				new Request.HTML({
					'update': $('poll'),
					'autoCancel': true,
					'onComplete': function() {
						overlay.destroy();
						theparent.setStyle('opacity', 1);
					}
				}).get(this.get('href')+'/ajax');
			});
		});
	}

	if ($('shops')) {
		var shopflash = new Swiff('/images/plattegrond.swf', {
			'width': '585px',
			'height': '475px',
			'container': $('shopflash'),
			'params': {
				'wmode': 'transparent',
				'quality': 'high',
				'allowScriptAccess': 'always'
			}
		}).toElement();

		if (Browser.Platform.linux) {
			// Linux doesn't support transparent flash
			$('shopflash').setStyle('position', 'static');
			$('shops').setStyle('min-height', '0px');
		}

		var shops = $$('ul#shops ul li');
		shops.each(function(shop) {
			shop.getFirst('a').addEvent('click', function(e) {
				e.stop();

				Swiff.remote(shopflash, 'setcolors', shopcolors[0], shopcolors[1]);

				Swiff.remote(shopflash, 'resetselection');
				Swiff.remote(shopflash, 'selectshop', this.getParent('li').get('id').substring(7));

				new Request.HTML({
					'update': $('shopdetails_cont'),
					'autoCancel': true,
					'onComplete': function() {
						shops.removeClass('current');
						shop.addClass('current');
					}
				}).get(this.get('href')+'/0/ajax');
			});
		});

		if ($('brandsearch')) {
			$('brandsearch').addEvent('submit', function(e) {e.stop()});
			var thereq;
			$('brand').addEvent('keyup', function(e) {
				if (thereq) {
					thereq.cancel();
				}
				if (this.get('value').length == 0) {
					$('brandhint').empty();
					shops.removeClass('current');
					Swiff.remote(shopflash, 'resetselection');
					shops.removeClass('brandmatch');
					$('shopdetails_cont').empty();
					Swiff.remote(shopflash, 'resetbrandselection');
				} else {
					thereq = new Request.HTML({
						'update': $('brandhint'),
						'autoCancel': true,
						'onComplete': function() {
							$$('div#brandhint a').each(function(el) {
								el.addEvent('click', function(e) {
									e.stop();
									$('brand').set('value', this.get('text'));
									shops.removeClass('current');
									Swiff.remote(shopflash, 'resetselection');
									$('shopdetails_cont').empty();
									Swiff.remote(shopflash, 'resetbrandselection');
									
									new Request({
										'autoCancel': true,
										'url': this.get('href')+'/ajax',
										'method': 'get',
										'onSuccess': function(responseText, responseXML) {
											var shoparr = responseText.split(',');
											shops.removeClass('brandmatch');
											shoparr.each(function(shop) {
												if ($('shopid_'+shop)) {
													$('shopid_'+shop).addClass('brandmatch');
														Swiff.remote(shopflash, 'setcolors', shopcolors[0], shopcolors[1]);
														Swiff.remote(shopflash, 'selectbrandshop', shop);
												}
											});
										}
									}).send();
								});
							});
						}
					}).get($('brandsearch').get('action')+encodeURIComponent(this.get('value'))+'/0/ajax');
				}
			});
		}
	}

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

	if ($('contactform')) {
		var theform = $('contactform');
		var formhaserr = theform.getElement('.formerror');
		var errmsgfx = new Fx.Tween(formhaserr, 'opacity', {duration: 200, wait: false});
		errmsgfx.set(0);

		theform.addEvent('submit', function(e) {
			e.stop();

			var fields = ['naam', 'email', 'telefoon', 'onderwerp', 'opmerking'];

			$$('label.error').removeClass('error');

			var ok = true;
			fields.each(function(fld) {
				if ($(fld).get('value').length == 0) {
					ok = false;
					theform.getElement('label[for='+fld+']').addClass('error');
				}
			});
			if ($('email').get('value').match(/^[A-Za-z0-9\+._-]+@[A-Za-z0-9._-]+\.[A-Za-z]{2,}$/) == null) {
				ok = false;
				theform.getElement('label[for=email]').addClass('error');
			}

			if (ok) {
				this.submit();
			} else {
				errmsgfx.start(1);
				errmsgfx.start.delay(5000, errmsgfx, 0);
				$$('label.error').removeClass.delay(4500, $$('label.error'), 'error');
			}
		});
	}

	if ($('newsletterform')) {
		var theform = $('newsletterform');
		var formhaserr = theform.getElement('.formerror');
		var errmsgfx = new Fx.Tween(formhaserr, 'opacity', {duration: 200, wait: false});
		errmsgfx.set(0);

		$('newsletterform').addEvent('submit', function(e) {
			e.stop();

			var fields = ['naam', 'email', 'postcode', 'geboortedatum'];

			$$('label.error').removeClass('error');
			$('geslacht_label').removeClass('error');
			
			var ok = true;
			fields.each(function(fld) {
				if ($(fld).get('value').length == 0) {
					ok = false;
					theform.getElement('label[for='+fld+']').addClass('error');
				}
			});
			if ($('email').get('value').match(/^[A-Za-z0-9\+._-]+@[A-Za-z0-9._-]+\.[A-Za-z]{2,}$/) == null) {
				ok = false;
				theform.getElement('label[for=email]').addClass('error');
			}
			if ($('postcode').get('value').match(/^[0-9]{4}\s*[A-Za-z]{2}$/) == null) {
				ok = false;
				theform.getElement('label[for=postcode]').addClass('error');
			}

			var geslachtok = false;
			theform.getElements('input[name=geslacht]').each(function(el) {
				if (el.get('checked')) geslachtok = true;
			});
			if (!geslachtok) {
				ok = false;
				$('geslacht_label').addClass('error');
			}

			if (ok) {
				this.submit();
			} else {
				errmsgfx.start(1);
				errmsgfx.start.delay(5000, errmsgfx, 0);
				$$('label.error').removeClass.delay(4500, $$('label.error'), 'error');
				$('geslacht_label').removeClass.delay(4500, $('geslacht_label'), 'error');
			}
		});
	}

	$$('a.newsflash').addEvent('click', function(e) {
		e.stop();

		var options = {
			zoomdiv: 'zoomdiv',
			padding: [30, 10, 10, 10],
			textheight: [15, 15],
			size: {x: 470, y: 680}
		};
	
		var windowscroll = window.getScrollSize();
		var windowsize = window.getSize();
		if (options.size.x > windowsize.x - 100) {
			options.size.x = windowsize.x - 100;
		}
		if (options.size.y > windowsize.y - 100) {
			options.size.y = windowsize.y - 100;
		}

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

		$(options.zoomdiv).getElement('.close').addEvent('click', function(e) {
			new Event(e).stop();
			$(options.zoomdiv).retrieve('fx2').start({
				'top': [$(options.zoomdiv).getTop(), windowscroll.y / 2],
 				'height': [options.size.y+'px', 0]
			});
			$(options.zoomdiv).retrieve('fx').start.delay(600, $(options.zoomdiv).retrieve('fx'), {
				'width': [options.size.x+'px', 0],
		 		'padding': 0,
		 		'left': [$(options.zoomdiv).getLeft(), windowscroll.x / 2]
			});
			$('bodyoverlay').retrieve('fx').start.delay(120, $('bodyoverlay').retrieve('fx'), 0);
			$(options.zoomdiv).getElement('.close').setStyle('visibility', 'hidden');
			$('newsflash').dispose.delay(500, $('newsflash'));
			$('sidebar').setStyle('height', '1px');
		});

		new IFrame({
			'id': 'newsflash',
			'src': this.get('href'),
			'styles': {
				'width': options.size.x,
				'height': options.size.y,
				'z-index': 100
			},
			'width': options.size.x,
			'height': options.size.y
		}).inject($(options.zoomdiv));

		$('sidebar').setStyle('height', options.size.y - 200);

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

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

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

		$(options.zoomdiv).getElement('.close')   .setStyle('visibility', 'visible');
		$(options.zoomdiv).getElement('.next')    .setStyle('visibility', 'hidden');
		$(options.zoomdiv).getElement('.previous').setStyle('visibility', 'hidden');

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

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

	if ($('MooFlow')) {
		/* MooFlow instance with the complete UI and Viewer */
		var mf = new MooFlow($('MooFlow'), {
			useSlider: true,
			useAutoPlay: true,
			useCaption: true,
			useMouseWheel: false,
			useKeyInput: true,
			useViewer: true,
			onStart: function() {
				mf.play();
			}
		});

		mf.attachViewer();

		$$('.loadremote').addEvent('click', function(){
			mf.loadHTML(this.get('href'), this.get('rel'));
			return false;
		});
	}

	// Fashion battle
	$$('.vote-bid .form').setStyle('display', 'none');
	$$('.vote-bid form').addEvent('submit', function(e) {
		var target = $(e.target);
		target.blur();
		new Element('div', {
			'styles': {
				'width': target.getSize().x,
				'height': target.getSize().y,
				'position': 'absolute',
				'top': target.getPosition(target.getOffsetParent()).y,
				'left': target.getPosition(target.getOffsetParent()).x,
				'background-color': '#000000',
				'opacity': 0.7
			},
			'class': 'loading'
		}).inject(target.getParent('.vote-bid'));
	});
	$$('.vote-bid').addEvent('click', function(e) {
		var target = $(e.target);
		if (target.hasClass('vote-button') || target.hasClass('bid-button')) {
			e.stop();
			target.dissolve();
			var form = target.getParent().getElement('.form');
			form.reveal.delay(500, form);

			other = null;
			if (target.hasClass('vote-button')) {
				other = target.getParent('.vote-bid').getElement('.bid-button');
			} else if (target.hasClass('bid-button')) {
				other = target.getParent('.vote-bid').getElement('.vote-button');
			}
			if (other) {
				other.reveal();
				form = other.getParent().getElement('.form');
				form.dissolve.delay(500, form);
			}
		}
	});
});

function opennewwin(e) {
	var el = this.tagName.toLowerCase() == 'a' ? this : this.getParent('a');
	if (el) {
		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({
	Implements: [Options],
	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);
  }
});

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 overlayBg = new Class({

	Implements: [Options],

	options: {
		'id': 'bodyoverlay',
		'opacity': 0.8
	},

	initialize: function(options) {

		var windowscroll = window.getScrollSize();
		this.setOptions(options);

		if (!$(this.options.id)) {
			new Element('div', {
				'id': this.options.id,
				'styles': {
					'opacity': 0,
					'width': windowscroll.x+'px',
					'height': windowscroll.y+'px'
				}
			})
				.injectInside(document.body);
		}

		this.fx = new Fx.Tween($(this.options.id), {duration: 1000});
		//$(this.options.id).addEvent('click', this.hide.bindWithEvent(this));
	},

	show: function() {
		var windowscroll = window.getScrollSize();
		$(this.options.id).setStyles({
			'width': windowscroll.x+'px',
			'height': windowscroll.y+'px'
		});
		this.fx.start('opacity', this.options.opacity);
	},

	hide: function() {
		this.fx.start('opacity', 0);
	}
});

var imageZoom = new Class({

	Implements: [Options],

	options: {
		zoomdiv: 'zoomdiv',
		padding: [10, 10, 10, 10],
		textheight: [15, 15]
	},

	initialize: function(images, options) {
		this.elements = images;
		if (this.elements.length == 0 || !$(this.options.zoomdiv)) {
			return;
		}
		this.setOptions(options);

		this.elements.each(function(thumb, i) {
			var a = thumb.getParent('a');
			a.addEvent('click', this.showImage.bindWithEvent(this, i));
		}, this);

		var windowsize = window.getSize();
		var windowscroll = window.getScroll();

		this.overlay = new overlayBg();

		$(this.options.zoomdiv)
			.setStyles({
				'display': 'block',
				'top': windowscroll.y + (windowsize.y / 2),
				'left': windowscroll.x + (windowsize.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) {
			e.stop();
			$(me.options.zoomdiv).retrieve('fx2').start({
				'top': [$(me.options.zoomdiv).getTop(), windowscroll.y + (windowsize.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 + (windowsize.x / 2)]
			});
			me.previmgsize = {x: 0, y: 0};
			me.overlay.hide.delay(1200, me.overlay);
			$(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) {
			e.stop();
			if (me.elements[me.curimg+1]) {
				me.showImage(e, me.curimg+1);
			}
		});
		$(this.options.zoomdiv).getElement('.previous').addEvent('click', function(e) {
			e.stop();
			if (me.elements[me.curimg-1]) {
				me.showImage(e, me.curimg-1);
			}
		});
	},

	showImage: function(e, idx) {
		if (e && e.target) e.stop();

		var windowsize = window.getSize();
		var windowscroll = window.getScroll();

		this.overlay.show();

		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 parent = this.elements[idx].getParent('a');
		var images = new Asset.images([parent.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, {onComplete: function(){if(removeimg) {removeimg.dispose()}}}).start('opacity', 1);
			var imgsize = image.getSize();
			imgsize = {x: imgsize.x, y: imgsize.y+me.options.textheight[0]+me.options.textheight[1]};

			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] && me.elements[idx+1].getParent('a').get('rel') == parent.get('rel')?'visible':'hidden');
			$(me.options.zoomdiv).getElement('.previous').setStyle('visibility', me.elements[idx-1] && me.elements[idx-1].getParent('a').get('rel') == parent.get('rel')?'visible':'hidden');
			$(me.options.zoomdiv).getElement('.info').set('html', me.elements[idx].get('alt'));

			var newtop  = windowscroll.y + (windowsize.y - imgsize.y - paddingtb - me.options.textheight[0] - me.options.textheight[1]) / 2;
			var newleft = windowscroll.x + (windowsize.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;
		}});
	}
});