449 lines
12 KiB
JavaScript
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");
|
|
} |