﻿//Inicializuje oEditNaseptavac
function oEditNaseptavac_Initialization(ID, showHeader, showFooter, primaryKeyColumnName, textColumnName, visibleColumns,
 commentColumnName, visibleRowsCount, downloadRowsCount, downloadRowsCountText, totalRowsCountText, checkDelay, sqlSelect, startText, prompterType)
{
	var edit = document.getElementById(ID);	
	
	//Nastavení vlastností
	edit.ID = ID+"";
	
	edit.PrompterType = prompterType;

	edit.NaseptavacShowHeader = showHeader*1;
	edit.NaseptavacShowFooter = showFooter*1;
	edit.NaseptavacPrimaryKeyColumnName = primaryKeyColumnName+"";
	edit.NaseptavacTextColumnName = textColumnName+"";
	edit.NaseptavacVisibleColumns = visibleColumns+"";
	edit.NaseptavacCommentColumnName = commentColumnName+"";
	edit.NaseptavacShowCommentColumn = 1;
	if((commentColumnName==null)||(commentColumnName=="")||(commentColumnName=="null")||(commentColumnName=="undefined"))
	{
	    edit.NaseptavacShowCommentColumn = 0;
	}	
	
	edit.NaseptavacVisibleRowsCount = visibleRowsCount*1;	
	edit.NaseptavacDownloadRowsCount = downloadRowsCount*1;
	edit.NaseptavacDownloadRowsCountText = downloadRowsCountText+"";
	edit.NaseptavacTotalRowsCountText = totalRowsCountText+"";		
	edit.NaseptavacCheckDelay = checkDelay*1;
		
	
	edit.NaseptavacColumnNames = "";
	edit.NaseptavacTotalRowsCount = 0;	
	edit.NaseptavacCurText = edit.GetText();
	edit.NaseptavacData = "";
	edit.NaseptavacChecking = false;
	edit.GetColumnValue = function(columnName){return oEditNaseptavac_GetColumnValue(ID,columnName);};
	edit.CancelText = function(){return oEditNaseptavac_CancelText(ID);};
	edit.CancelTextSavedText = edit.GetText();
	

		
	//Override metod
	edit.SetText = function(text){ document.getElementById(ID).value = text; edit.FireTextChangedEvent(null); edit.NaseptavacCurText = text; return true; };	
	edit.RefreshText = function(){var text = document.getElementById(ID).GetText(); edit.NaseptavacCurText = text; edit.CancelTextSavedText = text;};
	edit.RefreshValue = function(){return oEditNaseptavac_RefreshValue(ID);};	
	
	//Focus	
	edit.Focus = function(){ oEditNaseptavac_Focus(ID); };
	edit.FocusNoSelect = function(){ oEditNaseptavac_FocusNoSelect(ID); };	
	
	//sql - pospisil
	edit.SQLSelect = sqlSelect;
	

	
	// start text - pospisil
	if ((startText!=null)&&(startText!="")&&(edit.PrompterType == '1100'))
	{
	  edit.SetText(startText);
    }

    edit.setAttribute("joattNN", "japos");
}





//Zfocusuje edit, zajišťuje ochranu proti zacyklení validátorů
function oEditNaseptavac_Focus(ID)
{ 
    var edit = document.getElementById(ID); 
      
    if(!document.LockFocus)
    {
        document.LockFocus = true;                
        document.LockFocusID = ID;
        var code = "var edit = document.getElementById('"+ID+"'); edit.FireGotFocusEvent(null); edit.focus(); edit.select();";
        var codeUnlock = "document.LockFocus = false;";
        setTimeout(code,1);
        setTimeout(codeUnlock,200);
    }
}



//Zfocusuje edit, zajišťuje ochranu proti zacyklení validátorů
function oEditNaseptavac_FocusNoSelect(ID)
{  
    var edit = document.getElementById(ID); 
      
    if(!document.LockFocus)
    {
        document.LockFocus = true;                
        document.LockFocusID = ID;
        var code = "var edit = document.getElementById('"+ID+"'); edit.FireGotFocusEvent(null); edit.focus();";
        var codeUnlock = "document.LockFocus = false;";
        setTimeout(code,1);
        setTimeout(codeUnlock,200);
    }
}



//Zruší aktuální textovou hodnotu v editu a nahradí ji původní hodnotou
function oEditNaseptavac_CancelText(ID)
{     

    
    var edit = document.getElementById(ID);    
    var val = edit.CancelTextSavedText;
    
    // jen text
    if (edit.PrompterType == '1102' ) { return; }
    
    if (edit.PrompterType == '1101' ) 
    { 
      return; 
    }
    
    edit.NaseptavacCurText = val;
    edit.SetText(val);    

}


//Vrátí hodnotu daného sloupce ve vybraném řádku uloženém v editu
function oEditNaseptavac_GetColumnValue(ID, columnName)
{  
    var edit = document.getElementById(ID);
    return document.getElementById(ID+'_RowHiddenValues_'+columnName).value;    
}






//Převezme textovou hodnotu z editačního pole, přeformátuje ji a uloží ji jako hodnotu. Přitom provádí
//validaci a v případě neúspěchu může zfocusovat edit
function oEditNaseptavac_RefreshValue(ID)
{    
    var edit = document.getElementById(ID);
    
    //Získání hodnoty
    var val = edit.GetValue(); 
    
    //Validace validátorami    
    edit.Validate(val);
	
}




//Obslouží stisk klávesy, případně vyvolá AJAX 
function oEditNaseptavac_KeyDown(e, ID)
{
    var edit = document.getElementById(ID);    
    var k = (document.all)?e.keyCode:e.which;
    
    if(k!=13)
    {
        if(!edit.NaseptavacChecking)
        {		    
	        edit.NaseptavacChecking = true;		
	        var code = "oEditNaseptavac_Check('"+ID+"')";
	        setTimeout(code,edit.NaseptavacCheckDelay);
        }
	}	
}




//Zkontroluje, zda došlo ke změně v editu a případně zavolá AJAX
//Funguje se zpožděním CheckDelay, čímž redukuje množství požadavků a zvyšuje celkovou rychlost
function oEditNaseptavac_Check(ID)
{
    var edit = document.getElementById(ID);

	//Test jestli je vubec neco napsano, jestli to neni to same jako minule
	if((edit.NaseptavacCurText+"")!=(edit.GetText()+""))
	{			
		edit.NaseptavacCurText = edit.GetText();			
		oNaseptavacAJAX_ReceiveFunction = function(){oEditNaseptavac_ReceiveFunction(ID);};  
        oNaseptavacAJAX_SendQuery(edit.GetText(),edit.NaseptavacDownloadRowsCount, ID, edit.SQLSelect);
	}
	else
	{
	// pospisil aby se mohl naseptavac smazat
	  if((edit.NaseptavacCurText+"")=="")
	  {
	    edit.SetValue("");
	  }
	}
	edit.NaseptavacChecking = false;
}






//Přijme data ze serveru a nechá vyrenderovat a zobrazit našeptávač
function oEditNaseptavac_ReceiveFunction(ID)
{
    var edit = document.getElementById(ID);     
    var text = oNaseptavacAJAX_Text+"";
    
    if((text==null)||(text=="")||(text=="undefined")||(text=="null")||(text=="X"))
    {
        status = "Našeptávač: No data received.";
    }
    else
    { 
        
        oEditNaseptavac_ProcessData(ID, text);
                
        var hvals = oEditNaseptavac_BuildHiddenValues(ID)+"";
        var table = oEditNaseptavac_BuildTable(ID)+"";
        var footer = oEditNaseptavac_BuildFooter(ID)+""; 
             
        document.getElementById(ID+"_NaseptavacTable_HiddenValues").innerHTML = hvals;
                        
        var headerHTML = document.getElementById(ID+"_NaseptavacTable_HeaderHTML").value;
        var columnsHTML = document.getElementById(ID+"_NaseptavacTable_ColumnsHTML").value;
        var rep = "&X42#$%";
        
        while(headerHTML.indexOf(rep)!=-1)
        {
            headerHTML = headerHTML.replace(rep,"\"");
        }
        while(columnsHTML.indexOf(rep)!=-1)
        {
            columnsHTML = columnsHTML.replace(rep,"\"");
        }
                       
        var tableHTML = "<table id=\"" + ID + "_NaseptavacTable\" class=\"oEdit-tbl\" >";
        tableHTML +=  columnsHTML+headerHTML+table+footer;
        tableHTML += "</table>";     
        
        document.getElementById(ID+"_NaseptavacTableWrapper").innerHTML = tableHTML;
        
        oENT_Initialize(ID);
        oENT_Show(ID, ID+"_NaseptavacTable");
    }
}



//Zpracuje data obdržené ze serveru
function oEditNaseptavac_ProcessData(ID, text)
{
    //definice    
    var edit = document.getElementById(ID);
   
    var columns = [];
    var rows = []; 
        
    
    //základní rozčlenění textu  
    var ptext = text + ""; 
    
    //TotalRows
    ptext = ptext.substring(11,ptext.length);       
    var totalrows = ptext.substring(0,ptext.indexOf("</totalrows>"));
    ptext = ptext.substring(ptext.indexOf("</totalrows>")+12, ptext.length);     
       
    
    //Split zbytek textu          
    var columnstext = ptext.substring(9,ptext.indexOf("</columns>"));  
    ptext = ptext.substring(ptext.indexOf("</columns>")+10,ptext.length);    
    var rowstext = ptext.substring(6,ptext.indexOf("</rows>"));

    //Columns  
    while(columnstext.indexOf("<col>")!=-1)
    {
        var column = new Object();        
        columnstext = columnstext.substring(5,columnstext.length);       
        var columndata = columnstext.substring(0,columnstext.indexOf("</col>"));               
        var name = columndata.substring(6,columndata.indexOf("</name>"));
        
        if((columnstext.indexOf("</col>")+6)==columnstext.length)
        {
            columnstext = "";
        }
        else
        {
            columnstext = columnstext.substring(columnstext.indexOf("</col>")+6, columnstext.length);                
        } 
             
        column.Name = name;        
        columns.push(column);
    }
    
        
    
    //Rows
    while(rowstext.indexOf("<row>")!=-1)
    {
        var row = new Object();        
        rowstext = rowstext.substring(5,rowstext.length);       
        var rowdata = rowstext.substring(0,rowstext.indexOf("</row>"));
        var cols = [];        
        
        //Cols
        while(rowdata.indexOf("<col>")!=-1)
        {
            var col = new Object();              
                 
            rowdata = rowdata.substring(5,rowdata.length);       
            var coldata = rowdata.substring(0,rowdata.indexOf("</col>"));
            
            //Col data
            var val = coldata.substring(7,coldata.indexOf("</value>"));
            var cssclass = ""; 
            if((coldata.indexOf("</value>")+8)!=coldata.length)
            {                
                coldata = coldata.substring(coldata.indexOf("</value>")+8, coldata.length);                    
                cssclass = coldata.substring(10,coldata.indexOf("</cssclass>"));               
            }            
            
            if((rowdata.indexOf("</col>")+6)==rowdata.length)
            {
                rowdata = "";
            }
            else
            {
                rowdata = rowdata.substring(rowdata.indexOf("</col>")+6, rowdata.length);                
            } 
                 
            col.Value = val;         
            col.CssClass = cssclass;
            cols.push(col);
        }
        
        
        
        if((rowstext.indexOf("</row>")+6)==rowstext.length)
        {
            rowstext = "";
        }
        else
        {
            rowstext = rowstext.substring(rowstext.indexOf("</row>")+6, rowstext.length);                
        }
        
        row.Columns = cols;
        rows.push(row);
    }   
 
    edit.NaseptavacColumns = columns; 
    edit.NaseptavacRows = rows;
    edit.NaseptavacTotalRowsCount = totalrows*1;
        
}









//Vytvoří ze serverových dat hidden inputy
function oEditNaseptavac_BuildHiddenValues(ID)
{
    var edit = document.getElementById(ID);
    var s = "";
    
    for(var i = 0; i< edit.NaseptavacRows.length; i++)
    {
        var row = edit.NaseptavacRows[i];
        for(var x = 0; x< edit.NaseptavacRows[i].Columns.length; x++)
        {
            var col = edit.NaseptavacRows[i].Columns[x];          
            s += "<input type=\"hidden\" id=\""+ID+"_NaseptavacTable_Row"+i+"_"+edit.NaseptavacColumns[x].Name+"\" value=\""+col.Value+"\" />";            
        }
    }  
    
    return s; 
}




//Vytvoří ze serverových dat HTML tabulku
function oEditNaseptavac_BuildFooter(ID)
{
    var edit = document.getElementById(ID);
    var s = "";
    
    s += "<tr class=\"oEdit-tbl-ft\" >";
    s += "<td";
    s+=" colspan=\"" + edit.NaseptavacVisibleColumnsCount + "\"";
    s += ">";
    
    var rc = edit.NaseptavacDownloadRowsCount*1;
    if(rc>edit.NaseptavacRows.length)
    {
        rc = edit.NaseptavacRows.length;
    }
    
    s += "<span>" + edit.NaseptavacDownloadRowsCountText + " </span><span class=\"oEdit-tbl-count\">" + rc + "</span>";
    s += " <span>" + edit.NaseptavacTotalRowsCountText + " </span><span class=\"oEdit-tbl-total\">"+edit.NaseptavacTotalRowsCount+"</span>";
    s += "</td>";
    s += "</tr>";
    
    return s;
}



//Vytvoří ze serverových dat HTML tabulku
function oEditNaseptavac_BuildTable(ID)
{
    var edit = document.getElementById(ID);
    var viscols = [];
    
    if(edit.NaseptavacVisibleColumns.indexOf(";")==-1)
    {
        var vcol = edit.NaseptavacVisibleColumns;
        viscols.push(vcol);
    }
    else
    {
        var vcols = edit.NaseptavacVisibleColumns+"";
        while(vcols.indexOf(";")!=-1)
        {
            var vcol = vcols.substring(0,vcols.indexOf(";"));
            vcols = vcols.substring(vcols.indexOf(";")+1,vcols.length);                        
            viscols.push(vcol);
        }       
        viscols.push(vcols);
    }
    
    edit.NaseptavacVisibleColumnsCount = viscols.length;
    
    
    var s = "";
    
    for(var i = 0; i< edit.NaseptavacRows.length; i++)
    {
        var row = edit.NaseptavacRows[i];
        if(i%2==0)
        {
            s += "<tr class=\"oEdit-tbl-item\">";
        }
        else
        {
            s += "<tr class=\"oEdit-tbl-item-alt\">";        
        }
        
        for(var x = 0; x< viscols.length; x++)
        {
            var inx = -1;            
            for(var z = 0; z<edit.NaseptavacColumns.length; z++)
            {
                if((viscols[x]+"")==edit.NaseptavacColumns[z].Name)
                {
                    inx = z;
                    break;
                }
            }
            
            var col = edit.NaseptavacRows[i].Columns[inx];
            s += "<td";
            if(col.CssClass!=""){ s += " class=\""+col.CssClass+"\"";}
            s += ">";
            s += col.Value;
            s += "</td>";            
        }
        s += "</tr>";
        
        
        
        if(edit.NaseptavacShowCommentColumn=="1")
        {            
            var inx = -1;            
            for(var z = 0; z<edit.NaseptavacColumns.length; z++)
            {                
                if(edit.NaseptavacCommentColumnName==edit.NaseptavacColumns[z].Name)
                {
                    inx = z;
                    break;
                }
            }
            s += "<tr class=\"oEdit-tbl-item-comment\">"; 
            s += "<td colspan=\""+edit.NaseptavacVisibleColumnsCount+"\"";
            
            var col = edit.NaseptavacRows[i].Columns[inx];           
            if(col.CssClass!=""){ s += " class=\""+col.CssClass+"\"";}
            s += ">";
            s += col.Value;
            s += "</td>"; 
            s += "</tr>";  
        }
    } 
    
    return s;
}
