﻿/// <reference path="ComitV2.js" />
comit.magicBox = (function () {
	var refMagicBox = null, refBlackBox = null, refInnerBlackBox = null, active = false, currentOwner = false;
	
	// Private functions
	function popup(showThis, owner) {
		if (active) { remove(); }
		if (!showThis) {
			return false;
		}
		currentOwner = owner;
		if (!refBlackBox) {
			var targetForm = mGetNodes(new oGetNodes("form", 0, 0, 0, 0))[0];
			refBlackBox = createBlackBox(targetForm);
		}
		if (!refMagicBox) { refMagicBox = createMagicBox(refBlackBox, showThis); };
		active = true;
		return true;
	}

	function remove(owner) {
		if (active === false || owner !== currentOwner) { return };
		active = false;
		refBlackBox.parentNode.removeChild(refBlackBox);
		//document.body.style.overflow = "";
		refBlackBox = refInnerBlackBox = refMagicBox = null;
	}

	function createBlackBox(targetHTML) {
		var blackBox = document.createElement('div'), innerBlackBox = document.createElement('div');
		blackBox.className = "blackBox";
		innerBlackBox.className = "innerBlackBox";
		blackBox.appendChild(innerBlackBox);
		refInnerBlackBox = innerBlackBox;
		targetHTML.appendChild(blackBox);
		blackBox.onclick = function (e) {
			if (comit.getEventTargetNode(e) === blackBox) {
				remove(currentOwner);
			}
		};
		return blackBox;
	}

	function createMagicBox(targetHTML, showThis) {
		var magicBoxOuter = document.createElement('div'),
		magicBoxInner = document.createElement('div'), 
		content = document.createElement('div'),
		closeButton = document.createElement('img');
		magicBoxOuter.className = "magicBoxOuter";
		magicBoxInner.className = "magicBoxInner";
		magicBoxOuter.appendChild(magicBoxInner);
		content.className = "content";
		if (typeof showThis == "object" && showThis.nodeType && typeof showThis.nodeType == "number") {
			// This fix is done so that the closebutton can be appended without losing the onclick function
			// IE could not append showThis directly.
			if (showThis.ownerDocument != document) {
				var appendContent = document.createElement("div");
				appendContent.innerHTML = showThis.innerHTML;
			}
			showThis.style.display = "block";
			content.appendChild((appendContent) ? appendContent : showThis);
		}
		else {
			alert("magicbox currently accepts: nodes");
		}
		magicBoxInner.appendChild(content);
		closeButton.src = 'images/magicBoxCloseButton.png';
		closeButton.className = "closeButton";
		content.insertBefore(closeButton, content.firstChild);
		closeButton.onclick = function () {
			remove(currentOwner);
		};
		/// attach to body
		refInnerBlackBox.appendChild(magicBoxOuter);
		var screen = extScreen();
		magicBoxInner.style.maxHeight = (screen.height - 100) + "px";
		var xpos = Math.floor(targetHTML.offsetWidth / 2) - Math.floor(magicBoxOuter.offsetWidth / 2) - 10;
		var ypos = Math.floor(targetHTML.offsetHeight / 2) - Math.floor(magicBoxOuter.offsetHeight / 2) - 20;
		refInnerBlackBox.style.top = ypos + 'px';
		refInnerBlackBox.style.left = xpos + 'px';
		return magicBoxOuter;
	}
	//Private functions END
	return {
		popup: popup,
		remove: remove
	}
})();
addOnload(function () {
	var catchArr = [];
	var fileDialog = mGetNodes(new oGetNodes(0, 0, 0, "fileDialog", 0));
	if (fileDialog.length) {
		catchArr[catchArr.length] = fileDialog;
	}
	for (var i in catchArr) {
		var classArr = catchArr[i];
		for (var j in classArr) {
			//debugger;
			var currentTag = classArr[j];
			comit.magicBox.popup(currentTag, "cssChecker");
		}
	}
});
