AJX Tools (AJX)
/*******************************************************************************
*
* AJX Tools (AJX)
*
* Developers:
* - Tales Viglioni (talesviglioni@gmail.com)
* - Cristopher Sanches (cristopherms@gmail.com)
*
* 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 += "<div id=AJXmessage "+defaultCss+"></div>";
}
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;
}
}
Related examples in the same category