text: /*
  Product Name: dhtmlxSuite 
  Version: 5.2.0 
  Edition: Standard 
  License: content of this file is covered by GPL. Usage outside GPL terms is prohibited. To obtain Commercial or Enterprise license contact sales@dhtmlx.com
  Copyright UAB Dinamenta http://www.dhtmlx.com
  */
  
  if(!window.dhtmlx)
  	window.dhtmlx = {};
  
  (function(){
  	var _dhx_msg_cfg = null;
  	function callback(config, result){
  			var usercall = config.callback;
  			modality(false);
  			config.box.parentNode.removeChild(config.box);
  			_dhx_msg_cfg = config.box = null;
  			if (usercall)
  				usercall(result);
  	}
  	function modal_key(e){
  		if (_dhx_msg_cfg){
  			e = e||event;
  			var code = e.which||event.keyCode;
  			if (dhtmlx.message.keyboard){
  				if (code == 13 || code == 32)
  					callback(_dhx_msg_cfg, true);
  				if (code == 27)
  					callback(_dhx_msg_cfg, false);
  
  				if (e.preventDefault)
  					e.preventDefault();
  				return !(e.cancelBubble = true);
  			}
  		}
  	}
  	if (document.attachEvent)
  		document.attachEvent("onkeydown", modal_key);
  	else
  		document.addEventListener("keydown", modal_key, true);
  		
  	function modality(mode){
  		if(!modality.cover){
  			modality.cover = document.createElement("DIV");
  			//necessary for IE only
  			modality.cover.onkeydown = modal_key;
  			modality.cover.className = "dhx_modal_cover";
  			document.body.appendChild(modality.cover);
  		}
  		var height =  document.body.scrollHeight;
  		modality.cover.style.display = mode?"inline-block":"none";
  	}
  
  	function button(text, result){
  		return "<div class='dhtmlx_popup_button' result='"+result+"' ><div>"+text+"</div></div>";
  	}
  
  	function info(text){
  		if (!t.area){
  			t.area = document.createElement("DIV");
  			t.area.className = "dhtmlx_message_area";
  			t.area.style[t.position]="15px";
  			document.body.appendChild(t.area);
  		}
  
  		t.hide(text.id);
  		var message = document.createElement("DIV");
  		message.innerHTML = "<div>"+text.text+"</div>";
  		message.className = "dhtmlx-info dhtmlx-" + text.type;
  		message.onclick = function(){
  			if (text) t.hide(text.id);
  			text = null;
  		};
  
  		if (t.position == "bottom" && t.area.firstChild)
  			t.area.insertBefore(message,t.area.firstChild);
  		else
  			t.area.appendChild(message);
  		
  		if (text.expire > 0)
  			t.timers[text.id]=window.setTimeout(function(){
  				t.hide(text.id);
  			}, text.expire);
  
  		t.pull[text.id] = message;
  		message = null;
  
  		return text.id;
  	}
  	function _boxStructure(config, ok, cancel){
  		var box = document.createElement("DIV");
  		box.className = " dhtmlx_modal_box dhtmlx-"+config.type;
  		box.setAttribute("dhxbox", 1);
  			
  		var inner = '';
  
  		if (config.width)
  			box.style.width = config.width;
  		if (config.height)
  			box.style.height = config.height;
  		if (config.title)
  			inner+='<div class="dhtmlx_popup_title">'+config.title+'</div>';
  		inner+='<div class="dhtmlx_popup_text"><span>'+(config.content?'':config.text)+'</span></div><div  class="dhtmlx_popup_controls">';
  		if (ok)
  			inner += button(config.ok || "OK", true);
  		if (cancel)
  			inner += button(config.cancel || "Cancel", false);
  		if (config.buttons){
  			for (var i=0; i<config.buttons.length; i++)
  				inner += button(config.buttons[i],i);
  		}
  		inner += '</div>';
  		box.innerHTML = inner;
  
  		if (config.content){
  			var node = config.content;
  			if (typeof node == "string") 
  				node = document.getElementById(node);
  			if (node.style.display == 'none')
  				node.style.display = "";
  			box.childNodes[config.title?1:0].appendChild(node);
  		}
  
  		box.onclick = function(e){
  			e = e ||event;
  			var source = e.target || e.srcElement;
  			if (!source.className) source = source.parentNode;
  			if (source.className == "dhtmlx_popup_button"){
  				var result = source.getAttribute("result");
  				result = (result == "true")||(result == "false"?false:result);
  				callback(config, result);
  			}
  		};
  		config.box = box;
  		if (ok||cancel)
  			_dhx_msg_cfg = config;
  
  		return box;
  	}
  	function _createBox(config, ok, cancel){
  		var box = config.tagName ? config : _boxStructure(config, ok, cancel);
  		
  		if (!config.hidden)
  			modality(true);
  		document.body.appendChild(box);
  		var x = config.left||Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth) - box.offsetWidth)/2));
  		var y = config.top||Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight) - box.offsetHeight)/2));
  		if (config.position == "top")
  			box.style.top = "-3px";
  		else
  			box.style.top = y+'px';
  		box.style.left = x+'px';
  		//necessary for IE only
  		box.onkeydown = modal_key;
  
  		box.focus();
  		if (config.hidden)
  			dhtmlx.modalbox.hide(box);
  
  		return box;
  	}
  
  	function alertPopup(config){
  		return _createBox(config, true, false);
  	}
  	function confirmPopup(config){
  		return _createBox(config, true, true);
  	}
  	function boxPopup(config){
  		return _createBox(config);
  	}
  	function box_params(text, type, callback){
  		if (typeof text != "object"){
  			if (typeof type == "function"){
  				callback = type;
  				type = "";
  			}
  			text = {text:text, type:type, callback:callback };
  		}
  		return text;
  	}
  	function params(text, type, expire, id){
  		if (typeof text != "object" || !text)
  			text = {text:text, type:type, expire:expire, id:id};
  		text.id = text.id||t.uid();
  		text.expire = text.expire||t.expire;
  		return text;
  	}
  	dhtmlx.alert = function(){
  		var text = box_params.apply(this, arguments);
  		text.type = text.type || "confirm";
  		return alertPopup(text);
  	};
  	dhtmlx.confirm = function(){
  		var text = box_params.apply(this, arguments);
  		text.type = text.type || "alert";
  		return confirmPopup(text);
  	};
  	dhtmlx.modalbox = function(){
  		var text = box_params.apply(this, arguments);
  		text.type = text.type || "alert";
  		return boxPopup(text);
  	};
  	dhtmlx.modalbox.hide = function(node){
  		while (node && node.getAttribute && !node.getAttribute("dhxbox"))
  			node = node.parentNode;
  		if (node){
  			node.parentNode.removeChild(node);
  			modality(false);
  			_dhx_msg_cfg = null;
  		}
  	};
  	var t = dhtmlx.message = function(text, type, expire, id){
  		text = params.apply(this, arguments);
  		text.type = text.type||"info";
  
  		var subtype = text.type.split("-")[0];
  		switch (subtype){
  			case "alert":
  				return alertPopup(text);
  			case "confirm":
  				return confirmPopup(text);
  			case "modalbox":
  				return boxPopup(text);
  			default:
  				return info(text);
  			break;
  		}
  	};
  
  	t.seed = (new Date()).valueOf();
  	t.uid = function(){return t.seed++;};
  	t.expire = 4000;
  	t.keyboard = true;
  	t.position = "top";
  	t.pull = {};
  	t.timers = {};
  
  	t.hideAll = function(){
  		for (var key in t.pull)
  			t.hide(key);
  	};
  	t.hide = function(id){
  		var obj = t.pull[id];
  		if (obj && obj.parentNode){
  			window.setTimeout(function(){
  				obj.parentNode.removeChild(obj);
  				obj = null;
  			},2000);
  			obj.className+=" hidden";
  			
  			if(t.timers[id])
  				window.clearTimeout(t.timers[id]);
  			delete t.pull[id];
  		}
  	};
  })();
  