﻿document.onmousemove = DND_mouseMove;
document.onmouseup = DND_mouseUp;
var DND_dragObject = null;
var DND_mouseOffset = null;
var DND_status = null;
var DND_shadow = null;
var DND_dragTableItems = [,];
var DND_currentTarget = null;
var DND_currentObject = null;
var DND_currentObjPos = null;
var DND_currentParent = null;
var DND_currentMousePos = null;
var DND_signalDiv = null;
var DND_emptyRow = null;
var DND_emptyRowClone = null;
var DND_currentCellPos = new Object();
var DND_lastCell = null;
var DND_tabOrder = 0;
var DND_savingWaiter = false;
var DND_toolboxCell;
var DND_dropTargets = [];


// Funkce konstruktoru pro zjištění prohlížeče.
function DND_getNav()
{
	this.ver=navigator.appVersion;	
	this.dom=document.getElementById ? 1:0;

	this.ns4 = (document.layers && !this.dom) ? 1:0;
	this.ns6 = (this.dom && parseInt(this.ver) >= 5) ?1:0;
	this.minIE4 = (document.all) ? 1 : 0;
}

DND_nav = new DND_getNav() //Nový objekt pro zjištění prohlížeče

function DND_mouseCoords(ev)//Odchycení pozice myši
{
	if (DND_nav.ns4 | DND_nav.ns6)
    {
        return {x:ev.pageX, y:ev.pageY};
    }
    if (DND_nav.minIE4)
    {
        return {
		x:ev.clientX + document.documentElement.scrollLeft,
		y:ev.clientY + document.documentElement.scrollTop
	    };        
    }    
}
function DND_getMouseOffset(target, ev)//Vzdalenost myši od okrajů
{
	ev = ev || window.event;

	var docPos    = DND_getPosition(target);
	var mousePos  = DND_mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function DND_getPosition(e)//Výpočet pozice elementu
{
	var left = 0;
	var top  = 0;
    
    if(e != null)
    {
	    while (e.offsetParent){
		    left += e.offsetLeft;
		    top  += e.offsetTop;
		    e     = e.offsetParent;
	    }

	    left += e.offsetLeft;
	    top  += e.offsetTop;	
	}
	else
	{
	    return null;
	}

	return {x:left, y:top};
}

//Událost na pohyb myší - tažení
//Počítá zda se nacházíme nad místem kam se dá položit a zobrazuje pořadí
function DND_mouseMove(ev)
{
	ev           = ev || window.event;
	var mousePos = DND_mouseCoords(ev);
    
	if(DND_dragObject)//pokud něco táhnu
	{
	    //drag z toolbaru
	    if(DND_dragObject.tag != "clone")//Pokud to není klon - tzn táhnu z toolboxu
	    {       	
	        if(DND_shadow.innerHTML == "")//Vytvořím stínový objekt pro tažení a táhnu
	        {	            
	            DND_shadow.innerHTML = DND_dragObject.innerHTML;
	            DND_shadow.style.display = "block";
	            DND_shadow.style.left = DND_dragObject.style.left;
	            DND_shadow.style.top = DND_dragObject.style.top;
	        }
		    DND_shadow.style.top      = mousePos.y - DND_mouseOffset.y - DND_toolboxCell.scrollTop + "px";
		    DND_shadow.style.left     = mousePos.x - DND_mouseOffset.x + "px";
		    DND_shadow.className = "dsgn-tab-item move";
		}		
		else//Je to klon - tzn táhnu z tabulky
		{		    
		    DND_dragObject.style.position = "absolute";		    
		    DND_dragObject.style.top      = mousePos.y - DND_mouseOffset.y + "px";
		    DND_dragObject.style.left     = mousePos.x - DND_mouseOffset.x + "px";
		    DND_dragObject.className = "dsgn-tab-item move";
		}
		
		//Nastavení kurzoru v oblasti kde nelze pokládat	
		var mainDropFields = [];	
		mainDropFields.push(document.getElementById("DND_editModeTab"));
		mainDropFields.push(document.getElementById("DND_toolboxCellParent"));
		var out = false;
		
		for(var i = 0; i < mainDropFields.length; i++)
		{
		    if(mainDropFields[i] != null)
		    {
		        var curField = mainDropFields[i];
		        var curFieldPos = DND_getPosition(curField);
		        var curFieldW = parseInt(curField.offsetWidth);
		        var curFieldH = parseInt(curField.offsetWidth);
		        if((mousePos.x < curFieldPos.x || mousePos.x > curFieldPos.x + curFieldW) &&
		        (mousePos.y < curFieldPos.y || mousePos.y > curFieldPos.y + curFieldH)
		        )
		        {
		            out = true;
		            break;		                
		        }
		    }
		}
		
		if(out)
		{
		    DND_setNoDropOn();
		}
		
		for(var i=0; i<DND_dropTargets.length; i++)//Vytváření mezer
		{
		    var curTarget  = DND_dropTargets[i];				
	        var targPos    = DND_getPosition(curTarget);		
	        var targWidth = 0;
	        var targHeight =0;
	        if(targPos == null)
	        {
	            targPos = new Object();
	            targPos.x = -9999;
	            targPos.y = -9999;
	        }
	        else
	        {
	            targPos.y -=10;	        
	            targWidth  = parseInt(curTarget.offsetWidth);
	            targHeight = parseInt(curTarget.offsetHeight);
	        }
	        if//výpočet polohy
	        (
		        (mousePos.x > targPos.x)                &&
		        (mousePos.x < (targPos.x + targWidth))  &&
		        (mousePos.y > targPos.y)                &&
		        (mousePos.y < (targPos.y + targHeight)))
		        {   
		            DND_setNoDropOff();
		            DND_setSignal("neutral");
		            
		            if(curTarget.id != "DND_toolboxCell")//Pokud nejsme nad toolboxy
		            {   
		               
	                    //Pokud jeste nebyl vytvoren klon, pak naklonuji
	                    if(DND_emptyRowClone != null)
	                    {
	                        if(DND_emptyRowClone.parentNode == curTarget)
	                        {
	                            curTarget.removeChild(DND_emptyRowClone);		                    
	                        }
	                    }	
		                
	                    if(DND_lastCell != curTarget)
	                    {
	                        while(DND_emptyRowClone != null)
                            { 	            
                                try
                                {   
                                    DND_emptyRowClone.parentNode.removeChild(DND_emptyRowClone);
                                    DND_emptyRowClone = null;     
                                }
                                catch(e){}
                                DND_emptyRowClone = document.getElementById("DND_emptyRowClone");
                            }
	                    }
	                    DND_lastCell = curTarget;
		                	                
	                    DND_emptyRowClone = DND_emptyRow.cloneNode(true);
		                
		                
	                    //Zobrazim emptyRow
	                    DND_emptyRowClone.style.display = "";
	                    DND_emptyRowClone.id = "DND_emptyRowClone";
	                
	                	                    
	                    var epos = -1;
	                    if(DND_dragObject.tag == "clone")
	                    {
	                        epos = DND_getDropPosition(curTarget, DND_dragObject);			                    
	                    }
	                    else
	                    {
	                        epos = DND_getDropPosition(curTarget, DND_shadow);			                    
	                    }
	                    if(epos > -1)
	                    {
	                        var dpos = new Number(9999999);
	                        //zjistim pozici dragObjectu
	                        if(DND_dragObject.tag == "clone")
	                        {
	                            for(var c = 0; c < curTarget.childNodes.length; c++)
	                            {
	                                if(curTarget.childNodes[c] == DND_dragObject)
	                                {
	                                    dpos = new Number(c);
	                                    break;
	                                }
	                            }
	                        }	                        	                
    		                
	                        var rw = DND_dragObject.getAttribute("realWidth");
	                        if(rw != null)
	                        {
	                            DND_emptyRowClone.style.width = rw;
	                        }
	                        else
	                        {
	                            DND_emptyRowClone.style.width = "20ex";
	                        }
	                        
	                        //Pridam na konec
	                        if(epos == curTarget.childNodes.length)
	                        {		                    
	                            curTarget.appendChild(DND_emptyRowClone);
	                        }
	                        //Pridam dovnitr
	                        else
	                        {		                            
                                if(dpos < epos)
                                {
    	                            epos += 1;    
                                }	                        
	                            curTarget.insertBefore(DND_emptyRowClone ,curTarget.childNodes[epos]);
	                        }
	                    }
		            }
		            
		            break;
		        }		        
	    }

		return false;
	}
	else
	{
	    DND_setNoDropOff();	    
	}	
}

//Indikuje, že se tažený objekt nachází nad místem, kde se nedá pokládat
function DND_setNoDropOn()
{
    DND_setSignal("Nelze položit do této buňky.");
    try
    {
        if(document.body.className.indexOf("dsgn-no-drop") == -1)
        {
            document.body.className += " dsgn-no-drop";
        }
        
        if(DND_dragObject.tag != "clone")
        {
            if(DND_shadow.className.indexOf("dsgn-move-no-drop") == -1)
            {		                    
                DND_shadow.className += " dsgn-move-no-drop";	
            }
        }
        else
        {
            if(DND_dragObject.className.indexOf("dsgn-move-no-drop") == -1)
            {
                DND_dragObject.className += " dsgn-move-no-drop";	
            }
        }
    }
    catch(e){}
}

//Indikuje, že se tažený objekt nachází nad místem, kde se dá pokládat
function DND_setNoDropOff()
{    
    try
    {
        if(document.body.className.indexOf("dsgn-no-drop") != -1)
        {
            var oldClass = document.body.className.substring(0, document.body.className.indexOf(" dsgn-no-drop"));
            oldClass += document.body.className.substring(document.body.className.indexOf(" dsgn-no-drop") + 13);
            document.body.className = oldClass;		                
        }    
        
        if(DND_dragObject.tag != "clone")
        {
            if(DND_shadow.className.indexOf("dsgn-move-no-drop") != -1)
            {
                var oldClass = DND_shadow.className.substring(0, DND_shadow.className.indexOf(" dsgn-move-no-drop"));
                oldClass += DND_shadow.className.substring(DND_shadow.className.indexOf(" dsgn-move-no-drop") + 18);
                DND_shadow.className = oldClass;	
            }
        }
        else
        {
            if(DND_dragObject.className.indexOf("dsgn-move-no-drop") != -1)
            {
                var oldClass = DND_dragObject.className.substring(0, DND_dragObject.className.indexOf(" dsgn-move-no-drop"));
                oldClass += DND_dragObject.className.substring(DND_dragObject.className.indexOf(" dsgn-move-no-drop") + 18);
                DND_dragObject.className = oldClass;	
            }
        }
    }
    catch(e){}
}

function DND_mouseUp(ev)//Událost na puštění tlačítka myši - kotrola položení objektu
{
	ev           = ev || window.event;
	var mousePos = DND_mouseCoords(ev);
	
    if(DND_dragObject)//pokud táhnu
    {
        var targFound = false;
        
        
	for(var i=0; i<DND_dropTargets.length; i++)//cyklus který projde možné cíle a vybere ten správný
	{	    
		var curTarget  = DND_dropTargets[i];			
		if(curTarget == null || DND_emptyRowClone != null && curTarget.childNodes.length > 0 && curTarget.id != "DND_toolboxCell")
	    {	        
	        while(DND_emptyRowClone != null)
	        { 	            
	            try
	            {   
	                DND_emptyRowClone.parentNode.removeChild(DND_emptyRowClone);
	                DND_emptyRowClone = null;     
	            }
	            catch(e){}
	            DND_emptyRowClone = document.getElementById("DND_emptyRowClone");
	        }
	    }
	    
	    var targPos    = new Object;
	    targPos.x = -9999;
	    targPos.y = -9999;
		var targWidth  = 0;
		var targHeight = 0;
	    
		if(curTarget != null)
		{
		    targPos    = DND_getPosition(curTarget);		
		    targWidth  = parseInt(curTarget.offsetWidth);
		    targHeight = parseInt(curTarget.offsetHeight);
		}		
		
		if//výpočet polohy
		(
			(mousePos.x > targPos.x)                &&
			(mousePos.x < (targPos.x + targWidth))  &&
			(mousePos.y > targPos.y)                &&
			(mousePos.y < (targPos.y + targHeight)))
			{	
			    
			    targFound = true;
			    DND_currentTarget = curTarget;	       
	            DND_currentObject = DND_dragObject;   
	            DND_currentMousePos = mousePos;
	            DND_currentParent = DND_dragObject.parentNode;    	                       	            
	                            
			    if(DND_dragObject.tag != "clone")//drop z toolboxu
			    {			
				    if(DND_shadow.innerHTML != "")
	                {
	                    if(curTarget.id != "DND_toolboxCell")//Pokud nebyl objekt položen na seznam
	                    {	
	                        var pos = 0;
                            if(curTarget.childNodes.length > 0)
                            {			                   
                                pos = new Number(DND_getDropPosition(curTarget, DND_shadow));	                            
                            }	         
                            if(pos.toString() == NaN.toString())
                            {
                                pos = 0;
                            }                    	                            
                            DND_currentObjPos = pos;
	                        DND_tabAdd(DND_dragObject.id, pos);	                            
	                                                
	                    }//endif neodstranuji
	                    else//odstranuji - objekt byl položen na seznam
	                    {
	                         DND_shadow.innerHTML = "";
                             DND_shadow.style.display = "none";
                             DND_setSignal("Zrušeno");
	                    }//endelse
	                }//endif
	            }//endif drop z toolboxu
	            else//drop z tabulky	            
	            {	                
	                var parent = DND_dragObject.parentNode;
	                if(curTarget.id != "DND_toolboxCell")
	                {      
	                    var actPos = new Number();
	                    var newPos = new Number(DND_getDropPosition(curTarget, DND_dragObject));	                    
	                    DND_currentObjPos = newPos;
	                    if(DND_currentObjPos.toString() == NaN.toString())
	                    {
	                        DND_currentObjPos = 0;
	                    }
	                    var cellString = "";
	                    //zjistim aktualni pozici
	                    for(var c = 0; c < DND_currentParent.childNodes.length; c++)
	                    {
	                        if(DND_currentParent.childNodes[c] == DND_dragObject)
	                        {
	                            actPos = c;
	                            break;
	                        }
	                    }
	                    
	                    //presun v ramci jedne bunky
	                    
                        //Aktualizuju pozice
                        var swicthAr = [];
                        for(var c = 0; c < curTarget.childNodes.length; c++)
                        {
                            swicthAr.push(curTarget.childNodes[c].getAttribute("AID"));
                        }
	                    
                        var sw = swicthAr[newPos];
	                    
                        //Pokud přesouvám dolu
                        if(newPos > actPos)
                        {
                            for(var s = actPos; s < newPos; s++)
                            {
                                sw = swicthAr[s];
                                swicthAr[s] = swicthAr [s + 1];
                                swicthAr[s + 1] = sw;
                            }
                        }
                        //Pokud přesouvám nahoru
                        else
                        {	                        
                            for(var s = actPos; s > newPos; s--)
                            {
                                sw = swicthAr[s];
                                swicthAr[s] = swicthAr [s - 1];
                                swicthAr[s - 1] = sw;
                            }
                        }                    
	                  
                        for(var c = 0; c < swicthAr.length; c++)
                        {
                            if(DND_currentParent.childNodes[c].id.indexOf("tableEditControls") == -1)
                            {
                                cellString += swicthAr[c] + "*" + c.toString() + ";";
                            }
                        }
                        
                        DND_tabMov(cellString);                        
                        
	                }//endif neodstranuji
	                else//if odstranuji
	                {	       
	                    var actPos = new Number();
	                    var cellString = "";
	                    if(DND_currentParent.childNodes.length > 1)
	                    {	                        
	                        //zjistim aktualni pozici
	                        for(var c = 0; c < DND_currentParent.childNodes.length; c++)
	                        {
	                            if(DND_currentParent.childNodes[c] == DND_dragObject)
	                            {
	                                actPos = c;
	                                break;
	                            }
	                        }
    	                    
	                        for(var c = 0; c < DND_currentParent.childNodes.length; c++)
	                        {
	                            if(c < actPos)
	                            {
	                                if(DND_currentParent.childNodes[c].id.indexOf("tableEditControls") == -1)
	                                {
	                                    cellString += DND_currentParent.childNodes[c].getAttribute("AID") + "*" + c.toString() + ";";
	                                }
	                            }
	                            else
	                            {
	                                if(c > actPos)
	                                {
	                                    if(DND_currentParent.childNodes[c].id.indexOf("tableEditControls") == -1)
	                                    {
	                                        cellString += DND_currentParent.childNodes[c].getAttribute("AID") + "*" + (c - 1).toString() + ";";
	                                    }
	                                }
	                            }
	                        }
	                        
	                        DND_tabDel(DND_currentParent.childNodes[actPos].getAttribute("AID"), cellString);                    
	                    }     
	                    else
	                    {
	                        DND_tabDel(DND_currentParent.firstChild.getAttribute("AID"), cellString);                    
	                    }
	                }//endelse odstranuji
	            }//endif drop z tabulky            
		}//endif				
	}//endfor
	if(!targFound)//cil nenalezen / objekt byl polozen uplne mimo - zrusim ho
	{
	    DND_shadow.innerHTML = "";
        DND_shadow.style.display = "none";	                
        DND_setSignal("Zrušeno.");
        DND_dragObject.style.position = "static";	                    
        DND_dragObject.className = "dsgn-tab-item";
	}
	}//endif

	DND_dragObject   = null;	
}//endfunc

//Spočítá pozici kam se položí prvek
function DND_getDropPosition(target, dragObject)
{
    var itPos = [];
    var tabs = target.getElementsByTagName("table");
    for(var i = 0; i < tabs.length; i++)
    {
        if(tabs[i] != DND_dragObject)
        {
            itPos.push(DND_getPosition(tabs[i]));
        }
    }
    //DND_status2.innerHTML = "itPos.length = " + itPos.length.toString();
    var tHeight = parseInt(target.offsetHeight);
    var dPos = DND_getPosition(dragObject);    
    var dHeight = parseInt(dragObject.offsetHeight);
    var dHeightMid = new Number(dHeight/2);  
    
   
    for(var i = 0; i < itPos.length; i++)
    {
        if(i == 0)
        {
            if(dPos.y + dHeightMid < itPos[0].y + (parseInt(tabs[0].offsetHeight) / 2))
            {                
                return 0;
            }
            else
            {
                if(itPos.length == 1)
                {
                    return 1;
                }
            }
        }
        else
        {
            if(i < itPos.length - 1)
            {
                if(dPos.y + dHeightMid > itPos[i - 1].y && dPos.y + dHeightMid < itPos[i].y + (parseInt(tabs[i].offsetHeight) / 2))
                {                
                    return i;
                }
            }
            else
            {
                if(dPos.y + dHeightMid < itPos[i].y + (parseInt(tabs[i].offsetHeight) / 2))
                {                
                    return i;
                }
                else
                {
                    return i + 1;
                }
            }
        }
    }    
    return 0;
}

function DND_makeDraggable(item, containerID)//Registrace objektů, které lze táhnout a položit
{    		
	if(!item) return;
	item.onmousedown = function(ev){
		DND_dragObject  = this;
		DND_dragObject.tag = containerID;
		DND_mouseOffset = DND_getMouseOffset(this, ev);
        DND_setSignal("neutral");		
		return false;
	}
}

function DND_addDropTarget(dropTarget)//Registrace objektů na které je možno položit jiné objekty
{
	DND_dropTargets.push(dropTarget);
}

function DND_init()//Inicializace
{    
    DND_shadow = document.getElementById("DND_shadow");        
    DND_status = document.getElementById("DND_status");
    var tab = document.getElementById("DND_editModeTab");   
    DND_signalDiv = document.getElementById("DND_signalDiv"); 
    DND_emptyRow = document.getElementById("DND_emptyRow");
    var DND_tbCell = document.getElementById("DND_toolboxCell");
    DND_tabOrder = DND_tbCell.getAttribute("TabOrder");
    DND_toolboxCell = document.getElementById("DND_toolboxCell");
     
    //Oznaceni dragable prvku z toolboxu    
    var elements = DND_tbCell.getElementsByTagName("td");
    for(var i = 0; i < elements.length; i++)
    {
        if(elements[i].id.indexOf("DND") != -1 && elements[i].id.indexOf("Items") != -1)
        {
            var tbName = "tb_" + elements[i].id.split('_')[2];                                
            var itemTabs = elements[i].getElementsByTagName("table");
            
            for(var k = 0; k < itemTabs.length; k++)
            {                    
                DND_makeDraggable(itemTabs[k], tbName);
            }                    
            
        }
    }   
    
    //Vycisteni tabulky
    var breaks = [];
    for(var i = 0; i < tab.rows.length; i++)
    {
        for(var j = 0; j < tab.rows[i].cells.length; j++)
        {
            for(var k = 0; k < tab.rows[i].cells[j].childNodes.length; k++)
            {
                try
                {
                    var aid = (tab.rows[i].cells[j].childNodes[k].getAttribute("AID"));
                }
                catch(e)
                {
                    breaks.push(tab.rows[i].cells[j].childNodes[k]);
                }
            }
        }            
    }  
    
    for(var i = 0; i < breaks.length; i++)
    {
        breaks[i].parentNode.removeChild(breaks[i]);
    }       
    
    //Oznaceni dropable prvku + oznaceni draggable prvku z tabulky    
    for(var i = 0; i < tab.rows.length; i++)
    {       
        var row = tab.rows[i]; 
        for(var j = 0; j < row.cells.length; j++)
        {                        
            var cell = row.cells[j];
            DND_addDropTarget(cell);
            for(var k = 0; k < cell.childNodes.length; k++)
            {
                var child = cell.childNodes[k];
                if(child.id!= undefined && child.id.indexOf("tableEditControls") == -1)
                {
                    DND_makeDraggable(child,"clone");
                }
            }
        }
    }
    
    
    //Pridani specialnich dropablle prvku - odstranovani
    DND_addDropTarget(document.getElementById("DND_toolboxCell"));  
    
    //Oznaceni draggable prvku ze stromu
    // blokovano
    /*
    var tree = document.getElementById("DND_treeToolBox");   
    var tabs = tree.getElementsByTagName("table");
    for(var i = 0; i < tabs.length; i++)
    {
        var pid = tabs[i].getAttribute("PID");
        if(pid != null)
        {
            DND_makeDraggable(tabs[i], "tree");
        }
    }
    */
}

//Tab AJAX functions

//Přidat prvek
function DND_tabAdd(PID, order)
{
    DND_setDelayChecker();
    MyCallback.SendCallback('TAB|ADD|'+ PID + ";" + order);    
}

//Přesunout prvek
function DND_tabMov(cellItems)
{    
    DND_setDelayChecker();
    MyCallback.SendCallback('TAB|MOV|' + cellItems);
}

//Smazat prvek
function DND_tabDel(delItem, cellItems)
{
    DND_setDelayChecker();
    MyCallback.SendCallback('TAB|DEL|' + delItem + "|" + cellItems);    
}

//Nastavit kontrolu zdržení na serveru
function DND_setDelayChecker()
{
    DND_savingWaiter = true;
    var code = "DND_checkForDelay();";
    setTimeout(code, 500);
    
}

//Zkotrolovat zdržení na serveru
function DND_checkForDelay()
{
    if(DND_savingWaiter)
    {
        DND_setSignal("saving");
    }
}

//Zpracovat odpověď ze serveru
function DND_tabResponse(s,e)
{    
    var res = e.result.split('|'); 
    DND_savingWaiter = false;
    switch(res[0])
    {
        case "TAB":        
            switch(res[1])    
            {    
                case "ADD":
                    DND_ProcessTabAdd(res[2], res[3]);
                break;            
            
                case "MOV":                                
                    DND_ProcessTabMov(res[2], res[3]);
                break;
            
                case "DEL":
                    DND_ProcessTabDel(res[2], res[3]);
                break;
            }
        break;  
    }       
}

//Přepínání chevronů
function DND_Chevron(owner,show)
{ 
  if (show)
  {
    document.getElementById(owner+'Hide').style.display = 'none'; 
    document.getElementById(owner+'Show').style.display = '';    
  }
  else
  {
    document.getElementById(owner+'Hide').style.display = ''; 
    document.getElementById(owner+'Show').style.display = 'none';    
  }
}

//Signalizace stavů
//cmd = neutral;saving, ok, error
function DND_setSignal(cmd)
{
    var neutralSpan = document.getElementById("DND_signalDivSpan_neutral");    
    var okSpan = document.getElementById("DND_signalDivSpan_saved");
    var errorSpan = document.getElementById("DND_signalDivSpan_error");
    var savingSpan = document.getElementById("DND_signalDivSpan_saving");
    var savingImg = document.getElementById("DND_signalDivSpan_img");
    switch(cmd)
    {
        case "neutral":
            DND_signalDiv.className = "dsgn-signal";
            neutralSpan.style.display = "";
            okSpan.style.display = "none";
            errorSpan.style.display = "none";
            savingSpan.style.display = "none";
            savingImg.style.display = "none";
        break;
        
        case "saving":
            DND_signalDiv.className = "dsgn-signal saving";
            neutralSpan.style.display = "none";
            okSpan.style.display = "none";
            errorSpan.style.display = "none";
            savingSpan.style.display = "";
            savingImg.style.display = "";
        break;
        
        case "ok":
            DND_signalDiv.className = "dsgn-signal ok";
            neutralSpan.style.display = "none";
            okSpan.style.display = "";
            errorSpan.style.display = "none";
            savingSpan.style.display = "none";
            savingImg.style.display = "none";
        break;
        
        default:
            DND_signalDiv.className = "dsgn-signal failed";
            neutralSpan.style.display = "none";
            okSpan.style.display = "none";
            errorSpan.style.display = "";
            savingSpan.style.display = "none";
            savingImg.style.display = "none";
            
            errorSpan.innerHTML = cmd;
        break;
    }
}

function DND_ProcessTabAdd(res, newAID, xPos, yPos)
{
    if(res == "OK")
    {                
        var dragO = DND_currentObject;
        if(dragO != null)
        {
            DND_currentObject = null;
            var targO = DND_currentTarget;
            curretTarget = null;
            var targPos    = DND_getPosition(targO);		
            var targWidth  = parseInt(targO.offsetWidth);
            var targHeight = parseInt(targO.offsetHeight);            
            mousePos = DND_currentMousePos;
            DND_currentMousePos = null;          
            var dragNo = new Number(dragO.id.substring(dragO.id.indexOf("_")+1));                     
            DND_shadow.innerHTML = "";
            DND_shadow.style.display = "none";                
            var clone = dragO.cloneNode(true);
                  
            if(dragO.getAttribute("AID") != "" || dragO.getAttribute("AID") != undefined)
            {        
                if(newAID != "")
                {
                    clone.setAttribute("AID",newAID);
                }
                else
                {
                    clone.setAttribute("AID",dragO.getAttribute("AID"));
                }
            }
            
            clone.id += "_clone_" + new Date().toString();
            DND_makeDraggable(clone, "clone"); 
            
            var pos = DND_currentObjPos;
            
            //Odstraneni prvotniho prazdneho prvku
            if(targO.firstChild.id == "DND_InitSpan")
            {
                targO.removeChild(targO.firstChild);
            }
           
            if(pos == targO.childNodes.length)
            {
                targO.appendChild(clone);
            }
            else
            {
                targO.insertBefore(clone,targO.childNodes[pos]);
            }
            
            var swicthAr = [];
            var cellString = "";
            for(var c = 0; c < targO.childNodes.length; c++)
            {
                swicthAr.push(targO.childNodes[c].getAttribute("AID"));
            }
            
            var rw = dragO.getAttribute("realWidth");
            if(rw != null && rw != undefined && rw != "")
            {
                clone.style.width = rw;
            }
            var cloneStyle = clone.getAttribute("style");
            clone.setAttribute("style", cloneStyle + ";margin-right:20px");
            clone.style.position = "static";
            
            DND_setSignal("ok");
        }        
    }
    else
    {
        DND_shadow.innerHTML = "";
        DND_shadow.style.display = "none";	        
        DND_setSignal(newAID);
    } 
}

function DND_ProcessTabMov(res, err)
{
    if(res == "OK")
    {
        var dragO = DND_currentObject;
        DND_currentObject = null;
        var targO = DND_currentTarget;
        curretTarget = null;
        var targPos    = DND_getPosition(targO);		
        var targWidth  = parseInt(targO.offsetWidth);
        var targHeight = parseInt(targO.offsetHeight);            
        mousePos = DND_currentMousePos;
        DND_currentMousePos = null;
        par = DND_currentParent;  
        DND_currentParent = null;        	
                           
        if(targO.childNodes.length > 1 || par != targO)
        {                   
            
            par.removeChild(dragO);                    
            var pos = DND_currentObjPos;
        
            if(pos == targO.childNodes.length)
            {
                //alert("MOV APPEND");
                targO.appendChild(dragO);                        
            }
            else
            {
                //alert("MOV INSERT");                        
                //alert(targO.childNodes.length + " pos = " + pos);
                targO.insertBefore(dragO,targO.childNodes[pos]);                        
            }                                
        }
        
        dragO.style.position = "static";                  
        dragO.className = "dsgn-tab-item";	            
        DND_setSignal("ok");
                       
    }
    else            
    {
        var dragO = DND_currentObject;
        DND_currentObject = null;
        var targO = DND_currentTarget;
        curretTarget = null;
        var targPos    = DND_getPosition(targO);		
        var targWidth  = parseInt(targO.offsetWidth);
        var targHeight = parseInt(targO.offsetHeight);            
        mousePos = DND_currentMousePos;
        DND_currentMousePos = null;
        par = DND_currentParent;  
        DND_currentParent = null;  
        try{
        dragO.style.position = "static";
        dragO.className = "dsgn-tab-item";
        }
        catch(e){}
        
        DND_setSignal(err);
    }
}

function DND_ProcessTabDel(res, err)
{
    if(res == "OK")
    {                
        var dragO = DND_currentObject;
        DND_currentObject = null;
        var targO = DND_currentTarget;
        curretTarget = null;
        var targPos    = DND_getPosition(targO);		
        var targWidth  = parseInt(targO.offsetWidth);
        var targHeight = parseInt(targO.offsetHeight);            
        mousePos = DND_currentMousePos;
        DND_currentMousePos = null;
        par = DND_currentParent;  
        DND_currentParent = null;
        
        par.removeChild(dragO);	  
        
        //Pridani prvotniho prvku, pokud uz v bunce zadne nezbyly
        if(par.childNodes.length == 0)
        {
            var span = document.createElement("SPAN");
            span.id = "DND_InitSpan";
            span.innerHTML += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            span.innerHTML += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            span.innerHTML += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            span.innerHTML += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            par.appendChild(span);
        }
        
        var dragNo = new Number(dragO.id.substring(dragO.id.indexOf("_")+1, dragO.id.indexOf("_clone")));
        DND_setSignal("ok");
    }
    else            
    {
        var dragO = DND_currentObject;
        DND_currentObject = null;
        var targO = DND_currentTarget;
        curretTarget = null;
        var targPos    = DND_getPosition(targO);		
        var targWidth  = parseInt(targO.offsetWidth);
        var targHeight = parseInt(targO.offsetHeight);            
        mousePos = DND_currentMousePos;
        DND_currentMousePos = null;
        par = DND_currentParent;  
        DND_currentParent = null;  
        
        dragO.style.position = "static";
        dragO.className = "dsgn-tab-item";                         
        
        DND_setSignal(err);
    }
}
