

var GlobalDialogObj = null;

// Konstruktor - vytvori novy objekt Dialog
function Dialog(DialogName, Dialog_Url, OriginalLeft, OriginalTop, MinLeft, MaxLeft, MinTop, MaxTop, ScrollItem)
{
        this.Name = DialogName;
        this.OriginalLeft = OriginalLeft;
        this.OriginalTop = OriginalTop;
        this.DialogDiv = document.getElementById(DialogName + "Div");
        this.DialogHead = document.getElementById(DialogName + "Head");
        this.DialogTitle = document.getElementById(DialogName + "Title");
        this.DialogDefaultTitle = "{Default title}";
        this.DialogBody = document.getElementById(DialogName + "Body");
        this.DialogIfrm = document.getElementById(DialogName + "Ifrm");
        this.DialogShutter = document.getElementById(DialogName + "Shutter");
        this.Visible = false;
        this.Drag = 0;
        this.DialogUrl = encodeURI(Dialog_Url);
        this.ScrollItem = ScrollItem;

        this.MinLeft = MinLeft;
        this.MaxLeft = MaxLeft;
        this.MinTop = MinTop;
        this.MaxTop = MaxTop;
        
        this.StoredLeft = 0;
        this.StoredTop = 0;
           
        this.OpenDialog = OnOpenDialog;
        this.CloseDialog = OnCloseDialog;
        this.ChangeDialogTitle = OnChangeDialogTitle;
        
        this.DialogDiv.ondragdrop = function(movex, movey, e)
        {
        	//this.style.left = (this.left + movex) + "px";
        	this.style.left = (movex) + "px";
        	this.style.top = (movey) + "px";
        }
}

// Otevreni dialogu - metoda objektu Dialog
function OnOpenDialog(bReloadDialog, UrlParams)
{
        var mediafileObj = document.getElementById("mediafile");
	if (mediafileObj)
	        mediafileObj.style.display = "none";

	if (this.Visible)
		return;
	
	var BackCoverMainBodyObj = document.getElementById("BackCoverMainBody");
	if (BackCoverMainBodyObj)
	{
		BackCoverMainBodyObj.style.width = this.ScrollItem.scrollWidth + "px";
		BackCoverMainBodyObj.style.height = (this.ScrollItem.scrollHeight > this.ScrollItem.offsetHeight ? this.ScrollItem.scrollHeight : this.ScrollItem.offsetHeight) + "px";
		BackCoverMainBodyObj.style.visibility = "visible";
	}
	
	this.DialogDiv.style.left = this.OriginalLeft + "px";
	this.DialogDiv.style.top = (this.ScrollItem.scrollTop + this.OriginalTop) + "px";
	this.DialogDiv.style.visibility = "visible";
	
	this.Visible = true;
	
	this.DialogIfrm.style.height = this.DialogBody.style.height;
	
	//GlobalDialogObj = this;
	
	if (bReloadDialog)
		this.DialogIfrm.src = this.DialogUrl + (UrlParams ? "?" + UrlParams : "");
	/*
	Pokud o korekci vysky dialogu v zavislosti na skutecne vysce
	
	var DialogBodyRealHeight = this.DialogIfrm.contentWindow.document.body.scrollHeight;
	
	this.DialogBody.style.height = DialogBodyRealHeight + "px";
	this.DialogDiv.style.height = (DialogBodyRealHeight + 15) + "px";
	this.DialogShutter.style.height = DialogBodyRealHeight + "px";
	this.DialogIfrm.style.height = DialogBodyRealHeight + "px";
	*/

	startDrag(this);
}

// Uzavreni dialogu - metoda objektu Dialog
function OnCloseDialog()
{
        var mediafileObj = document.getElementById("mediafile");
	if (mediafileObj)
		mediafileObj.style.display = "block";

	if (!this.Visible)
		return;

        var BackCoverMainBodyObj = document.getElementById("BackCoverMainBody");
        
        if (BackCoverMainBodyObj)
		BackCoverMainBodyObj.style.visibility = "hidden";
	
	this.DialogDiv.style.visibility = "hidden";
	this.Visible = false;
	
	if (this.DialogDefaultTitle != "{Default title}")
		this.DialogTitle.firstChild.data = this.DialogDefaultTitle;
	this.DialogIfrm.src = "void.php";
	
	stopDrag(this);
}

// Zmena titulku dialogu (textu v hlavicce)
function OnChangeDialogTitle(NewDialogTitle)
{
	this.DialogDefaultTitle = this.DialogTitle.firstChild.data;
	this.DialogTitle.firstChild.data = NewDialogTitle;
}


// Uzivatel stiskl tlacitko mysi na presunovatelnem objektu (hlavicka dialogu)	
function m_down(e, DialogObj)
{	
	// Objekt dialog bude ulozen jako globalni - zejmena kvuli funkcim m_move a m_up
	GlobalDialogObj = DialogObj;
	
	CorrectDialogMaxMinValues(GlobalDialogObj);
	
	if (GlobalDialogObj.DialogShutter)
		GlobalDialogObj.DialogShutter.style.display = "block";
			
	// Zapamatuj pozici objektu pri klintuti
	GlobalDialogObj.StoredLeft = GlobalDialogObj.DialogDiv.offsetLeft - e.screenX; 
	GlobalDialogObj.StoredTop = GlobalDialogObj.DialogDiv.offsetTop - e.screenY;
	
        // Zacni sledovat pohyb mysi
        if(BrowserType == "IE" || BrowserType == "IE8")
	{	
		document.attachEvent('onmousemove', m_move); 
		document.attachEvent('onmouseup', m_up);
	}
	else
	{
                document.addEventListener('mousemove', m_move, true);
                document.addEventListener('mouseup', m_up, true); 
        }
	
        return stopEvent(e);
}

// Posun mysi vyvolany udalosti onmousemove -> vyvolani premisteni objektu
function m_move(e)
{
	if (!GlobalDialogObj)
	        return;
	
        e = FixE(e);
        
        // Urceni hodnot lval a tval -> nove pozice dialogu + korekce pokud prekroci hranice posouvatelnosti
        	var lval = GlobalDialogObj.StoredLeft + e.screenX;
		if (lval > GlobalDialogObj.MaxLeft - GlobalDialogObj.DialogDiv.clientWidth)
			lval = GlobalDialogObj.MaxLeft - GlobalDialogObj.DialogDiv.clientWidth;
		if (lval < GlobalDialogObj.MinLeft)
		{
			lval = GlobalDialogObj.MinLeft;
			GlobalDialogObj.StoredLeft = -e.screenX;
		}
	
		var tval = GlobalDialogObj.StoredTop + e.screenY;
		if (tval > GlobalDialogObj.MaxTop - GlobalDialogObj.DialogDiv.clientHeight)
			tval = GlobalDialogObj.MaxTop - GlobalDialogObj.DialogDiv.clientHeight;
		if (tval < GlobalDialogObj.MinTop)
		{
			tval = GlobalDialogObj.MinTop;
			GlobalDialogObj.StoredTop = -e.screenY;
		}
	//------------------------------------------------------------------------------------------------------
	
	GlobalDialogObj.DialogDiv.ondragdrop(lval, tval, e);
	
	return stopEvent(e);
}

// Uzivatel pustil tlacitko mysi na presunovatelnem objektu (hlavicka dialogu)
function m_up(e)
{
        if (!GlobalDialogObj)
	        return;
	
        e = FixE(e);
    
        if (GlobalDialogObj.DialogShutter)
    		GlobalDialogObj.DialogShutter.style.display = "none";
	
	GlobalDialogObj = null;    
    
	// Ukonci sledovani mysi
	if(BrowserType == "IE" || BrowserType == "IE8")
	{
		document.detachEvent('onmousemove', m_move); 	
		document.detachEvent('onmouseup', m_up);
	}
	else
	{
		document.removeEventListener('mousemove', m_move, true); 
                document.removeEventListener('mouseup', m_up, true);       
	}

	return stopEvent(e);	
}

// Pridani objektu moznost presunu
function startDrag(DialogObj)
{
	DialogObj.DialogHead.onmousedown = function(e)
	{
		e = FixE(e);
		m_down(e, DialogObj);
	}
	
	DialogObj.Drag = 1;
}

// Odebrani objektu moznost presunu 
function stopDrag(DialogObj)
{
	DialogObj.DialogHead.onmousedown = null;
	DialogObj.Drag = 0;
}

// Zastaveni sireni udalosti
function stopEvent(e)
{
	if(BrowserType == "IE" || BrowserType == "IE8")
        {
                e.cancelBubble = true;
        }
        else
        {
                e.stopPropagation();
                e.preventDefault();
        }
        return false;
}

function CorrectDialogMaxMinValues(DialogObj)
{
	var CorrecMagicConstant = 0;
	if (!BrowserType == "IE" || BrowserType == "IE8")
		CorrecMagicConstant = 2;

	DialogObj.MinLeft = DialogObj.MinLeft == null ? 0 : DialogObj.MinLeft;
        DialogObj.MaxLeft = DialogObj.MaxLeft == null ? DialogObj.ScrollItem.scrollWidth - CorrecMagicConstant: DialogObj.MaxLeft;
        
        DialogObj.MinTop = DialogObj.MinTop == null ? 0 : DialogObj.MinTop;
        DialogObj.MaxTop = DialogObj.MaxTop == null ? (DialogObj.ScrollItem.scrollHeight > DialogObj.ScrollItem.offsetHeight ? DialogObj.ScrollItem.scrollHeight : DialogObj.ScrollItem.offsetHeight) - 2: DialogObj.MaxTop;
        
        //debugger;
}

function CorrectDialogSize(DialogObj)
{
	var LastChild = last_child(DialogObj.DialogIfrm.contentWindow.document.body);

	var NewHeight = LastChild.offsetTop + LastChild.offsetHeight + 18;
	
	var DivHeight = (NewHeight + DialogObj.DialogHead.offsetHeight) + "px";
	NewHeight += "px";
	
	DialogObj.DialogDiv.style.height = DivHeight;
	DialogObj.DialogIfrm.style.height = NewHeight;
	DialogObj.DialogBody.style.height = NewHeight;
	
	if (DialogObj.DialogShutter)
		DialogObj.DialogShutter.style.height = NewHeight;
}

function last_child(par)
{
	var res = par.lastChild;
  	while (res)
	{
    		if (!is_ignorable(res))
			return res;
    		res = res.previousSibling;
  	}
  	return null;
}

function is_ignorable(nod)
{
	return (nod.nodeType == 8) || // A comment node
		((nod.nodeType == 3) && is_all_ws(nod)); // a text node, all ws
}

function is_all_ws(nod)
{
	// Use ECMA-262 Edition 3 String and RegExp features
	return !(/[^\t\n\r ]/.test(nod.data));
}




