// JavaScript actions
// URL of page
var url = window.location.protocol + '//' + window.location.host + window.location.pathname;
// detect IE and below
var OLD_IE = false;

// form validation
// settings
var errorColor = '#BC0302';
var errorBorder = '#BC0302';
var errorBG = '#E8C9C9';
var okColor = '#666';
var okBorder = '#999';
var okBG = '#FFF';
var hasError = false;
function validateRegistration(e) {
	var elm = Event.element(e);
	if (elm.nodeName != 'FORM')
		elm = elm.form;

	// check mandatory elements
	var inputs = $$('input.mandatory');
	inputs.each(function(i)
	{
		if (i.value.length == 0) {
			Element.setStyle(i, {color: errorColor, borderColor: errorBorder, backgroundColor: errorBG});
			Element.show('registererror');
			hasError = true;
			Event.stop(e);
		}
		else {
			Element.setStyle(i, {color: okColor, borderColor: okBorder});
		}
	});
	if (!hasError) {
		if (elm.register.value)
			elm.user.value = elm.email1.value;
		Element.hide('registererror');
	}
}

// validate generic form submits
function validateSubmit(e) {
	var elm = Event.element(e);
	elm = elm.up('form');
	// check mandatory elements
	var inputs = $$('input.mandatory');
	inputs.each(function(i)
	{
		if (i.value.length == 0) {
			Element.setStyle(i, {color: errorColor, borderColor: errorBorder, backgroundColor: errorBG});
			Element.show('submiterror');
			hasError = true;
			Event.stop(e);
		}
		else {
			Element.setStyle(i, {color: okColor, borderColor: okBorder});
		}
	});
	if (!hasError) {
		Element.hide('submiterror');
	}
}

// autosubmit form on change
function autoSubmit(e) {
	var elm = Event.element(e);
	elm.form.submit();
}

// set action on button press
function setAction(e) {
	var elm = Event.element(e);
	elm.form.action = elm.getAttribute('target');
}

// thumbnail popup
function showThumb(e) {
	var blowups = $$('.blowup');
	blowups.each(function(b)
	{
		b.hide();
		b.up('li').setStyle({zIndex:1});
	});
	var elm = Event.element(e);
	$(elm.getAttribute('target')).show();
	elm.up('li').setStyle({zIndex:10});
}
// blowup popdown
function hideBlowup(e) {
	var blowups = $$('.blowup');
	blowups.each(function(b)
	{
		b.hide();
		b.up('li').setStyle({zIndex:1});
	});
}

// link based view switcher
function switchView(e) {
	var elm = Event.element(e);
	var view = elm.getAttribute('view');
	var clear = elm.getAttribute('clear');
	// hide all clears
	var clears = $$('.' + clear);
	clears.each(function(t)
	{
		t.hide();
	});
	// show view
	$(view).show();
	// deactivate links
	var actives = $$('.switchview');
	actives.each(function(t)
	{
		t.removeClassName('active');
	});
	elm.addClassName('active');
	// disable or enable form elements
	switch (view) {
		case 'plaats':
			$('plaatspcode').enable();
			$('radius').enable();
			$('straat').disable();
			$('plaatsnaam').disable();
			$('provincienaam').disable();
			break;
		case 'adres':
			$('plaatspcode').disable();
			$('radius').disable();
			$('straat').enable();
			$('plaatsnaam').enable();
			$('provincienaam').disable();
			break;
		case 'provincie':
			$('plaatspcode').disable();
			$('radius').disable();
			$('straat').disable();
			$('plaatsnaam').disable();
			$('provincienaam').enable();
			break;
	}
}

// price type select switch
function switchSoortSelect(e) {
	var elm = Event.element(e);
	var f = elm.up('form');
	if ($('soortselectkoop').checked) {
		$('soortkoop').show();
		var selects = $('soortkoop').getElementsBySelector('.minmax');
		selects.each(function(elm)
		{
			elm.enable();
		});
		$('soorthuur').hide();
		var selects = $('soorthuur').getElementsBySelector('.minmax');
		selects.each(function(elm)
		{
			elm.disable();
		});
	}
	else {
		$('soortkoop').hide();
		var selects = $('soortkoop').getElementsBySelector('.minmax');
		selects.each(function(elm)
		{
			elm.disable();
		});
		$('soorthuur').show();
		var selects = $('soorthuur').getElementsBySelector('.minmax');
		selects.each(function(elm)
		{
			elm.enable();
		});
	}
}

// scroller settings
var panes;
var activePane = 1;
var oldPane;
var newPane;
// previous scroller pane
function prevPane(e) {
	// store old pane
	oldPane = 'pane' + activePane;
	// determine previous pane
	if (activePane == 1)
		activePane = panes;
	else
		activePane -= 1;
	newPane = 'pane' + activePane;
	// slide out active pane
	Effect.SlideUp(oldPane);
	Effect.SlideDown(newPane);
//    Effect.SlideDown(newPane, {afterFinish: moveToTop});
}

// next scroller pane
function nextPane(e) {
	// store old pane
	oldPane = 'pane' + activePane;
	// determine next pane
	if (activePane == panes)
		activePane = 1;
	else
		activePane += 1;
	newPane = 'pane' + activePane;
	// slide out active pane
	Effect.SlideUp(oldPane);
	Effect.SlideDown(newPane);
//    Effect.SlideDown(newPane, {afterFinish: moveToBottom});
}

// move new pane to top of stack
function moveToTop() {
	var stack = $(newPane).parentNode;
	var pane = $(newPane).remove();
	stack.insert(pane, 'top');
}

// move old pane to bottom of stack
function moveToBottom() {
	var stack = $(oldPane).parentNode;
	var pane = $(oldPane).remove();
	stack.insert(pane, 'bottom');
}

// submit response form
function submitResponse(e) {
	var elm = Event.element(e);
	elm = elm.up('form');
	hasError = false;

	// check mandatory elements
	var inputs = $$('#responseform input.mandatory');
	inputs.each(function(i)
	{
		if (i.value.length == 0) {
			Element.setStyle(i, {color: errorColor, borderColor: errorBorder, backgroundColor: errorBG});
			Element.show('responseerror');
			hasError = true;
			Event.stop(e);
		}
		else {
			Element.setStyle(i, {color: okColor, borderColor: okBorder, backgroundColor: okBG});
		}
	});
	if (!hasError) {
		Element.hide('responseerror');
		var req = new Ajax.Request(url,
		{
			method: 'get',
			parameters: $('responseform').serialize(),
			onComplete: function(r)
			{
				j = eval(r.responseText);
				if (j) {
					$('responseform').up('div').hide();
					$('respondlink').up('li').update('Uw reactie is verzonden.');
				}
			}
		});
	}
	Event.stop(e);
}

// show response form
function showResponse(e) {
	var elm = Event.element(e);
	new Effect.Grow('respondbox', {direction: 'top-left'});
}

// submit forward form
function submitForward(e) {
	var elm = Event.element(e);
	elm = elm.up('form');
	hasError = false;

	// check mandatory elements
	var inputs = $$('#forwardform input.mandatory');
	inputs.each(function(i) {
		if (i.value.length == 0) {
			Element.setStyle(i, {color: errorColor, borderColor: errorBorder, backgroundColor: errorBG});
			Element.show('forwarderror');
			hasError = true;
			Event.stop(e);
		}
		else {
			Element.setStyle(i, {color: okColor, borderColor: okBorder, backgroundColor: okBG});
		}
	});
	if (!hasError) {
		Element.hide('forwarderror');
		var f = $('forwardform');
		// anti spam measure
//		f.objectid.name = 'id';
		var req = new Ajax.Request(url,
		{
			method: 'get',
			parameters: $('forwardform').serialize(),
			onComplete: function(r)
			{
				j = eval(r.responseText);
				if (j) {
					$('forwardform').up('div').hide();
					$('forwardlink').up('li').update('Uw bericht is verzonden.');
				}
			}
		});
	}
	Event.stop(e);
	hasError = false;
	if ($('map')) {
		$('map').show();
	}
}

// show forward form
function showForward(e) {
	var elm = Event.element(e);
	new Effect.Grow('forwardbox', {direction: 'top-left'});
	if ($('map')) {
		$('map').hide();
	}
}

// add object to favorites
function addFavorite(e) {
	var elm = Event.element(e);
	var req = new Ajax.Request(url, {
		method: 'get',
		parameters: 'favorite=' + elm.name,
		onComplete: function(r) {
			j = eval(r.responseText);
			if (j) {
				if (elm.nodeName != 'LI')
					elm = elm.parentNode;
				elm.update('Dit object is aan uw favorieten toegevoegd.');
			}
		}
	});
	Event.stop(e);
}

// application initialization
function initActions() {
	// track old browsers
	if ($('OLD_IE')) {
		OLD_IE = true;
	}
	// form submit on change
	var autosubmits = $$('.autosubmit');
	autosubmits.each(function(elm) {
		Event.observe(elm, 'change', autoSubmit);
	});
	// thumbnail popup
	var thumbs = $$('.thumb');
	thumbs.each(function(elm) {
		Event.observe(elm, 'click', showThumb);
	});
	// blowup popdown
	var blowups = $$('.blowup');
	blowups.each(function(elm) {
		Event.observe(elm, 'click', hideBlowup);
	});
	// link based view switcher
	var views = $$('.switchview');
	views.each(function(elm) {
		Event.observe(elm, 'click', switchView);
	});
	// price type select switch
	var soortselect = $$('.soortselect');
	soortselect.each(function(elm) {
		Event.observe(elm, 'click', switchSoortSelect);
	});
	// add to favorites
	var links = $$('.favorite');
	links.each(function(elm) {
		Event.observe(elm, 'click', addFavorite);
	});
	// response form
	var links = $$('.respond');
	links.each(function(elm) {
		Event.observe(elm, 'click', showResponse);
	});
	// response form validator
	var responseForm = $('responseform');
	if (responseForm) {
		Event.observe(responseForm, 'submit', submitResponse);
	}
	// forward form
	var links = $$('.forward');
	links.each(function(elm) {
		Event.observe(elm, 'click', showForward);
	});
	// forward form validator
	var forwardForm = $('forwardform');
	if (forwardForm) {
		Event.observe(forwardForm, 'submit', submitForward);
	}
	// close input box
	var links = $$('.closebox');
	links.each(function(elm) {
		Event.observe(
			elm, 'click', function(e){
				if ($('map')) {
					$('map').show();
				}
				Event.element(e).up('div').hide();
			}
		);
	});
	// profile form validator
	var registerForm = $('registerform');
	if (registerForm) {
		Event.observe(registerForm, 'submit', validateRegistration);
	}
	// form action tweak
	var submit = $('extendedsubmit');
	if (submit) {
		Event.observe(submit, 'click', setAction);
	}
	// scroller actions
	if ($('scroller')) {
		panes = parseInt($('scroller').getAttribute('panes'));
		var prev = $$('.slideleft');
		prev.each(function(elm)
		{
			Event.observe(elm, 'click', prevPane);
		});
		var next = $$('.slideright');
		next.each(function(elm)
		{
			Event.observe(elm, 'click', nextPane);
		});
	}
}

window.addEvent('load', initActions);

