/*
* Cache van javascripts.script.js
* Created: 2010-03-04 14:04:01
*/

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

var cookieopts = {
	'domain': 'slagenlandwonen.nl',
	'path': ''
};

var google = 'UA-5969893-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(e) {
	$$('.map').each(function(mapimg) {
		var defimage = mapimg.get('src');

		var mapimgs = [];
		$$(mapimg.get('usemap')+' area').each(function(area) {
			mapimgs.push(defimage.replace(/\/([a-z]+)\.([a-z]{3})$/, '/'+area.get('class')+'.$2'));
			area.addEvents({
				'mouseenter': function() {
					mapimg.set('src', defimage.replace(/\/([a-z]+)\.([a-z]{3})$/, '/'+this.get('class')+'.$2'));
				},
				'mouseleave': function() {
					mapimg.set('src', defimage);
				}
			});
		});
		new Asset.images(mapimgs);
	});
});

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

	$$('body').addClass('js');

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

	new imageFader($$('img.sfeerimgs'), {duration: 2500, interval: 10000});
	
	/* Topnav */
	if ($('topnav')) {
		var li = new Element('li', {'id': 'textzoom'}).inject($('topnav'));
		[0, 1, 2].each(function(size) {
			new Element('a', {
				'href': 'Zoom',
				'class': 'zoom'+size,
				'html': 'A'
			}).addEvent('click', function(e) {
				new Event(e).stop();
				if ($('zoomstyle')) $('zoomstyle').dispose();
				new Asset.css('/zoom'+size+'.style.css', {'id': 'zoomstyle'});
				Cookie.write('zoom', size, cookieopts);
			}).inject(li);
		});
		var zoom = Cookie.read('zoom');
		if (zoom && zoom.toInt() > 0 && zoom.toInt() <= 2) {
			new Asset.css('/zoom'+zoom.toInt()+'.style.css', {'id': 'zoomstyle'});
		}
	}
	if ($('printpage')) {
		$('printpage').getFirst('a')
			.set('href', $('printpage').getFirst('a').get('text'))
			.addEvent('click', function(e) {
				new Event(e).stop();
				window.print();
			});
	}
	/* Topnav */

	/* Menu */
	// Level 2
	var menuhorlists = $$('ul#menu li li ul');
	var menuhorfx = new Fx.Elements(menuhorlists, {
		'link': 'cancel',
		'duration': 500,
		transition: Fx.Transitions.Sine.easeOut,
		onComplete: function() {
			var keepopen = null;
			menuhorlists.each(function(el) {
				if (el.getStyle('height').toInt() > 0) {
					keepopen = el;
					el.setStyle('overflow', 'visible');
				}
			});
			menuhorlists.setStyle('width', 0);
			if (keepopen) {
				keepopen.setStyle('width', 'auto');
			}
		}
	});
	openmenuhor = function(e, idx) {
		var obj = {};
		menuhorlists.each(function(el, i) {
			if (i == idx) {
				obj[i] = {
					'height': el.getScrollSize().y
				};
				el.setStyle('width', 'auto');
			} else {
				obj[i] = {
					'height': 0
				};
				el.setStyle('overflow', 'hidden');
			}
		});
		menuhorfx.start(obj);
	}
	var ulcounter = 0;
	$$('ul#menu > li > ul > li').each(function(li) {
		var childul = li.getElement('ul');
		if (childul) {
			childul.setStyles({
				'overflow': 'hidden',
				'position': 'absolute',
				'height': 0
			});
			li.addEvent('mouseenter', openmenuhor.bindWithEvent(childul, ulcounter));
			ulcounter++;
		} else {
			li.addEvent('mouseenter', openmenuhor.bindWithEvent(childul, -1));
		}
	});

	// Level 1
	var menulists = $$('ul#menu > li > ul');
	var menufx = new Fx.Elements(menulists, {
		'link': 'cancel',
		'duration': 500,
		transition: Fx.Transitions.Sine.easeOut,
		onStart: openmenuhor.bindWithEvent(menufx, -1),
		onComplete: function() {
			menulists.each(function(el) {
				if (el.getStyle('height').toInt() > 0) {
					el.setStyle('overflow', 'visible');
				}
			});
		}
	});
	openmenu = function(e, idx) {
		var obj = {};
		menulists.each(function(el, i) {
			if (i == idx) {
				obj[i] = {
					'height': el.getScrollSize().y
				};
			} else {
				obj[i] = {
					'height': 0
				};
				el.setStyle('overflow', 'hidden');
			}
		});
		menufx.start(obj);
	}
	var ulcounter = 0;
	$('menu').getChildren('li').each(function(li) {
		var childul = li.getElement('ul');
		if (childul) {
			childul.setStyles({
				'overflow': 'hidden',
				'position': 'absolute',
				'height': '0',
				'width': '200px'
			});
			li.addEvent('mouseenter', openmenu.bindWithEvent(childul, ulcounter));
			ulcounter++;
		} else {
			li.addEvent('mouseenter', openmenu.bindWithEvent(childul, -1));
		}
	});
	$('menu').addEvent('mouseleave', openmenu.bindWithEvent($('menu'), -1));
	/* Menu */

	if ($('breadcrumb')) {
		$$('ul#breadcrumb li').each(function(el, i) {
			if (i > 0) {
				el.set('html', '<span>&raquo;</span>' + el.get('html'));
			}
		});
	}

	$$('div.thumbs').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(
 				'margin-left',
 				imglarge.getStyle('margin-left'),
 				-1 * idx * imglarge.getParent('div').getStyle('width').toInt()
 			);
			thumbs.removeClass('current');
			thumbs[idx].addClass('current');
		}
		thumbs.each(function(img, i) {
			var newhref = '/images/';
			newhref += (window.getSize().x.toInt() - 200) + '/' + (window.getSize().y.toInt() - 200);
			newhref += '/3/0/';
			newhref += img.get('href').substr(img.get('href').lastIndexOf('/')+1);
			var link = new Element('a', {
				'href': newhref
			});
			new Asset.image(img.get('href'), {'class': 'zoom'}).inject(link);
			link.inject(imglarge);
			img.addEvent('click', function(e) {
				new Event(e).stop();
				showimage(i);
			});
		});
		imgsfx = new Fx.Tween(imglarge, {
			duration: 300,
			transition: Fx.Transitions.Sine.easeInOut
		});
		if (thumbs[0]) {
			showimage(0);
		}
		new Element('img', {
			'src': '/images/zoom.png',
			'height': 21,
			'width': 25,
			'styles': {
				'position': 'absolute',
				'top': 5,
				'left': 5
			}
		}).inject($(div.get('id')+'_large'));
	});

	new mouseOvers();

	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) {
			newwin = newwin || el.hasClass('newwindow');
			newwin = newwin || el.hasClass('externlink');
			
			var downloadsurl = '/downloads/';
			newwin = newwin || el.get('href').substring(0, downloadsurl.length) == downloadsurl;
		}
		if (newwin) {
			e.stop();
			window.open(el.href, '_blank');
		}
	});

	if ($('energylabelform')) {
		$('energylabelform').getElement('input[type=submit]').getParent('tr').dispose();

		var sel_street = $('energylabelform').getElement('select[name=street]');
		var sel_city   = $('energylabelform').getElement('select[name=city]');
		sel_city.addEvent('change', function(e) {
			var myval = this.get('value');
			if (!myval) {
				sel_street.set('html', '<option value="">-- Kies een straat --</option>');
				sel_street.set('disabled', 'disabled');
				$('energylabelresults').set('html', '');
			} else {
				sel_street.set('disabled', '');
				sel_street.highlight('#ddf');
				new Request.HTML({
					'update': sel_street,
					'url': $('energylabelform').get('action'),
					'method': 'get'
				}).get({'ajax': 1, 'city': myval.toInt()});
			}
		});
		sel_street.addEvent('change', function(e) {
			var myval = this.get('value');
			if (!myval) {
				$('energylabelresults').set('html', '');
			} else {
				sel_street.set('disabled', '');
				new Request.HTML({
					'update': $('energylabelresults'),
					'url': $('energylabelform').get('action'),
					'method': 'get',
					'onComplete': function() {
						new Fx.Scroll($(window)).toElement($('energylabelresults'));
					}
				}).get({'ajax': 1, 'street': myval.toInt(), 'city': sel_city.get('value').toInt()});
			}
		});
		sel_city.fireEvent('change');
	}

	if ($('zoekende')) {
		$('zoekende').addEvent('change', function() {
			if ($('zoekende').get('value') == 'doorstromer') {
				$$('tr.q_doorstromer').removeClass('hidden');
			} else {
				$$('tr.q_doorstromer').addClass('hidden');
			}
		});
		$('zoekende').fireEvent('change');
	}

	if ($('huidigewoning')) {
		$('huidigewoning').addEvent('change', function() {
			if ($('huidigewoning').get('value') == 'huurwoning') {
				$('huidigehuur').getParent('tr').removeClass('hidden');
			} else {
				$('huidigehuur').getParent('tr').addClass('hidden');
			}
		});
		$('huidigewoning').fireEvent('change');
	}

	if ($('search')) {
		$('search').addEvent('submit', function(e) {
			new Event(e).stop();
			window.location.href = $('search').get('action') + '/' + encodeURIComponent($('searchfield').get('value'));
		});
		var searchdef = 'Zoeken';
		$('searchfield').addEvent('focus', function(e) {
			if ($('searchfield').get('value') == searchdef) {
				$('searchfield').set('value', '');
			}
		});
	}

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

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) {
				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);
			this.auto();
		}
	},

	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.9
	},

	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: [15, 10, 15, 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;
		}});
	}
});

