﻿     /*
       WSPOLNE FUNKCJE 
       URUCHAMIANE PRZEZ KONTROLKI TNV 
       TEN PLIK NALEZY USTAWIC W SZABLONACH TNV
       WERSJA 1.1.80
       Dostosowana do IE, OPERA, FIREFOX, PPC (praca w przeglądarce WWW)
     */ 
 
      var IsWWW = true; // Ustawić dla WWW na true 
         
      // Zmienne sterujace zaznaczaniem obiektow (na potrzeby grubego klienta sa analogiczne pola ukryte)      
      var SelOBJ="";          // Id XML OBJ biezacego zaznaczonego obiektu      
      var SelOBJ_HTML;        // Obiekt HTML zaznaczony (obiekt HTML DOM)     
      var SelOBJ_MULTI="";    // Lista Id XML OBJ zaznaczonych w trybie multiselect
      var SelOBJ_HTML_MULTI=""; // Lista id HTML zaznaczonych w trybie multi select 
      var SectionExpand=""; // Stan zwiniecia / rozwiniecia wszystkich sekcji formatki
      var DialogRetVal=""; // Wartosc zwracana z dialogu
      var IsSelInit = false; // Inicjujace klikniecie
      var HeaderCnt = 0; // Licznik pomocny w skalowaniu i ustawianiu naglowkow
      var LastMenuItem = null; // Ostatnio wybrana pozycja menu      
     
      var EditedCell = null; // Obiekt aktualnie edytowany na siatce
      var EditetIDs = ""; // Lista id obiektów edytowanych na siatce     
      var IsRecSim = false; // Trwa symulacja przewijania rekordow
      var RecSimNr = ""; // Alternatywna wartość przesuwająca pulę rekordów 
      var RecSimPage = 0; // Wielkość strony
     
      // Funkcja uruchamia ustawienie focusa i wyszarzenie 
      // fokusa w pozostalych browserach
      function OnSetFocus() {
        if (SelOBJ_MULTI!="" && SelOBJ_MULTI!=null) return false;
        if (SelOBJ_HTML) if (document.getElementById("TENVIRK_FOCUS_SUPPORT")) document.getElementById("TENVIRK_FOCUS_SUPPORT").value = SelOBJ_HTML.id;
        if (IsSelInit==false) {
          if (document.getElementById("TENVIRK_FOCUS_SUPPORT")!=null) {
            window.navigate('TENVIRK_FOCUS_SUPPORT?BROWSER=1');
          }  
        } else {
          IsSelInit = false; // Powstrzymanie przed wywolaniem zdarzenia przy ladowaniu
        }          
      }  
      
      // ustawienie focusa na formatkach
      function SetFocus(Mode,Color) {
        try {
          e = window.event.srcElement;
          if (Mode==1) {
            if (Color) {
              e.style.borderColor = Color;
              e.style.borderSize = "3px"
            } else {
              e.style.borderColor = HighLightActive;
            }  
          } else {
            e.style.borderColor = ""; 
          }
          OnSetFocus();
        }  
        catch(e) {}
      }
      
      // Podświetla wybraną pozycję menu
      function SetMenuBgColor(MenuItem, CurColor){
        if (LastMenuItem!=null) {
          try {
            LastMenuItem.style.backgroundColor='';   
          } catch(e) {}
        } 
     	if (CurColor=='JSCRIPT') { 
 		CurColor=HighLightMenu;
	}
        MenuItem.style.backgroundColor=CurColor;
        LastMenuItem = MenuItem;
      }


      // Podświetla wybraną zakladkę
      function SetTabBgColor(CurTab,ActiveClass) {      
         if (LastMenuItem==null) {
           /* Po uruchomieniu pierwsza zakłądka od lewej jest aktywna */
           LastMenuItem = document.getElementsByTagName("LI")[0];
         }
         LastMenuItem.className = null;
         CurTab.className = ActiveClass;
         LastMenuItem = CurTab;
      } 	

      // Funkcja uruchamia tworzenie statyczny naglowek tabeli i resizu
      function DoHeader() {
        if (HeaderCnt<1) {
          SetHeader();
          HeaderCnt++;
        } else {
          // Wywołanie przez timer umożliwia uwzględnienie toolbara
          window.setTimeout('SetHeader()',10);
        }        
        window.event.returnValue = false; 
      }
      
      // Funkcja tworzy statyczny naglowek tabeli
      function SetHeader(Mode) {
	         // Naglowek tabeli (w osobnym DIV)
	         CurTable = document.getElementById("qResizableTABLE");
	         if (!CurTable) return;
	         CurTableH = CurTable.parentNode.previousSibling.lastChild;	         	         	          	         	         
	         if (CurTableH.childNodes.length > 1) {
	           CurHeader = CurTableH.childNodes(1);
	         } else {
	           CurHeader = CurTable.firstChild;
	           CurHeader = CurTableH.appendChild(CurHeader);	           
	         }	         
	         CurHeader.style.display = "";
	         FirstRow = CurTable.firstChild.firstChild;
		 if (FirstRow) {if (FirstRow.id=='groupRows') { FirstRow = FirstRow.nextSibling;}}	         
	         if (FirstRow) {
	           // Resize kolumn naglowke wg kolumnt tabeli (dziala jesli jest pierwszy wiersz)	           
	           for (var x=0;x<(FirstRow.childNodes.length-1);x++) {	             
                 if (FirstRow.childNodes(x).clientWidth < 20) {
                   // Ukrywanie naglowka jesli nie ma danych
                   if (x>0) {
                     if (CurHeader.firstChild.childNodes(x).firstChild.innerText!="") {
                       CurHeader.firstChild.childNodes(x).firstChild.innerText = "..";                   
                     }  
                   }  
                 }
                 CurHeader.firstChild.childNodes(x).style.width = FirstRow.childNodes(x).clientWidth+1;                 
	           }	         
	         }  
             
	         ResizeDiv(CurTable.parentNode,null,Mode);	               
	  }
	  
	  function ResizeDiv(CurDIV,xShift) {       
	     // Obliczanie rozmiaru DIV-a trzymajacego tablice (tak aby mogl sie skalowac) 	         	         	         
	     var Bhgt = document.body.offsetHeight;
	     var Thgt = 0;
	     var qfds = 0;
	     
	     for (x=0;x<CurDIV.parentNode.childNodes.length;x++) {
	       if (CurDIV!=CurDIV.parentNode.childNodes(x)) { 	         
	         if (CurDIV.parentNode.childNodes(x).tagName=="DIV") {	         
	           Thgt = Thgt + CurDIV.parentNode.childNodes(x).offsetHeight;	           
	           // Szybki filtr ma jedna linie za duzo
	           if (qfds==1) qfds = 2; 
	           if (CurDIV.parentNode.childNodes(x).id=="qFilterDIV") {
	             Thgt = Thgt - 18; 
	             if (qfds==0) qfds = 1;
	           }  
	         } 
	       }  
	     } 
	     if (qfds==2) Thgt = Thgt + 18; // Po QFiltrze byly DIVy
	     if (!xShift) xShift = 0
	     Thgt = Bhgt - Thgt + xShift;	     
	     
	     try { 
	       if (Thgt>0) {   
	          // Podanie rozmiaru w % tak aby mozliwe bylo skalowanie
	          CurDIV.style.height = parseInt((100 * Thgt) / Bhgt) + "%";	          
	       } else {
	          CurDIV.style.height = 0;   
	       }  	     
	       CurDIV.style.width = "100%";
	       if (Mode!="NOSEL") SelOBJ_HTML.scrollIntoView(false);
	     } catch(e) {}  
   
	  }
      
   
      
      // Obsluga klawiatury dla kontrolek
      function tnvKeySupport() {
                            
         var IsKey = true;
         var curFunct;
                                                                     
         switch (event.keyCode) {
           case 13 : // ENTER - wykonanie domyslnego polecenia menu lub toolbara
              if (document.getElementById("TENVIRK_ENTER_SUPPORT")) { 
                curFunct = "window.navigate('TENVIRK_ENTER_SUPPORT?" + document.getElementById("TENVIRK_ENTER_SUPPORT").value + "');";
              } else {
                event.returnValue = true;
                return true;
              } 
              break;
           case 37 : //ARROW_LEFT - zaznaczenie w lewo             
           case 38 : //ARROW_UP - zaznaczenie do gor           
             curFunct = "MoveSelect('UP');";
             break;
           case 39 : //ARROW_RIGHT - zaznaczenie w prawo             
           case 40 : //ARROW_DOWN - zaznaczenie na dol
             curFunct = "MoveSelect('DOWN');";
             break;
           case 34 : //PG_DOWN - poprzednia strona
             curFunct = "if (document.getElementById('btnDataUP')) document.getElementById('btnDataUP').click();"             
             break;
           case 33 : //PG_UP - nastepna strona             
             curFunct = "if (document.getElementById('btnDataDN')) document.getElementById('btnDataDN').click();"             
             break;
           case 36 : //HOME - pierwszy rekord
             if (event.srcElement.tagName!="TEXTAREA" && event.srcElement.tagName!="INPUT") {
               curFunct = "MoveSelect('FIRST');";
             } else {
               return;  
             }  
             break;
           case 32 : //SPACE - formatka / tabela                         
               if (document.getElementById('btnForm')==null) { 
                 if (document.getElementById('btnTable')==null) {                  
                   return;
                 } else {
                   curFunct = "document.getElementById('btnTable').click();";
                 }  
               } else {  
                 curFunct = "document.getElementById('btnForm').click();";
               }             
             break;
           case 27 : //ESC - tabela / anulowanie edycji
             if (!(document.getElementById('btnCANCEL'))) { 
               return;
             } 
             curFunct = "document.getElementById('btnCANCEL').click();";  
             break; 
           case 112 : //F1 
             if (IsWWW==false) { 
               window.navigate('TENVIRK_HELP_SUPPORT?TCCLIENT');                         
             } else {
               return;
             }  
             break;
           case 113 : //F2 - formatka / tabela / zapis
             if (document.getElementById('btnSAVE')!=null) {                               
               curFunct = "document.getElementById('btnSAVE').click();";
             } else {             
               curFunct = "if (document.getElementById('btnForm')) { document.getElementById('btnForm').click(); } else { if (document.getElementById('btnTable')) { document.getElementById('btnTable').click(); } }";                 
             }  
             break;
           case 114 : //F3 - edycja
             curFunct = "if (document.getElementById('btnEDIT')) document.getElementById('btnEDIT').click();"                        
             break;
           case 115 : //F4 - dodanie nowego
             curFunct = "if (document.getElementById('btnADD')) {document.getElementById('btnADD').click();} else {if (document.getElementById('btnMULTIADD')) document.getElementById('btnMULTIADD').click();}"                                                      
             break;
           case 117 : //F6 - przejscie do szybkiego filtra
             curFunct = "if (document.getElementById('txtQFilter')) { document.getElementById('txtQFilter').focus();}"                                         
             break;
           case 118 : //F7 - kasowanie
             curFunct = "if (document.getElementById('btnDEL')) document.getElementById('btnDEL').click();"        
             break;     
           case 119 : //F8 - sekcje
             curFunct = "if (document.getElementById('btnSection')) document.getElementById('btnSection').click();"        
             break;           
           case 123 : //F12 - szczegóły
             curFunct = "if (document.getElementById('btnDataDETAILS')) document.getElementById('btnDataDETAILS').click();DoHeader();"        
             break;             
           default:
             IsKey = false;             
         }         
         
         if (IsKey==true) {
            KeyDelay = true;
            event.cancelBubble = true;            
            eval(curFunct);           
            if (!(event.keyCode>=37 && event.keyCode<=40)) event.returnValue = false;             
         }   
         
       }
      
      // Edycja po dwukliku
      function DblEd(Mode) {         
         if (document.getElementById('btnDialogOK')) {
           document.getElementById('btnDialogOK').click();
 	       return; 
	     }	  
	     if (Mode=="EX_DETL") {
           if (document.getElementById('btnDataDETAILS')) {
              document.getElementById('btnDataDETAILS').click();
 	          return; 
           }
         }
         if (document.getElementById('btnEDIT')) document.getElementById('btnEDIT').click();
      }         
        
      function tnvRecSymulation(cDir) {
        // Symulacja doladowania nastepnych rekordow       
        // Nie ma numeracji rekordow wiec symulacja nie jest stosowana
        if (SelOBJ_HTML.firstChild.className!="GridAddInfo") {
          document.getElementById('btnData' + cDir).click();
          return;
        }          
        var cxTAB = SelOBJ_HTML.parentNode;        
        // wyliczenie numeru rekordu
        var cRecNr = parseInt(SelOBJ_HTML.firstChild.innerText);          
        if (cDir=="UP") {
          // Wyliczenie wielkości strony
          cRecNr+=1;
          if (RecSimPage==0) RecSimPage = cRecNr - parseInt(cxTAB.rows(0).firstChild.innerText);          
          RecSimNr = "UX" + (cRecNr-RecSimPage); // Zaznaczenie ostatniego rekordu
        } else {
          cRecNr-=1;          
          if (cRecNr<1) { 
            IsRecSim = false; 
            return false;
          }  
          RecSimNr = "UP" + (cRecNr - 1);
        }                
        // Dodanie sztucznego wiersza
        if (cDir=="UP") {
          var cTR = cxTAB.insertRow();
        } else {
          var cTR = cxTAB.insertRow(0);
        }  
        // Dodanie numeru rekordu
        var cTD = cTR.insertCell();
        cTD.className = "GridAddInfo"; 
        cTD.innerText = cRecNr;       
        // Dodanie symulacji danych
        cTD = cTR.insertCell();
        if (SelOBJ_HTML.children(1).colSpan>1) {
           cTD.colSpan = SelOBJ_HTML.children(1).colSpan;
        } else {
           cTD.colSpan = SelOBJ_HTML.cells.length - 1;
        }   
        cTD.style.borderBottom = "1px solid silver";
        cTD.innerText = "...";
        SelOBJ_HTML.style.backgroundColor = "";
		SelOBJ_HTML = cTR;
	    SelOBJ_HTML.style.backgroundColor = HighLightActive;			    			  
        window.navigate('TENVIRK_REC_SIMULATION?1');
        cTR.scrollIntoView(false);
        IsRecSim = false;                
      } 
      
      // Przeładowanie rokordów po puszczeniu klawisza
      function tnvRecSymRefresh(cDir) {
        if (IsRecSim==true) return;
        document.getElementById('btnData' + cDir).click(); 
      }
      
      // Przesowa zaznaczenie
      function MoveSelect(sDir) {
        if (SelOBJ_HTML==null) return;
        var IsObj = false;
        var oTR;
        var oTRA;
        var IsScroll=false;
        // Najpierw pierwszy obok
        try {        
          switch (sDir) {
            case "DOWN" :
              oTR = SelOBJ_HTML.nextSibling;              
              if (oTR.id.substr(0,3)=="TAI") oTR = oTR.nextSibling; 
              if (oTR) {
                oTR.click();                 
                IsObj = true;
              }  
              break;
            case "UP" :
              oTR = SelOBJ_HTML.previousSibling;
              if (oTR.id.substr(0,3)=="TAI") oTR = oTR.previousSibling; 
              if (oTR) {
                oTR.click();                        
                IsObj = true;
              }  
              break;
          }
                
          oTRA = SelOBJ_HTML.nextSibling;
          if (oTRA!=null) {
            // Pokazanie rozwiniętej sekcji szczegółów
            if (oTRA.id.substr(0,3)=="TAI") {  
                if (oTRA.style.display!="none") {
                    oTRA.scrollIntoView(false);	
                    IsScroll = true;
                }  
            }              
          } else {  
            oTR.scrollIntoView(false);                                                   
            IsScroll = true;
          }
          if (IsScroll==false) {            
            if (oTRA.style.display=="none" || oTRA.nextSibling!==null) {
              oTRA = oTRA.nextSibling;
            } else {
              oTRA = oTR;
            }  
            oTRA.scrollIntoView(false);                     
          }            
        }  
        catch (e) {} 
        if (IsObj==true) return;
        try {        
          // Uzycie metody z wyszukiwaniem obiektu o nastepnym ID
          var posM = SelOBJ_HTML.id.lastIndexOf("-"); 
          var pocT = SelOBJ_HTML.id.substr(0,posM+1);
          var pocN = parseInt(SelOBJ_HTML.id.substr(posM+1));
          
          switch (sDir) {
            case "DOWN" :
              pocN++;
              break;
            case "UP" :
              pocN--;              
              break;
            case "FIRST" :
              pocN=1;
          }
          document.getElementById(pocT + pocN).click();    
          document.getElementById(pocT + pocN).scrollIntoView(false);       
          IsObj = true;
        }  
        catch (e) {}   
        // Nastepna porcja obiektow
        if (IsObj==false) {
          switch (sDir) {
            case "UP" :
               if (document.getElementById('btnDataDN')) {
                  if (document.getElementById('btnDataDN').disabled==false) {
                    if (IsRecSim==true) return;
                    IsRecSim = true;
                    setTimeout('tnvRecSymulation("DN");',10);               
                    setTimeout('tnvRecSymRefresh("DN");',533);                   
                  }  
               }   
               break;
             case "DOWN" :                       
               if (document.getElementById('btnDataUP')) {
                  if (document.getElementById('btnDataUP').disabled==false) {
                    if (IsRecSim==true) return;
                    IsRecSim = true;
                    setTimeout('tnvRecSymulation("UP");',10);               
                    setTimeout('tnvRecSymRefresh("UP");',533);                   
                  }  
               }   
               break;   
          }     
        }
      }
      
                        
      function Select(CurTHIS,CurOBJ,DlgRet,Multi) {
        // Obsluga selekcji obiektw SINGLE i MULTI_SELECT
        
          
        if (window.event) window.event.cancelBubble = true; 
        //if (window.event.ctrlKey==false) Multi="";  
         

                
  	    if (Multi!="MULTI" || window.event.ctrlKey==false) {        
        
            //Usuniecie zaznaczen w trybie multi            
            var arrCurMult = SelOBJ_HTML_MULTI.split("#");
            for (x=0;x<arrCurMult.length;x++) {
              if (arrCurMult[x]!='') {                
				document.getElementById(arrCurMult[x]).style.backgroundColor = "";
              } 
            }    
            SelOBJ_MULTI = "";
            SelOBJ_HTML_MULTI = "";
            document.getElementById("TENVIRK_SELOBJ_MULTI").value = "";
                
            // Zwracanie wartosci z dialogu                
			if (DlgRet) {
                           DialogRetVal = DlgRet;
                           if (document.getElementById("TENVIRK_RETVAL")!=null) document.getElementById("TENVIRK_RETVAL").value = DlgRet;
                        } 
			// Ustawienie biezacego obiektu
			if (SelOBJ_HTML) {
			   SelOBJ_HTML.style.backgroundColor = "";
			}
			SelOBJ_HTML = CurTHIS;
			if (IsSelInit==true) {
			    SelOBJ_HTML.style.backgroundColor = HighLightDeActive; 
			} else {  		 			  
			    SelOBJ_HTML.style.backgroundColor = HighLightActive;			    			  
			}  
			SelOBJ = CurOBJ;        			
            document.getElementById("TENVIRK_SELOBJ").value = SelOBJ; 
                                            
        }
        

        if (Multi=="MULTI") {            
            // Ustawienie zaznaczenia w trybie MULTI_SELECT
            var CurMULT = SelOBJ_MULTI; 
            if (CurMULT.indexOf("#" + CurOBJ + "#")==-1) {
              SelOBJ_MULTI += "#" + CurOBJ + "#";              
              CurTHIS.style.backgroundColor = HighLightActive; // KOLOR MULTI			 
            } else {
              SelOBJ_MULTI = SelOBJ_MULTI.replace("#" + CurOBJ + "#","");  
              CurTHIS.style.backgroundColor = "";		  			
            }
            // Zaznaczenie obiektu HTML
            var CurMULT = SelOBJ_HTML_MULTI; 
            if (CurMULT.indexOf("#" + CurTHIS.id + "#")==-1) {
              SelOBJ_HTML_MULTI += "#" + CurTHIS.id + "#";                            
            } else {
              SelOBJ_HTML_MULTI = SelOBJ_HTML_MULTI.replace("#" + CurTHIS.id  + "#","");                			  			
            }                                    
            document.getElementById("TENVIRK_SELOBJ_MULTI").value = SelOBJ_MULTI;            
        } 
        OnSetFocus(); 
        
        return false;    
        
      }
      
      // Przygotowuje liste ID z multi select
      function PrepareMultiSel() {
        if (SelOBJ_MULTI=="" || SelOBJ_MULTI==null) return '';
        var res = tnvReplace(SelOBJ_MULTI,'##',';')
        res = tnvReplace(res,'#','')
        return res;
      }
      
            
      function AddToContext(AddSel,AddActiv,AddOtherKey,AddOtherVal,AddOtherKey2,AddOtherVal2,AddOtherKey3,AddOtherVal3) {          
          // Uniwersalna funkcja dodajca dodatkowe parametry do kontekstu  
          
          var strXML = "";          
          //Konstruowanie listy zaznaczonych obiektow (do wysania jako parametr zadania)
          if (AddSel==true) {
            strXML += '<ITEM cid="XML:SELECTED"><OBJ f="//OBJ[@id=\'' + SelOBJ + '\']"/></ITEM>';            
          } 
          // Informacje o obiekcie aktywowanym w wyniku zdarzenia
          if (AddActiv) {
            strXML += '<ITEM cid="XML:ACTIVATED"><OBJ f="//OBJ[@id=\'' + AddActiv + '\']"/></ITEM>';
          }
          // Inne informacje
          if (AddOtherKey) {
            strXML += '<ITEM cid="XML:' +  AddOtherKey + '">' + AddOtherVal + '</ITEM>';          
          }
          // Inne informacje 2
          if (AddOtherKey2) {
            strXML += '<ITEM cid="XML:' +  AddOtherKey2 + '">' + AddOtherVal2 + '</ITEM>';          
          }
          // Inne informacje 3
          if (AddOtherKey3) {
            strXML += '<ITEM cid="XML:' +  AddOtherKey3 + '">' + AddOtherVal3 + '</ITEM>';          
          }
          
          if (strXML!='') {
            return "&ADDTOCTX=" + escape('<CONTEXT>' + strXML + '</CONTEXT>');    
          }  
            
      }

            
      function Menu(HTMLSRC,HTMLTRG,XMLID,ASSOC,DCONTEXT,TRANS,SubMenu) {
        // Klikniecie na pozycje menu           
        
        if (SubMenu=='-1') {          
          window.returnValue = ASSOC;
          window.close();
          return true;
        }
               
        var ADDTOCTX = null;
        if (DCONTEXT=="XML:SELECTED") {
          // Jesli w kontekscie zadano zaznaczonego obiektu to dolaczenie go   
          ADDTOCTX = AddToContext(true);
        }
        if (DCONTEXT.substr(0,10)=="XML:DIALOG") {
          // Mozliwość uruchamiania dialogów - przed funkcjami menu w cienkim kliencie
          if (document.getElementById(DCONTEXT)==null) {
            alert("Brak definicji " + DCONTEXT + " dialogu. Proszę umieścicić w tytule zawartość dialogu w elemencie DIV z podanym id."); 
            return;            
          }
          var strHTMLDlg = document.getElementById(DCONTEXT).outerHTML;          
          var strHTMLS = 'javascript:document.write(\'<HTML><BODY>' + strHTMLDlg + '</BODY></HTML>\')';         
          var selAssoc = window.showModalDialog(strHTMLS,null,"dialogHeight: 400px; dialogWidth:400px; edge: Raised; center: Yes; help: No; resizable: No; status: No;");
          if (selAssoc==null) return ;
          ADDTOCTX = AddToContext(false,false, DCONTEXT.substr(4),tnvXMLEscape(selAssoc));
        }
        DoRequest(HTMLSRC,HTMLTRG,XMLID,ASSOC,null,null,null,null,ADDTOCTX,TRANS);
      } 

            
      function DoRequest(HTMLSRC,HTMLTRG,XMLID,ASSOC,DIALOG,TOP,FORM,MODE,ADDTOCTX,TRANS,DCONTEXT) {      
         //Realizuje zadanie do serwera   
         /*
           HTMLSRC - ramka zrodlowa
           HTMLTRG - ramka docelowa (jesli nie podana to jak zrodlowa)
           XMLID - id obiektu XML inicjujacego rzadanie
           ASSOC - nazwa wolanego powiazanie (moze byc kilka rozdzielonych ;)
           DIALOG - wywołanie dialogu
           TOP - sterowanie doładowywaniem danych
           FORM - wywołanie formularza          
           MODE - tryb pracy (zwrot danych z dialogu, zwrot sciezki)
           ADDTOCTX - dane dodawane do kontekstu
           TRANS - transformacja widoku na widok formatki, edycji lub dodawania
		   DCONTEXT - zadanie dodania dialogu lub zaznaczenia (tylko TC Client)
         */  

         if (window.event) window.event.cancelBubble = true;   
                
         if (!(HTMLTRG)) HTMLTRG = HTMLSRC; // Ramka zrodlowa i docelowa ta sama
         var tnvPage = 'DoRequest.aspx?HTMLSRC=' + escape(HTMLSRC) + '&HTMLTRG=' + escape(HTMLTRG) + '&XMLID=' + escape(XMLID) +'&ASSOC=' + escape(ASSOC);
         if (RecSimNr=='') {
           if (TOP) tnvPage += '&TOP=' + escape(TOP);
         } else {
           if (TOP) tnvPage += '&TOP=' + escape(RecSimNr);
         }    
         if (FORM) {
           tnvPage += '&FORM=' + escape(FORM);      
           if (FORM.substr(0,6)=="DO-DEL") {
             if (confirm("Czy na pewno skasować rekord?")==false) return;
           }
         }  
         if (DIALOG) {
           if (DIALOG!="") tnvPage += '&DIALOG=' + escape(DIALOG);   // Kod powiazania:Pole do zwrotu
         } 
         if (TRANS) tnvPage += '&TRANS=' + escape(TRANS);
         if (DCONTEXT) {
           if (DCONTEXT!="") tnvPage += '&DCONTEXT=' + escape(DCONTEXT);   // Zadanie dialogu
         }
         if (ADDTOCTX) tnvPage += ADDTOCTX; 
         switch (MODE) {
          case "DIALOG_OK":
            tnvPage += '&RETVAL=OK:' + escape(DialogRetVal);        // Zwrot wartosci z dialogu
            break;
          case "DIALOG_CANCEL":
            tnvPage += '&RETVAL=CANCEL';                                    // Anulowanie dialogu
            break;
          case "RETURN_PATH":
            return tnvPage;                                                               // Zwrot samej sciezki
            break;
         }               
         if (HTMLTRG=='top') { 
           window.location = tnvPage;
         } else {          
           if (HTMLTRG.substr(0,22)=="TENVIRK_CHECK_SUBMENU:") {
              // Otwarcie dialogu przekierowującego powiazanie (symulacja zakładek z grubego klienta)                                          
              var dlgWyn = tnvDialogRedirAssoc(tnvPage);
              if (dlgWyn==null) {
                return;
              }  
              tnvPage = tnvReplace(tnvPage,"&ASSOC=WWW_SubMenu","&ASSOC=" + dlgWyn);
              HTMLTRG = HTMLTRG.substr(22,HTMLTRG.length-22);
              tnvPage = tnvReplace(tnvPage,"&HTMLTRG=TENVIRK_CHECK_SUBMENU%3A" + HTMLTRG,"&HTMLTRG=" + HTMLTRG);              
           }
           if (HTMLTRG=="NEW_WINDOW") {
             // Otwarcie nowego okna
             window.open(tnvPage,null,"fullscreen=no,resizable=yes,status=yes,toolbar=no,menubar=yes,location=no,scrollbars=yes");
           } else { 
             if (parent.frames.length>0) {
               try {
                 window.parent.frames[HTMLTRG].location = tnvPage;
               } catch(e) {  
                 window.parent.frames['fraTopic'].location = tnvPage;
               }                                 
             } else {
               window.location = tnvPage; 
             } 
           }  
         }  
      }
      
      // Funkcja pokazuje dialog z listą powiazań  
      function tnvDialogRedirAssoc(tnvPage) {
         posAsc = tnvPage.indexOf("&ASSOC="); 
         tnvPage = tnvPage.substr(posAsc,tnvPage.length - posAsc); 
         tnvPage = "DoRequest.aspx?HTMLSRC=SUBMENU&HTMLTRG=SUBMENU&XMLID=SHELL_WWW_SUBMENU" + tnvPage; 
         var selAssoc = window.showModalDialog(tnvPage,null,"dialogHeight: 300px; dialogWidth:300px; edge: Raised; center: Yes; help: No; resizable: No; status: No;");
         if (selAssoc==null) return null;
         return selAssoc;
      }

    
      function BuildFilter(frmXML,frmFilter,HTMLSRC,HTMLTRG,XMLID,ASSOC,Iclass,Mode,DIALOG) {
         // Buduje kryteria filtrownia i przesyla do serwera
         // frmXML - ukryte dane ze zbudowanym filtrem do wysłania na serwer
         // frmFilter - formularz z danymi filtra 
                    
         var strXML1 = ""; // 1 Kolumna
         var strXML2 = ""; // 2 Kolumna
         var strXML3 = ""; // 3 Kolumna         
         var strXML = "";
         var fldName;
         var fldType;
         var arrInfo; 
         var CurValue;
         var Col_1_2_Oper = "OR"; 
         var Col_2_3_Oper = "OR";  
          
          
         if (Mode!="CANCEL") {
                                     
                for (var x=0;x<frmFilter.length;x++) {
                      CurValue = frmFilter[x].value;                    
                      arrInfo = frmFilter[x].name.split(":");
                      fldType = arrInfo[2];
                                                                                         
                      switch(arrInfo[6]) {
                        case "Column_1_2_Oper":
                          // Operator miedzy kolumnami
                          Col_1_2_Oper = CurValue; 
                          break;
                        case "Column_2_3_Oper":                          
                          Col_2_3_Oper = CurValue; 
                          break;
                        case "OPER":
                          // Sprawdzenie czy podano wartosc kryterium
                          if (frmFilter[x+1].value!="" || CurValue=="NULL" || CurValue=="NOT NULL") {                                                                         
                            fldName = arrInfo[1];                            
                            CurValue = tnvXMLEscape(CurValue);
                            switch(arrInfo[7]) { // W zaleznosci od kolumny
                                case "1":
                                  if (strXML1!="") strXML1 += '<AND/>';    
                                  strXML1 += '<FLD n="' + fldName + '" t="' + fldType + '" o="' + CurValue + '">';
                                  break;
                                case "2":
                                  if (strXML2!="") strXML2 += '<AND/>';    
                                  strXML2 += '<FLD n="' + fldName + '" t="' + fldType + '" o="' + CurValue + '">';
                                  break;
                                case "3":                             
                                  if (strXML3!="") strXML3 += '<AND/>';    
                                  strXML3 += '<FLD n="' + fldName + '" t="' + fldType + '" o="' + CurValue + '">';
                                  break;                                
                            }
                          }  
                          break;                          
                        case "CRIT":
                          if (CurValue!="" || frmFilter[x-1].value=="NULL" || frmFilter[x-1].value=="NOT NULL") {                                                                         
                            if (CheckFilterValues(fldType,CurValue)==false) {
                              // Obsluga bledu				  
				              frmFilter[x].scrollIntoView(false);				  
				              frmFilter[x].style.borderColor = "red";
				              frmFilter[x].style.borderWidth = "3px"; 				  				          
                              return false;
                            }  
                            if (frmFilter[x-1].value=="Like") {
                              CurValue = tnvReplace(CurValue,"*","%");
                              if (CurValue.substr(1)!='%') CurValue += '%';
                            }
                            CurValue = tnvXMLEscape(CurValue);                            
                            switch(arrInfo[7]) { // W zaleznosci od kolumny
                              case "1": 
                                strXML1 += CurValue + '</FLD>';
                                break;
                              case "2": 
                                strXML2 += CurValue + '</FLD>';
                                break;
                              case "3": 
                                strXML3 += CurValue + '</FLD>';
                                break;                                
                            }
                          }     
                          break;
                      }                        
                }         
         }
                  
         if (strXML1!="") {
           strXML += '<FILTER>' + strXML1 + '</FILTER>';
         }
         if (strXML2!="") {  
           if (strXML!="") strXML += "<" + Col_1_2_Oper + "/>";
           strXML += '<FILTER>' + strXML2 + '</FILTER>';
         }  
         if (strXML3!="") {  
           if (strXML!="") strXML += "<" + Col_2_3_Oper + "/>";
           strXML += '<FILTER>' + strXML3 + '</FILTER>';
         }  
         
         strXML =  '<FILTER class="' + Iclass + '">' + strXML + '</FILTER>';
         frmXML[0].value = strXML;
         var CurAction = DoRequest(HTMLSRC,HTMLTRG,XMLID,ASSOC,DIALOG,null,'DO-FILTER:' + Iclass,"RETURN_PATH");
         document.getElementById("TENVIRK_SELOBJ_OTHER").value = CurAction;
         if (document.URL=="about:blank") {          
           frmXML.action = "http://127.0.0.1/" + CurAction;         
         } else {
           frmXML.action = CurAction;         
         }        
         frmXML.submit();
         return false;
      }

            
      function gridQFlt(frmFilter,HTMLSRC,HTMLTRG,XMLID,ASSOC,Iclass,Mode,DIALOG,SORTNAME,SORTSTATE) {
         // Buduje kryteria szybkiego filtrownia i przesyla do serwera  
            
         var strXML;
         var Operation = 'DO-FILTER:' + Iclass;
         var fldName =  frmFilter[1].value;
         var curSort;
         
         switch (Mode) {
             case "CANCEL":
                   strXML = '<FILTER class="' + Iclass + '"></FILTER>';
                   break;
             case "SORT":
                   if (SORTNAME==null) {
                     fldName = fldName.substr(1);
                   } else {
                     fldName = SORTNAME;
                   }  
                   if (SORTSTATE==null) {
                     var sortix = 5; 
                     while (frmFilter[sortix].name!="lstQFSort") {                   
                       sortix += 1;                   
                       if (frmFilter[sortix]==null) return;
                     }
                     curSort = frmFilter[sortix].value
                   } else {
                     curSort = SORTSTATE;
                   }   
                   switch (curSort) {
                     case "ASC":
                       strXML = '<SORT class="' + Iclass + '">' + fldName + '</SORT>';
                       break;
                     case "DESC":
                       strXML = '<SORT class="' + Iclass + '">' + fldName + ' DESC</SORT>';
                       break;
                     case "":
                       strXML = '<SORT class="' + Iclass + '"></SORT>';
                       break;
                   }
                   Operation = 'DO-SORT:' + Iclass;
                   break;
             default:
                   var fldType = fldName.substr(0,1);
                   fldName = fldName.substr(1);

                   // Ustalenie wybranej wartosci z uwzglednieniem list
                   var fldVal = frmFilter[2].value;
                    // Funkcja pokazuje lub ukrywa listy
                   var fL = 3; 
                   var CurObj = frmFilter[fL];                   
                   while (CurObj.name.substr(0,11)=="lstQFilter_") { 
                     if (CurObj.style.display=="") {
                       fldVal = CurObj.value;
                       break;
                     }  
                     fL += 1;  
                     CurObj = frmFilter[fL];                   
                   }
                   
                   
                   // Ustalenie operatora            
                   var lChar = fldVal.substr(fldVal.length-1);
                   var fldOper = "=";
                   var nvar = fldVal.toUpperCase();
                   if (nvar=="NULL" || nvar=="NOT NULL" || nvar=="PUSTE" || nvar=="NIE PUSTE") {
                    fldVal = "";
                    if (nvar=="PUSTE") {
                      fldOper = "NULL";
                    } else {
                      if (nvar=="NIE PUSTE") {
                         fldOper = "NOT NULL";
                      } else {
                         fldOper = nvar;
                      }
                    }
                   } else {  
                    fChar = fldVal.substr(0,2);
                    if (fChar==">=" || fChar=="<=" || fChar=="=>" || fChar=="=<") {
                       fldVal =  fldVal.substr(2);
                       fldOper = fChar;
                    } else {
                     var fChar = fldVal.substr(0,1);
                     if ((fldType=="M" || fldType=="S")) {
                       fldVal = tnvReplace(fldVal,"*","%");                       
                       if (fldVal.indexOf("%")==-1) fldVal += "%";                       
                       fldOper = "Like";
                     } else {
                       if (fChar=="=" || fChar==">" || fChar=="<") {
                         fldVal =  fldVal.substr(1);
                         fldOper = fChar;
                       }
                     }
                    }
                   }
	           			
                   fldOper = tnvXMLEscape(fldOper);                   

                   if (CheckFilterValues(fldType,fldVal)==false) return false;
                   fldVal = tnvXMLEscape(fldVal);
                   
                   strXML = '<FILTER class="' + Iclass + '"><FLD n="' + fldName + '" t="' + fldType + '" o="' + fldOper + '">' + fldVal + '</FLD></FILTER>';
         }

         frmFilter[0].value = strXML;
         if (frmFilter[2]) frmFilter[2].value = tnvXMLEscape(frmFilter[2].value);
         var CurAction = DoRequest(HTMLSRC,HTMLTRG,XMLID,ASSOC,DIALOG,null,Operation,"RETURN_PATH");
         document.getElementById("TENVIRK_SELOBJ_OTHER").value = CurAction;    
         if (document.URL=="about:blank") {          
           frmFilter.action = "http://127.0.0.1/" + CurAction;         
         } else {
           frmFilter.action = CurAction;         
         }        
         frmFilter.submit();
         return false;
      }

      function CheckFilterValues(fldType,fldVal) {
      // Kontrola wprowadzonych wartosci do kryteriow filtra
                   switch (fldType) {
                     case "N","C":
                       if (isNaN(parseFloat(fldVal))==true) {
                         alert("Należy wprowadzić liczbę zmiennoprzecinkową!");
                         return false;
                       }
                       break;
                     case "L":
                       if (isNaN(parseInt(fldVal))==true) {
                         alert("Należy wprowadzić liczbę całkowitą!");
                         return false;
                       }
                       break;
                     case "B":
                       if (fldVal=="0" || fldVal=="false" || fldVal=="FALSE") {
                         fldVal = "0";
                       } else {  
                         fldVal = "-1"; 
                       }
                       break;
                     case "D":
                       break;
                     case "T":
                       break;
                     case "H":
                       break;
                   }
      }  


      function formSend(ListIds,frmSend,HTMLSRC,XMLID,ASSOC,VIEW,ICLASS,DIALOG,frmData,DCONTEXT,ADDTOCTX) {
         // Przesyla do serwera dane z formularza (lub kilku formularzy naraz)
         // Dane sa wstepnie sprawdzane pod wzgledem porawnosci typow i dlugosci
         // ListIds - Lista Id-kow z obiektami (dla pojedynczej formatki 1 ID)
         // frmSend - ukryty formularz do przesylania danych         
         // frmData - moze być podany bezposrednio formularz (np. do przesyłania danych z filtra)
      
         var CurValue = "";
         var strXML = "";
         var strAllXML = "";
         var arrInfo = ""; // Informacje o obiekcie
         var lastOBJid = ""; // Ostani identyfikator OBJ
         var arrIDs = ListIds.split(";"); // Podzial ID
         var msg = ""; //Komunikat o bedzie
         var filesList = "";//Lista wybranych plikow  
           
         for (var f=0;f<arrIDs.length;f++) {
              
            strXML = "";
            // Ustalanie formularza z danymi  
            if (frmData==null) {
              frmForm = document.forms['frm' + arrIDs[f]];  
            } else {
              frmForm = frmData;            
            }  
			// Tworzenie stringu XML z danymi z formatki (dla wielu obiektow)
			for (var x=0;x<frmForm.length;x++) {
				if (frmForm[x].name!=null && frmForm[x].name!="") {
				    arrInfo = frmForm[x].name;
				    arrInfo = arrInfo.split(":");
				    if (lastOBJid!=arrInfo[0]) {
					    lastOBJid=arrInfo[0];
					    if (strXML!="") strXML += '</OBJ>';
					    strXML += '<OBJ id="' + lastOBJid + '">';
				    }
    				var IsHideEle = false; 
				    switch (frmForm[x].type) {
				      case "checkbox" :
				        var CurGroup = frmForm[x].parentNode;
				        if (CurGroup.tagName=="DIV") {
				          // grupa checkboxow				          
				          if (CurGroup.childNodes(0)!=frmForm[x]) {
				            // to nie jest 1. element - wyjscie z petli
				            IsHideEle = true;
				          } else {  
				            CurValue = "";
						    for (var le=0;le<CurGroup.childNodes.length;le++) {
						      if (CurGroup.childNodes(le).type=="checkbox") {
							    if (CurGroup.childNodes(le).checked==true) {
								  if (CurValue!="") CurValue += ";";
								  CurValue += CurGroup.childNodes(le).value;
							    }
							  }  
						    } 
						  }
				        } else {
                          if (frmForm[x].checked==true) {
                            CurValue = -1;
                          } else {
                            CurValue = 0;
                          }
                        }  
                        break; 
                      case "select-multiple":                                                                     
                        CurValue = "";
                        for (var le=0;le<frmForm[x].options.length;le++) {
                          if (frmForm[x].options(le).selected==true) {
                            if (CurValue!="") CurValue += ";";
                            CurValue += frmForm[x].options(le).value;
                          }
                        }
                        break;  
                      case "radio":  
                        CurValue = "";   
                        if (frmForm[x].checked==true) {
                          CurValue = frmForm[x].value;                         
                        } else {
                          IsHideEle = true;
                        }
                        break;  
                      default :  
                        CurValue = frmForm[x].value;
                    }
                                        			
				    if (!(DIALOG=="" || DIALOG==null || DIALOG.substr(0,12)!="OPEN_DIALOG:")) {  
				        // Dla dialogu pominiecie sprawdzania danych bo dane są zapamietywane tak jak są
				        // Tylko niektore dane wymagaja przeformatowania				        
				        switch (arrInfo[2]) { 				               
					          case "C" :
					          case "L" :					          
					          case "N" :
					            if (CurValue!='') {
						          CurValue = tnvReplace(CurValue," ","");
						          CurValue = tnvReplace(CurValue,"'","");
						          CurValue = tnvReplace(CurValue,",",".");
						          if (CurValue.indexOf("%")!=-1) {
						            CurValue = parseFloat(CurValue) 
						            if (isNaN(CurValue)==false) CurValue = CurValue / 100;
						          } else { 						          
						            CurValue = parseFloat(CurValue);
						          }  
						        }  						        
						        break;  						
						      default : 
						        CurValue = tnvXMLEscape(CurValue);   
						}    
										        
				    } else { 
				    
				        if (CurValue=="") {
				        if (arrInfo[5]=="1") {
				            msg = "Pole jest wymagane i musi podane.";				
				        }  
				        } else {				
					        // Kontrola poprawnosci danych					        
					        switch (arrInfo[2]) { 
					          case "F" :					            
					            filesList += arrInfo[1] + '?' + CurValue + '*'; //Pole - Plik          
					            break;					          
					          case "B" :
						        if (CurValue==0 || CurValue=="false" || CurValue=="FALSE" || CurValue=="" || CurValue=="False") {
						          CurValue = 0;
						        } else {
						          CurValue = -1;  
						        }  
						        break;					          
					          case "D" :
						        break;
					          case "H" :
						        break;
					          case "T" :
						        break;
					          case "N" :
					            CurValue = tnvReplace(CurValue," ","");
						        CurValue = tnvReplace(CurValue,"'","");
						        CurValue = tnvReplace(CurValue,",",".");
						        if (CurValue.indexOf("%")!=-1) {
						            CurValue = parseFloat(CurValue) 
						            if (isNaN(CurValue)==false) CurValue = CurValue / 100;
						        } else { 						          
						            CurValue = parseFloat(CurValue);
						        }    
						        if (isNaN(CurValue)==true) {
						          msg = "Wymagana jest liczba.";
						        }
						        break;  
					          case "C" :
						        CurValue = tnvReplace(CurValue," ","");
						        CurValue = tnvReplace(CurValue,"'","");
						        CurValue = tnvReplace(CurValue,",",".");
						        CurValue = parseFloat(CurValue);
						        if (isNaN(CurValue)==true) {
						          msg = "Wymagana jest kwota.";
						        }
						        break;  
					          case "L" :
						        CurValue = tnvReplace(CurValue," ","");
						        CurValue = tnvReplace(CurValue,"'","");
						        CurValue = tnvReplace(CurValue,",",".");
						        CurValue = parseInt(CurValue);
						        if (isNaN(CurValue)==true) {
						          msg = "Wymagana jest liczba całkowita.";
						        }
						        break;  
						      case "" :  				  
					          case "S" :
                                CurValue = CurValue.toString();
						        CurValue = tnvXMLEscape(CurValue); 
						        break;            
					          case "M" :
                                CurValue = CurValue.toString();
						        CurValue = tnvXMLEscape(CurValue); 
						        break;            						        
					          default : // Typ S				    
						        msg = "Typ lub kontrolka " + arrInfo[2] + " nie jest obsługiwana!" 
						        break;
					        }  
				        }
        				
				        if (msg!='') {
				          // Obsluga bledu				  
				          frmForm[x].scrollIntoView(false);				  
				          frmForm[x].style.borderColor = "red";
				          frmForm[x].style.borderWidth = "4px"; 				  
				          alert("Błędnie wypełnione pole!\n" + msg + "\n" + "Rekord nr: " + (f + 1) + ".\nPole zostało podświetlone na czerwono.");				  
					  try {
					    frmForm[x].focus();
					  } catch(e) {}		
				          return false;
				        }
    				    
				}
			 	   if (IsHideEle==false) {  
			 	     if (frmData==null) {
			 	       strXML += '<FLD n="' + arrInfo[1] + '">' + CurValue + '</FLD>';
			 	     } else {  
			 	       strXML += '<FLD n="' + frmForm[x].name + '">' + CurValue + '</FLD>';			 	    
			 	     }  			 	  
			 	   } 
				}
			}
			
			// Dolozenie pol zwiazanych z uploadem plikow w cienkim kliencie
			frmForm = document.forms['frmXML' + arrIDs[f]];  
			if (frmForm!=null) {
			   for (var x=0;x<frmForm.length;x++) {
				if (frmForm[x].name!=null && frmForm[x].name!="" && frmForm[x].name!="txtFormDef" && frmForm[x].name!="txtFormFiles") {
				    arrInfo = frmForm[x].name;
				    arrInfo = arrInfo.split(":");
				    strXML += '<FLD n="' + arrInfo[1] + '">' + tnvXMLEscape(frmForm[x].value) + '</FLD>';
				}    
		       }  
			}
			
			if (strXML!="") {
			  strXML += '</OBJ>';
			  strAllXML += strXML;
			}  		
		 }	
			
         strAllXML = '<COL>' + strAllXML + '</COL>';
         
         if (filesList!='') {
           if (frmSend.txtFormFiles!=null) frmSend.txtFormFiles.value = filesList; 
         }  
         frmSend.txtFormDef.value = strAllXML;
         // Ze wzgledu na bledy w przekazywaniu action do grubego klienta 
         if (ADDTOCTX!=null) { 
           if (IsWWW==true) { 
             if (ADDTOCTX=="WWW_FIND_CRITERIA") {
               ADDTOCTX = prompt("Wpisz fragment szukanej wartości:",""); 
               if (ADDTOCTX==null) return false;
             }
           } 
           ADDTOCTX = AddToContext(false,null,"PARAMETERS",ADDTOCTX);
         }
         var CurAction = DoRequest(HTMLSRC,null,XMLID,ASSOC,DIALOG,null,'DO-' + VIEW + ':' + ICLASS,"RETURN_PATH",ADDTOCTX,null,DCONTEXT);
         document.getElementById("TENVIRK_SELOBJ_OTHER").value = CurAction;
         if (document.URL=="about:blank") {          
           frmSend.action = "http://127.0.0.1/" + CurAction;         
         } else {
           frmSend.action = CurAction;         
         } 
        
         if ((DIALOG=="" || DIALOG==null) && IsWWW==true) { 
           // Zapobiega podwojnemu klawiszowi na wolnym laczu
           if (document.getElementById("btnSAVE")!=null) document.getElementById("btnSAVE").disabled=true;
           if (document.getElementById("DOWN_btnSAVE")!=null) document.getElementById("DOWN_btnSAVE").disabled=true;
         }  
         try {
           frmSend.submit();         
         } catch (e){
            if ((DIALOG=="" || DIALOG==null) && IsWWW==true) { 
              if (document.getElementById("btnSAVE")!=null) document.getElementById("btnSAVE").disabled=false;
              if (document.getElementById("DOWN_btnSAVE")!=null) document.getElementById("DOWN_btnSAVE").disabled=false;
            }  
         }           
         return false;
      }


      function Section(ObjSect,Mode,IsMenu) {
         // Zwijanie i rozwijanie sekcji na formularzach
         if (window.event) window.event.cancelBubble = true;         
         if (IsMenu==true) {
           var Icon = 'Menu_';
         } else {
           var Icon = 'Sec_';
         }
         
         if (Mode=='ALL' || Mode=='ALL_NO') {
           // Znalezienie pierwszego TR w tabeli
           if (!document.getElementById("qFirstSECTION")) return;
           ObjSect = document.getElementById("qFirstSECTION").parentNode;
         }        
         CurTR = ObjSect.nextSibling;          
         StateDisp = "none";
         if (Mode) {           
           if (Mode=="ALL_NO") {
             Mode = "ALL";
             SectionExpand = "none"
           } else {
             if (SectionExpand=="none") {
               StateDisp = "";
               SectionExpand = "";
             } else {
               SectionExpand = "none";
             }  
           }  
         } else {
           if (CurTR.style.display=="none") StateDisp = "";
         }  
   
           if (StateDisp=="none") {
             ObjSect.firstChild.firstChild.src = "images/system/" + Icon + "Exp.gif";           
           } else {
             ObjSect.firstChild.firstChild.src = "images/system/" + Icon + "Cola.gif";
           }
   
         do {           
           if (!CurTR) break;
           if (CurTR.id=="SECTION" && !Mode) {
             if (StateDisp!="none") CurTR.scrollIntoView(false);              
             break;
           } else {
             if (CurTR.tagName=="TR" && CurTR.id!="SECTION") CurTR.style.display = StateDisp;             
             if (CurTR.id=="SECTION" && Mode) {
               if (StateDisp=="none") {
                 CurTR.firstChild.firstChild.src = "images/system/" + Icon + "Exp.gif";           
               } else {
                 CurTR.firstChild.firstChild.src = "images/system/" + Icon + "Cola.gif";
               }
             }
           } 
           if (CurTR.nextSibling==null && !Mode) {
               if (CurTR.lastChild) CurTR.lastChild.scrollIntoView(false);
           }  
           CurTR = CurTR.nextSibling;           
         } while (CurTR);
      }

       
      // Pokazania dodatkowych danych dla siatki 
      function DispTAI(objTAI,Mode) {
        if (Mode=="ONE RECORD") {        
          oTR = SelOBJ_HTML;
          oTR = oTR.nextSibling;
          if (oTR.id.substr(0,3)!="TAI") return; 
        } else {  
          oTR = document.getElementById(objTAI);
        }  
        if (oTR==null) return;
        if (oTR.style.display=="none") {
           CurDisp = "" 
        } else {
           CurDisp = "none" 
        }   
        while (oTR!=null) {           
          if (oTR.id.substr(0,3)=="TAI") {   
             oTR.style.display = CurDisp; 
             if (Mode=="ONE RECORD") break;                           
          }   
          oTR = oTR.nextSibling;
        }  
        SetHeader("NOSEL");
        if (SelOBJ_HTML!=null) {
          oTR = SelOBJ_HTML.nextSibling;
          if (oTR!=null || CurDisp!="none" ) {
            oTR.scrollIntoView(false);
          } else {
            SelOBJ_HTML.scrollIntoView(false);
          }  
        }  
      } 

      function EncPass(CurForm) {
         // Logowanie do systemu 
         var CurPassw = CurForm.txtPassword.value;
         var CurUser = CurForm.txtUser.value;
         document.getElementById('txtID').value = calcCRPT1(calcCRPT1(CurPassw) + SessionID);
         document.getElementById('txtLogin').value = CurUser;
         document.forms['frmLogin2'].action = "Login.aspx?ANONYMUS=NO";
         //try {
           document.forms['frmLogin2'].submit();
         //} catch(e) {}
         return false;           
      }

      // **************** OBSLUGA ZDARZEN ************************
      
      function FireEvent_onafterdisplay(FunctName,ObjID) {
        // Zdarzenie: po pokazaniu formatki
        // Funkcja zdarzenia powinna byc w module specyficznych funkcji dla aplikacji                 
        eval(FunctName + "('" + ObjID + "');"); 
      }

      
      function tnvXMLEscape(CurStr) {
        // Zamiana znakow niezgodnych z XML na encje 
        if (typeof(CurStr)!='string') return CurStr;
        CurStr = tnvReplace(CurStr,"&","&amp;");
        CurStr = tnvReplace(CurStr,">","&gt;");
        CurStr = tnvReplace(CurStr,"<","&lt;");        
        CurStr = tnvReplace(CurStr,"'","&apos;");
        CurStr = tnvReplace(CurStr,'"',"&quot;");
        return CurStr;
      }
      
      
      function tnvReplace(CurStr,SearchStr,ReplStr) {
        // Zamiana znakow
        
        var NewStr = "";
        var arrCurStr = CurStr.split(SearchStr);
        for (x=0;x<arrCurStr.length;x++) {
          NewStr += arrCurStr[x];
          if (x!=arrCurStr.length-1) NewStr += ReplStr;
        }        
        return NewStr;        
      }

      function tnvTransXMLData(IDxml,IDxsl) {
        // Wczytanie arkusza XML, transformacja danych XML i zwrot do wyspy  
        var XMLNode = document.all(IDxml).XMLDocument.documentElement;       
        if (XMLNode) {
           if (document.all(IDxsl)) {
             var XMLDOCStyle = document.all(IDxsl).XMLDocument       
             document.all("DIV" + IDxml).innerHTML = XMLNode.transformNode(XMLDOCStyle); 
           } else {
             alert("Nie znaleziono w szablonie arkusza XSL: " + IDxsl);                     
           }
        }
      }	
      
            
      // Funkcja czysci podane pole 
      // CurFld - pole uruchamiajace zdarzenie
      // strTargetFld - nazwa pola docelowego
      // ResetVal - wartos do ktorej resetowac
      function tnvResetFld(CurFld,strTargetFld,ResetVal) { 
         var FndFld = tnvGetFld(CurFld,strTargetFld);
         if (FndFld!=null) {
             if (ResetVal==null) {
               FndFld.value = '';
             } else {
               FndFld.value = ResetVal;
             }                        
         }           
      }
      
      // Funkcja zwraca pole
      // CurFld - pole uruchamiajace zdarzenie
      // strTargetFld - nazwa pola docelowego      
      function tnvGetFld(CurFld,strTargetFld) { 
         var CurName = CurFld.id;
         if (CurFld.id=='') CurName = CurFld.name;
         if (CurName.substr(0,10)=='cmdSelect_') CurName = CurName.substr(10);                     
         var strTrgFld = CurName.split(':')[0] + ':' + strTargetFld + ':';                      
         // Petla przez wszystkie inputy - sprawdzanie nazwy
         var aInputs = CurFld.form.getElementsByTagName("INPUT");
         for (var x=0;x<aInputs.length;x++) {
           if (aInputs(x).id=='') {
             strCurFld = aInputs(x).name.substr(0,strTrgFld.length);             
           } else {
             strCurFld = aInputs(x).id.substr(0,strTrgFld.length);
           }  
           if (strCurFld==strTrgFld) {        
             return aInputs(x);
           } 
         }           
         var aInputs = CurFld.form.getElementsByTagName("SELECT");
         for (var x=0;x<aInputs.length;x++) {
           if (aInputs(x).id=='') {
             strCurFld = aInputs(x).name.substr(0,strTrgFld.length);             
           } else {
             strCurFld = aInputs(x).id.substr(0,strTrgFld.length);
           }  
           if (strCurFld==strTrgFld) {        
             return aInputs(x);
           } 
         }                    
         return null;
      }
      
      
      // Funkcja pokazuje lub ukrywa listy
      function tnvFilterShowList(CurObj) {        
        if (CurObj==null) return;
        FldName = CurObj.value;
        CurObj = CurObj.nextSibling; // DIV
        var TxtFld  = CurObj.firstChild;
        var IsFld = false;
        // Sprawdzanie czy dostepne sa listy
        CurObj = TxtFld.nextSibling;
        if (CurObj==null) {
          TxtFld.style.display = ""; 
          return;        
        }
        do { 
          if (CurObj.name=="lstQFilter_" + FldName) {
            CurObj.value = "";
            CurObj.style.display = "";             
            TxtFld.style.display = "none"; 
            IsFld = true;
          } else {
            CurObj.style.display = "none";         
          }
          CurObj = CurObj.nextSibling;
        } while (CurObj);  
        if (IsFld==false) {
          TxtFld.value = "";
          TxtFld.style.display = ""; 
        }
      }
      
      // Rozpoczecie downloadu pliku
      function tnvDownLoadFile(OpenApp, DirVirt, FileName, FileExt) {        
        var sPath = 'TnvFiles.aspx?OPENAPP=';
        if (OpenApp=='') OpenApp ="YES";
        sPath += escape(OpenApp) + '&DIR=' + escape(DirVirt);
        sPath += '&FILE=' + escape(FileName);
        sPath += '&EXT=' + escape(FileExt);
        window.location = sPath;
      }

      
      //*** Edycja zawartosci celi na siatce ***
                  
      // Rozpoczęcie edycji zwartośći
      function tnvEditCnt(oCell) {
        document.body.onkeydown = null;
        event.cancelBubble = true; 
        event.returnValue = false;    
        if (document.getElementById("TENVIRK_EDIT_CTRL_BUTTONS").style.display=="none") {
           document.getElementById("TENVIRK_MAIN_CTRL_BUTTONS").style.display="none";
           document.getElementById("TENVIRK_EDIT_CTRL_BUTTONS").style.display="";
        }            
        oCell.innerHTML = '<INPUT type="text" onkeydown="tnvEditMove(this.parentNode);" onclick="event.cancelBubble = true;" ondeactivate="tnvDeactivateEdit();" style="background-color:yellow;border: 1px gray solid;" value="' + oCell.innerText+ '"/>';
        EditedCell = oCell.firstChild;
        EditedCell.focus();                      
      }
      
      // Zakończenie edycji 
      function tnvDeactivateEdit() {       
        if (window.event) {
          event.cancelBubble = true;
          event.returnValue = false;        
        }  
        if (document.body.onkeydown == null) document.body.onkeydown = tnvKeySupport; 
        if (EditedCell==null) return;
        var curCell = EditedCell.parentNode;
        var EdID = curCell.id.split(":")[0];
        if (("#" + EditetIDs + "#").indexOf("#" + EdID + "#")==-1) {
           if (EditetIDs!="") EditetIDs += "#";
           EditetIDs += EdID;                          			
        }        
        curCell.innerHTML = EditedCell.value; 
        
        EditedCell = null;              
      }
      
      function tnvEditMove(curCell) {          
         switch (event.keyCode) {
           case 13 : // ENTER - zakończenie edycji
              tnvDeactivateEdit()
              break;                               
           case 9 : // TAB
              tnvDeactivateEdit()
              if (event.shiftKey==false) {
                tnvFindNextEdit(curCell,1);  
              } else {
                tnvFindNextEdit(curCell,-1);  
              }  
              if (EditedCell!=null) EditedCell.focus();        
              break;
           case 40 : //ARROW_DOWN - zaznaczenie na dol
              tnvDeactivateEdit()
              tnvFindUpDnEdit(curCell,1);   
              if (EditedCell!=null) EditedCell.focus();        
              break;
           case 38 : //ARROW_UP - zaznaczenie do gory  
              tnvDeactivateEdit()
              tnvFindUpDnEdit(curCell,-1);   
              if (EditedCell!=null) EditedCell.focus();        
              break;         
              break;      
           default:
              event.returnValue = true;      
        }                     
      }
            
      // Znalezienie następnego pola do edycji
      function tnvFindNextEdit(curCell,cDir,cName) {
        var sx = curCell.sourceIndex;
        if (cDir<0) {
          sx-=1;
        } else {
          sx+=1;
        }  
        for (sx;sx<(document.all.length-1);sx+=cDir) {	
          if (sx==-1) return false;
          cObj = document.all(sx);
          if (cObj==null) return false;
          if (cObj.tagName=='TD') {
            if (cObj.ondblclick!=null) {
              if (cName==null) {
                tnvEditCnt(cObj);
                return false;  
              } else {
                // Sprawdzenie nazwy pola w wierszu poniżej                 
                if (cObj.id.split(":")[1]==cName) {
                  tnvEditCnt(cObj);
                  return false;  
                }
              }                
            }
          }
        }
      }
      
      // Znalezienie pola wiersz niżej - wyżej
      function tnvFindUpDnEdit(curCell,cDir) {
        var arrInfo = curCell.id.split(":");
        var cName = arrInfo[1];        
        tnvFindNextEdit(curCell,cDir,cName)        
      }
      
      
      function formGridSend(frmSend,HTMLSRC,XMLID,ASSOC,VIEW,ICLASS,DIALOG) {
         // Przesyla do serwera dane z siatki (kilku rekordów naraz)
         // frmSend - ukryty formularz do przesylania danych         
                  
         var CurValue = "";
         var strXML = "";
         var strAllXML = "";
         var last_oID = "";
                   
         // Pętla przez wsztstkie TD
         var colTD = document.getElementsByTagName("TD");
         for (var sx =0;sx<(colTD.length-1);sx++) {	 
           if (colTD(sx).id!="" && colTD(sx).ondblclick!=null) {
             oID = colTD(sx).id.split(":")[0]; 
             if (("#" + EditetIDs + "#").indexOf("#" + oID + "#")!=-1) {
               oName = colTD(sx).id.split(":")[1];
               if (last_oID!=oID) {
                 if (strXML!="") strXML += "</OBJ>";
                 strXML += '<OBJ id="' + oID + '">';
                 last_oID = oID;
               }
               strXML += '<FLD n="' + oName + '">' + tnvXMLEscape(colTD(sx).innerText) + '</FLD>';
             }
           }
         } 
                    
         if (strXML!="") strXML += "</OBJ>";           
         strAllXML = '<COL>' + strXML + '</COL>';
                 
         frmSend.txtFormDef.value = strAllXML;         
         var CurAction = DoRequest(HTMLSRC,null,XMLID,ASSOC,DIALOG,null,'DO-' + VIEW + ':' + ICLASS,"RETURN_PATH");
         document.all("TENVIRK_SELOBJ_OTHER").value = CurAction;
         if (document.URL=="about:blank") {          
           frmSend.action = "http://127.0.0.1/" + CurAction;         
         } else {
           frmSend.action = CurAction;         
         } 
                 
         try {
           frmSend.submit();         
           EditetIDs = "";
         } catch (e){           
         }           
         return false;
      }


      
