/*
* Cache van javascripts.script.js
* Created: 2012-02-09 17:05:45
*/


var numtweets = 3;
var twitter = 'boerplay';
var google = 'UA-4454859-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('load',function() {

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

	document.addEvent('click', function(e) {
  	var e = new Event(e);
  	var el = $(e.target)
  	if (el.tagName.toLowerCase() != 'a') {
  		el = el.getParent('a');
  	}
  	var newwin = false;

		if (el && el.get('href')) {
			newwin = newwin || el.hasClass('newwindow');
			newwin = newwin || el.hasClass('externlink');
			newwin = newwin || (el.getParent('li') && el.getParent('li').hasClass('externlink'));

			/*if (el.get('href').substring(0, 7) == 'http://' || el.get('href').substring(0, 8) == 'https://') {
				newwin = newwin || el.get('href').indexOf('http://www.boerplay.nl');
			}*/

			var downloadsurl = '/downloads/';
			newwin = newwin || el.get('href').substring(0, downloadsurl.length) == downloadsurl;
		}
		if (newwin) {
			e.stop();
			window.open(el.href, '_blank');
		}
	});

	if (twitter && $('twitter_div')) {
		new Asset.javascript('http://twitter.com/statuses/user_timeline/'+twitter+'.json?callback=twitterCallback2&count=5');
	}

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

window.addEvent('domready', function() {
	$$('body').addClass('js');

	if (twitter && $('twitter_div')) {
		new Element('ul', {'id': 'twitter_update_list', 'class': 'loading'}).inject($('twitter_div'));
	}

	$$('.minimizer').each(function(el) {
		var height = el.getSize().y
		new Element('a', {
			'class': 'toggler',
			'events': {
				'click': function(e) {
					if (el.hasClass('minimized')) {
						el.removeClass('minimized');
						el.tween('height', height);
					} else {
						el.addClass('minimized');
						el.tween('height', 33);
					}					
				}
			}
		}).inject(el);
	});
	$$('.minimizer').tween('height', 33);
	$$('.minimizer').addClass('minimized');

	if ($('newsslider')) {
		var newssliderBig = new Element('div', {
			'class': 'newsslider-big'
		}).inject($('newsslider'), 'before');
		var imgsize = newssliderBig.getSize();
		$$('#newsslider li').each(function(el) {
			var img = el.getElement('img');
			img.setStyle('opacity', 0.4);
			img.addEvent('mouseenter', function(e) {
				img.setStyle('opacity', 1);
			});
			img.addEvent('mouseleave', function(e) {
				if (!el.hasClass('active')) {
					img.setStyle('opacity', 0.4);
				}
			});
			img.addClass('accnews-toggler');

			var content = new Element('div', {
				'class': 'accnews-content'
			}).inject(newssliderBig);
			
			var imgsrc;
			if (el.getElement('a') && el.getElement('div')) {
				imgsrc = img.get('src').replace(/\/images\/[0-9]+\/[0-9]+\//, '/images/'+imgsize.x+'/'+imgsize.y+'/');
			} else {
				imgsrc = img.get('src').replace(/\/images\/[0-9]+\/[0-9]+\/5\//, '/images/'+imgsize.x+'/'+imgsize.y+'/'+7+'/');
			}
			var container = new Element('div', {
				'styles': {
					'background-image': 'url('+imgsrc+')',
					'width': imgsize.x,
					'height': imgsize.y,
					'cursor': 'pointer'
				},
				'events': {
					'click': function(e) {
						document.location.href = this.getElement('a').get('href');
					}
				}
			}).inject(content);
			var contentcontainer = new Element('div', {
				'class': 'text'
			}).inject(container);
			if (el.getElement('a') && el.getElement('div')) {
				new Element('img', {
					'src': '/images/interface/acc-toparrow.png',
					'class': 'arrow'
				}).inject(el);
				el.getElement('a').inject(contentcontainer);
				el.getElement('div').inject(contentcontainer);
				new Element('div', {
					'class': 'background',
					'styles': {
						'height': contentcontainer.getSize().y,
						'opacity': 0.5
					}
				}).inject(content, 'top');
			}

		});
		var newsacc = new Fx.Accordion($$('.accnews-toggler'), $$('.accnews-content'), {
			onActive: function(toggler) {
				toggler.fireEvent('mouseenter');
				toggler.getParent('li').addClass('active');
			},
			onBackground: function(toggler) {
				toggler.getParent('li').removeClass('active');
				toggler.fireEvent('mouseleave');
			},
			opacity: !Browser.Engine.trident || Browser.Engine.trident4,
			trigger: 'mouseover'
		});
		new Element('a', {
			'class': 'accnews-prev',
			'href': '#',
			'events': {
				'click': function(e) {
					e.stop();
					var show = newsacc.previous - 1;
					newsacc.display(show >= 0 ? show : newsacc.togglers.length - 1);
				}
			}
		}).inject($('newsslider'));
		new Element('a', {
			'class': 'accnews-next',
			'href': '#',
			'events': {
				'click': function(e) {
					e.stop();
					newsacc_next();
				}
			}
		}).inject($('newsslider'));
		
		function newsacc_next() {
			var show = newsacc.previous + 1;
			newsacc.display(show <= newsacc.togglers.length - 1 ? show : 0);
		}

		var newsacc_auto;
		newssliderBig.getParent().addEvents({
			'mouseenter': function() {
				$clear(newsacc_auto);
			},
			'mouseleave': function() {
				newsacc_auto = newsacc_next.periodical(5000);
			}
		}).fireEvent('mouseleave');
	}

	if ($('productselector')) {
		new productselector();
	}

	new imageFader($$('img.headerimgs'), {duration: 2500, interval: 10000});
	new mouseOvers();

	if ($('mybasketform')) {
		new mybasket('mybasketform');
	}

	$$('#mainmenu > li > ul').each(function(el) {
		el.getParent('li').getChildren('a').setStyle('cursor', 'default');
	});
	$$('#mainmenu > li > a').addEvent('click', function(e) {
		if (this.getParent('li').getChildren('ul').length != 0) {
			e.stop();
		}
	});

	if ($('popup')) {
		$('bodyoverlay').setStyles({
			'background-color': '#000000',
			'opacity': 0.8
		});
		$('popup').inject(document.body);
		$('popup').setStyles({
			'top': '145px'
		});

		$$('#popup a.close').addEvent('click', function(e) {
			new Event(e).stop();
			$('popup').dispose();
			$('bodyoverlay').retrieve('fx').start(0);
		});
	}

	if ($('productname')) {
		var searchform = $('productname').getParent('form');
		searchform.addEvent('submit', function(e) {
			new Event(e).stop();
			if ($('productname').get('value').length == 0 && $('productselector')) {
				// Submit selector
				$('productselector').submit();
			} else {
				var url = searchform.get('action') + encodeURIComponent($('productname').get('value'));
				window.location.href = url;
			}
		});
		$('productname').addEvent('keyup', function(e) {
			if ($('productname').get('value').length > 0) {
				$('productname').addClass('loading');
				new Request.HTML({
					'url': searchform.get('action'),
					'update': $('producthint'),
					'autoCancel': true,
					'onComplete': function() {
						$('productname').removeClass('loading');
						$('producthint').setStyles({
							'display': 'block',
							'height': 'auto'
						});
						if ($('producthint').getSize().y > 200) {
							$('producthint').setStyle('height', '200px');
						}
					}
				}).get('ajax=1&name='+encodeURIComponent($('productname').get('value')));
			}
		});
		$('productname').addEvent('blur', function(e) {
			$('producthint').setStyle.delay(500, $('producthint'), ['display', 'none']);
		});
		$('productname').addEvent('focus', function(e) {
			if ($('productname').get('value').length > 0) {
				$('producthint').setStyle('display', 'block');
			}
		});
	}

	if ($('putinmybasket')) {
		var butn = $('putinmybasket');
		butn.addEvent('click', function(e) {
			e.stop();
			if (!butn.get('disabled')) {
				var postdata = 'ajax=1';
				butn.getParent('form').getElements('input[type=hidden]').each(function(el) {
					postdata += '&' + el.get('name') + '=' + el.get('value');
				});
				butn.getParent('form').getElements('input[type=checkbox]').each(function(el) {
					if (el.get('checked')) {
						postdata += '&' + el.get('name') + '=' + el.get('value');
					}
				});
				var defvalue = butn.get('value');
				var butnfx = new Fx.Tween(butn, {property: 'opacity', duration: 200, wait: false});

				new Request({
					'url': $('formaction').get('value'),
					'method': 'post',
					'autoCancel': true,
					'onRequest': function() {butnfx.start(0.3); butnfx.set('disabled', 'disabled');},
					'onSuccess': function() {
						butn.getParent('form').getElements('input[type=checkbox]').each(function(el) {
							el.set('checked', false);
						});
						butnfx.start(1);
						butnfx.start.delay(400, butnfx, 0.3);
						butn.set.delay(600, butn, ['value', $('sucvalue').get('value')]);
						butnfx.start.delay(700, butnfx, 1);
						butnfx.start.delay(2800, butnfx, 0.3);
						butn.set.delay(3000, butn, ['value', defvalue]);
						butnfx.start.delay(3100, butnfx, 1);
						butnfx.set('disabled', false);
					},
					'onFailure': function() {butnfx.start(1); butn.set('value', defvalue); butnfx.set('disabled', false);},
					'onException': function() {butnfx.start(1); butn.set('value', defvalue); butnfx.set('disabled', false);},
					'onCancel': function() {butnfx.start(1); butn.set('value', defvalue); butnfx.set('disabled', false);}
				}).send({'data': postdata});
			}
		});
	}

	if ($('mainmenu')) {
		$('mainmenu').getChildren('li').addClass('hasnochildren');
	}
	$$('ul#mainmenu ul').each(function (ul) {
		var children = ul.getChildren('li');
		children[children.length-1].setStyle('border', 'none');
		ul.getParent('li').removeClass('hasnochildren');
	});

	$$('ul.selector').each(function(selector) {
		var firstitem = selector.getChildren('li')[0];
		firstitem.addClass('firstitem');
		var defheight = selector.getSize().y-1;
		var fx = new Fx.Tween(selector, {property: 'height', wait: false});
		firstitem.addEvent('mouseenter', function() {
			fx.start(defheight);
		});
		selector.addEvent('mouseleave', function() {
			fx.start(firstitem.getSize().y);
		});
		fx.set(firstitem.getSize().y);
	});

	if ($('metamenu_print')) {
		$('metamenu_print').addEvent('click', function(e) {
			new Event(e).stop();
			window.print();
		});
	}

	$$('table.alternaterows').each(function(table) {
		table.getElements('tr').each(function(tr, i) {
			tr
				.removeClass('dark')
				.removeClass('light')
				.addClass(i%2==0?'dark':'light');
		});
	});

	if ($('salesadvisors_imgmap')) {
		var defimage = $('salesadvisors_map').get('src');

		var salesadvisors_maps = [];
		$$('#salesadvisors_imgmap area').each(function(area) {
			salesadvisors_maps.push(defimage.replace(/\/([a-z]+)\.([a-z]{3})$/, '/'+area.get('alt')+'.$2'));
		});
		new Asset.images(salesadvisors_maps);

		$$('#salesadvisors_imgmap area').addEvent('mouseenter', function() {
			$('salesadvisors_map').set('src', defimage.replace(/\/([a-z]+)\.([a-z]{3})$/, '/'+this.get('alt')+'.$2'));
			var regionid = this.get('class').replace(/region_([0-9]+)/, '$1');
			$$('ul.salesadvisors_advisors li').each(function(li) {
				if (li.get('class').match('_'+regionid+'_')) {
					li.addClass('show');
				}
			});
		});
		$$('#salesadvisors_imgmap area').addEvent('mouseleave', function() {
			$('salesadvisors_map').set('src', defimage);
			$$('ul.salesadvisors_advisors li.show').removeClass('show');
		});
		$$('#salesadvisors_imgmap area').addEvent('click', function(e) {
			new Event(e).stop();
		});
	}

	if ($('mybasket_info')) {
		var submitbtn = $('mybasket_info').getElement('input[type=submit]');
		var butnfx = new Fx.Tween(submitbtn, {property: 'opacity', duration: 200, wait: false});
		submitbtn.set('disabled', 'disabled');
		butnfx.set(0.3);
		$('name').addEvent('keyup', checkMyBasketForm.bindWithEvent());
		$('emailaddress').addEvent('keyup', checkMyBasketForm.bindWithEvent());
		$('name').addEvent('blur', checkMyBasketForm.bindWithEvent());
		$('emailaddress').addEvent('blur', checkMyBasketForm.bindWithEvent());
	}

	function checkMyBasketForm(e) {
		var ok = true;
		ok = ok && $('name').get('value').length > 0;
		ok = ok && $('emailaddress').get('value').length > 0;
		ok = ok && $('emailaddress').get('value').match(/^[A-Za-z0-9\+._-]+@[A-Za-z0-9._-]+\.[A-Za-z]{2,6}$/) != null;

		if (ok) {
			butnfx.start(1);
			submitbtn.set('disabled', false);
		} else {
			butnfx.start(0.3);
			submitbtn.set('disabled', 'disabled');
		}
	}
	
	if (Browser.Engine.trident) {
		$$('a.speciallink').each(function(link) {
			new Element('img', {
				'src': link.getStyle('background-image').match(/url\("(.*)"\)/)[1],
				'styles': {'position': 'relative', 'top': '1px'}
			}).injectAfter(link);
			link.setStyles({
 				'padding-right': '8px',
 				'background-image': 'none'
			});
		});

		$$('hr').each(function(hr) {
			new Element('div')
				.setStyles(hr.getStyles('background-image', 'background-repeat', 'height', 'margin', 'clear'))
				.replaces(hr);
		});
	}
	
	if (Browser.Engine.trident4) {
		$('mainmenu').getChildren('li').each(function(li) {
			li.setStyle('width', '30px');
			li.setStyle('width', (li.getSize().x.toInt() - li.getStyle('padding-left').toInt() - li.getStyle('padding-right').toInt())+'px');
		});
		$('mainmenu').getChildren('li.current').each(function(li) {
			li.set('class', li.get('class') + ' ' + li.get('class').replace(' ', '_'));
			li.removeClass('current');
		});
		$$('ul#mainmenu li').addEvent('mouseenter', function(e) {
			this.addClass(this.get('class').replace(/menuitem(\d)/, 'menuitem$1_hover'));
			this.addClass('hover');
		});
		$$('ul#mainmenu li').addEvent('mouseleave', function(e) {
			if (this.get('class').match(/menuitem(\d)_hover/)) {
				this.removeClass(this.get('class').match(/menuitem(\d)_hover/)[0]);
			}
			this.removeClass('hover');
		});
	}

	$$('div.thumbs').each(function(div) {
		var imglarge = new Element('div').setStyle('width', '30000px').inject($(div.get('id')+'_large'));
		var thumbs = div.getElements('a');
		var imgsfx;
		var imgs;
		function showimage(idx) {
 			imgsfx.start(
 				imglarge.getStyle('margin-left'),
 				-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) {
				e.stop();
				showimage(i);
			});
		});
		imgsfx = new Fx.Tween(imglarge, {
			property: 'margin-left',
			duration: 300,
			transition: Fx.Transitions.Sine.easeInOut
		});
		if (thumbs[0]) {
			showimage(0);
		}
	});

	$$('ul.waterslide li').each(function(el) {
		var content = el.getElement('.waterslide-asseccory');
		var state = 'closed';

		if (content && content.getSize().y > 150) {
			new Element('a', {
				'href': '#',
				'class': 'readmore-icon',
				'events': {
					'click': function(e) {
						e.stop();
						if (state == 'open') {
							content.tween('height', 100);
							this.addClass('readmore-icon').removeClass('readless-icon');
						} else {
							content.tween('height', content.getScrollSize().y);
							this.removeClass('readmore-icon').addClass('readless-icon');
						}
						state = state == 'open' ? 'closed' : 'open';
					}
				}
			})
				.set('html', translate.readmore)
				.inject(el.getElement('h2.sectionheader'));
			content.setStyles({
				'height': 100,
				'overflow': 'hidden'
			});
		}
	});

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

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/pnghack/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 && img.src.indexOf("png") >= 0 && !img.hasClass('nofix')) {
				var oldsrc = img.get('src');
				var size = img.getSize();
				img.set('src', this.options.transparentImage);
				img.set('width', size.x);
				img.set('height', size.y);
				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 mybasket = new Class({

	Implements: [Options],

	options: {
	},

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

		if ($(this.formid+'_recalc')) {
			$(this.formid+'_recalc').setStyle('display', 'none');
		}

		this.request = new Request({
			'url': $(this.formid).get('action'),
			'method': 'post',
			'autoCancel': true,
			'onRequest': this.updateRequest,
			'onSuccess': this.updateSuccess,
			/*'onFailure': function() {alert('Failure');},
			'onException': function() {alert('Exception');},*/
			'onCancel': this.updateCancel,
			'parent': this
		});
		
		var me = this;
		$$('form#'+this.formid+' input.delete').each(function(inp) {
			inp.getParent('label').setStyle('display', 'none');
			new Element('img', {
				'src': '/images/icons/bin.png',
				'width': '16',
				'height': '16',
				'alt': inp.getParent('label').get('text'),
				'title': inp.getParent('label').get('text'),
				'styles': {
					'cursor': 'pointer'
				}
			})
				.addEvent('click', function(e) {
					new Event(e).stop();
					inp.set('checked', 'checked');
					this.set('src', '/images/icons/bin_full.png');

					var elms = [inp.getParent('tr'), inp.getParent('tr').getNext('tr')];
					new Fx.Elements(elms, {
						onComplete: function() {
							elms.each(function(elm) {elm.setStyle('display', 'none')});
							me.update(-1);
						}
					}).start({
						0: {'opacity': 0},
						1: {'opacity': 0}
					});
				})
				.inject(inp.getParent('label'), 'before');
		});

		$$('form#'+this.formid+' input.numitems').each(function(inp) {
			inp.addEvent('keyup', function(e) {
				if (inp.get('value').length) {
					me.update(inp.get('name').replace(/numitems\[([0-9]+)\]/, '$1'));
				}
			});
		});
	},

	update: function(lineno) {
		var postdata = 'ajax=1&edit='+lineno;
		$$('form#'+this.formid+' input').each(function(el) {
			if (el.get('type') == 'checkbox' && el.get('checked')) {
				postdata += '&' + el.get('name') + '=' + el.get('value');
			} else if (el.get('type') == 'text') {
				postdata += '&' + el.get('name') + '=' + el.get('value');
			}
		});
		this.request.send({'data': postdata});
	},

	updateRequest: function() {
		//$(this.options.parent.formid).addClass('loading');
	},
	
	updateCancel: function() {
		//$(this.options.parent.formid).removeClass('loading');
	},

	updateSuccess: function(responseText, responseXML) {
		//$(this.options.parent.formid).removeClass('loading');

		if (responseXML) {
			var lineno = responseXML.getElementsByTagName('lineno')[0].getAttribute('value');

			var el = $(this.options.parent.formid).getElement('td span.salesprice'+lineno);
			if (el) el.set('html', responseXML.getElementsByTagName('salesprice')[0].getAttribute('value'));
			var el = $(this.options.parent.formid).getElement('td span.mountprice'+lineno);
			if (el) el.set('html', responseXML.getElementsByTagName('mountprice')[0].getAttribute('value'));
		}
	}
});

var productselector = new Class({

	Implements: [Options],

	options: {
		idprefix: 'prodsel_',
		classprefix: 'prodsel_'
	},
	
	initialize: function(options) {
		this.setOptions(options);

		$(this.options.idprefix + 'showall').setStyle('display', 'none');
		$(this.options.idprefix + 'reset').addEvent('click', this.resetselection.bindWithEvent(this));
		$$('input.' + this.options.classprefix + 'option').addEvent('click', this.updateselection.bindWithEvent(this));

		this.priceselector = null;
		this.spaceselector = null;
		this.ageselector = null;
		this.sliderChange = false;

		// Prepare images
		var maxheight = 0;
		var productLineImgs = $$('div#prodsel_catimg img');
		productLineImgs.each(function (img, i) {
			if (i == 0) {
				img.setStyle('display', 'block');
			} else {
				if (Browser.Engine.trident) {
					img.setStyle('display', 'none');
				} else {
					img.setStyles({
						'opacity': '0',
						'display': 'block'
					});
				}
			}
			maxheight = maxheight > img.getSize().y ? maxheight : img.getSize().y;
		});

		var imgFx = new Fx.Elements(productLineImgs, {
			link: 'cancel',
			duration: 250
		});
		$$('ul.productline a').addEvent('mouseover', function(e) {
			var target = $(e.target);
			var obj = {};
			if (Browser.Engine.trident) {
				productLineImgs.setStyle('display', 'none');
				$(target.get('rel') + '_image').setStyle('display', 'block');
			} else {
				productLineImgs.each(function(el, i) {
					if (el.get('id') == target.get('rel') + '_image') {
						el.setStyle('z-index', 2);
						obj[i] = {'opacity': 1};
					} else {
						el.setStyle('z-index', 1);
						obj[i] = {'opacity': 0};
					}
				});
			}
			imgFx.start(obj);
		});

		this.request = new Request({
			'url': $(this.options.idprefix + 'submit').getParent('form').get('action'),
			'method': 'post',
			'autoCancel': true,
			/*'onFailure': function() {alert('Failure');},
			'onException': function() {alert('Exception');},
			'onCancel': function() {alert('Cancel');},*/
			'onRequest': this.updateselectionRequest.bind(this),
			'onSuccess': this.updateselectionSuccess.bind(this)
		});

		// Get lowest cat
		var minbottom = $('productsearch').getPosition($('productsearch').getOffsetParent()).y; + $('productsearch').getSize().y;
		$('producthint').setStyle('top', minbottom+35);
		$$('li.catgroup').each(function(li, i) {
			if (i > 1) {
				minbottom = minbottom > li.getSize().y ? minbottom : li.getSize().y;
			}
		});
		var thefirst = $(this.options.idprefix + 'submit').getParent('form').getFirst('ul').getFirst('li');
		if (thefirst.getSize().y < minbottom + maxheight) {
			thefirst.setStyle('height', thefirst.getStyle('height').toInt() - thefirst.getSize().y + minbottom + maxheight);
		}

		this.disablesubcats();

		this.sliderChange = true;
		if ($('priceselector')) {
			this.priceselector = new inputSliderProdSel($('priceselector'), this, {
					'minvalueElm': $('priceselector').getElement('.minvalue'),
					'maxvalueElm': $('priceselector').getElement('.maxvalue')
				});
		}
		if ($('spaceselector')) {
			this.spaceselector = new inputSliderProdSel($('spaceselector'), this, {
					'minvalueElm': $('spaceselector').getElement('.minvalue'),
					'maxvalueElm': $('spaceselector').getElement('.maxvalue')
				});
		}
		if ($('ageselector')) {
			this.ageselector = new inputSliderProdSel($('ageselector'), this, {
					'minvalueElm': $('ageselector').getElement('.minvalue'),
					'maxvalueElm': $('ageselector').getElement('.maxvalue')
				});
		}
		this.sliderChange = false;
	},
	
	disablesubcats: function() {
		var me = this;
		$$('ul li ul.' + this.options.classprefix + 'subcat').each(function(el) {
			var inpchild = el.getParent('li').getElements('input');
			if (inpchild[0] && !inpchild[0].get('checked')) {
				el.getElements('input.' + me.options.classprefix + 'option').set('disabled', 'disabled');
				el.getElements('input.' + me.options.classprefix + 'option').set('checked', '');
			}
		});
	},

	resetselection: function(e) {
		new Event(e).stop();
		$$('input.' + this.options.classprefix + 'option').each(function(el) {
			el.set('checked', '');
		});
		$$('input.' + this.options.classprefix + 'input').each(function(el) {
			el.set('value', '');
		});
		if ($('priceselector')) {
			this.priceselector.reset();
		}
		if ($('spaceselector')) {
			this.spaceselector.reset();
		}
		if ($('ageselector')) {
			this.ageselector.reset();
		}

		this.updateselection();
	},

	updateselection: function() {
		this.disablesubcats();

		var postdata = 'ajax=1';
		$$('input.' + this.options.classprefix + 'option').each(function(el) {
			el.set('disabled', 'disabled');
			if (el.get('checked')) {
				postdata += '&' + el.get('name') + '=' + el.get('value');
			}
		});
		$$('input.' + this.options.classprefix + 'input').each(function(el) {
			postdata += '&' + el.get('name') + '=' + el.get('value');
		});
		this.request.send({'data': postdata});
	},

	updateselectionForSliders: function() {
		if (!this.sliderChange) {
			this.updateselection();
		}
	},

	updateselectionRequest: function() {
		$(this.options.idprefix + 'submit').getParent('form').addClass('loading');
	},

	updateselectionSuccess: function(responseText, responseXML) {
		var idprefix = this.options.idprefix;
		var catids = responseXML.getElementsByTagName('keepopen');
		var numresponses = catids.length;

		var cattype = '';
		for (var i=0; i<numresponses; i++) {
			cattype = catids[i].getAttribute('type')?catids[i].getAttribute('type')+'':'cat';
			if ($(idprefix + cattype + '_' + catids[i].getAttribute('id'))) {
				$(idprefix + cattype + '_' + catids[i].getAttribute('id')).set('disabled', '');
			}
		}

		this.sliderChange = true;
		var price = responseXML.getElementsByTagName('minprice');
		if (price[0]) {
			this.priceselector.setMin(price[0].getAttribute('value'));
		}
		price = responseXML.getElementsByTagName('maxprice');
		if (price[0]) {
			this.priceselector.setMax(price[0].getAttribute('value'));
		}
		var space = responseXML.getElementsByTagName('minspace');
		if (space[0]) {
			this.spaceselector.setMin(space[0].getAttribute('value'));
		}
		space = responseXML.getElementsByTagName('maxspace');
		if (space[0]) {
			this.spaceselector.setMax(space[0].getAttribute('value'));
		}
		var age = responseXML.getElementsByTagName('minage');
		if (age[0]) {
			this.ageselector.setMin(age[0].getAttribute('value'));
		}
		age = responseXML.getElementsByTagName('maxage');
		if (age[0]) {
			this.ageselector.setMax(age[0].getAttribute('value'));
		}
		this.sliderChange = false;

		this.disablesubcats();
		$(idprefix + 'numresults').set('html', responseXML.getElementsByTagName('numproducts')[0].getAttribute('value'));
		$(idprefix + 'submit').getParent('form').removeClass('loading');
		$(idprefix + 'numresults').getParent().highlight.delay(1000, $(idprefix + 'numresults').getParent(), '#9dc2dc');
	}
});

var minmaxSlider = new Class({
	Extends: Slider,

	clickedElement: function(event) {}
});

var inputSlider = new Class({

	Implements: [Options],

	options: {
		'minvalueElm': $empty,
		'maxvalueElm': $empty,
		'minvalue': $empty,
		'maxvalue': $empty,
		'sliderOptions': {
			steps: 1000,
			snap: true
		}
	},

	initialize: function(container, options) {
		this.setOptions(options);
		this.container = container;
		this.container.getChildren().setStyle('display', 'none');

		this.slider = {};
		this.slider.element = new Element('div', {
			'class': 'slider-element'
		}).inject(this.container);

		var sliderOptions = this.options.sliderOptions;
		sliderOptions.onComplete = this.onComplete.bind(this);

		if (this.options.minvalue == $empty && this.options.minvalueElm != $empty) {
			this.options.minvalue = Math.floor(this.options.minvalueElm.get('alt'));
		}
		if (this.options.maxvalue == $empty && this.options.maxvalueElm != $empty) {
			this.options.maxvalue = Math.ceil(this.options.maxvalueElm.get('alt'));
		}
		
		if (this.options.minvalue == this.options.maxvalue) {
			return;
		}

		if (this.options.minvalueElm.get('value') != '') {
			this.minValue = this.options.minvalueElm.get('value');
		}
		if (this.options.maxvalueElm.get('value') != '') {
			this.maxValue = this.options.maxvalueElm.get('value');
		}

		this.slider.minPos = 0;
		this.slider.maxPos = sliderOptions.steps;

		if (this.options.minvalueElm != $empty) {
			this.slider.knobmin = new Element('div', {
				'class': 'slider-knob slider-knob-min'
			});
			this.slider.knobmin.inject(this.slider.element);

			sliderOptions.onChange = this.onChangeMin.bind(this);
			this.minslider = new minmaxSlider(this.slider.element, this.slider.knobmin, sliderOptions);
		}

		if (this.options.maxvalueElm != $empty) {
			this.slider.knobmax = new Element('div', {
				'class': 'slider-knob slider-knob-max'
			});
			this.slider.knobmax.inject(this.slider.element);
			
			sliderOptions.initialStep = this.slider.maxPos;
			sliderOptions.onChange = this.onChangeMax.bind(this);
			this.maxslider = new minmaxSlider(this.slider.element, this.slider.knobmax, sliderOptions);
		}
	},

	onChangeMin: function(pos) {
		this.slider.minPos = pos;
		if (this.slider.minPos >= this.slider.maxPos) {
			this.slider.minPos = this.slider.maxPos - 1;
			this.minslider.set(this.slider.minPos);
		}
		this.options.minvalueElm.set('value', this.valueAtPos(this.slider.minPos));
	},

	onChangeMax: function(pos) {
		this.slider.maxPos = pos;
		if (this.slider.minPos >= this.slider.maxPos) {
			this.slider.maxPos = this.slider.minPos + 1;
			this.maxslider.set(this.slider.maxPos);
		}
		this.options.maxvalueElm.set('value', this.valueAtPos(this.slider.maxPos));
	},

	valueAtPos: function(pos) {
		return this.options.minvalue +	pos * (this.options.maxvalue - this.options.minvalue) / this.options.sliderOptions.steps;
	},

	posAtValue: function(value) {
		return (value - this.options.minvalue) * this.options.sliderOptions.steps / (this.options.maxvalue - this.options.minvalue);
	},

	setMin: function(value) {
		this.minslider.set(this.posAtValue(value));
	},

	setMax: function(value) {
		this.maxslider.set(this.posAtValue(value));
	},

	reset: function() {
		this.minslider.set(0);
		this.maxslider.set(this.options.sliderOptions.steps);
	},

	onComplete: function(pos) {		
	}
});

var inputSliderProdSel = new Class({
	Extends: inputSlider,

	initialize: function(container, productSel,  options) {
		this.productSelector = productSel;
		this.parent(container, options);
		var firstspan = this.container.getElement('span');
		firstspan.setStyle('display', 'inline');

		new Element('span').set('html', ' ').inject(firstspan);
		if (container.get('id') ==  'priceselector') {
			 new Element('span').set('html', ' &euro; ').inject(firstspan);
		}
		new Element('span', {
			'class': 'minvalue'
		}).set('html', this.minValue).inject(firstspan);
		new Element('span').set('html', ' - ').inject(firstspan);
		if (container.get('id') ==  'priceselector') {
			 new Element('span').set('html', ' &euro; ').inject(firstspan);
		}
		new Element('span', {
			'class': 'maxvalue'
		}).set('html', this.maxValue).inject(firstspan);

		if (this.minValue) {
			this.setMin(this.minValue);
		}
		if (this.maxValue) {
			this.setMax(this.maxValue);
		}
	},

	onComplete: function() {
		this.productSelector.updateselectionForSliders();
	},

	onChangeMin: function(pos) {
		this.parent(pos);
		var val = Math.floor(this.valueAtPos(this.slider.minPos));
		if (this.container.getElement('span.minvalue')) {
			this.container.getElement('span.minvalue').set('html', val);
		}
		this.options.minvalueElm.set('value', val);
	},

	onChangeMax: function(pos) {
		this.parent(pos);
		var val = Math.ceil(this.valueAtPos(this.slider.maxPos));
		if (this.container.getElement('span.maxvalue')) {
			this.container.getElement('span.maxvalue').set('html', val);
		}
		this.options.maxvalueElm.set('value', val);
	}
});

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'
					'width': '100%',
					'height': '100%'
				}
			})
				.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'
			'width': '100%',
			'height': '100%'
		});
		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 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, {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]?'visible':'hidden');
			$(me.options.zoomdiv).getElement('.previous').setStyle('visibility', me.elements[idx-1]?'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;
		}});
	}
});

function twitterCallback2(twitters) {
  var statusHTML = [];
  for (var i=0; i<twitters.length && i<numtweets; i++){
    var username = twitters[i].user.screen_name;
    var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
      return '<a href="'+url+'">'+url+'</a>';
    }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
      return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
    });
    statusHTML.push('<li><span>'+status+'</span> <a href="http://twitter.com/'+username+'/statuses/'+twitters[i].id+'"><br />'+relative_time(twitters[i].created_at)+'</a></li>');
  }
	$('twitter_update_list').removeClass('loading');
  document.getElementById('twitter_update_list').innerHTML = statusHTML.join('');
}

function relative_time(time_value) {
  var values = time_value.split(" ");
  time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  delta = delta + (relative_to.getTimezoneOffset() * 60);

  if (delta < 60) {
    return translate.lessthanaminuteago;
  } else if(delta < 120) {
    return translate.aboutaminuteago;
  } else if(delta < (60*60)) {
    return (parseInt(delta / 60)).toString() + ' ' + translate.minutesago;
  } else if(delta < (120*60)) {
    return translate.aboutanhourago;
  } else if(delta < (24*60*60)) {
    return '' + (parseInt(delta / 3600)).toString() + ' ' + translate.hoursago;
  } else if(delta < (48*60*60)) {
    return translate.yesterday;
  } else {
    return (parseInt(delta / 86400)).toString() + ' ' + translate.daysago;
  }
}
