﻿var dialog = new function ()
{
	this.isIE = navigator.userAgent.indexOf("IE") == -1 ? false : true;
	this.layers = new Array();
	this.topLayer = null;
	this.savresState = null;

	this.show = function (url, title, w, h, args, cb)
	{
		var layer = top.dialog.createLayer(w, h, cb);
		var element = top.dialog.createBlankDialog(layer, title);
		layer.args = args;

		var frameElement = document.createElement("iframe");
		frameElement.className = "dialogFrame";
		frameElement.setAttribute("frameBorder", "0");
		frameElement.setAttribute("scrolling", "no");
		frameElement.setAttribute("src", url);
		element.appendChild(frameElement);
		frameElement.focus();

		document.onkeydown = function (e) { return top.dialog.onkeydown(e, 0); };
	};

	this.alert = function (msg, cb)
	{
		var dims = new Object();
		top.dialog.calculateDimensions(dims, msg);
		var layer = top.dialog.createLayer(dims.width, dims.height, cb);
		top.dialog.createDialog(top.dialog.createBlankDialog(layer, "Alert"), 0, msg);
	};

	this.confirm = function (msg, cb)
	{
		var dims = new Object();
		top.dialog.calculateDimensions(dims, msg);
		var layer = top.dialog.createLayer(dims.width, dims.height, cb);
		top.dialog.createDialog(top.dialog.createBlankDialog(layer, "Confirm"), 1, msg);
	};

	this.confirmDelete = function (id, fn)
	{
		top.dialog.confirm("Do you really want to delete:<br /><b>" + document.getElementById(id).innerHTML + "</b> ?", fn);
	}

	this.preview = function (url, title)
	{
		switch (top.dialog.getFileType(url))
		{
			case 0:
				var layer = top.dialog.createLayer(650, 650, null);
				var element = top.dialog.createBlankDialog(layer, title);
				var frameElement = document.createElement("iframe");
				frameElement.className = "dialogFrame";
				frameElement.style.height = "620px";
				frameElement.setAttribute("frameborder", 0);
				frameElement.setAttribute("src", url);
				element.appendChild(frameElement);
				element.appendChild(top.dialog.createButtons(2));
				break;

			case 1:
				var layer = top.dialog.createLayer(0, 0, null);
				layer.title = title;
				layer.img = new Image();
				layer.img.onload = function ()
				{
					var layer = top.dialog.topLayer;
					layer.width = Math.max(layer.img.width + 20, 200);
					layer.height = Math.max(layer.img.height + 50, 100);

					var element = top.dialog.createBlankDialog(layer, layer.title);

					layer.img.className = "dialogItem";
					element.appendChild(layer.img);
					element.appendChild(top.dialog.createButtons(2));
					element.focus();

				};
				layer.img.src = url;
				break;

			case 2:
				var layer = top.dialog.createLayer(400, 330, null);
				var element = top.dialog.createBlankDialog(layer, title);
				var html = '<object style="width: 400px; height: 300px" classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6"><param name="windowlessVideo" value="true" /><param name="url" value="' + url + '" /><embed style="width: inherit; height: inherit" type="application/x-ms-wmp" src="' + url + '" /></embed></object>';
				if (editor.isIE) element.innerHTML = html; else element.execCommand('insertHTML', null, html);
				element.appendChild(top.dialog.createButtons(2));
				element.focus();
				break;

			case 3:
				var layer = top.dialog.createLayer(400, 330, null);
				var element = top.dialog.createBlankDialog(layer, title);
				var html = '<object style="width: 400px; height: 300px" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="wmode" value="opaque" /><param name="movie" value="' + url + '" /><embed style="width: inherit; height: inherit;" type="application/x-shockwave-flash" src="' + url + '" /></embed></object>';
				if (editor.isIE) element.innerHTML = html; else element.execCommand('insertHTML', null, html);
				element.appendChild(top.dialog.createButtons(2));
				element.focus();
				break;

			case 4:
				window.open(url);
				return;
		}

		document.onkeydown = function (e) { return top.dialog.onkeydown(e, 0); };
	};

	this.getFileType = function (url)
	{
		var mediaType = 0x00;

		switch (url.match("\.([\\w]+)($|\\?)")[1])
		{
			case "jpg":
			case "jpeg":
			case "gif":
			case "png":
				mediaType = 0x01;
				break;

			case "wmv":
			case "mpg":
			case "mpeg":
			case "wma":
			case "mp3":
				mediaType = 0x02;
				break;

			case "swf":
			case "flv":
				mediaType = 0x03;
				break;

			case "xls":
			case "xlsx":
			case "doc":
			case "docx":
			case "ppt":
			case "pptx":
				mediaType = 0x04;
				break;
		}

		return mediaType;
	};

	this.createDialog = function (root, typ, txt)
	{
		var element = document.createElement("img");
		element.className = "dialogImage";
		element.src = typ ? "../images/confirm.gif" : "../images/alert.gif";
		root.appendChild(element);

		element = document.createElement("div");
		element.className = "dialogTextContainer";

		var subElement = document.createElement("div");
		subElement.className = "dialogItem";
		subElement.innerHTML = txt;
		element.appendChild(subElement);

		root.appendChild(element);
		root.appendChild(top.dialog.createButtons(typ));

		document.onkeydown = function (e) { return top.dialog.onkeydown(e, typ) };
	};

	this.createButtons = function (typ)
	{
		var element = document.createElement("div");
		element.className = "dialogButtonContainer";

		subElement = document.createElement("a");
		subElement.className = "arrowButton Rb";

		switch (typ)
		{
			case 0:
				subElement.href = "javascript:top.dialog.close(0);";
				subElement.innerHTML = "OK&nbsp;&nbsp;&nbsp;";
				break;

			case 1:
				subElement.href = "javascript:top.dialog.close(1);";
				subElement.innerHTML = "Yes&nbsp;";
				element.appendChild(subElement);

				subElement = document.createElement("a");
				subElement.className = "arrowButton Rb";
				subElement.href = "javascript:top.dialog.close(0);";
				subElement.innerHTML = "No&nbsp;&nbsp;";
				break;

			default:
				subElement.href = "javascript:top.dialog.close(0);";
				subElement.innerHTML = "Close&nbsp;";
				break;
		}

		element.appendChild(subElement);
		return element;
	};

	this.calculateDimensions = function (dims, msg)
	{
		var m = msg.replace(new RegExp("<(?!br).+?>", "gi"), "");
		var max = 0, a = 0, p = 0;

		do
		{
			if (a > max) max = a;
			if (a) p += (a + 4);
			a = m.substr(p).search(new RegExp("<br[^>]*>", "gi"))

		} while (a != -1);

		a = m.length - p;
		if (a > max) max = a;

		var py = 62 + Math.floor(max / 80) * 12;
		var px = 64 + (max % 80) * 7;
		dims.width = px < 300 ? 300 : px;
		dims.height = py < 125 ? 125 : py;
	};

	this.onkeydown = function (e, typ)
	{
		e = e ? e : window.event;
		if ((e.keyCode == 13) || (typ == 1 && ((e.keyCode == 89) || (e.keyCode == 121)))) top.dialog.close(1);
		if ((e.keyCode == 27) || (typ == 1 && ((e.keyCode == 78) || (e.keyCode == 110)))) top.dialog.close(0);
		return false;
	};

	this.mousedown = function (e)
	{
		e = e ? e : window.event;
		top.dialog.xoff = e.clientX - top.dialog.topLayer.rootElement.offsetLeft;
		top.dialog.yoff = e.clientY - top.dialog.topLayer.rootElement.offsetTop;
		var darkElement = top.dialog.topLayer.darkElement;
		if (darkElement.setCapture)
		{
			darkElement.onmousemove = top.dialog.mousemove;
			darkElement.onmouseup = top.dialog.mouseup;
			darkElement.setCapture();
		}
		else
		{
			darkElement.addEventListener("mousemove", top.dialog.mousemove, true);
			darkElement.addEventListener("mouseup", top.dialog.mouseup, true);
		}
		return false;
	};

	this.mousemove = function (e)
	{
		e = e ? e : window.event;
		top.dialog.topLayer.rootElement.style.left = (e.clientX - top.dialog.xoff) + "px";
		top.dialog.topLayer.rootElement.style.top = (e.clientY - top.dialog.yoff) + "px";
		return false;
	};

	this.mouseup = function (e)
	{
		var darkElement = top.dialog.topLayer.darkElement;
		if (darkElement.releaseCapture)
		{
			darkElement.onmousemove = null;
			darkElement.onmouseup = null;
			darkElement.releaseCapture();
		}
		else
		{
			darkElement.removeEventListener("mousemove", top.dialog.mousemove, true);
			darkElement.removeEventListener("mouseup", top.dialog.mouseup, true);
		}
		return false;
	};

	this.close = function (x)
	{
		top.dialog.destroyBlankDialog();
		top.dialog.callBack(x);
		top.dialog.destroyLayer();
	};

	this.callBack = function (x)
	{
		var layer = this.topLayer;
		if (layer.callBack) layer.callBack(x, layer.args);
	};

	this.setTitle = function (title)
	{
		if (top.dialog.topLayer) top.dialog.topLayer.titleElement.innerHTML = title;
	};

	this.createBlankDialog = function (layer, title)
	{
		if (top.dialog.layers.length == 1) if (top.dialog.savresState) top.dialog.savresState(0);

		layer.darkElement = document.createElement("div");
		layer.darkElement.className = "screenBoundary";
		var blackElement = document.createElement("div");
		blackElement.className = "screenDark";
		layer.darkElement.appendChild(blackElement);

		layer.rootElement = document.createElement("div");
		layer.rootElement.className = "dialogShadow";
		layer.rootElement.style.left = ((document.body.offsetWidth - layer.width) / 2) + "px";
		layer.rootElement.style.top = (350 - (layer.height / 2)) + "px";
		layer.rootElement.style.width = layer.width + "px";
		layer.rootElement.style.height = layer.height + "px";

		var headElement = document.createElement("div");
		headElement.className = "dialogHeadTop";
		headElement.onmousedown = function (e) { return top.dialog.mousedown(e); };
		layer.rootElement.appendChild(headElement);

		layer.titleElement = document.createElement("div");
		layer.titleElement.className = "pageHeadName";
		layer.titleElement.innerHTML = title;
		headElement.appendChild(layer.titleElement);

		var containerElement = document.createElement("div");
		containerElement.className = "dialogBackdrop";
		layer.rootElement.appendChild(containerElement);

		layer.darkElement.appendChild(layer.rootElement);
		document.body.appendChild(layer.darkElement);
		document.body.focus();

		return containerElement;
	};

	this.destroyBlankDialog = function ()
	{
		var layer = top.dialog.topLayer;

		document.body.removeChild(layer.darkElement);

		layer.darkElement = null;
		layer.titleElement = null;

		if (top.dialog.layers.length == 1) if (top.dialog.savresState) top.dialog.savresState(1);
	};

	this.createLayer = function (w, h, cb)
	{
		var layer = new Object();

		layer.width = w;
		layer.height = h;
		layer.callBack = cb;
		layer.saveonkeydown = document.onkeydown;

		top.dialog.layers.push(layer);
		top.dialog.topLayer = layer;

		return layer;
	};

	this.destroyLayer = function ()
	{
		var layer = this.topLayer;

		top.dialog.layers.pop();
		if (top.dialog.layers.length) top.dialog.topLayer = top.dialog.layers[top.dialog.layers.length - 1]; else top.dialog.topLayer = null;

		document.onkeydown = layer.saveonkeydown;

		layer.callBack = null;
		layer.saveonkeydown = null;
	};
};

