var V_MSGBOXES_COUNT = 0;
var GV_OLD_ONRESIZE; 

var MB_OK = 1;
var MB_CANCEL = 2;
var MB_YES = 4;
var MB_NO = 8;
var MB_SAVE = 16;
var MB_DELETE = 32;
var MB_SEND = 64;
var MB_CLOSE = 128;
var MB_YESNO = MB_YES | MB_NO;
var MB_OKCANCEL = MB_OK | MB_CANCEL;

function GetButtonsHTML(AMsgBoxNum, AButtonCode)
{
	var lHtml = "";	
	
	if (AButtonCode & MB_OK)
	{		
		lHtml = lHtml + "<img src=\"/Resources/Images/dialog-btn-ok.png\" class=\"msgbox-btn\" id=\"msgbox_" + AMsgBoxNum + "_btn_" + MB_OK + "\" onclick=\"MsgBoxBtnClick(" + AMsgBoxNum + "," + MB_OK + ")\">";
		MsgBoxSetOnEnterKeyHandler(function(){MsgBoxBtnClick(AMsgBoxNum, MB_OK)});
	}
	if (AButtonCode & MB_SAVE)
	{
		lHtml = lHtml + "<img src=\"/Resources/Images/dialog-btn-save.png\" class=\"msgbox-btn\" id=\"msgbox_" + AMsgBoxNum + "_btn_" + MB_SAVE + "\" onclick=\"MsgBoxBtnClick(" + AMsgBoxNum + "," + MB_SAVE + ")\">";
		MsgBoxSetOnEnterKeyHandler(function(){MsgBoxBtnClick(AMsgBoxNum, MB_SAVE)});
	}
	if (AButtonCode & MB_YES)
	{
		lHtml = lHtml + "<img src=\"/Resources/Images/dialog-btn-yes.png\" class=\"msgbox-btn\" id=\"msgbox_" + AMsgBoxNum + "_btn_" + MB_YES + "\" onclick=\"MsgBoxBtnClick(" + AMsgBoxNum + "," + MB_YES + ")\">";
		MsgBoxSetOnEnterKeyHandler(function(){MsgBoxBtnClick(AMsgBoxNum, MB_YES)});
	}
	if (AButtonCode & MB_NO)
	{
		lHtml = lHtml + "<img src=\"/Resources/Images/dialog-btn-no.png\" class=\"msgbox-btn\" id=\"msgbox_" + AMsgBoxNum + "_btn_" + MB_NO + "\" onclick=\"MsgBoxBtnClick(" + AMsgBoxNum + "," + MB_NO + ")\">";
		MsgBoxSetOnEscKeyHandler(function(){MsgBoxBtnClick(AMsgBoxNum, MB_NO)});
	}	
	if (AButtonCode & MB_SEND)
	{
		lHtml = lHtml + "<div style='margin-right:5px'><input class=\"msgbox-btn sendask\" id=\"msgbox_" + AMsgBoxNum + "_btn_" + MB_SEND + "\" onclick=\"MsgBoxBtnClick(" + AMsgBoxNum + "," + MB_SEND + ")\" value='Отправить'></div>";
		MsgBoxSetOnEscKeyHandler(function(){MsgBoxBtnClick(AMsgBoxNum, MB_SEND)});
	}	
	if (AButtonCode & MB_DELETE)
	{
		lHtml = lHtml + "<img src=\"/Resources/Images/dialog-btn-delete.png\" class=\"msgbox-btn\" id=\"msgbox_" + AMsgBoxNum + "_btn_" + MB_DELETE + "\" onclick=\"MsgBoxBtnClick(" + AMsgBoxNum + "," + MB_DELETE + ")\">";
		MsgBoxSetOnEscKeyHandler(function(){MsgBoxBtnClick(AMsgBoxNum, MB_DELETE)});
	}	
	if (AButtonCode & MB_CANCEL)
	{
		lHtml = lHtml + "<img src=\"/Resources/Images/dialog-btn-cancel.png\" class=\"msgbox-btn\" id=\"msgbox_" + AMsgBoxNum + "_btn_" + MB_CANCEL + "\" onclick=\"MsgBoxBtnClick(" + AMsgBoxNum + "," + MB_CANCEL + ")\">";
		MsgBoxSetOnEscKeyHandler(function(){MsgBoxBtnClick(AMsgBoxNum, MB_CANCEL)});
	}
	if (AButtonCode & MB_CLOSE)
	{
		lHtml = lHtml + "<img src=\"/Resources/Images/empty.png\" class=\"msgbox-btn\" id=\"msgbox_" + AMsgBoxNum + "_btn_" + MB_CLOSE + "\" onclick=\"MsgBoxBtnClick(" + AMsgBoxNum + "," + MB_CLOSE + ")\">";
		MsgBoxSetOnEscKeyHandler(function(){MsgBoxBtnClick(AMsgBoxNum, MB_CLOSE)});
	}	
	return lHtml;
}

function GetMsgBoxByNum(ANum)
{
	return document.getElementById("msgbox_" + ANum);
}

function GetTopLevelMsgBox()
{
	return GetMsgBoxByNum(V_MSGBOXES_COUNT);
}

function GetMsgBoxButton(AMsgBoxNum, ABtnCode)
{
	return document.getElementById("msgbox_" + AMsgBoxNum + "_btn_" + ABtnCode);
}

function MsgBoxBtnClick(AMsgBoxNum, ABtnCode)
{	
	if (MsgBoxBtnIsEnabled(AMsgBoxNum, ABtnCode) && AMsgBoxNum == V_MSGBOXES_COUNT)
	{					
		var lMsgBox = GetMsgBoxByNum(AMsgBoxNum);
				
		if (typeof lMsgBox.MsgBoxButtonClick != 'undefined')
		{
			var lClickFunction = lMsgBox.MsgBoxButtonClick;
		}
		else
		{
			var lClickFunction = function(ADummy){};
		}
		
		if (lMsgBox.MsgBoxExecCbBeforeDestroy)
		{
			var lRetVal = lClickFunction(ABtnCode);
			if (typeof lRetVal == "boolean")
			{
				if (!lRetVal)
				{
					return; // cancel msg box closing
				}
			}
		}
		
		lMsgBox.parentNode.removeChild(lMsgBox);					
		V_MSGBOXES_COUNT--;
		
		if (V_MSGBOXES_COUNT == 0)
		{			
			var lCover = document.getElementById("msgbox_cover");
			lCover.parentNode.removeChild(lCover);
            if(typeof GV_OLD_ONRESIZE == 'function')
            {
                window.onresize = GV_OLD_ONRESIZE;
            }	
			else
			{
                window.onresize = function() {};
            }
			window.onkeypress = function() {};		
		}	
		MsgBoxOnResize();
		if (!lMsgBox.MsgBoxExecCbBeforeDestroy)
		{
			lClickFunction(ABtnCode);
		}
						
	}
}

function MsgBoxOnResize()
{
	for (i = 1; i <= V_MSGBOXES_COUNT; i++)
	{
		var lMsgBox = GetMsgBoxByNum(i);
		if (lMsgBox)
		{		
			var lTop = GetWindowHeight() / 2 - lMsgBox.offsetHeight / 2;
			var lLeft = GetWindowWidth() / 2 - lMsgBox.offsetWidth / 2;			
			if (i == V_MSGBOXES_COUNT)
			{
				var lZIndex = 1000000 + V_MSGBOXES_COUNT + 1;
			}
			else
			{
				var lZIndex = 1000000 + i;
			}
				
			//lMsgBox.setAttribute("style", "top: " + lTop + "px; left: " + lLeft + "px; z-index: " + lZIndex);
			//alert(window.clientHeight);
			lMsgBox.style.top = lTop + "px";
			lMsgBox.style.left = lLeft + "px";
			lMsgBox.style.zIndex = lZIndex;
		}		
    
    lMsgBoxButtons = document.getElementById("msgbox-button-container_" + i);
    lMsgBoxButtons.style.width = Math.round(lMsgBox.offsetWidth - 8)  + "px";	
	}	
	var lCover = document.getElementById("msgbox_cover");
	if (lCover)
	{ 	
		lCover.style.width = GetWindowWidth() + "px";
		lCover.style.height = GetWindowHeight() + "px";
		lCover.style.zIndex = (lZIndex - 1);
	}
}

function MsgBoxSetOnEnterKeyHandler(AFunction)
{
	var lMsgBox = GetTopLevelMsgBox();
	lMsgBox.MsgBoxOnEnterKey = AFunction;
}

function MsgBoxSetOnEscKeyHandler(AFunction)
{
	var lMsgBox = GetTopLevelMsgBox();
	lMsgBox.MsgBoxOnEscKey = AFunction;
}

function MsgBoxOnKeyPress(AEvent)
{
	var lMsgBox = GetTopLevelMsgBox();
		
	switch(AEvent.keyCode)
	{
		case 27:
			if (lMsgBox.MsgBoxOnEscKey)
			{
				lMsgBox.MsgBoxOnEscKey();
			}
			break;
		case 10:
		case 13:
		    if (AEvent.target.tagName != "TEXTAREA")
            {
    			if (lMsgBox.MsgBoxOnEnterKey)
    			{
    				lMsgBox.MsgBoxOnEnterKey();
    			}		
            }
			break;
	}
	
}

function MessageBox(ACaption, AMessage, AButtons, AButtonClickCallback, AExecCallbackBeforeDestroy)
{
	V_MSGBOXES_COUNT++; 
       
    if(typeof window.onresize == 'function')
    {
        GV_OLD_ONRESIZE = window.onresize;
 	}
	
    window.onresize = MsgBoxOnResize;

	if (!document.getElementById("msgbox_cover"))
	{
		var lCover = document.createElement("DIV");
		lCover.className = "msgbox-cover";
		lCover.setAttribute("id", "msgbox_cover");	
		document.body.appendChild(lCover);	
	}
	
	var lMsgBox = document.createElement("DIV");
	lMsgBox.className = "msgbox";
 	lMsgBox.setAttribute("id", "msgbox_" + V_MSGBOXES_COUNT);
	lMsgBox.MsgBoxNum = V_MSGBOXES_COUNT;
	window.onkeypress = MsgBoxOnKeyPress;
	
	if (typeof AExecCallbackBeforeDestroy == 'undefined')
	{
		lMsgBox.MsgBoxExecCbBeforeDestroy = false;
	}
	else
	{
		lMsgBox.MsgBoxExecCbBeforeDestroy = AExecCallbackBeforeDestroy;
	}
		
	var lMessageDiv = document.createElement("DIV");
	lMessageDiv.className = "msgbox-content";
	lMessageDiv.setAttribute("id", "msgbox-content_" + V_MSGBOXES_COUNT);
	lMessageDiv.innerHTML = AMessage;
	
	var lButtonsDiv = document.createElement("DIV");
	lButtonsDiv.className = "msgbox-button-container";
	lButtonsDiv.setAttribute("id", "msgbox-button-container_" + V_MSGBOXES_COUNT);
	
	var lInnerBorderWrapper = document.createElement("DIV");
	lInnerBorderWrapper.className = "msgbox-inner-border";
	lInnerBorderWrapper.appendChild(lMessageDiv);
	lInnerBorderWrapper.appendChild(lButtonsDiv);
	
	var lOuterBorderWrapper = document.createElement("DIV");
	lOuterBorderWrapper.className = "msgbox-outer-border";
	lOuterBorderWrapper.appendChild(lInnerBorderWrapper);
	
	lMsgBox.appendChild(lOuterBorderWrapper);
	
	lMsgBox.MsgBoxButtonClick = AButtonClickCallback;
	document.body.appendChild(lMsgBox);		
	
	lButtonsDiv.innerHTML = GetButtonsHTML(V_MSGBOXES_COUNT, AButtons);
	MsgBoxOnResize();	
	FocusFirstMessageBoxInput(V_MSGBOXES_COUNT);
	return V_MSGBOXES_COUNT;
}

function FocusFirstMessageBoxInput(AMessageBoxID)
{
    var lContainer = GetMessageBoxContentDiv(AMessageBoxID);
    
    var lInputs = lContainer.getElementsByTagName("INPUT");
           
    if (lInputs.length > 0)
    {
        lInputs[0].focus();
    }
}

function SetElementAttributes(AElement, AAttributes)
{
	for (var i = 0;i < AAttributes.length; i++)
	{
		AElement.setAttribute(AAttributes[i][0], AAttributes[i][1]);
	}
}

function SetMessageBoxAttributes(AMsgBoxNum, AAttributes)
{
	var lMessageBox = GetMsgBoxByNum(AMsgBoxNum);
	if (lMessageBox)	
	{
		SetElementAttributes(lMessageBox, AAttributes);
	}
}

function SetMessageBoxContentDivAttributes(AMsgBoxNum, AAttributes)
{
	var lMessageBox = GetMsgBoxByNum(AMsgBoxNum);	
	if (lMessageBox)	
	{
		//var lContentDiv = lMessageBox.getElementsByClassName("msgbox-content")[0];
		var lContentDiv = document.getElementById("msgbox-content_" + AMsgBoxNum);  
		SetElementAttributes(lContentDiv, AAttributes);
	}
}

function GetMessageBoxContentDiv(AMsgBoxNum)
{
    return document.getElementById("msgbox-content_" + AMsgBoxNum);
}

function SetMessageBoxContent(AMsgBoxNum, AContent)
{
    var lContentDiv = GetMessageBoxContentDiv(AMsgBoxNum);
    if (lContentDiv)
    {
        lContentDiv.innerHTML = AContent;
        MsgBoxOnResize();
    }
}

function SetMessageBoxButonsDivAttributes(AMsgBoxNum, AAttributes)
{
	var lMessageBox = GetMsgBoxByNum(AMsgBoxNum);	
	if (lMessageBox)	
	{
		var lContentDiv = document.getElementById("msgbox-button-container_" + AMsgBoxNum);
		SetElementAttributes(lContentDiv, AAttributes);
	}
}

function MsgBoxPrompt(ALabel, ACaption, AInitialVal, ACallback)
{
	MessageBox(ACaption, ALabel + " <input type=\"text\" class=\"inputs\" id=\"promptinput\">", MB_OKCANCEL, 
		function (b)
		{
			if (b == MB_OK)
			{
				ACallback(document.getElementById('promptinput').value)
			}
			else
			{
				ACallback();
			}
		}, true);
	document.getElementById("promptinput").value = AInitialVal;
}

function ExecAfterMsgBoxClose(AFunction)
{
	var lMsgBox = GetTopLevelMsgBox();	
	lMsgBox.MsgBoxExecAfterClose = AFunction;
}

function MsgBoxBtnIsEnabled(AMsgBoxNum, AButton)
{
	var lBtn = GetMsgBoxButton(AMsgBoxNum, AButton);
	if (typeof lBtn.MsgBoxBtnEnabled == "undefined")
	{
		return true;
	}
	else
	{
		return lBtn.MsgBoxBtnEnabled;
	}
}

function SetMsgBoxBtnEnabled(AMsgBoxNum, AButton, AEnabled)
{
	var lBtn = GetMsgBoxButton(AMsgBoxNum, AButton);
	if (lBtn)
	{
		lBtn.MsgBoxBtnEnabled = AEnabled;
		if (AEnabled)
		{
			lBtn.className = "msgbox-btn";
		}
		else
		{
			lBtn.className = "msgbox-btn disabled";
		}
	}
}

function SetTopLevelMsgBoxBtnEnabled(AButton, AEnabled)
{
	SetMsgBoxBtnEnabled(V_MSGBOXES_COUNT, AButton, AEnabled);
}

function GetWindowWidth()
{
    if (self.innerWidth)  
    {
        var lWidth = self.innerWidth;  
    }
    else if (document.documentElement && document.documentElement.clientWidth)  
    {
        var lWidth = document.documentElement.clientWidth;  
    }
    else if (document.body)  
    {
        var lWidth = document.body.clientWidth;
    }
    return lWidth;
}

function GetWindowHeight()
{
    if (self.innerHeight)  
    {
        var lHeight = self.innerHeight;  
    }
    else if (document.documentElement && document.documentElement.clientHeight)  
    {
        var lHeight = document.documentElement.clientHeight;  
    }
    else if (document.body)  
    {
        var lHeight = document.body.clientHeight;
    }
    return lHeight;
}
