window.addEvent('domready', function() {
									 
	// Resized de maintable wanneer het venster geresized wordt
	if($('mainwrapper') && $('header') && $('leftmenu') && $('contentbody')) {
		// Venster hoogte wordt tabel hoogte
		// In Firefox (Browser.Engine.gecko) zorgt dit op sommige pagina's
		// voor een verspringing van opmaak.
		var func = function() {
			var windowHeight = window.getScrollSize().y;
			var contentHeight = windowHeight - $('header').getSize().y - 20;
			$('leftmenu').setStyle('height',contentHeight);
			$('contentbody').setStyle('height', contentHeight);
			$('mainwrapper').setStyle('height', windowHeight);
		};
		
		// Event toevoegen
		window.addEvent('resize', func);
		// Uitvoeren
		func();
		
	}

	// Maak de li elementen in #leftmenu klikbaar
	$$('#leftmenu ul li').each(function(el) {
		var a = el.getElement('a');
		if(a) {
			if(a.get('class') == 'empty') {
				a.set('href', 'javascript:void(0)');
				a.set('html', '&nbsp;');
				el.set('class', 'empty');
				return;
			}

			if(a.get('href') == document.location.pathname) {
				el.set('class', 'selected');
			}
			
			el.setStyle('cursor', 'pointer');
			el.addEvent('click', function(e) {
				if(a.get('target') && a.get('target') == '_blank') {
					window.open(a.get('href'));
				}
				else {
					location.href = a.get('href');
				}
			});
			
			// Voorkom een dubbele request
			a.addEvent('click', function(e) {
				e.stop();
				el.removeEvent('click');
				if(this.get('target') && this.get('target') == '_blank') {
					window.open(this.get('href'));
				}
				else {
					location.href = this.get('href');
				}
			});
		}
	});
	
	// Alle img[class=icon] elementen bij langs
	// Wanneer de alt tag de volgende structuur bevat; <actie>:<data>
	// dan wordt er een click event toegevoegd
	$$('#contentbody img.icon').each(function(el) {
		var alt = el.get('alt').split(':', 2);
		el.set('alt', '[' + el.get('title') + ']');
		if(alt.length != 2) {
			return;
		}
		
		if(alt[0] == 'disabled') {
			el.setOpacity(0.4);
		}
		else {
			el.setStyle('cursor', 'pointer');
		}
		
		el.addEvent('click', function(e) {
			doAction(alt);
		});
	});
	
	$$('#contentbody table.tableData tbody tr').each(function(el) {
		if(el.get('title') && el.get('title').length > 0) {
			var title = el.get('title').split(':', 2);
			if(title.length != 2) {
				return;
			}
			
			el.removeProperty('title');
			el.setStyle('cursor', 'pointer');
			el.addEvent('click', function(e) {
				doAction(title);
			});
		}
	});
	
	keep_alive();
});

// 
function doAction(alt) {
	if(alt.length != 2) {
		return false;
	}
	
	switch(alt[0]) {
		case 'goto':
			location.href = alt[1];
		break;
		case 'goto_blank':
			window.open(alt[1]);
		break;
		case 'mailto':
			location.href = 'mailto:' + alt[1];
		break;
		case 'confirm':
			_confirm('Bevestig uw actie', 'Weet je zeker dat je deze actie wilt uitvoeren?', function() {
				location.href = alt[1];
			});
		break;
		case 'confirmDelete':
			_confirm('Verwijderen', 'Weet je zeker dat je dit item wilt verwijderen?', function() {
				location.href = alt[1];
			});
		break;
		case 'confirmUndoable':
			_confirm('Bevestig uw actie', 'Weet je zeker dat je deze actie wilt uitvoeren? Uw actie kan niet ongedaan worden gemaakt.', function() {
				location.href = alt[1];
			});
		break;
		case 'disabled':
			if(alt[1].length == 0) {
				alt[1] = 'U heeft onvoldoende rechten om deze actie uit te mogen voeren';
			}
			alert(alt[1]);
		break;
	}
}

// Bevestiging met code vragen
function _confirm(title, msg, callback) {

	// Stel een nieuwe code in
	$('confirmination_code').set('text', $random(1000,9999));
	// Ingevoerde code verwijderen
	$('confirmination_code_input').set('value', '');

	var dialog_callback = function() {
		if($('confirmination_code').get('text') == $('confirmination_code_input').get('value')) {
			callback();
			return true;
		} else {
			alert('De code komt niet overeen!');
			return false;
		}
	};
	
	// Teksten instellen
	$('confirmination_title').set('text', title);
	$('confirmination_msg').set('text', msg);
	
	
	_overlay_screen('confirmination', 'confirmination_cancel', 'confirmination_ok', dialog_callback);
}


// Overlay scherm creeren en meegegeven element daar in plaatsen
// button_cancel wordt gebruikt om de overlay te sluiten
// button_ok sluit de overlay ook, maar voert callback uit
function _overlay_screen(element, button_cancel, button_ok, callback) {
	
	// Verwijder element als deze nog bestaat
	if($('overlay_remove')) {
		$('overlay_remove').destroy();
	}


	// Overlay maken
	var overlay = new Element('div', {	'id': 'overlay_remove',
										'styles': {
											'position': 'absolute',
											'background-color': 'white',
											'top': '0px',
											'left': '0px',
											'z-index': 1000,
											'vertical-align': 'middle'
										},
										'opacity': 0,
										'events': {
											'init': function() {
												this.setStyles({'width': window.getSize().x + 'px',
																'height': window.getSize().y + 'px'});

												// Clone maken van deze overlay
												// Enige verschil is dat deze niet transparant is en als
												// container fungeert voor #confirmination
												var positioned_overlay = this.clone();
												this.store('positioned_overlay', positioned_overlay);
												positioned_overlay.erase('id');
												positioned_overlay.set('opacity', 0);
												positioned_overlay.setStyle('background-color', 'transparent');
												positioned_overlay.setStyle('z-index', 1001);

												// Bestaande events verwijderen
												$(button_cancel).removeEvents();
												$(button_cancel).addEvent('click', function() {
													$('overlay_remove').fireEvent('finish');
												});

												if($(button_ok)) {
													// Bestaande events verwijderen
													$(button_ok).removeEvents();
													$(button_ok).addEvent('click', function() {
														if(callback()) {
															$('overlay_remove').fireEvent('finish');
														}
													});
												}

												// Confirmination in positioned_overlay plaatsen zodat transparency
												// bewaart blijft
												var el = $(element).inject(positioned_overlay);
												el.setStyle('display', 'block');
												
												this.inject($(document.body));
												positioned_overlay.inject($(document.body));

												// Resize event toevoegen aan window
												window.addEvent('resize', overlay.retrieve('resize'));
												// Niet meer scrollen in pagina
												//$(document.html).setStyle('overflow', 'hidden');
												// Fadein
												this.fade(0.90);
												positioned_overlay.fade(1.0);

											},
											'reposition': function() {
												// Op hoogte centreren
												var centerY = parseInt($(document.body).getSize().y / 2 - $(element).getSize().y / 2);
												if($(element).getSize().y < $(document.body).getSize().y) {
													$(element).setStyle('top', centerY + "px");
												}
											},
											'finish': function() {
												// Resize event van dit element verwijderen uit window
												window.removeEvent('resize', overlay.retrieve('resize'));	
												// Scrollen in pagina weer toestaan
												$(document.html).setStyle('overflow', '');
												// Wegfaden
												this.fade(0.0);
												this.retrieve('positioned_overlay').fade(0.0);

											}
										}
									})
									// Resize functie storen. Wordt meegegeven aan window resize event
									// en later weer verwijderd
									.store('resize', function() {
										$('overlay_remove').setStyles({	'width': $(document.body).getSize().x + 'px',
																		'height': $(document.body).getSize().y + 'px'});
										$('overlay_remove').retrieve('positioned_overlay').setStyles({	'width': $('overlay_remove').getSize().x,
																										'height': $('overlay_remove').getSize().y});
										overlay.fireEvent('reposition');
									});
	// Init uitvoeren
	overlay.fireEvent('init');
	overlay.fireEvent('reposition');
}

// Keep alive check
// Wordt om de x aantal minuten uitgevoerd. Wanneer de gebruiker niet meer is ingelogd dan komt
// daar een melding van. Door om de 5 minuten de keepalive aan te roepen moet worden
// voorkomen dat de sessie verloopt
function keep_alive() {
	var func = (function() {
		// JSON request uitvoeren
		var jsonRequest = new Request.JSON({url: '/account/index/keep-alive/format/json/?rnd='+$time(),
											onComplete: function(status){
												// Status controle niet benodigd
											}
										}).GET({});
	});
	func.periodical(300000); // Periodiek uitvoeren: Om de 5 minuten uitvoeren
}
