core-jgi/org.adempiere.webstore/wstore.js

449 lines
12 KiB
JavaScript

/****************************************************************************
* Compiere (c) Jorg Janke - All rights reseverd
* $Id: wstore.js,v 1.5 2006/05/23 22:39:03 mdeaelfweald Exp $
*
* Web Store Scripts
***************************************************************************/
var mandatory = "Enter mandatory:";
/**
* Is field empty ?
* Returns true if field is empty
*/
function isEmpty (value)
{
if (value == null)
return true;
if (value == "")
return true;
for (var i = 0; i < value.length; i++)
{
var c = value.charAt(i);
if ((c != ' ' && c != '\n' && c != '\t'))
return false;
}
return true;
}
function checkCreditCard(field)
{
window.alert(field.name + "=" + field.value);
return true;
}
function checkExpDate(field)
{
window.alert(field.name + "=" + field.value);
return true;
}
function checkABA (field)
{
window.alert(field.name + "=" + field.value);
return true;
}
function checkBAcct (field)
{
window.alert(field.name + "=" + field.value);
return true;
}
function checkChknum (field)
{
window.alert(field.name + "=" + field.value);
return true;
}
function checkDL (field)
{
window.alert(field.name + "=" + field.value);
return true;
}
function checkField (field)
{
window.alert(field.name + "=" + field.value);
return true;
}
/**
* Test mandatory fields for lookup
*/
function checkLookup (field)
{
window.alert (field);
var f = field.form;
window.alert (f);
if (!isEmpty(f.EMAIL.value) && !isEmpty(f.password.value))
return true;
var msg = mandatory;
if (isEmpty(f.EMAIL.value))
mandatory += "\n - " + f.EMAIL.title;
if (isEmpty(f.password.value))
mandatory += "\n - " + f.password.title;
window.alert(mandatory);
return false;
}
var statusInfo = '';
/****************************************************************************
* Check form
* - onSubmit="submitForm(this, new Array ('Name','..'));"
*/
function checkForm (formObj, requiredFields)
{
statusInfo += 'checkForm:' + formObj.name + '[' + requiredFields.length + ']';
if (formObj.nodeName == 'FORM')
{
if (formObj.Submit)
{
formObj.Submit.disabled=true;
statusInfo += '(' + formObj.Submit.name + ')';
}
}
else
{
formObj = formObj.form;
if (formObj == null | formObj.nodeName != 'FORM')
{
alert ('invalid submitter');
return false;
}
statusInfo += '->' + formObj.name;
}
window.status=statusInfo;
var alertMsg = "";
// check required fields
if (requiredFields)
{
for (i=0; i<requiredFields.length; i++)
{
formElemLength = eval ("formObj." + requiredFields[i] + ".value.length");
if (formElemLength == 0)
alertMsg += "- " + requiredFields[i] + "\n";
}
}
// show Error Message
if (alertMsg.length)
{
if (formObj.Submit)
formObj.Submit.disabled=false;
alertMsg = mandatory + "\n" + alertMsg;
alert (alertMsg);
return false;
}
// Switch on processing
if (document.getElementById('submitDiv'))
{
document.getElementById('submitDiv').style.display='none';
document.getElementById('processingDiv').style.display='inline';
}
//
statusInfo += ' done - ';
// window.status=statusInfo;
return true;
} // submitForm
/**
* Pop up Window
*/
function popUp(url)
{
sealWin=window.open(url,"win",'toolbar=0,location=0,directories=0,status=1,menubar=1,scrollbars=1,resizable=1,width=500,height=450');
self.name = "mainWin";
}
/**
* Javascript Query String functionality
*/
this.queryString = new Array();
if(this.location)
{
var index = (this.location+"").indexOf("?");
if(index != -1)
{
var qs = (this.location+"").substring(index+1);
var qsArray = qs.split("&");
for(var i=0; i<qsArray.length; i++)
{
var keyValue = qsArray[i];
index = keyValue.indexOf('=');
if(index != -1)
{
queryString[unescape(keyValue.substring(0,index))]=unescape(keyValue.substring(index+1));
}
}
}
}
/**
* Multiplex Windows OnLoad
*/
onLoadListeners = new Array();
addOnLoadListener=function(listener)
{
onLoadListeners[onLoadListeners.length]=listener;
}
window.onload=function()
{
for(var i=0; i<onLoadListeners.length; i++)
{
var listener = onLoadListeners[i];
listener.call();
}
}
AJAX = new Array(); // namespace declaration
/**
* AJAX Status Notification
*/
AJAX.displayStatus=function(message)
{
document.getElementById("status").innerHTML = message;
document.getElementById("status").style.display=("inline");
}
AJAX.hideStatus=function()
{
document.getElementById("status").style.display=("none");
}
AJAX.timeoutStatus=function(message, timeout)
{
AJAX.displayStatus(message);
setTimeout("AJAX.hideStatus()", timeout);
}
/**
* AJAX: Derived from 'Ajax in Action'
*/
AJAX.READY_STATES=new Array("UNITIALIZED","LOADING","LOADED","INTERACTIVE","COMPLETE");
AJAX.READY_STATE_UNINITIALIZED=0;
AJAX.READY_STATE_LOADING=1;
AJAX.READY_STATE_LOADED=2;
AJAX.READY_STATE_INTERACTIVE=3;
AJAX.READY_STATE_COMPLETE=4;
AJAX.AjaxLoader=function(url, onload, onerror, HttpMethod, HttpParams)
{
this.url = url;
this.request = null;
this.onload = onload;
this.onerror=(onerror)?onerror:this.defaultError;
this.HttpMethod = (HttpMethod)?HttpMethod:"GET";
this.HttpParams = null;
if(HttpParams != null)
{
for(var key in HttpParams)
{
if(this.HttpParams == null)
this.HttpParams = "";
else
this.HttpParams = this.HttpParams + "&";
this.HttpParams = this.HttpParams + key + "=" + HttpParams[key];
}
}
this.loadXMLDoc(url);
}
AJAX.AjaxLoader.prototype={
loadXMLDoc:function(url)
{
var loader=this;
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
//alert("Permission UniversalBrowserRead denied.");
}
try{
loader.request = new XMLHttpRequest();
}catch(e1){
try{
loader.request = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e2){
try{
loader.request = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e3){
alert("AJAX Not Supported!");
}
}
}
if(!loader.request)
{
AJAX.displayStatus("Unable to create XMLHttpRequest");
return;
}
try{
AJAX.displayStatus("Loading...");
this.request.onreadystatechange=function(){
loader.onReadyState.call(loader);
}
if( (loader.HttpParams != null) && (loader.HttpMethod == 'GET'))
{
url = url + "?" + loader.HttpParams;
loader.HttpParams = null;
}
loader.request.open(loader.HttpMethod, url, true);//true is asynchronous
loader.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
loader.request.send(loader.HttpParams);
AJAX.hideStatus();
}catch(err){
AJAX.timeoutStatus("ERROR...", 3000);
loader.onerror.call(loader);
}
},
onReadyState:function()
{
var request=this.request;
var ready=request.readyState;
if(ready != AJAX.READY_STATE_COMPLETE) return;
var httpStatus=request.status;
if(httpStatus==200 || httpStatus==0)
{
this.onload.call(this);
}else{
this.onerror.call(this);
}
},
defaultError:function()
{
alert("error fetching data!"
+"\n\nreadyState: "+this.request.readyState
+"\nstatus: "+AJAX.READY_STATES[this.request.status]+" ["+this.request.status+"]"
+"\nheaders: " + this.request.getAllResponseHeaders()
);
}
}
/**
* Change height of floating pieces
*/
function resizeContent()
{
var menu = document.getElementById("menu");
var content = document.getElementById("content");
var vendor = document.getElementById("vendorUse");
var main = document.getElementById("main");
// determine tallest
var height = Math.max(menu.offsetHeight, Math.max(content.offsetHeight, vendor.offsetHeight));
// stretch to fit
if(menu.offsetHeight != height)
menu.style.height=height+"px";
// hack to ensure that padding, border, et al are taken into account
if(menu.offsetHeight > height)
menu.style.height = height - (menu.offsetHeight - height) + "px";
if(content.offsetHeight != height)
content.style.height=height+"px";
// hack to ensure that padding, border, et al are taken into account
if(content.offsetHeight > height)
content.style.height = height - (content.offsetHeight - height) + "px";
if(vendor.offsetHeight != height)
vendor.style.height = height+"px";
// hack to ensure that padding, border, et al are taken into account
if(vendor.offsetHeight > height)
vendor.style.height = height - (vendor.offsetHeight - height) + "px";
if(main.offsetHeight != height)
main.style.height = height+"px";
// hack to ensure that padding, border, et al are taken into account
if(main.offsetHeight > height)
main.style.height = height - (main.offsetHeight - height) + "px";
}
addOnLoadListener(resizeContent);
function updateSelect(ajax, xmlTagName, selectId)
{
// alert("updateSelect("+xmlTagName+","+selectId+"): " + ajax.request.responseText);
var xml = ajax.request.responseXML;
var error = xml.getElementsByTagName("error")[0];
if(error)
{
AJAX.timeoutStatus(error.textContent, 3000);
return;
}
var xmlOptions = xml.getElementsByTagName(xmlTagName)[0];
if(!xmlOptions)
{
AJAX.timeoutStatus("Unable to read response", 3000);
return;
}
// first we remove existing entries
var htmlSelect = document.getElementById(selectId);
while(htmlSelect.options.length > 0)
{
htmlSelect.removeChild(htmlSelect.options[0]);
}
for(var i=0; i<xmlOptions.childNodes.length; i++)
{
var xmlOption = xmlOptions.childNodes[i];
var attrs = xmlOption.attributes;
if(!attrs) continue; // otherwise Firefox bails with more children than IE
var htmlOption = document.createElement("option");
var attrId = attrs.getNamedItem('id');
if(attrId != null) htmlOption.setAttribute('value', attrId.value);
var attrSelected = attrs.getNamedItem('selected');
if(attrSelected != null) htmlOption.setAttribute('selected', 'selected');
var name = xmlOption.firstChild.data;
htmlOption.appendChild(document.createTextNode(name));
htmlSelect.appendChild(htmlOption);
}
}
/**
* Location
*/
function changeCountry(countrySelectId)
{
var countrySelect = document.getElementById(countrySelectId);
var countryOption = countrySelect.options[countrySelect.selectedIndex];
var countryId = countryOption.attributes.getNamedItem('value').value;
/**
* call locationServlet
* param: cmd = 'regions'
* param: country = countryId
*
* get back:
* <regions country='countryId'>
* <region id='regionID'>AL</region>
* <region id='regionID'>AK</region>
* <region id='regionID' selected='true'>OR</region>
* </regions>
*/
var params = new Array();
params['cmd']='regions';
params['country']=countryId;
//params['selected']=regionId;
var loader = new AJAX.AjaxLoader("locationServlet", changeCountryCallback, null, "GET", params);
}
function changeCountryCallback()
{
updateSelect(this, "regions", "ID_C_Region_ID");
}