//Globální proměnné
var oENT_tables=new Object();
var oENT_tablesCount=0;

//Inicializuje tabulku našeptávače
function oENT_Initialize(inputID)
{
    try
    {  
        var edit = document.getElementById(inputID);
          
	    //Init	   
	    var tableID = inputID+"_NaseptavacTable"; 
	    edit.Naseptavac = document.getElementById(tableID);
	    var naseptavac = edit.Naseptavac;
	    
	    naseptavac.ID = tableID;	
	    naseptavac.InputID = inputID;	
	    naseptavac.SelectedIndex = 0;	   
	    naseptavac.MaxSelectedIndex = 0;
	    naseptavac.MaxSelectedIndex = 0;
	    naseptavac.ScrollFirst = 0;
	    naseptavac.ScrollLast = 0;	    
	    naseptavac.TRS = naseptavac.getElementsByTagName("tr");
	    naseptavac.Length = naseptavac.TRS.length;		
	    naseptavac.HLRow = -1;
	    
	    //Check rows count
	    if(naseptavac.Length==0){return false;}
	    if((naseptavac.Length==1)&&((edit.NaseptavacShowFooter=="1")||(edit.NaseptavacShowHeader=="1"))){return false;}
	    if((naseptavac.Length==2)&&((edit.NaseptavacShowFooter=="1")&&(edit.NaseptavacShowHeader=="1"))){return false;}

    	
	    //Set events for rows
	    var len = naseptavac.Length;
	    var i = 0;
	    var headOffset = 0;
	    
	    if(edit.NaseptavacShowFooter=="1"){len-=1;}	    
	    if(edit.NaseptavacShowHeader=="1"){i+=1; headOffset = 1;}	    	    

	    for (i; i < len; i++)
	    {
	        if(edit.NaseptavacShowCommentColumn=="0")
	        {	            
		        naseptavac.TRS[i].onmouseover = oENT_RowOn;
		        naseptavac.TRS[i].onmouseout  = oENT_RowOff;
		        naseptavac.TRS[i].onclick  = oENT_RowClick;
		        naseptavac.TRS[i].Table  = naseptavac;
		        naseptavac.TRS[i].RIndex  = i-headOffset;
		        naseptavac.MaxSelectedIndex = i-headOffset;

		        try{naseptavac.TRS[i].ondblclick = naseptavac.ondblclick;}catch(e){}

		        if((i-headOffset)%2==0)
		        {
			        naseptavac.TRS[i].className = "oEdit-tbl-item"; 
		        }
		        else
		        {
			        naseptavac.TRS[i].className = "oEdit-tbl-item-alt";   
		        } 
		    }
		    else
		    {
		        var inx = (i-headOffset)/2;
		        var even = (i-headOffset)%2;
		        if(even!=0){ inx = inx - 0.5};
		        even = Math.round(even);
		        
		        if(even==0)
		        {		        
		            naseptavac.TRS[i].onmouseover = oENT_RowOn;
		            naseptavac.TRS[i].onmouseout  = oENT_RowOff;
		            naseptavac.TRS[i].onclick  = oENT_RowClick;
		            naseptavac.TRS[i].Table  = naseptavac;
		            naseptavac.TRS[i].RIndex  = inx;
		            naseptavac.MaxSelectedIndex = inx;

		            try{naseptavac.TRS[i].ondblclick = naseptavac.ondblclick;}catch(e){}

		            if(inx%2==0)
		            {
			            naseptavac.TRS[i].className = "oEdit-tbl-item"; 
		            }
		            else
		            {
			            naseptavac.TRS[i].className = "oEdit-tbl-item-alt";   
		            }
		        }
		        else
		        {
		            naseptavac.TRS[i].className = "oEdit-tbl-item-comment";
		            naseptavac.TRS[i].Table  = naseptavac;
		            naseptavac.TRS[i].onclick  = oENT_NoRowClick;
		        }
		    }
	    }

	    if(edit.NaseptavacShowHeader=="1")
	    {
		    naseptavac.TRS[0].className = "oEdit-tbl-hd";
		    naseptavac.TRS[0].Table  = naseptavac;
		    naseptavac.TRS[0].onclick  = oENT_NoRowClick;
	    }
	    
	    if(edit.NaseptavacShowFooter=="1")
	    { 
		    naseptavac.TRS[naseptavac.Length-1].className = "oEdit-tbl-ft";
		    naseptavac.TRS[naseptavac.Length-1].Table  = naseptavac;
		    naseptavac.TRS[naseptavac.Length-1].onclick  = oENT_NoRowClick;
	    }	


	    //SelectedIndex
	    naseptavac.ScrollLast = naseptavac.MaxSelectedIndex*1;
	    if(naseptavac.ScrollLast>((edit.NaseptavacVisibleRowsCount*1)-1))
	    {
	        naseptavac.ScrollLast = (edit.NaseptavacVisibleRowsCount*1)-1;
	    }	
	    oENT_ShowHideRows(naseptavac);    
	    oENT_SelRow(0,naseptavac);		    	

	    return true;
    }
    catch(e)
    {
        alert("WTF");
	    status="Cannot Initialize Table "+inputID+"! "+e ;
	    return false;
    }
}







//Událost najetí myší na řádek tabulky
function oENT_RowOn()  
{ 

    if (edit.PrompterType == "1101") { return; }

	//Nastaví index obarveného řádku
	this.Table.HLRow = this.RIndex;


	//Obarvení provede jen pokud řádek není vybraný (vybraný styl má přednost)
	if (this.RIndex!=this.Table.SelectedIndex)	   
	{
		//Barvu nastaví podle sudosti indexu řádku

		if(this.RIndex%2==0)
		{
			this.className = "oEdit-tbl-item-over-alt"; 
		}
		else
		{
			this.className = "oEdit-tbl-item-over";   
		} 
	}

}







//Událost opuštění myší řádku tabulky
function oENT_RowOff() 
{
    if (edit.PrompterType == "1101") { return; }
    
	//Odnastaví index obarveného řádku
	this.Table.HLRow=-1;


	//Obarvení provede jen pokud řádek není vybraný (vybraný styl má přednost)
	if (this.RIndex!=this.Table.SelectedIndex)	    
	{
		//Barvu nastaví podle sudosti indexu řádku

		if(this.RIndex%2==0)
		{
			this.className = "oEdit-tbl-item-alt"; 
		}
		else
		{
			this.className = "oEdit-tbl-item";   
		} 
	}

}




//Zobrazí a skryje řádky tabulky podle mezí ScrollFirst a ScrollLast
function oENT_ShowHideRows(table)
{ 
    var edit = document.getElementById(table.InputID);
    if(edit.NaseptavacShowCommentColumn=="0")
    {
        var headOffset = 0;
        if(edit.NaseptavacShowHeader){headOffset = 1;}    
    
        //Skrytí od začátku po scroll first  
        for(var i = 0; i<table.ScrollFirst; i++)
        {
            table.TRS[i+headOffset].style.display = "none";
        }
    
        //Zviditelnění od scroll first po scroll last  
        for(var i = table.ScrollFirst; i<=table.ScrollLast; i++)
        {
            table.TRS[i+headOffset].style.display = "";
        }
    
        //Zneviditelnění od scroll last po konec         
        for(var i = table.ScrollLast+1; i<edit.NaseptavacRows.length; i++)
        {
            table.TRS[i+headOffset].style.display = "none";
        }              
    }
    else
    {
        var headOffset = 0;
        if(edit.NaseptavacShowHeader){headOffset = 1;}    
    
        //Skrytí od začátku po scroll first  
        for(var i = 0; i<table.ScrollFirst; i++)
        {
            table.TRS[i*2+headOffset].style.display = "none";
            table.TRS[i*2+1+headOffset].style.display = "none";
        }
    
        //Zviditelnění od scroll first po scroll last  
        for(var i = table.ScrollFirst; i<=table.ScrollLast; i++)
        {
            table.TRS[i*2+headOffset].style.display = "";
            table.TRS[i*2+1+headOffset].style.display = "";
        }
    
        //Zneviditelnění od scroll last po konec         
        for(var i = table.ScrollLast+1; i<edit.NaseptavacRows.length; i++)
        {
            table.TRS[i*2+headOffset].style.display = "none";
            table.TRS[i*2+1+headOffset].style.display = "none";
        }
    }
}





//Vybere řadek tabulky - označí ho jako vybraný a nastaví SelectedIndex
function oENT_SelRow(index, table)
{
    //if (edit.PrompterType == "1101") { return; }
   
    var edit = document.getElementById(table.InputID);

    //Vytvoření offsetu řádku
    var headOffset = 0;
	if(edit.NaseptavacShowHeader){headOffset = 1;}
		

	//Pokud je vybrán řádek, odznačí ho
	if(table.SelectedIndex>=0)
	{
	    var rinx = table.SelectedIndex*1;	       
	
		//Pokud je řádek označený myší
		if(table.SelectedIndex == table.HLRow)
		{		
			//Barvu nastaví podle sudosti indexu řádku
			if(table.SelectedIndex%2==0)
			{
			    if(edit.NaseptavacShowCommentColumn=="0")
	            {
				    table.TRS[rinx+headOffset].className = "oEdit-tbl-item-over-alt";
				}
				else
				{
				    table.TRS[rinx*2+headOffset].className = "oEdit-tbl-item-over-alt";
				    table.TRS[rinx*2+1+headOffset].className = "oEdit-tbl-item-comment";
				}
			}
			else
			{
				if(edit.NaseptavacShowCommentColumn=="0")
	            {
				    table.TRS[rinx+headOffset].className = "oEdit-tbl-item-over";
				}
				else
				{
				    table.TRS[rinx*2+headOffset].className = "oEdit-tbl-item-over";
				    table.TRS[rinx*2+1+headOffset].className = "oEdit-tbl-item-comment";
				}
			}
		}

		//Pokud není řádek označený myší
		else
		{
			//Barvu nastaví podle sudosti indexu řádku
			if(table.SelectedIndex%2==0)
			{
			    if(edit.NaseptavacShowCommentColumn=="0")
	            {
				    table.TRS[rinx+headOffset].className = "oEdit-tbl-item-alt";
				}
				else
				{
				    table.TRS[rinx*2+headOffset].className = "oEdit-tbl-item-alt";
				    table.TRS[rinx*2+1+headOffset].className = "oEdit-tbl-item-comment";
				}				
			}
			else
			{
				if(edit.NaseptavacShowCommentColumn=="0")
	            {
				    table.TRS[rinx+headOffset].className = "oEdit-tbl-item";
				}
				else
				{
				    table.TRS[rinx*2+headOffset].className = "oEdit-tbl-item";
				    table.TRS[rinx*2+1+headOffset].className = "oEdit-tbl-item-comment";
				}
			}
		}		
	}


	//Označí nový řádek
	var rinx = index*1;     
	    
	table.SelectedIndex = index;
	
	if(edit.NaseptavacShowCommentColumn=="0")
    { 
	    table.TRS[rinx+headOffset].className = "oEdit-tbl-item-sel";
	}
	else
	{
	    table.TRS[rinx*2+headOffset].className = "oEdit-tbl-item-sel";
	    table.TRS[rinx*2+1+headOffset].className = "oEdit-tbl-item-sel-comment";
	}	    




    //Posun skrytých řádků   
    var scrollmoved = false;
    if((index*1)<(table.ScrollFirst*1))
    {
        //Scroll up
        scrollmoved = true;        
        table.ScrollFirst = index*1;
        table.ScrollLast = table.ScrollFirst + ((edit.NaseptavacVisibleRowsCount*1)-1);               
    }
    else
    {
        if((index*1)>(table.ScrollLast*1))
        {
            //Scroll down
            scrollmoved = true;
            table.ScrollLast = index*1;
            table.ScrollFirst = table.ScrollLast - ((edit.NaseptavacVisibleRowsCount*1)-1);
        }
    }
     
    if(scrollmoved)
    {
        oENT_ShowHideRows(table);             
    }
    
    
    


	//Nastaví hodnotu do hiddenu (value)
	var s = table.ID+"_Index";
	var val = index;	
	document.getElementById(s).value = val;	
	
	//Nastavení příznaku FocusIsLost na false	
	table.FocusIsLost = false;
}










//Obslouží událost stisku klávesy
function oENT_KeyDown(inputID, ID, e, skipButtonsOnEnter)
{
    var k = (document.all)?e.keyCode:e.which;
    var table = document.getElementById(ID);
    var edit = document.getElementById(inputID);    

    if( (!e.ctrlKey)&&(!e.altKey)&&(!e.shiftKey) )
    {

      if (edit.PrompterType != "1101")
      {
     
	    if (k==38)
	    {			
		    var i = table.SelectedIndex - 1;		
		    if(i<0)
		    {		      
		        //i = table.MaxSelectedIndex;
		        i = 0;
		    }				
		    oENT_SelRow(i,table);	
		    return false;	   
	    }

	    if (k==40)
	    {				
		    var i = table.SelectedIndex + 1;		
		    if(i>table.MaxSelectedIndex)
		    {		      
		        //i = 0;
		        i = table.MaxSelectedIndex;
		    }				
		    oENT_SelRow(i,table);
		    return false;		   
	    }

	    if (k==36)
	    {	
	        if((table.style.display!="none")&&(table.style.display!=""))
		    {	    
		        oENT_SelRow(0,table);	
		        return false;	
		    }
		    else
		    {
		        return true;		          
		    }
	    }

	    if (k==35)
	    { 
	        if((table.style.display!="none")&&(table.style.display!=""))
		    {	    
		        oENT_SelRow(table.MaxSelectedIndex,table);		
		        return false;
		    }
		    else
		    {
		        return true;		        	  
		    }
	    }    	

    

	    if(k==13)
	    { 
		    //vykoná akci	
		    try
		    {
		        if((table.style.display!="none")&&(table.style.display!=""))
		        {
	                oENT_ReturnValue(inputID,ID);
	            }
	            else
	            { 
	                skipButtonsOnEnter = skipButtonsOnEnter + "";
	                if(skipButtonsOnEnter=="1")
	                {
	                    oEditBase_SkipButtons(e, inputID);
	                }
	            }	           
	        }
	        catch(ex)
	        {	
	            //Nelze vrátit hodnotu         
	        }	
	        return false;      	   
	    }
    
      }	
      
	  if (k==27)
	   {
	        //vrátit původní data, zavřít našeptávač
	        edit.CancelText();		        
	        oENT_Hide(inputID, ID);	                 
            edit.Focus(); 
            return false;
	   } 	    
    }
    
    
}

//Kliknutí na řádek tabulky
function oENT_RowClick()
{   

	oENT_SelRow(this.RIndex,this.Table);	
	
	//focusuje input   
    this.Table.FocusIsLost = false;
    document.getElementById(this.Table.InputID).Focus(); 
    
    //vykoná akci	
	oENT_ReturnValue(this.Table.InputID,this.Table.ID);
	

	return true;
}

//Kliknutí na neaktivní část boxu
function oENT_NoRowClick()
{
	//focusuje input   
    this.Table.FocusIsLost = false;
    document.getElementById(this.Table.InputID).Focus(); 
	return true;
}

//Obslouží událost při opuštění objektu zachytávajícího klávesový vstup
function oENT_HINPBlur(inputID, tableID)
{ 
    if(!document.LockFocus)
    {
        document.getElementById(tableID).FocusIsLost = true;
        var code="oENT_HINP_BlurDelayed('"+inputID+"','"+tableID+"');";
        setTimeout(code,200);   
    }
}

//Provedení zpožděného testu na odskočení z objektu zachytávajícího klávesový vstup
function oENT_HINP_BlurDelayed(inputID, tableID)
{ 
    if(document.getElementById(tableID).FocusIsLost)
    {       
        var box = document.getElementById(tableID);
        if(document.getElementById(tableID).style.display != "")
        {            
            oENT_Hide(inputID, tableID);  
            document.getElementById(inputID).CancelText();            
            document.getElementById(inputID).Focus(); 
        }        
    }      
}

//Skryje drop down box
function oENT_Hide(inputID, tableID)
{ 
	var box = document.getElementById(tableID);        

	if(box.style.display != "")
	{
	    box.style.display = "";	 
	    var wrapperID = tableID+"ShadowTable";
        //document.getElementById(wrapperID).style.visibility = "hidden";      
        document.getElementById(wrapperID).style.display = "none";      
     
	    document.getElementById(inputID).FunctionsOpened = (document.getElementById(inputID).FunctionsOpened*1) - 1;
	    if(document.getElementById(inputID).FunctionsOpened==0)
	    {
	        document.getElementById(inputID).ValidationStopped = false;
	    }
	}		
}
//Start Steinmetz
function oENT_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 };
}
//End Steinmetz

//Zobrazí drop down box
function oENT_Show(inputID, tableID)
{ 
	var box = document.getElementById(tableID); 
	if(box==null)
	{	    
	    return;
	}
    //var hinpID = tableID+"_HINP";
    		
    if((!document.LockFocus)||(document.LockFocusID==inputID))
    {        
        if(((document.getElementById(inputID).FunctionsOpened+"")=="")||
	    ((document.getElementById(inputID).FunctionsOpened+"")=="null")||
	    ((document.getElementById(inputID).FunctionsOpened+"")=="undefined")||
	    (document.getElementById(inputID).FunctionsOpened==null))
	    {
	        document.getElementById(inputID).FunctionsOpened = 1;
	    }
	    else
	    {
	        document.getElementById(inputID).FunctionsOpened = (document.getElementById(inputID).FunctionsOpened*1) + 1;
	    }
        
        document.getElementById(inputID).ValidationStopped = true;
        document.getElementById(inputID).Validators.Hide();
        
        //oENT_SelRow(0, document.getElementById(tableID));    
        
        if(window.navigator.appName=="Opera")
        {
            box.style.display = "table-cell";
        }
        if(window.navigator.appName=="Netscape")
        {
            box.style.display = "table-cell";
        }
        if(window.navigator.appName=="Microsoft Internet Explorer")
        {
            box.style.display = "block";
        }     
        var wrapperID = tableID+"ShadowTable";
        //document.getElementById(wrapperID).style.visibility = "visible";
        document.getElementById(wrapperID).style.display = "block";


        //_NaseptavacTableShadowTable
        
        

        //Pozicování wrapperu
        var container = document.getElementById(inputID + "_TableWrapper");
        var iPos = oENT_getPosition(container);
        var iH = parseInt(container.offsetHeight);
        var iW = parseInt(container.offsetWidth);
        //var wrapper = document.getElementById(inputID + "_NaseptavacTableShadowTable");
        var wrapper = document.getElementById(tableID + "ShadowTable");
        var wrapW = parseInt(wrapper.offsetWidth);
        var wrapH = parseInt(wrapper.offsetHeight);
        var wndW = parseInt(document.documentElement.clientWidth);
        var wndH = parseInt(document.documentElement.clientHeight);
        //alert(wndH);

        wrapper.style.position = "absolute";
        var cmp = new Number(iPos.y - document.documentElement.scrollTop + wrapH);
        var posWidth = new Number(iPos.x - document.documentElement.scrollLeft + wrapW);

        if (posWidth > wndW) {// nevejde se do prava?
            var newPosWidth = wndW - wrapW; //posun od praveho okraje
            if (newPosWidth < 0) {
                newPosWidth = iPos.x - (wrapH / 2) + (iW /3);
            }
            iPos.x = newPosWidth;
        }
        if (cmp > wndH)//nevejde se pod?
        {
            var cmp = new Number(iPos.y - document.documentElement.scrollTop - wrapH);
            if (cmp > 0)//vejde se nad?
            {
                wrapper.style.left = iPos.x + "px";
                wrapper.style.top = iPos.y - wrapH + 5 + "px";
            }
            else {
                /*
                wrapper.style.left = iPos.x + "px";
                wrapper.style.top = iPos.y - (wrapH / 2) + (iH / 2) + "px";
                */
                wrapper.style.left = iPos.x + "px";
                wrapper.style.top = iPos.y + iH + "px";
                
            }
        }
        else {
            wrapper.style.left = iPos.x + "px";
            wrapper.style.top = iPos.y + iH + "px";
        }
        
        
        
	    //document.getElementById(hinpID).focus();
	}	
}

//Vrací index vybraného řádku
function oENT_GetSelectedIndex(tableID)
{
	var s = tableID+"_Index";
	return document.getElementById(s).value*1;
}

//Vrací hodnotu sloupce primárního klíče vybraného řádku tabulky
function oENT_GetSelectedRowPK(inputID,tableID)
{
    var table = document.getElementById(tableID);
    var edit = document.getElementById(inputID);
    var pkColumnName = edit.NaseptavacPrimaryKeyColumnName;   
    var selIndex = oENT_GetSelectedIndex(tableID);
    
    var hinpID = tableID+"_Row"+selIndex+"_"+pkColumnName;	
	return document.getElementById(hinpID).value;
}

//Vrací hodnotu textového sloupce vybraného řádku tabulky
function oENT_GetSelectedRowText(inputID,tableID)
{
	var table = document.getElementById(tableID);
    var edit = document.getElementById(inputID);  
    
    var textColumnName = edit.NaseptavacTextColumnName;    
    var selIndex = oENT_GetSelectedIndex(tableID);    

    var hinpID = tableID+"_Row"+selIndex+"_"+textColumnName; 
    var hinp = document.getElementById(hinpID);
    
	return hinp.value;
}

//Vrací vybrané hodnoty do inputu
function oENT_ReturnValue(inputID, tableID)
{
    var edit = document.getElementById(inputID);

    var text = oENT_GetSelectedRowText(inputID, tableID);
    var val = oENT_GetSelectedRowPK(inputID, tableID);  
       
    //Napnění skrytých inputů
    var nhvalsID = inputID + "_RowHiddenValues";
    var selIndex = oENT_GetSelectedIndex(tableID);
    var s = "";
    for(var i = 0; i<edit.NaseptavacColumns.length; i++)
    {
        // pospisil val na valt - jinak vraci chybne val do SetValue
        var valt = document.getElementById(tableID+"_Row"+selIndex+"_"+edit.NaseptavacColumns[i].Name).value;        
        s += "<input type=\"hidden\" id=\""+inputID+'_RowHiddenValues_'+edit.NaseptavacColumns[i].Name+"\" value=\""+valt+"\" />";        
    }    
            
    document.getElementById(nhvalsID).innerHTML = s;    
    
    //alert(edit.PrompterType);
    
    // plny naseptavac
    if (edit.PrompterType == '1100')
    {
       edit.SetText(text);
       edit.SetValue(val);   
       oENT_Hide(inputID, tableID); 
       document.getElementById(inputID).Validate(document.getElementById(inputID).GetValue());  
       document.getElementById(inputID).Focus();
    }
 
     // PPK naseptavac
    if (edit.PrompterType == '1101')
    {
       oENT_Hide(inputID, tableID);  
       document.getElementById(inputID).Focus();
    }
 
    // 1101 - nesmi vracet nic 
    // jen text
    if (edit.PrompterType == '1102')
    {
      // alert(text);
       edit.SetText(text);
       edit.SetValue(text);   
       oENT_Hide(inputID, tableID); 
       document.getElementById(inputID).Validate(document.getElementById(inputID).GetValue());  
       document.getElementById(inputID).Focus();
    }       
    
}

