/*
	Created by Michael Schuijff <michael@reglobe.nl>
	Copyright Lost Images, The Netherlands
	
	For more information, visit www.michaelschuijff.nl
*/

(function () {
	let element = createElement('div', 'context-menu');
	
	window.contextMenu = function (parent, items) {
		if (element.parentNode == parent) {
			hideContextMenu();
			return;
		}
		
		let rect = parent.getBoundingClientRect();
		
		if (!rect.width) {
			return;
		}

		let style = element.style;
		style.cssText = null;
		
		if (rect.top < window.innerHeight / 2) {
			style.top = '100%';
		} else {
			style.bottom = '100%';
		}
		
		if (rect.left < window.innerWidth / 2) {
			style.left = 0;
		} else {
			style.right = 0;
		}
		
		element.innerHTML = '';
		
		for (let item of items) {
			if (item.hidden) {
				continue;
			}
			
			if (item.separator) {
				element.append(createElement('span', 'separator'));
				continue;
			}
			
			let link = createElement('a', null, item.text);
			
			link.addEventListener('touchstart', (e) => {
				e.stopPropagation();
			}, { passive: false });
			
			let href = item.href || '';

			link.addEventListener('click', (e) => {
				e.preventDefault();
				e.stopPropagation();
				
				if (href) {
					let host = location.protocol + '//' + location.hostname + '/';
					
					if (href[0] == '/' || href.substr(0, host.length).toLowerCase() == host.toLowerCase()) {
						router.go(href);
					} else {
						router.visit(href);
					}
				}
				
				setTimeout(() => {
					hideContextMenu();
					
					if (item.click) {
						setTimeout(item.click, 50);
					}
				}, 150);
			});
			
			link.href = href;
			
			element.append(link);
		}		
		
		parent.append(element);
	}
	
	window.hideContextMenu = function () {
		if (!element.parentNode) {
			return;
		}
			
		element.remove();

		let parent = element.parentNode;
			
		while (parent && parent.classList) {
			parent.classList.remove('menu-active');
			parent = parent.parentNode;
		}	
	}
	
	document.addEventListener('click', (e) => {
		if (e.target.firstChild != element) {
			hideContextMenu();
		}
	});
	
	document.addEventListener('scroll', hideContextMenu);
	window.addEventListener('resize', hideContextMenu);
})();
