/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ var mx, my; var ACTIVATED_LOOKUP = null; var LOOKUP_DIV = null; var INITIALLY_COLLAPSED = null; var COLLAPSE_SEQUENCE_NUMBER = 1999; var target = null; var target2 = null; var targetW = null; var lookups = []; function getViewNameWithSeparator(view_name) { var sep = "?"; if (view_name.indexOf("?") >= 0) { sep = "&"; } return view_name + sep; } function lookup_error(str_message) { var CommonErrorMessage2 = getJSONuiLabel("CommonUiLabels", "CommonErrorMessage2"); showErrorAlert(CommonErrorMessage2, str_message); } /******************************************************************************* * Lookup Context Sensitive Help for Webhelp ******************************************************************************/ function lookup_help(serverroot, viewName, webapp, locale, viewWidth, viewHeight) { var locale = "_" + locale.substring(0,2) var hasLocale = hasHelpForLocale(webapp, locale); if (hasLocale==false){ alert("Help is not available for this language. Opening Help in English"); locale = "_en" } // Check for available screens when all screens are not supported if (webapp=="accounting"){ isAccounting = isAccountingHelpScreen(viewName); if (isAccounting==false){ alert("Help is not available for this screen. Opening Main Help Screen"); viewName="ACCOUNTING_main" } } if (webapp=="projectmgr"){ isProjectmgr = isProjectmgrHelpScreen(viewName); if (isProjectmgr==false){ alert("Help is not available for this screen. Opening Main Help Screen"); viewName="projectmgr_main " } } if (webapp=="catalog"){ isCatalog = isCatalogHelpScreen(viewName); if (isCatalog==false){ alert("Help is not available for this screen. Opening Main Help Screen"); viewName="catalog_main" } } var serverRoot=serverroot.slice(serverroot.lastIndexOf("//"),serverroot.lastIndexOf(":")); var url = "http:" + serverRoot + ":8080/ofbizhelp/" + webapp + locale + "/content/" + viewName + ".html"; var windowName = "helpWindow"; var resizable = "resizable=yes"; var menubar = "menubar=yes"; var toolbar = "toolbar=yes"; var scrollbars = "scrollbars=yes" window.open(url, windowName, 'resizable,menubar,toolbar,scrollbars,width=750,height=750,left=0,top=0'); //event.preventDefault(); //helpWindow.focus(); } function isAccountingHelpScreen(viewName){ var accountingHelpScreens = [ "accounting_main", "accounting_findInvoices", "accounting_findPayments", "accounting_FindPaymentGroup", "accounting_FindGatewayResponses", "accounting_FindPaymentGatewayConfig", "accounting_FindBillingAccount", "accounting_FinAccountMain", "accounting_FindTaxAuthority", "accounting_FindAgreement", "accounting_ListFixedAssets", "accounting_FindGlobalGlAccount", "accounting_ListCompanies" ]; var result=false; jQuery.each(accountingHelpScreens, function() { if (viewName==this){ result=true;} }); return result; } function isProjectmgrHelpScreen(viewName){ var projectmgrHelpScreens = [ "projectmgr_EditProject_main", "projectmgr_EditSkillTypes", "projectmgr_FindProject", "projectmgr_FindResource", "projectmgr_FindTask", "projectmgr_FindTimeSheet", "projectmgr_main", "projectmgr_MyTasks", "projectmgr_MyTimesheet", "projectmgr_projectView", "projectmgr_RequestList", "projectmgr_EditProject" ]; var result=false; jQuery.each(projectmgrHelpScreens, function() { if (viewName==this){ result=true;} }); return result; } function isCatalogHelpScreen(viewName){ var catalogHelpScreens = [ "catalog_main", "catalog_FindCatalog", "catalog_FindCategory", "catalog_FindProduct", "catalog_EditFeatureCategories", "catalog_FindProductPromo", "catalog_FindPriceRules", "catalog_FindProductStore", "catalog_ListParentProductStoreGroup", "catalog_EditKeywordThesaurus", "catalog_FindReviews", "catalog_FindProductConfigItems", "catalog_FindSubscription", "catalog_ListShipmentMethodTypes", "catalog_Imagemanagement" ]; var result=false; jQuery.each(catalogHelpScreens, function() { if (viewName==this){ result=true;} }); return result; } function hasHelpForLocale(webapp, locale){ var webappLocale = webapp + locale var helpLocals = [ "accounting_en", "humanres_en", "projectmgr_en", "manufacturing_en", "manufacturing_nl", "manufacturing_de", "catalog_en" ]; var result=false; jQuery.each(helpLocals, function() { if (webappLocale==this){ result=true;} }); return result; } //End context sensitive help function lookup_popup1(view_name, form_name, viewWidth, viewheight) { var obj_lookupwindow = window.open(getViewNameWithSeparator(view_name) + 'formName=' + form_name + '&presentation=' + this.presentation + '&id=' + this.id, '_blank', 'width=' + viewWidth + ',height=' + viewheight + ',scrollbars=yes,status=no,resizable=yes,top=' + my + ',left=' + mx + ',dependent=yes,alwaysRaised=yes'); obj_lookupwindow.opener = window; obj_lookupwindow.focus(); } function lookup_popup2(view_name) { var argString = ""; if (this.args !== null) { if (this.args.length > 2) { var i; for (i = 2; i < this.args.length; i++) { argString += "&parm" + (i - 3) + "=" + this.args[i]; } } } var obj_lookupwindow = window.open(getViewNameWithSeparator(view_name) + 'presentation=' + this.presentation + '&id=' + this.id + argString, '_blank', 'width=900,height=700,scrollbars=yes,status=no,resizable=yes,top=' + my + ',left=' + mx + ',dependent=yes,alwaysRaised=yes'); obj_lookupwindow.opener = window; obj_lookupwindow.focus(); } function fieldLookup1(obj_target, args, presentation) { this.args = args; this.presentation = presentation; // passing methods this.popup = lookup_popup1; this.popup2 = lookup_popup2; // validate input parameters if (!obj_target) { return lookup_error("Error calling the field lookup: no target control specified"); } if (obj_target.value === null) { return lookup_error("Error calling the field lookup: parameter specified is not valid target control"); } targetW = obj_target; } function fieldLookup2(obj_target, obj_target2, args, presentation) { this.args = args; this.presentation = presentation; // passing methods this.popup = lookup_popup1; this.popup2 = lookup_popup2; // validate input parameters if (!obj_target) { return lookup_error("Error calling the field lookup: no target control specified"); } if (obj_target.value === null) { return lookup_error("Error calling the field lookup: parameter specified is not valid target control"); } targetW = obj_target; // validate input parameters if (!obj_target2) { return lookup_error("Error calling the field lookup: no target2 control specified"); } if (obj_target2.value === null) { return lookup_error("Error calling the field lookup: parameter specified is not valid target2 control"); } target2 = obj_target2; } function call_fieldlookup3(target, target2, viewName, presentation) { var fieldLookup = new fieldLookup2(target, target2, arguments, presentation); fieldLookup.popup2(viewName); } function call_fieldlookup(target, viewName, formName, viewWidth, viewheight) { var fieldLookup = new fieldLookup1(target); if (!viewWidth) { viewWidth = 350; } if (!viewheight) { viewheight = 200; } fieldLookup.popup(viewName, formName, viewWidth, viewheight); } function call_fieldlookup2(target, viewName, presentation) { var fieldLookup = new fieldLookup1(target, arguments, presentation); fieldLookup.popup2(viewName); } function CollapsePanel(link, areaId) { var container, liElement; container = jQuery(areaId); liElement = jQuery(link).up('li'); liElement.removeClassName('expanded'); liElement.addClassName('collapsed'); Effect.toggle(container, 'appear'); } function initiallyCollapse() { if ((!LOOKUP_DIV) || (INITIALLY_COLLAPSED != "true")) { return; } var i, j, childEle, childElements, ul, slTitleBar, slTitleBars = LOOKUP_DIV.getElementsByClassName('screenlet-title-bar'); for (i in slTitleBars) { slTitleBar = slTitleBars[i]; ul = slTitleBar.firstChild; if ((typeof ul) != 'object') { continue; } childElements = ul.childNodes; for (j in childElements) { if (childElements[j].className === 'expanded' || childElements[j].className === 'collapsed') { break; } } childEle = childElements[j].firstChild; new CollapsePanel(childEle, 'lec' + COLLAPSE_SEQUENCE_NUMBER); break; } } function initiallyCollapseDelayed() { setTimeout("initiallyCollapse()", 400); } /******************************************************************************* * Lookup Object ******************************************************************************/ var Lookup = function(options) { var _newInputBoxId, _lookupId, _inputBox, _lookupContainer, _backgroundCloseClickEvent; options = { requestUrl : options.requestUrl || "", inputFieldId : options.inputFieldId || "", dialogTarget : options.dialogTarget || "", dialogOptionalTarget : options.dialogOptionalTarget || "", formName : options.formName || "", width : options.width || "620", height : options.height || "500", position : options.position || "topleft", modal : options.modal || "true", ajaxUrl : options.ajaxUrl || "", showDescription : options.showDescription || "", presentation : options.presentation || "layer", defaultMinLength : options.defaultMinLength || "", defaultDelay : options.defaultDelay || "", args : options.args || "" } function _init() { _lookupId = GLOBAL_LOOKUP_REF.createNextKey(); _modifyContainer(); _createAjaxAutoComplete(); _lookupContainer = jQuery("#" + _lookupId); var dialogOpts = _createDialogOptions(_lookupContainer); // init Dialog and register // create an object with all Lookup Informationes that are needed var dialogRef = _lookupContainer.dialog(dialogOpts); // setting up global variabels, for external access this.inputBoxId = _inputBox.id; this.lookupId = _lookupId; this.formName = options.formName; this.target = null; this.presentation = options.presentation; this.showDescription = (options.showDescription == "true") ? true : false; if (options.dialogOptionalTarget != null) { this.target2 = null; } this.prevLookup = null; this.dialogRef = dialogRef; // write external settings in global window manager GLOBAL_LOOKUP_REF.setReference(_lookupId, this); _addOpenEvent(dialogRef); } function _modifyContainer() { _inputBox = document.getElementById(options.inputFieldId); _newInputBoxId = _lookupId + "_" + options.inputFieldId; _inputBox.id = _newInputBoxId; var parent = _inputBox.parentNode; var link = document.createElement('A'); link.href = "javascript:void(0);"; link.id = _lookupId + "_button"; parent.appendChild(link); var hiddenDiv = document.createElement("DIV"); hiddenDiv.id = _lookupId; hiddenDiv.css = "{display: none;}"; hiddenDiv.title = ""; parent.appendChild(hiddenDiv); } function _createAjaxAutoComplete() { if (options.ajaxUrl != "") { // write the new input box id in the ajaxUrl Array options.ajaxUrl = options.ajaxUrl.replace(options.ajaxUrl.substring(0, options.ajaxUrl.indexOf(",")), _newInputBoxId); new ajaxAutoCompleter(options.ajaxUrl, (options.showDescription == "true") ? true : false, options.defaultMinLength, options.defaultDelay, options.formName); } } function _createDialogOptions(_lookupContainer) { var positioning = _positioning(); var dialogOpts = { modal : (options.modal == "true") ? true : false, bgiframe : true, autoOpen : false, height : parseInt(options.height), width : parseInt(options.width), position : positioning, draggable : true, resizeable : true, open : _dialogOpen, close : _dialogClose }; return dialogOpts; } function _positioning() { var positioning = null; if (options.position == "topleft") { positioning = [ 'left', 'top' ]; } else if (options.position == "topcenter") { positioning = [ 'center', 'top' ]; } else if (options.position == "topright") { positioning = [ 'right', 'top' ]; } else if (options.position == "center") { positioning = 'center'; } else if (options.position == "left") { positioning = 'left'; } else if (options.position == "right") { positioning = 'right'; } else { positioning = [ 'left', 'top' ]; } return positioning; } function _dialogOpen(event, ui) { waitSpinnerShow(); _lookupContainer.empty(); var queryArgs = "presentation=" + options.presentation; if (typeof options.args == "object" && jQuery.isArray(options.args)) { for ( var i = 0; i < options.args.length; i++) { queryArgs += "&parm" + i + "=" + jQuery(options.args[i]).val(); } } _lookupChaining(); _addCloseEventForClickingOnBackgroundLayer(); // load lookup data from server jQuery.ajax({ type : "POST", url : options.requestUrl, data : queryArgs, timeout : AJAX_REQUEST_TIMEOUT, cache : false, dataFilter : function(data, dataType) { waitSpinnerHide(); return data; }, success : function(data) { _lookupContainer.html(data); new ButtonModifier(_lookupId).modifyLookupLinks(); }, error : function(xhr, reason, exception) { if (exception != 'abort') { alert("An error occurred while communicating with the server:\n\n\nreason=" + reason + "\n\nexception=" + exception); } location.reload(true); } }); } function _lookupChaining() { /* * set up the window chaining if the ACTIVATED_LOOKUP var is set there * have to be more than one lookup, before registrating the new lookup * we store the id of the old lookup in the preLookup variable of the * new lookup object. I.e. lookup_1 calls lookup_8, the lookup_8 object * need a reference to lookup_1, this reference is set here */ var prevLookup = null if (ACTIVATED_LOOKUP) { prevLookup = ACTIVATED_LOOKUP; } _activateLookup(_lookupId); GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).prevLookup = prevLookup; } function _activateLookup(newAl) { if (ACTIVATED_LOOKUP != newAl) { ACTIVATED_LOOKUP = newAl; } } function _addCloseEventForClickingOnBackgroundLayer() { _backgroundCloseClickEvent = function() { if (ACTIVATED_LOOKUP && ACTIVATED_LOOKUP == _lookupId) { GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).dialogRef.dialog("close"); } } jQuery(".ui-widget-overlay").click(_backgroundCloseClickEvent); } function _dialogClose() { jQuery(".ui-widget-overlay").unbind("click", _backgroundCloseClickEvent) var prevLookup = null; if (ACTIVATED_LOOKUP) { prevLookup = GLOBAL_LOOKUP_REF.getReference(ACTIVATED_LOOKUP).prevLookup; } if (prevLookup) { _activateLookup(prevLookup); } else { ACTIVATED_LOOKUP = null; } } function _addOpenEvent(dialogReference) { jQuery("#" + _lookupId + "_button").click(function() { dialogReference.dialog("open"); GLOBAL_LOOKUP_REF.getReference(_lookupId).target = jQuery(options.dialogTarget); if (options.dialogOptionalTarget != null) { GLOBAL_LOOKUP_REF.getReference(_lookupId).target2 = jQuery(options.dialogOptionalTarget); } }); } return { init : _init } }; /******************************************************************************* * Lookup Counter Object ******************************************************************************/ var FieldLookupCounter = function() { this.refArr = {}; this.setReference = function(key, ref) { // if key doesn't exist in the array and var itm; for (itm in this.refArr) { if (itm == key) { prefix = key.substring(0, key.indexOf("_")); key = prefix + "_" + key; this.refArr["" + key + ""] = ref; return this.refArr[key]; } } this.refArr["" + key + ""] = ref; return this.refArr[key]; }; this.getReference = function(key) { // when key does not exist return null? return this.refArr[key] != null ? this.refArr[key] : null; }; this.getLastReference = function() { return (this.countFields() - 1) + "_lookupId"; } this.createNextKey = function() { return this.countFields() + "_lookupId"; }; this.countFields = function() { var count = 0; jQuery.each(this.refArr, function(itm) { count++; }); return count; }; this.removeReference = function(key) { // deletes the Array entry (doesn't effect the array length) delete this.refArr[key]; }; }; var GLOBAL_LOOKUP_REF = new FieldLookupCounter(); /******************************************************************************* * Button Modifier Object ******************************************************************************/ var ButtonModifier = function(lookupDiv) { function _modifyLookupLinks() { if (!lookupDiv) { return; } _modifyCollapseable(); _modifySubmitButton(); _modifyPagination(); _modifyResultTable(); } function _modifyCollapseable() { var slTitleBars = jQuery("#" + lookupDiv + " .screenlet-title-bar"); jQuery.each(slTitleBars, function(index) { var slTitleBar = slTitleBars[index]; var ul = slTitleBar.firstChild; if ((typeof ul) != 'object') { return true; } var childElements = ul.childNodes; for (j in childElements) { if (childElements[j].className == 'expanded' || childElements[j].className == 'collapsed') { break; } } _getNextCollapseSeq(); var childEle = childElements[j].firstChild; childEle.setAttribute('onclick', "javascript:toggleScreenlet(this, 'lec" + COLLAPSE_SEQUENCE_NUMBER + "', 'true', 'Expand', 'Collapse');"); childEle.href = "javascript:void(0);" jQuery(slTitleBar).next('div').attr('id', 'lec' + COLLAPSE_SEQUENCE_NUMBER); }); } function _getNextCollapseSeq() { COLLAPSE_SEQUENCE_NUMBER++; return COLLAPSE_SEQUENCE_NUMBER; } function _modifySubmitButton() { var lookupForm = jQuery("#" + lookupDiv + " form:first"); // set new form name and id var oldFormName = lookupForm.attr("name"); lookupForm.attr("name", "form_" + lookupDiv); lookupForm.attr("id", "form_" + lookupDiv); lookupForm = jQuery("#form_" + lookupDiv); // set new links for lookups var newLookups = jQuery("#" + lookupDiv + " .field-lookup"); var formAction = lookupForm.attr("action"); // remove the form action lookupForm.attr("action", ""); var input = jQuery("#" + lookupDiv + " input[type=submit]").css({ display : "block" }); // remove the original input button and replace with a new one var txt = input.attr("value"); (input.parent()).append(jQuery("