JavaScript DHTML/Ajax Layer/Ajax Library

Материал из Web эксперт
Перейти к: навигация, поиск

ajax dynamic content

<A href="http://www.wbex.ru/Code/JavaScriptDownload/ajax-dynamic-content.zip">ajax-dynamic-content.zip( 19 k)</a>

1. <A href="/Code/JavaScript/Ajax-Layer/AJXToolsAJX.htm">AJX Tools (AJX)</a> 2. <A href="/Code/JavaScript/Ajax-Layer/Ajaxtoolkits.htm">Ajax toolkits</a> <A href="/Code/JavaScript/Ajax-Layer/Ajaxtoolkits.htm"></a> 3. <A href="/Code/JavaScript/Ajax-Layer/Libraryfordevelopment.htm">Library for development</a> <A href="/Code/JavaScript/Ajax-Layer/Libraryfordevelopment.htm"></a> 4. <A href="/Code/JavaScript/Ajax-Layer/Developmentlibrary.htm">Development library</a> <A href="/Code/JavaScript/Ajax-Layer/Developmentlibrary.htm"></a> 5. <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamicpages.htm">ajax dynamic pages</a> <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamicpages.htm"></a>

ajax dynamic pages

<A href="http://www.wbex.ru/Code/JavaScriptDownload/ajax-dynamic-pages.zip">ajax-dynamic-pages.zip( 30 k)</a>

1. <A href="/Code/JavaScript/Ajax-Layer/AJXToolsAJX.htm">AJX Tools (AJX)</a> 2. <A href="/Code/JavaScript/Ajax-Layer/Ajaxtoolkits.htm">Ajax toolkits</a> <A href="/Code/JavaScript/Ajax-Layer/Ajaxtoolkits.htm"></a> 3. <A href="/Code/JavaScript/Ajax-Layer/Libraryfordevelopment.htm">Library for development</a> <A href="/Code/JavaScript/Ajax-Layer/Libraryfordevelopment.htm"></a> 4. <A href="/Code/JavaScript/Ajax-Layer/Developmentlibrary.htm">Development library</a> <A href="/Code/JavaScript/Ajax-Layer/Developmentlibrary.htm"></a> 5. <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamiccontent.htm">ajax dynamic content</a> <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamiccontent.htm"></a>

Ajax toolkits

<A href="http://www.wbex.ru/Code/JavaScriptDownload/iafw.zip">iafw.zip( 76 k)</a>

1. <A href="/Code/JavaScript/Ajax-Layer/AJXToolsAJX.htm">AJX Tools (AJX)</a> 2. <A href="/Code/JavaScript/Ajax-Layer/Libraryfordevelopment.htm">Library for development</a> <A href="/Code/JavaScript/Ajax-Layer/Libraryfordevelopment.htm"></a> 3. <A href="/Code/JavaScript/Ajax-Layer/Developmentlibrary.htm">Development library</a> <A href="/Code/JavaScript/Ajax-Layer/Developmentlibrary.htm"></a> 4. <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamiccontent.htm">ajax dynamic content</a> <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamiccontent.htm"></a> 5. <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamicpages.htm">ajax dynamic pages</a> <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamicpages.htm"></a>

AJX Tools (AJX)

   <source lang="html4strict">

/*******************************************************************************

*
* AJX Tools (AJX)
*
* Developers: 
*   - Tales Viglioni (talesviglioni@gmail.ru)
*   - Cristopher Sanches (cristopherms@gmail.ru)
*
* Version: 1.0
* Date: 06/26/2006
* 
* Copyright (c) 2006 T&C.
* All rights reserved.
*
* AJX Tools is distributable under the terms of an GNU Library or 
* Lesser General Public License (LGPL).
*
* http://ajxtools.sourceforge.net/
* 

AJXtools

  |
  +- AJXload()
  |
  +- AJXgetHTTPObject()
  |
  +- AJXstatus()
  |
  +- AJXsetWaitMessage()
  |   
  +- AJXgetWaitMessage()
  |   
  +- AJXsetLoadingMessage()
  |   
  +- AJXgetLoadingMessage()
    

AJXapplication

  |
  +- AJXpopulateCombo()
  |
  +- AJXaddTableRow()
  |
  +- AJXupdateTableRow()
  |
  +- AJXremoveTableRow()
  |   
  +- AJXgetResponseText()   
  |
  +- AJXgetResponseXML()   
  |
  +- AJXautoComplete()      
  |
  +- AJXfillDiv()      
  |
  +- AJXcleanDiv()      
  |
  +- AJXautoComplete()
        
        

AJXutil

  |
  +- AJXfindPosX()
  |
  +- AJXfindPosY()
  |
  +- AJXvalidateRequired()
  |   
  +- AJXgetObjectName()
  |   
  +- AJXgetFormValues()
  |
  +- AJXshowMessage()
  |
  +- AJXexistsCssClass()
  |
  +- AJXtokenizer()
  |   
  +- AJXtrim()
  |   
  +- AJXRTrim()
  |   
  +- AJXLTrim()  
******************************************************************************/
 

/*******************************************************************************

* AJXtools()
* AJX Tools main class
*
******************************************************************************/

function AJXtools() {

  var waitMessage = "";
  var loadingMessage = "";
  var _this = this;
 var util = new AJXutil();
 
 this.AJXresponseXML=null;
 this.AJXresponseText=null;  
 this.AJXload = AJXload;
 this.AJXsetWaitMessage = AJXsetWaitMessage;
 this.AJXgetWaitMessage = AJXgetWaitMessage;
 this.AJXsetLoadingMessage = AJXsetLoadingMessage;
 this.AJXgetLoadingMessage = AJXgetLoadingMessage;
 /**
  * AJXload()
  * Method to load page thru GET or POST form methods.
  *
  * Parameters:
  *   - url: url to submition. (required)
  *   - objAJXapplication: instance of a object to execute the 
  *                        method "nextMethod". (required)
  *   - nextMethod: method of "objAJXapplication" called after 
  *                 send data. (required)
  *   - form: form submited. Case form exists, open method uses POST. 
  *           Otherwise, open method uses GET. (optional)
  *   - isAsync: configure if the call method will execute synchronous (false)
  *              or asynchronous (true). The default value is true. (optional)
  *   - returnXML: configure if the return will load AJXresponseXML (true) or 
  *                AJXresponseText (false). The default value is true. (optional)
  *
  */
 function AJXload(url, objAJXapplication, nextMethod, form, isAsync, returnXML)
 {
    var AJXhttp = AJXgetHTTPObject();  
   var data = null;
   var returnType = null;
   
   if (returnXML==false)
   {
     returnType = "text";
   }
   else
   {
     returnType = "xml";
   }
   if (isAsync != false)
   {
     isAsync = true;
   }
   
   if(form)
   {
     data = util.AJXgetFormValues(form);      
     AJXhttp.open("POST",url,isAsync);
   }
   else
   {
     AJXhttp.open("GET",url,isAsync);
   }  
   
   AJXhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
   util.AJXshowMessage(AJXgetWaitMessage());    
   AJXhttp.send(data);
 
   if (isAsync)
   {
     AJXhttp.onreadystatechange = function() 
       {AJXstatus(AJXhttp, objAJXapplication, nextMethod, isAsync, returnType);};    
   }
   else
   {
     AJXstatus(AJXhttp, objAJXapplication, nextMethod, isAsync, returnType);
   }
 }   
 /**
  * AJXstatus()
  * Verifies the status of the request. 
  *
  * Parameters:
  *   - http: instance of XMLHttpRequest object. (required)
  *   - objExec: instance of a object to execute the 
  *              method "nextMethod". (required)
  *   - methodExec: method of "objExec" called after responseXML. (required)
  *   - isAsync: inform if the call was synchronous (false) or 
  *              asynchronous(true). (required)
  *   - returnType: configure the return to responseText or 
  *                 responseXML. (required)
  *
  */
 function AJXstatus(http, objExec, methodExec, isAsync, returnType)
 {  
   if(http.readyState <= 3)
   {
     util.AJXshowMessage(AJXgetLoadingMessage());
   }      
   
   if(http.readyState == 4)
   {
     if (http.status == 200)
     {
       util.AJXshowMessage("");
       if (returnType=="text")
       {
         _this.AJXresponseText = http.responseText;
       }
       else
       {
         _this.AJXresponseXML = http.responseXML;
       }
       if (isAsync)
       {
         if ((objExec!=null)&&(methodExec!=null))        
         {
           eval("objExec."+methodExec);
         }
         _this.AJXresponseXML = null;
         _this.AJXresponseText = null;
       }
     }
     else
     {
       util.AJXshowMessage("Error code: " + http.status);
     }
   }
 }  
 /**
  * AJXgetHTTPObject() 
  * Create the XMLHttpRequest object.
  * 
  */
 function AJXgetHTTPObject() 
 {
   var xmlhttp;
   // If the user is using Mozilla/Firefox/Safari
   if (window.XMLHttpRequest) 
   {
     xmlhttp = new XMLHttpRequest();    
     xmlhttp.overrideMimeType("text/xml");
   }  
   // If the user is using IE    
   else if (window.ActiveXObject) 
   {
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
   }
   return xmlhttp;
 }  
 /**
  * AJXgetWaitMessage() 
  * Gets the value of waitMessage attribute.
  * 
  */
   function AJXgetWaitMessage()
   {
       if (waitMessage == "")
       {
         AJXsetWaitMessage("Wait...");
       }
       return waitMessage;
   }
 /**
  * AJXsetWaitMessage() 
  * Sets the value of waitMessage attribute.
  * 
  */
   function AJXsetWaitMessage(waitMsg) 
   {
       waitMessage = waitMsg;
   }  
 /**
  * AJXgetLoadingMessage() 
  * Gets the value of loadingMessage attribute.
  * 
  */
   function AJXgetLoadingMessage()
   {
       if (loadingMessage == "")
       {
         AJXsetLoadingMessage("Loading...");
       }
       return loadingMessage;
   }
 /**
  * AJXsetLoadingMessage() 
  * Sets the value of loadingMessage attribute.
  * 
  */
   function AJXsetLoadingMessage(loadingMsg) 
   {
       loadingMessage = loadingMsg;
   }  

} /*******************************************************************************

* AJXapplication()
* AJX Tools application class.
*
******************************************************************************/

function AJXapplication() {

 var AJXexecuting = false;
 var util = new AJXutil();
 var ajx = new AJXtools();
 this.AJXpopulateCombo = AJXpopulateCombo;
 this.AJXaddTableRow = AJXaddTableRow;
 this.AJXupdateTableRow = AJXupdateTableRow;
 this.AJXgetResponseText = AJXgetResponseText;
 this.AJXgetResponseXML = AJXgetResponseXML;
 this.AJXremoveTableRow = AJXremoveTableRow;
 this.AJXfillDiv = AJXfillDiv;
 this.AJXcleanDiv = AJXcleanDiv;
 this.AJXautoComplete = AJXautoComplete;
 /**
  * AJXpopulateCombo()
  * Populate a combo box with the values from a xml element.
  * 
  * Parameters:
  *  - url: url to submition. (required)
  *  - form: submited form if html form method is "post". (optional)
  *   - repeatedElement: xml repeated tag (required)
  *  - comboName: name of combo to populate (required)
  *   - valueTag: xml tag containing the "value" parameter of html
  *          "option" tag (required)
  *   - textTag: xml tag containing the text to combo (required)repeatedElement
  *  - functionAfterExecution: function called after the execution 
  *                of AJXpopulateCombo function (optional)
  *
  * Expected XML element in AJXresponseXML:
  *
  *  <root (repeatedElement*)>
  *    <repeatedElement(valueTag, textTag)>
  *    ...
  *  </root>
  *
  */
 function AJXpopulateCombo(url, form, repeatedElement, comboName, valueTag, textTag, functionAfterExecution)
 {
   if (!util.AJXvalidateRequired(url,repeatedElement, comboName, valueTag, textTag))
   {
     return false;
   }
   if (!AJXexecuting && ajx.AJXresponseXML==null)
   {
     AJXexecuting = true;
     executeMethod = "AJXpopulateCombo(\""+url+"\",\""+form+"\",\""+repeatedElement+"\",\""+comboName+"\",\""+valueTag+"\",\""+textTag+"\",\""+functionAfterExecution+"\");";
     ajx.AJXload(url,this,executeMethod,form);
     AJXexecuting = false;
     executeMethod = "";
   }
   
   if (!AJXexecuting && ajx.AJXresponseXML!=null)
   {
     var opt;
     var XMLelement = ajx.AJXresponseXML.getElementsByTagName(repeatedElement); 
     var cmb = document.getElementsByName(comboName)[0]
     for(j=cmb.length; j >= 0 ; j--) 
     {
       cmb.remove(j);
     }    
     
     for(i=0 ; i < XMLelement.length ; i++) 
     {
       opt = document.createElement("option");
       opt.text = XMLelement[i].getElementsByTagName(textTag)[0].firstChild.data; 
       opt.value = XMLelement[i].getElementsByTagName(valueTag)[0].firstChild.data; 
     
       try 
       {
         cmb.add(opt, null); // standards compliant; doesn"t work in IE
       }
       catch(ex) 
       {
         cmb.add(opt); // IE only
       }    
     }  
     eval(functionAfterExecution);
   }
 }
 
 /**
  * AJXaddTableRow()
  * Add rows in a table with values from a xml element. Each repeated child 
  * represents a table row, and each child in repeated element, represents a 
  * table cell.
  * 
  * Parameters:
  *  - url: url to submition. (required)
  *  - form: submited form if html form method is "post". (optional)
  *   - repeatedElement: xml repeated tag. (required)
  *  - idTable: id of HTML table tag to add row. (required)
  *   - rowsPosition: first position after table headers. (required)
  *  - message: message showed if not found any "repeatedElement" tag. (optional)
  *  - clearTable: case "Y", remove all table rows begining in "rowPosition". (optional)
  *  - functionAfterExecution: function called after execution of AJXaddTableRow() method, if exists some "repeatedElement" tag. (optional)
  *  - functionAlwaysExecuted: function always called after execution of AJXaddTableRow() method. (optional)
  *
  * Expected XML element in AJXresponseXML:
  *
  *  <root (repeatedElement*)>
  *    <repeatedElement(child1, child2, ... ,childN)>
  *    ...
  *  </root>
  *
  */
 function AJXaddTableRow(url, form, repeatedElement, idTable, rowsPosition, message, clearTable, functionAfterExecution, functionAlwaysExecuted)
 {
   if (!util.AJXvalidateRequired(url, repeatedElement, idTable, rowsPosition))
   {
     return false;
   }
   
   if (!AJXexecuting && ajx.AJXresponseXML==null)
   {
     AJXexecuting = true;
     executeMethod = "AJXaddTableRow(\""+url+"\",\""+form+"\",\""+repeatedElement+"\",\""+idTable+"\",\""+rowsPosition+"\",\""+message+"\",\""+clearTable+"\",\""+functionAfterExecution+"\",\""+functionAlwaysExecuted+"\")";
     ajx.AJXload(url,this,executeMethod,form);
     AJXexecuting = false;
     executeMethod = "";
   }
   
   if (!AJXexecuting && ajx.AJXresponseXML!=null)
   {  
     var aTable;
     var aRow;
     var aCell;
     var childXMLelement;
     var XMLelement = ajx.AJXresponseXML.getElementsByTagName(repeatedElement);
     var aTable = document.getElementById(idTable);
     
     if (clearTable == "Y")
     {      
       if (aTable.rows.length > posrowsPosition)
       {
         var aLength = aTable.rows.length
         for(i=rowsPosition ; i < aLength; i++) 
         {          
           aTable.deleteRow(rowsPosition);
         }
       }
     }
 
     if (XMLelement.length == 0)
     {
       if (message != "")
       {
         alert(message);
       }
     }
     else
     {      
       for(i=0 ; i < XMLelement.length ; i++) 
       {
         childXMLelement = XMLelement[i].childNodes;        
         aRow = aTable.insertRow(aTable.rows.length);
         var k = 0;
         for(j=0 ; j < childXMLelement.length ; j++) 
         {
           if (childXMLelement[j].nodeType==1)
           {
             aCell = aRow.insertCell(k);            
             if (childXMLelement[j].firstChild!=null)
             {
               aCell.innerHTML = childXMLelement[j].firstChild.nodeValue;
             }
             else
             {
               aCell.innerHTML = " ";
             }
             k++;
           }
         }
       }
       eval(functionAfterExecution);
     }
     eval(functionAlwaysExecuted);
   }
 }  
 /**
  * AJXupdateTableRow()
  * Update rows in a table with values from a xml element. Each repeated child 
  * represents a table row, and each child in repeated element, represents a 
  * table cell.
  * 
  * Parameters:
  *  - url: url to submition. (required)
  *  - form: submited form if html form method is "post". (optional)
  *   - repeatedElement: xml repeated tag. (required)
  *  - idTable: id of HTML table tag to update row. (required)
  *  - rowKey: table column(s) index(es) used as a unique identifier(s) of a table row.
  *        Case the "key" have more then one column, the values must be separated by commas.
  *        For example: rowKey="2" or rowKey="1,3,5".  
  *  - message: message showed if not found any "repeatedElement" tag. (optional)
  *  - functionAfterExecution: function called after execution of AJXaddTableRow() method, if exists some "repeatedElement" tag. (optional)
  *  - functionAlwaysExecuted: function always called after execution of AJXaddTableRow() method. (optional)
  *
  * Expected XML element in AJXresponseXML:
  *
  *  <root (repeatedElement*)>
  *    <repeatedElement(child1old, child2old, ... ,childNold)>
  *    <repeatedElement(child1new, child2new, ... ,childNnew)>   
  *    ...
  *  </root>
  *
  */   
 function AJXupdateTableRow(url, form, repeatedElement, idTable, rowKey, message, functionAfterExecution, functionAlwaysExecuted)
 {
   if (!util.AJXvalidateRequired(url, repeatedElement, idTable, rowKey))
   {
     return false;
   }
   
   if (!AJXexecuting && ajx.AJXresponseXML==null)
   {
     AJXexecuting = true;
     executeMethod = "AJXupdateTableRow(\""+url+"\",\""+form+"\",\""+repeatedElement+"\",\""+idTable+"\",\""+rowKey+"\",\""+message+"\",\""+functionAfterExecution+"\",\""+functionAlwaysExecuted+"\")";
     ajx.AJXload(url,this,executeMethod,form);
     AJXexecuting = false;
     executeMethod = "";
   }
   
   if (!AJXexecuting && ajx.AJXresponseXML!=null)
   {  
     var aTable;
     var childXMLelement;
     var XMLelement = ajx.AJXresponseXML.getElementsByTagName(repeatedElement);    
     var aTable = document.getElementById(idTable);
     var aIndex;
     var aExecute;
     var aHtml;
     
     if (XMLelement.length == 0)
     {
       if((message!= "undefined") && (message != ""))
       {
         alert(message);
       }
     }
     else
     {    
       aKeys = util.AJXtokenizer(rowKey,",");
       aBiggerKey = 0;
       for(k=0 ; k < aKeys.length ; k++) 
       {  
         if (aKeys[k] > aBiggerKey) 
         {
           aBiggerKey = aKeys[k];
         }
       }
       
       for(i=0 ; i < XMLelement.length ; i+=2) 
       {
         childXMLelement = XMLelement[i].childNodes;
         
         for(j=0 ; j < aTable.rows.length ; j++) 
         {  
           aExecute = false;        
           var k = new Number(0);
           
           if (navigator.appName == "Netscape")
           {
             k=1;
           }
 
           for(y=0 ; y < aKeys.length ; y++) 
           {    
             if (aTable.rows[j].cells.length - 1 >= aBiggerKey)
             {
               if (childXMLelement[(parseInt(aKeys[y],10)+k)].nodeType==1)
               {
                   aHtml = aTable.rows[j].cells[aKeys[y]].innerHTML;
                 aHtml = aHtml.replace(/\n/gi, "");
                 if (util.AJXtrim(aHtml) == childXMLelement[(parseInt(aKeys[y],10)+k)].firstChild.nodeValue)
                 {        
                   aExecute = true;
                   aIndex = j;
                 }
                 else
                 {
                   aExecute = false;
                   aIndex = null;
                 }                
               }
               else
               {
                 k++;
                 y--;
               }
             }
           }
           if (aExecute) 
           {
             childXMLelement = XMLelement[i+1].childNodes;
             var k = new Number(0);
             
             for (x=0 ; x < aTable.rows[aIndex].cells.length; x++)
             {
               if (childXMLelement[x+k].nodeType==1)
               {  
                 
                 aTable.rows[aIndex].cells[x].innerHTML = childXMLelement[x+k].firstChild.nodeValue;
               }
               else
               {
                 k++;
                 x--;
               }
             }            
             aIndex=null;
           }
         }
       }
       eval(functionAfterExecution);
     }
     eval(functionAlwaysExecuted);
   }
 }
 
 /**
  * AJXremoveTableRow()
  * Remove rows from a table with values from a xml element. Each repeated child 
  * represents a table row, and each child in repeated element, represents a 
  * table cell.
  * 
  * Parameters:
  *  - url: url to submition. (required)
  *  - form: submited form if html form method is "post". (optional)
  *   - repeatedElement: xml repeated tag. (required)
  *  - idTable: id of HTML table tag to remove row. (required)
  *  - rowKey: table column(s) index(es) used as a unique identifier(s) of a table row.
  *        Case the "key" have more then one column, the values must be separated by commas.
  *        For example: rowKey="2" or rowKey="1,3,5".  
  *  - message: message showed if not found any "repeatedElement" tag. (optional)
  *  - functionAfterExecution: function called after execution of AJXaddTableRow() method, if exists some "repeatedElement" tag. (optional)
  *  - functionAlwaysExecuted: function always called after execution of AJXaddTableRow() method. (optional)
  *
  * Expected XML element in AJXresponseXML:
  *
  *  <root (repeatedElement*)>
  *    <repeatedElement(child1, child2, ... ,childN)>   
  *    ...
  *  </root>
  *
  */   
 function AJXremoveTableRow(url, form, repeatedElement, idTable, rowKey, message, functionAfterExecution, functionAlwaysExecuted)
 {
   if (!util.AJXvalidateRequired(url, repeatedElement, idTable, rowKey))
   {
     return false;
   }
   
   if (!AJXexecuting && ajx.AJXresponseXML==null)
   {
     AJXexecuting = true;
     executeMethod = "AJXremoveTableRow(\""+url+"\",\""+form+"\",\""+repeatedElement+"\",\""+idTable+"\",\""+rowKey+"\",\""+message+"\",\""+functionAfterExecution+"\",\""+functionAlwaysExecuted+"\")";
     ajx.AJXload(url,this,executeMethod,form);
     AJXexecuting = false;
     executeMethod = "";
   }
   
   if (!AJXexecuting && ajx.AJXresponseXML!=null)
   {
     var aTable;
     var childXMLelement;
     var XMLelement = ajx.AJXresponseXML.getElementsByTagName(repeatedElement);
     var aTable = document.getElementById(idTable);
     var aIndex;
     var aExecute;
     var aHtml;
     
     if (XMLelement.length == 0)
     {
       if((message!= "undefined") && (message != ""))
       {
         alert(message);
       }
     }
     else
     {  
       aKeys = util.AJXtokenizer(rowKey,",");
       aBiggerKey = 0;
       
       for(k=0 ; k < aKeys.length ; k++) 
       {  
         if (aKeys[k] > aBiggerKey) 
         {
           aBiggerKey = aKeys[k];
         }
       }
       
       for(i=0 ; i < XMLelement.length ; i++) 
       {
         childXMLelement = XMLelement[i].childNodes;
 
         for(j=0 ; j < aTable.rows.length ; j++) 
         {
           aExecute = false;
           var k = new Number(0);
           
           if (navigator.appName == "Netscape")
           {
             k=1;
           }
 
           for(y=0 ; y < aKeys.length ; y++) 
           {    
             if (aTable.rows[j].cells.length - 1 >= aBiggerKey)
             {
               if (childXMLelement[(parseInt(aKeys[y],10)+k)].nodeType==1)
               {                
                   aHtml = aTable.rows[j].cells[aKeys[y]].innerHTML;
                 aHtml = aHtml.replace(/\n/gi, "");
                                 
                 if (util.AJXtrim(aHtml) == childXMLelement[(parseInt(aKeys[y],10)+k)].firstChild.nodeValue)
                 {        
                   aExecute = true;
                   aIndex = j;
                 }
                 else
                 {
                   aExecute = false;
                   aIndex = null;
                 }                
               }
               else
               {
                 k++;
                 y--;
               }
             }
           }
 
           if (aExecute) 
           {    
             aTable.deleteRow(aIndex);
             aIndex=null;
           }
         }
       }      
       eval(functionAfterExecution);
     }
     eval(functionAlwaysExecuted);
   }
 }  
 
 /**
  * AJXgetResponseText()
  * Returns the responseText from XMLHttpRequest object
  * 
  * Parameters:
  *  - url: url to submition. (required)
  *  - form: submited form if html form method is "post". (optional)
  *
  */
 function AJXgetResponseText(url, form)
 {
   if (!util.AJXvalidateRequired(url))
   {
     return false;
   }
   
   executeMethod = "";
   ajx.AJXload(url,this,executeMethod,form,false,false);
   return ajx.AJXresponseText;
 }      
 /**
  * AJXgetResponseXML()
  * Returns the responseXML from XMLHttpRequest object
  * 
  * Parameters:
  *  - url: url to submition. (required)
  *  - form: submited form if html form method is "post". (optional)
  *
  */
 function AJXgetResponseXML(url, form)
 {
   if (!util.AJXvalidateRequired(url))
   {
     return false;
   }
   
   executeMethod = "";
   ajx.AJXload(url,this,executeMethod,form,false);
   return ajx.AJXresponseXML;
 }      
 
 /**
  * AJXfillDiv()
  * Fills a DIV tag with responseText from XMLHttpRequest object
  * 
  * Parameters:
  *  - url: url to submition. (required)
  *  - form: submited form if html form method is "post". (optional)
  *  - idDiv: id of tag DIV to fill. (required)   
  *  - appendDiv: if true, append the responseText in DIV tag. Otherwise, 
  *               overwrite the DIV tag with responseText. (optional)
  *
  */
 function AJXfillDiv(url, form, idDiv, appendDiv)
 {
   if (!util.AJXvalidateRequired(url, idDiv))
   {
     return false;
   }
   
   executeMethod = "";
   ajx.AJXload(url,this,executeMethod,form,false,false);
   
   var aDiv = document.getElementById(idDiv);
   
   if (aDiv != null)
   {    
     if (appendDiv!=true)
     {
       aDiv.innerHTML = ajx.AJXresponseText;
     }
     else
     {
       aDiv.innerHTML += ajx.AJXresponseText;
     }        
   }
   else
   {
     alert("AJX Tools: DIV tag not found!");
   }
 }      
 /**
  * AJXcleanDiv()
  * Clean the DIV tag
  * 
  * Parameters:
  *  - idDiv: id of tag DIV to clean. (required)   
  *
  */
 function AJXcleanDiv(idDiv)
 {
   if (!util.AJXvalidateRequired(idDiv))
   {
     return false;
   }    
   
   var aDiv = document.getElementById(idDiv);
   
   if (aDiv != null)
   {    
     aDiv.innerHTML = "";
   }
   else
   {
     alert("AJX Tools: DIV tag not found!");
   }
 }        
 
 /**
  * AJXautoComplete()
  * Fills a DIV tag with responseText from XMLHttpRequest object
  * 
  * Parameters:  
  *  - url: url to submition. (required)
  *  - form: submited form if html form method is "post". (optional)
  *  - fieldName: name of the HTML input text tag. (required)   
  *   - repeatedElement: xml repeated tag. (required)
  *   - textTag: xml tag containing the text to select. (required) 
  *  - evt: reference to the keyboard event.(required)
  *  - userStyle: css style user defined. Cannot be defined the follow 
  *               properties: position, left, width, top, overflow. (optional)
  *         i.e.: userStyle = "border: 1px solid #000000;background:red;"
  *
  */
 function AJXautoComplete(url, form, fieldName, repeatedElement, textTag, evt, userStyle)
 {    
   if (!util.AJXvalidateRequired(url, repeatedElement, fieldName, textTag, evt))
   {
     return false;
   }
     var objName = document.getElementsByName(fieldName)[0];
   var txt = objName.value;
   var T = util.AJXfindPosY(objName) + objName.offsetHeight -1; //top
   var L = util.AJXfindPosX(objName); //left
   var W = objName.offsetWidth -1; //width
   var defaultCss = "position:absolute;left:"+L+";width:"+W+";top:"+T+";border: 1px solid #000000;display:block";  
   var cmb = document.getElementById("AJXselect");
   var childXMLelement;
   var XMLelement;
           
   executeMethod = "";
   ajx.AJXload(url,this,executeMethod,form,false);
   XMLelement = ajx.AJXresponseXML.getElementsByTagName(repeatedElement);
   
   objName = null
     objName = document.getElementsByName(fieldName)[0];
   objName.value = txt;  
   objName.focus();      
   
   if (XMLelement.length!=0)
   {
     if (cmb==null)
     {        
       var objParent = objName.parentNode;
       cmb = document.createElement("select");
       objParent.appendChild(cmb);
       cmb.setAttribute("id", "AJXselect");
       cmb.setAttribute("size", "5");
       cmb.style.cssText=defaultCss;
       cmb.onblur = function()
         {
           destroyCmb();
           objName.focus();
         }
       cmb.onclick = function()
         {
           selection();
           objName.focus();
         }
       cmb.onkeyup = function()
         {
           if (evt.keyCode==13)
           {
             selection();
             objName.focus();
           }      
           if (evt.keyCode==27)
           {
             destroyCmb();
             objName.focus();
           }          
         }
     }
           
     for(j=cmb.length; j >= 0 ; j--) 
     {
       cmb.remove(j);
     }    
           
     for(i=0 ; i < XMLelement.length ; i++) 
     {
       opt = document.createElement("option");
       opt.text = XMLelement[i].getElementsByTagName(textTag)[0].firstChild.data; 
       opt.value = XMLelement[i].getElementsByTagName(textTag)[0].firstChild.data; 
 
       try 
       {
         cmb.add(opt, null); // standards compliant; doesn"t work in IE
       }
       catch(ex) 
       {
         cmb.options.add(opt); // IE only
       }    
     }
   
     if (cmb.style.display == "none")
     {        
       cmb.style.display="block";
     }
     
     cmb.value = "";
 
     if (evt.keyCode==27)
     {
       destroyCmb();
     }
 
     if (evt.keyCode==40)
     {
       cmb.focus();
       cmb.options[0].selected=true;
     }
   }
   else
   {
     destroyCmb();
   }
   
   function selection()
   {      
     var txt = cmb.options[cmb.selectedIndex].value;
     objName.value = txt;
     destroyCmb();
   }    
   
   function destroyCmb()
   {      
       var objName = document.getElementById("AJXselect");
       
     for(j=objName.length; j >= 0 ; j--) 
     {
       objName.remove(j);
     }  
     objName.style.display="none";
   }    
 }          

} /*******************************************************************************

* AJXutil()
* AJX Tools util class.
*
******************************************************************************/

function AJXutil() {

 this.AJXvalidateRequired = AJXvalidateRequired;
 this.AJXgetObjectName = AJXgetObjectName;
 this.AJXgetFormValues = AJXgetFormValues;
 this.AJXshowMessage = AJXshowMessage;
 this.AJXexistsCssClass = AJXexistsCssClass;
 this.AJXtokenizer = AJXtokenizer;
 this.AJXtrim = AJXtrim;
 this.AJXRTrim = AJXRTrim;
 this.AJXLTrim = AJXLTrim;
 this.AJXfindPosX = AJXfindPosX;
 this.AJXfindPosY = AJXfindPosY;
 
 /**
  * AJXfindPosX()
  * Find the horizontal position of a HTML object in relation to the left edge 
  * of the screen.
  *
  * Parameters:
  *   - obj: reference to the object. (required)
  *
  * Return:
  *   - a numeric value with the horizontal position of a HTML object.
  *
  */     
 function AJXfindPosX(obj)
 {      
    var curleft = 0;
    if (obj.offsetParent)
    {
        while (obj.offsetParent)
        {
            curleft += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
    return curleft;
 }
 
 /**
  * AJXfindPosY()
  * Find the vertical position of a HTML object in relation to the top edge 
  * of the screen.
  *
  * Parameters:
  *   - obj: reference to the object. (required)
  *
  * Return:
  *   - a numeric value with the vertical position of a HTML object.
  *
  */       
 function AJXfindPosY(obj)
 {
    var curtop = 0;
    if (obj.offsetParent)
    {
        while (obj.offsetParent)
        {
            curtop += obj.offsetTop;
            obj = obj.offsetParent;
        }
    }
    return curtop;
 }    
 /**
  * AJXvalidateRequired()
  * Verifies if the fields are not null or not empty.
  *
  * Parameters:
  *   - arguments: all required arguments separated by commas. (required)
  *
  * Return:
  *   - true: all required fields are not null and not empty.
  *   - false: exist a required field null or empty.
  *
  */   
 function AJXvalidateRequired()
 {
   for (i=0; i<arguments.length; i++)
   {    
     if ((arguments[i]==null) || 
       ((typeof(arguments[i])!="object")&&(AJXtrim(arguments[i])=="")))
     {
       alert("AJX Tools: Argument required in function " + AJXgetObjectName(AJXvalidateRequired.caller));
       return false;
     }
   }
   return true;
 }
 /**
  * AJXgetObjectName()
  * Returns a object ou function name.
  *
  * Parameters:
  *   - obj: objetct or function to get name. (required)
  *
  * Return:
  *   - String with the name of the function or object.
  *
  */   
 function AJXgetObjectName(obj)
 {
   var name = null;
   var func = null
   
   if (typeof(obj) == "object")
   {
     func = obj.constructor.toString();
   }
   else if (typeof(obj) == "function")
   {
     func = obj;
   }
   
   if (func != null)
   {
     var rule = new RegExp(/function\s+(\w+).*/g);
     var resp = rule.exec(func);
     name = resp[1];
   }    
   return name;
 }
 /**
  * AJXgetFormValues()
  * Transform all values of a form to "QueryString".
  * 
  * Parameters:
  *   - form: name of the submited form.
  *
  * Return:
  *   - string containing a "QueryString" value.
  *
  */
 function AJXgetFormValues(form)
 { 
   var str = ""; 
   for(var i = 0;i < document.forms[form].elements.length;i++)
   { 
     if (document.forms[form].elements[i].type == "checkbox") 
     {
       if (document.forms[form].elements[i].checked)
       {
         str += document.forms[form].elements[i].name + "=" + escape(document.forms[form].elements[i].value) + "&"; 
       }
     }
     else if (document.forms[form].elements[i].type == "select-multiple")
     {
       for(j=0; j < document.forms[form].elements[i].length; j++)
       {
         if (document.forms[form].elements[i].options[j].selected)
         {
           str += document.forms[form].elements[i].name + "=" + escape(document.forms[form].elements[i].options[j].value) + "&"; 
         }
       }      
     }      
     else
     {
       str += document.forms[form].elements[i].name + "=" + escape(document.forms[form].elements[i].value) + "&"; 
     }
   } 
   str = str.substr(0,(str.length - 1)); 
   return str;
 }
 
 /**
  * AJXshowMessage()
  * Create a DIV tag and shows a message. 
  * The DIV tag style can be defined in CSS class named "div.AJXstyleMsg".
  * The default style is: 
  *    div.AJXstyleMsg { 
  *      position:absolute;
  *      right:0px;
  *      top:0px;
  *      color:white;
  *      background-color:red;
  *      font-family:verdana;
  *      font-weight:bold
  *    }
  *
  * Parameters:
  *   - msg: Message to show in DIV tag. (required)
  *
  * Return:
  *   - void
  *
  */
 function AJXshowMessage(msg)
 {
   var defaultCss = "";
   if (AJXexistsCssClass("AJXstyleMsg"))
   {  
     defaultCss = "class=AJXstyleMsg";        
   }
   else
   {
     defaultCss = "style="position:absolute;right:0px;top:0px;color:white;background-color:red;font-family:verdana;font-weight:bold"";
   }
   if (document.getElementById("AJXmessage")==null)
   {
document.getElementsByTagName("body")[0].innerHTML += "
";
   }
   document.getElementById("AJXmessage").innerHTML = msg;
 }  
 
 /**
  * AJXexistsCssClass()
  * Look for a css class in the stylesheets used in the current page.
  *
  * Parameters:
  *   - nameCssClass: name of the css class to find in stylesheets. (required)
  *
  * Return:
  *   - true: the class was found
  *   - false: the class wasn"t found
  *
  */
 function AJXexistsCssClass(nameCssClass)
 {
   var classFound = false;
   if (document.styleSheets.length > 0)
   {
     for (j=0; j < document.styleSheets.length; j++)
     {
       if (navigator.appName == "Netscape")
       {
         objCssRules = document.styleSheets[j].cssRules;        
       }
       else
       {
         objCssRules = document.styleSheets[j].rules;
       }
       for (i=0; i < objCssRules.length; i++)
       {
         if (objCssRules[i].selectorText == nameCssClass)
         {
           classFound = true;
         }
       }          
     }        
   }
   return classFound;
 }  
 
 /**
  * AJXtokenizer()
  * Tokenize a string with the given separator.
  *
  * Parameters:
  *   - str: string to be tokenized (required)
  *   - saparator: string that separate the tokens into str. 
  *                Maximum size of separator is 1. (required)
  *
  * Return:
  *   - Array() containig the tokens
  *
  */  
 function AJXtokenizer(str,separator)
 {
   var tokens = new Array();
   indiceTokens = 0;
   pos = 0;
   fimStr = str.length;
   temToken = false
   for (i=0; i < fimStr; i++)
   {
     if(str.charAt(i) == separator)
     {
       temToken = true;
       tokens[indiceTokens] = str.substring(pos,i);
       pos = i + 1;
       indiceTokens++;
     }
   }
   if (temToken)
   {
     tokens[indiceTokens]=str.substring(pos,fimStr);
   }
   else
   {
     tokens[0] = str.substring(pos,i);
   }
   return tokens;
 }  
 
 /**
  * AJXtrim() 
  * Remove the white spaces before and after a string.
  *
  * Parameters:
  *   - str: string to remove the white spaces. (required)
  *
  * Return:
  *   - string without white spaces in the begining and in the end.
  *
  */
 function AJXtrim(str)
 {
   if(str.length < 1)
   {
     return"";
   }  
   str = AJXRTrim(str);
   str = AJXLTrim(str);
   if(str=="")
   {
     return "";
   }
   else
   {
     return str;
   }
 } 
 /**
  * AJXRTrim()
  * Remove the white spaces after a string.
  *
  * Parameters:
  *   - str: string to remove the white spaces. (required)
  *
  * Return:
  *   - string without white spaces in the end.
  *
  */   
 function AJXRTrim(str)
 {
   var w_space = String.fromCharCode(32);
   var w_space1 = String.fromCharCode(9);
   var v_length = str.length;
   var strTemp = "";
   if(v_length < 0)
   {
     return"";
   }
   var iTemp = v_length -1;
   while(iTemp > -1)
   {
     if((str.charAt(iTemp) != w_space)&&(str.charAt(iTemp) != w_space1))
     {
       strTemp = str.substring(0,iTemp +1);
       break;
     }
     iTemp = iTemp-1;
   } 
   return strTemp;
 } 
 /**
  * AJXLTrim()
  * Remove the white spaces before a string.
  *
  * Parameters:
  *   - str: string to remove the white spaces. (required)
  *
  * Return:
  *   - string without white spaces in the begining.
  *
  */   
 function AJXLTrim(str)
 {
   var w_space = String.fromCharCode(32);
   var w_space1 = String.fromCharCode(9);
   var v_length = str.length;
   var strTemp = "";
   var iTemp = 0;
   if(v_length < 1)
   {
     return "";
   }
   while(iTemp < v_length)
   {
     if((str.charAt(iTemp) != w_space)&&(str.charAt(iTemp) != w_space1))
     {
       strTemp = str.substring(iTemp,v_length);
       break;
     }
     iTemp = iTemp + 1;
   } 
   return strTemp;
 }   
 

}


 </source>
   
  


Development library

<A href="http://www.wbex.ru/Code/JavaScriptDownload/qooxdoo-0.6-rc1-source.zip">qooxdoo-0.6-rc1-source.zip( 7,686 k)</a>

1. <A href="/Code/JavaScript/Ajax-Layer/AJXToolsAJX.htm">AJX Tools (AJX)</a> 2. <A href="/Code/JavaScript/Ajax-Layer/Ajaxtoolkits.htm">Ajax toolkits</a> <A href="/Code/JavaScript/Ajax-Layer/Ajaxtoolkits.htm"></a> 3. <A href="/Code/JavaScript/Ajax-Layer/Libraryfordevelopment.htm">Library for development</a> <A href="/Code/JavaScript/Ajax-Layer/Libraryfordevelopment.htm"></a> 4. <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamiccontent.htm">ajax dynamic content</a> <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamiccontent.htm"></a> 5. <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamicpages.htm">ajax dynamic pages</a> <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamicpages.htm"></a>

Library for development

<A href="http://www.wbex.ru/Code/JavaScriptDownload/thyapi-arara_azul.zip">thyapi-arara_azul.zip( 1,764 k)</a>

1. <A href="/Code/JavaScript/Ajax-Layer/AJXToolsAJX.htm">AJX Tools (AJX)</a> 2. <A href="/Code/JavaScript/Ajax-Layer/Ajaxtoolkits.htm">Ajax toolkits</a> <A href="/Code/JavaScript/Ajax-Layer/Ajaxtoolkits.htm"></a> 3. <A href="/Code/JavaScript/Ajax-Layer/Developmentlibrary.htm">Development library</a> <A href="/Code/JavaScript/Ajax-Layer/Developmentlibrary.htm"></a> 4. <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamiccontent.htm">ajax dynamic content</a> <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamiccontent.htm"></a> 5. <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamicpages.htm">ajax dynamic pages</a> <A href="/Code/JavaScript/Ajax-Layer/ajaxdynamicpages.htm"></a>