PageRenderTime 65ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 1ms

/web/js/utils.js

#
JavaScript | 2677 lines | 2180 code | 70 blank | 427 comment | 333 complexity | 0f8d11c391d4779d68fbd732f2a005b3 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0

Large files files are truncated, but you can click here to view the full file

  1. /*
  2. *************************************************************************
  3. * The contents of this file are subject to the Openbravo Public License
  4. * Version 1.0 (the "License"), being the Mozilla Public License
  5. * Version 1.1 with a permitted attribution clause; you may not use this
  6. * file except in compliance with the License. You may obtain a copy of
  7. * the License at http://www.openbravo.com/legal/license.html
  8. * Software distributed under the License is distributed on an "AS IS"
  9. * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
  10. * License for the specific language governing rights and limitations
  11. * under the License.
  12. * The Original Code is Openbravo ERP.
  13. * The Initial Developer of the Original Code is Openbravo SL
  14. * All portions are Copyright (C) 2001-2006 Openbravo SL
  15. * All Rights Reserved.
  16. * Contributor(s): ______________________________________.
  17. ************************************************************************
  18. */
  19. <!--
  20. var baseFrameServlet = "http://localhost:8880/openbravo/security/Login_FS.html";
  21. var gColorSelected = "#c0c0c0";
  22. var gWhiteColor = "#F2EEEE";
  23. var arrGeneralChange=new Array();
  24. var dateFormat;
  25. var defaultDateFormat = "%d-%m-%Y";
  26. //Array de los números de días de cada mes
  27. daysOfMonth = new Array(
  28. new Array(0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31), //No bisiestos
  29. new Array (0,31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) //Bisiestos
  30. );
  31. /**
  32. * Esta librería JavaScript contiene las funciones y procedimientos básicos que se utilizan en
  33. * todas las páginas html. Son elementos básicos como el posicionamiento del foco en un control
  34. * de la página, control de campos numéricos...
  35. */
  36. var gBotonPorDefecto;
  37. var gEnviado=false;
  38. var arrTeclas=null;
  39. var gAUXILIAR=0;
  40. var gWaitingCallOut=false;
  41. /**
  42. * @name focoPrimerControl
  43. * @format function focoPrimerControl(Formulario, Campo)
  44. * @comment Posiciona el cursor en el primer campo visible de un formulario
  45. *
  46. * @param <b>Formulario</b> - Es un parámetro que puede no existir, pero que indica cúal es el formulario
  47. * donde se encuentra el campo sobre el que queremos posicionar el cursor. En
  48. * caso de no existir este parámetro, se toma el primer formulario de la página. <BR>
  49. * <b>Campo</b> - Nombre del control en el que se quiere posicionar el foco
  50. * @example focoPrimerControl();
  51. */
  52. function focoPrimerControl(Formulario, Campo)
  53. {
  54. var encontrado = false;
  55. if (Formulario==null) Formulario=document.forms[0];
  56. var total = Formulario.length;
  57. for(var i=0;i<total; i++)
  58. {
  59. if ((Formulario.elements[i].type != "hidden") && (Formulario.elements[i].type != "button") && (Formulario.elements[i].type != "submit") && (Formulario.elements[i].type != "image") && (Formulario.elements[i].type != "reset"))
  60. {
  61. if(Campo!=null) {
  62. if (Campo == Formulario.elements[i].name && !Formulario.elements[i].readonly && !Formulario.elements[i].disabled) {
  63. Formulario.elements[i].focus();
  64. encontrado=true;
  65. break;
  66. }
  67. } else if (!Formulario.elements[i].readonly && !Formulario.elements[i].disabled) {
  68. try {
  69. Formulario.elements[i].focus();
  70. encontrado=true;
  71. break;
  72. } catch (ignore) {}
  73. }
  74. }
  75. }
  76. if (encontrado && Formulario.elements[i].type && Formulario.elements[i].type.indexOf("select")==-1)
  77. Formulario.elements[i].select();
  78. }
  79. /**
  80. * @name limpiar
  81. * @format function limpiar(Formulario)
  82. * @comment Borra el contenido de los campos de texto de un formulario
  83. *
  84. * @param <b>Formulario</b> - Toma el valor del formulario donde están los campos que queremos limpiar
  85. * y si no existe, toma el primer formulario de la página
  86. * @example limpiar();
  87. */
  88. function limpiar(Formulario)
  89. {
  90. if (Formulario == null)
  91. Formulario = document.forms[0];
  92. var total = Formulario.length;
  93. for (var i=0;i<total;i++){
  94. if (Formulario.elements[i].type == "text" || Formulario.elements[i].type == "password")
  95. Formulario.elements[i].value = "";
  96. }
  97. }
  98. /**
  99. * @name confirmar
  100. * @format function confirmar(Accion)
  101. * @comment Es la encargada de presentar un mensaje o no, dependiendo de la <b>Accion<b> que se le
  102. * pase. Esta función es utilizada por las funciones que realizan envíos de formularios.
  103. * @param <b>Accion</b> - es un texto que indentifica el <b>Command</b> que se ejecuta.
  104. * @return <b>true</b> - en caso de no tener mensaje asociado a dicho <b>Command</b>, o si el usuario
  105. * ha confirmado el mensaje presentado.<BR>
  106. * <b>false</b> - si el usuario no confirma el mensaje presentado.
  107. */
  108. function confirmar(accion)
  109. {
  110. switch (accion)
  111. {
  112. case 'DELETE': return mensaje(2);
  113. case 'DELETE_RELATION': return mensaje(2);
  114. case 'GUARDAR': return mensaje(3);
  115. default: return true;
  116. }
  117. }
  118. function submitFormGetParams(Command, action) {
  119. var frm = document.forms[0];
  120. frm.action=action + "?Command=" + Command;
  121. var params="";
  122. for (var i=2;arguments[i]!=null;i++) {
  123. params += "&" + arguments[i] + ((arguments[i+1]!=null)?("=" + arguments[i+1]):"");
  124. i++;
  125. }
  126. if (params!="") frm.action += params;
  127. frm.target="_self";
  128. frm.submit();
  129. return true;
  130. }
  131. /**
  132. * @name getParamsScript
  133. * @format function getParamsScript(Formulario)
  134. * @comment Esta función recibe un Formulario en el que existen campos que se quieren enviar y, ella se encarga
  135. * de capturar todos los campos del formulario con sus valores y transformarlos en una cadena de
  136. * parámetros de un método GET para poderlos enviar.
  137. *
  138. * @param <b>Formulario</b> - Es el objeto formulario que se quiere enviar. Este parámetro es obligatorio.
  139. * @example getParamScript(document.forms[0]);
  140. */
  141. function getParamsScript(Formulario) {
  142. if (Formulario==null) return "";
  143. var script="";
  144. var total = Formulario.length;
  145. for (var i=0;i<total;i++) {
  146. if (Formulario.elements[i].type && (Formulario.elements[i].type != "button") && (Formulario.elements[i].type != "submit") && (Formulario.elements[i].type != "image") && (Formulario.elements[i].type != "reset") && (Formulario.elements[i].readonly!="true") && (Formulario.elements[i].name != "Command") && (Formulario.elements[i].name!="") && !Formulario.elements[i].disabled) {
  147. if (Formulario.elements[i].type.toUpperCase().indexOf("SELECT")!=-1 && Formulario.elements[i].selectedIndex!=-1) {
  148. script += ((script=="")?"":"&") + Formulario.elements[i].name + "=" + escape(Formulario.elements[i].options[Formulario.elements[i].selectedIndex].value);
  149. } else if (Formulario.elements[i].type.toUpperCase().indexOf("CHECKBOX")!=-1 || Formulario.elements[i].type.toUpperCase().indexOf("RADIO")!=-1) {
  150. if (radioValue(Formulario.elements[i]) != null) script += ((script=="")?"":"&") + Formulario.elements[i].name + "=" + escape(radioValue(Formulario.elements[i]));
  151. } else if (Formulario.elements[i].value!=null && Formulario.elements[i].value!="") {
  152. script += ((script=="")?"":"&") + Formulario.elements[i].name + "=" + escape(Formulario.elements[i].value);
  153. }
  154. }
  155. }
  156. return script;
  157. }
  158. /**
  159. * @name submitForm
  160. * @format function submitForm(Campo, Valor, Formulario, Comprobar)
  161. * @comment Esta función envía un formulario poniendo un valor que se le pasa en un campo que se
  162. * le indica antes de enviarlo y pudiendo comprobar si ya se había llamado a esta función
  163. * sin haber podido obtener un resultado todavía, es decir, comprobando que si se está
  164. * enviando todavía no permita volver a enviar hasta que no se realice el primer envío.
  165. *
  166. * @param <b>Campo</b> - Un objeto que referencia al campo en el que queremos depositar un valor que
  167. * le pasamos a continuación. <BR>
  168. * <b>Valor</b> - Un string que indica el valor que queremos dejar en el campo que le hemos
  169. * indicado antes. <BR>
  170. * <b>Formulario</b> - Un objeto que referencia al formulario que queremos enviar. Si este
  171. * parámetro se deja a null se entiende que es el formulario primero de la página. <BR>
  172. * <b>Comprobar</b> - Booleano que indica si queremos que controle si ya se está enviando
  173. * este formulario, no realizando varios envíos a la vez. El valor de este parámetro,
  174. * por defecto, es false
  175. *
  176. * @return <b>true</b> - si todo va bien y los datos son enviados correctamente.<BR>
  177. * <b>false</b> - si hay algún problema y los datos no se pueden enviar.
  178. * @example submitForm(document.forms[0].inpCampo, "FIND", null, true);
  179. */
  180. function submitForm(campo, valor, Formulario, bolComprobar, isCallOut) {
  181. if (Formulario == null) Formulario = document.forms[0];
  182. if (isCallOut==null) isCallOut = false;
  183. if (bolComprobar!=null && bolComprobar) {
  184. if (gEnviado==1) {
  185. mensaje(16);
  186. return false;
  187. } else {
  188. gEnviado=1;
  189. if (isCallOut) gWaitingCallOut=true;
  190. campo.value = valor;
  191. Formulario.submit();
  192. }
  193. } else {
  194. if (isCallOut) gWaitingCallOut=true;
  195. campo.value = valor;
  196. Formulario.submit();
  197. }
  198. return true;
  199. }
  200. /**
  201. * @name reloadFunction
  202. * @format function reloadFunction(text)
  203. * @comment Esta función se encarga de retrasar la ejecución del comando que se le pasa por parámetro,
  204. * el cual será llamado al pasar un tiempo determinado. Se utiliza para simular un timer en
  205. * javascript.
  206. *
  207. * @param <b>text</b> - Es una cadena de texto que contiene un comando javascript.
  208. *
  209. * @return <b>ID</b> - Devuelve el identificador del timer para poder cancelarlo en cualquier momento.
  210. * @example reloadFunction("alert('prueba');");
  211. */
  212. function reloadFunction(text) {
  213. return setTimeout(text, 1000);
  214. }
  215. /**
  216. * @name setChangedField
  217. * @format function setChangedField(campo, Formulario)
  218. * @comment Se encarga de marcar cuál ha sido el último campo cambiado para depurar si en una pantalla,
  219. * se han producido cambios. Requiere la existencia de un campo llamado inpLastFieldChanged.
  220. *
  221. * @param <b>campo</b> - Es un objeto que contiene el campo que ha sido modificado. Normalmente colocaremos
  222. * esta función en el onChange del propio campo modificado, por lo que en este parámetro
  223. * pasaremos el objeto this.<BR>
  224. * <b>Formulario</b> - Es el formulario en el que se encuentra el campo inpLastFieldChanged. Si se
  225. * encuentra en el formulario principal de la ventana, no es necesario indicarlo.
  226. *
  227. * @return <b>true</b> - Si todo va bien.<BR>
  228. * <b>false</b> - Si no encuentra el campo inpLastFieldChanged.
  229. * @example onChange="setChangedField(this);return true;"
  230. */
  231. function setChangedField(campo, Formulario) {
  232. if (Formulario==null || !Formulario) Formulario = document.forms[0];
  233. if (Formulario.inpLastFieldChanged==null) return false;
  234. Formulario.inpLastFieldChanged.value = campo.name;
  235. return true;
  236. }
  237. /**
  238. * @name checkForChanges
  239. * @format function checkForChanges(Formulario)
  240. * @comment Esta función comprueba si se han producido cambios en el formulario que se le indique.
  241. * Es necesario que exista un campo llamado inpLastFieldChanged, ya que es sobre este campo
  242. * sobre el que comprueba si existen modificaciones. Esta función es complemento de la función
  243. * setChangedField.
  244. *
  245. * @param <b>Formulario</b> - Es el formulario en el que se encuentra el campo inpLastFieldChanged. Si se
  246. * encuentra en el formulario principal de la ventana, no es necesario indicarlo.
  247. *
  248. * @return <b>true</b> - Si el campo inpLastFieldChanged contiene algún dato y se pulsa OK en el mensaje emergente.<BR>
  249. * <b>false</b> - Si no contiene ningún dato o se pulsa CANCEL en el mensaje emergente.
  250. * @example checkForChanges();
  251. */
  252. function checkForChanges(Formulario) {
  253. if (Formulario==null) Formulario = document.forms[0];
  254. if (inputValue(Formulario.inpLastFieldChanged)!="") {
  255. if (!mensaje(10)) return false;
  256. }
  257. return true;
  258. }
  259. function sendDirectLink(Formulario, columnName, parentKey, url, keyId, tableId, newTarget, bolComprobarCambios) {
  260. if (Formulario == null) Formulario = document.forms[0];
  261. var frmDepuracion = document.forms[0];
  262. var accion = "DEFAULT";
  263. if (bolComprobarCambios==null) bolComprobarCambios = false;
  264. if (arrGeneralChange!=null && arrGeneralChange.length>0 && bolComprobarCambios) {
  265. var strFunction = "sendDirectLink('" + Formulario.name + "', '" + columnName + "', '" + parentKey + "', '" + url + "', '" + keyId + "', '" + tableId + "', " + ((newTarget==null)?"null":"'" + newTarget + "'") + ", " + bolComprobarCambios + ")";
  266. reloadFunction(strFunction);
  267. return false;
  268. }
  269. if (bolComprobarCambios && !checkForChanges(frmDepuracion)) return false;
  270. if (confirmar(accion)) {
  271. Formulario.action = url;
  272. if (newTarget != null) Formulario.target = newTarget;
  273. Formulario.inpKeyReferenceColumnName.value = columnName;
  274. Formulario.inpSecondKey.value = parentKey;
  275. Formulario.inpKeyReferenceId.value = keyId;
  276. Formulario.inpTableReferenceId.value = tableId;
  277. submitForm(Formulario.Command, accion, Formulario, false, false);
  278. }
  279. return true;
  280. }
  281. function dispatchEventChange(target) {
  282. if (!target) return true;
  283. if (!target.type) return true;
  284. if (target.onchange && target.defaultValue && target.defaultValue != inputValue(target)) target.onchange();
  285. else if (target.onblur) target.onblur();
  286. return true;
  287. }
  288. /**
  289. * @name submitCommandForm
  290. * @format function submitCommandForm(Command, Depurar, Formulario, newAction, newTarget, Comprobar, ComprobarCambios, isCallOut)
  291. * @comment Esta es la función que principalmente se utilizará para implementar las operaciones
  292. * a realizar por los botones que pongamos en la página. Su misión es la de enviar un
  293. * formulario poniendo el Command (se trata de un texto que utilizamos para indicar al
  294. * servlet el tipo de operación que queremos que realice o el botón que le ha llamado)
  295. * que indiquemos. Permite hacer una depuración previa, pudiendo cancelar el envío si la
  296. * depuración no es satisfactoria.<BR><BR>
  297. *
  298. * La ejecución de esta función requiere que en el formulario a enviar exista un campo
  299. * oculto que se llame <b>Command</b>, el cual lo utilizará esta función para enviar el
  300. * Command que le indiquemos.
  301. *
  302. * @param <b>Command</b> - Texto que permite al servlet identificar que tipo de operación debe
  303. * realizar o qué botón le ha llamado. <BR>
  304. * <b>Depurar</b> - Booleano que indica si se quiere realizar una depuración antes de enviar
  305. * el formulario. El valor de este campo, por defecto, es false. Si esta opción se pone a
  306. * true, se deberá implementar una función en la propia página que se llame <b>depurar</b>
  307. * y en la que realizaremos las depuraciones pertinentes, devolviendo true o false
  308. * obligatoriamente. Si devolvemos false no se enviará el formulario. Esta función recibe
  309. * como parámetro el <b>Command</b>. <BR>
  310. * <b>Formulario</b> - Un objeto que referencia al formulario que queremos enviar. Si este
  311. * dato se pone null, se entiende que se trata del primer formulario de la página. <BR>
  312. * <b>newAction</b> - Un string que indica la URL de la página a la que queremos enviar el
  313. * formulario. Si se deja a null no se cambia la URL que tenga establecido el formulario
  314. * en su propiedad <b>action</b> <BR>
  315. * <b>newTarget</b> - Un string que indica un nombre de una ventana o frame al que queremos
  316. * enviar el formulario. Se refiere a la propiedad <b>target</b> del formulario. Si esta
  317. * opción no se indica o se deja a null, se mantiene la que ponga en el formulario. <BR>
  318. * <b>Comprobar</b> - Booleano que indica si queremos que controle si ya se ha pulsado este
  319. * botón anteriormente y todavía no ha podido contestar el servidor, evitando que un usuario
  320. * pueda dar varias veces al mismo botón, creyendo que no le ha dado, porque tarda en responder.
  321. * El valor por defecto de este parámetro es false.<BR>
  322. * <b>ComprobarCambios</b> - Booleano que indica si queremos que la función compruebe, previamente,
  323. * si se han producido cambios de datos en la ventana, presentando en tal caso el mensaje emergente
  324. * correspondiente.<BR>
  325. * <b>isCallOut</b> - Booleano que indica si estamos haciendo una llamada a un callout.
  326. *
  327. * @return <b>true</b> - si todo va correctamente y se envían los datos.<BR>
  328. * <b>false</b> - si hay algún problema y los datos no se pueden enviar o se cancela el envío al pulsar
  329. * CANCEL en el mensaje emergente de aviso de cambios en la ventana.
  330. * @example submitCommandForm("FIND", false, null, null, null, true, null, false);
  331. */
  332. function submitCommandForm(accion, bolDepurar, Formulario, newAction, newTarget, bolComprobar, bolComprobarCambios, isCallOut, controlEvt, evt)
  333. {
  334. if (Formulario == null) Formulario = document.forms[0];
  335. if (bolDepurar!=null && bolDepurar==true) if (!depurar(accion, Formulario, "")) return false;
  336. if (bolComprobarCambios==null) bolComprobarCambios = false;
  337. if (isCallOut==null) isCallOut = false;
  338. if (controlEvt==null) controlEvt = false;
  339. if (controlEvt) {
  340. if (!evt) evt = window.event;
  341. var target = (document.layers) ? evt.target : evt.srcElement;
  342. dispatchEventChange(target);
  343. }
  344. if (gWaitingCallOut || (arrGeneralChange!=null && arrGeneralChange.length>0 && bolComprobarCambios)) {
  345. var strFunction = "submitCommandForm('" + accion + "', " + bolDepurar + ", " + Formulario.name + ", " + ((newAction!=null)?("'" + newAction + "'"):"null") + ", " + ((newTarget!=null)?("'" + newTarget + "'"):"null") + ", " + bolComprobar + ", " + bolComprobarCambios + ")";
  346. reloadFunction(strFunction);
  347. return false;
  348. }
  349. if (bolComprobarCambios && !checkForChanges(Formulario)) return false;
  350. if (confirmar(accion)) {
  351. if (newAction != null) Formulario.action = newAction;
  352. if (newTarget != null) Formulario.target = newTarget;
  353. submitForm(Formulario.Command, accion, Formulario, bolComprobar, isCallOut);
  354. }
  355. return true;
  356. }
  357. /**
  358. * @name submitCommandFormParameter
  359. * @format function submitCommandFormParameter(Command, Campo, Valor, Depurar, Formulario,
  360. * newAction, newTarget, Comprobar, ComprobarCambios, isCallOut)
  361. * @comment Esta es la función que principalmente se utilizará para implementar las operaciones
  362. * a realizar por los botones que pongamos en la página, en los casos en los que queramos
  363. * que, además, envíe un parámetro adicional en función del Link que pinche, de forma que
  364. * su aplicación práctica sería para ir al detalle de una línea concreta que de una relación,
  365. * de forma que deberemos indicar la clave de la línea de la que queremos ver su detalle,
  366. * valor que será diferente dependiendo de la línea que elijamos. Su misión es la de enviar
  367. * un formulario poniendo el Command (se trata de un texto que utilizamos para indicar al
  368. * servlet el tipo de operación que queremos que realice o el botón que le ha llamado) que
  369. * indiquemos y el valor del que antes hablábamos en un campo del formulario, campo que debe
  370. * existir y que, por lo general será un campo oculto. Permite hacer una depuración previa,
  371. * pudiendo cancelar el envío si la depuración no es satisfactoria.<BR><BR>
  372. *
  373. * La ejecución de esta función requiere que en el formulario a enviar exista un campo oculto
  374. * que se llame <b>Command</b>, el cual lo utilizará esta función para enviar el Command que
  375. * le indiquemos. También deberá existir el campo en el que queremos guardar el valor clave
  376. * que identifica la línea.
  377. *
  378. * @param <b>Command</b> - Texto que permite al servlet identificar que tipo de operación debe realizar
  379. * o qué botón le ha llamado. <BR>
  380. * <b>Campo</b> - Un objeto que referencia a un campo del formulario en el que queremos que se
  381. * deposite el valor clave que identifica a la línea. <BR>
  382. * <b>Valor</b> - El valor de tipo string que es el valor clave que queremos depositar en el
  383. * campo anterior. <BR>
  384. * <b>Depurar</b> - Booleano que indica si se quiere realizar una depuración antes de enviar
  385. * el formulario. El valor de este campo, por defecto, es false. Si esta opción se pone a true,
  386. * se deberá implementar una función en la propia página que se llame <b>depurar</b> y en la
  387. * que realizaremos las depuraciones pertinentes, devolviendo true o false obligatoriamente.
  388. * Si devolvemos false no se enviará el formulario. Esta función recibe como parámetro el
  389. * <b>Command</b>. <BR>
  390. * <b>Formulario</b> - Un objeto que referencia al formulario que queremos enviar. Si este dato
  391. * se pone null, se entiende que se trata del primer formulario de la página. <BR>
  392. * <b>newAction</b> - Un string que indica la URL de la página a la que queremos enviar el
  393. * formulario. Si se deja a null no se cambia la URL que tenga establecido el formulario en
  394. * su propiedad <b>action</b>. <BR>
  395. * <b>newTarget</b> - Un string que indica un nombre de una ventana o frame al que queremos
  396. * enviar el formulario. Se refiere a la propiedad <b>target</b> del formulario. Si esta opción
  397. * no se indica o se deja a null, se mantiene la que ponga en el formulario. <BR>
  398. * <b>Comprobar</b> - Booleano que indica si queremos que controle si ya se ha pulsado este
  399. * botón anteriormente y todavía no ha podido contestar el servidor, evitando que un usuario
  400. * pueda dar varias veces al mismo botón, creyendo que no le ha dado, porque tarda en responder.
  401. * El valor por defecto de este parámetro es false.<BR>
  402. * <b>ComprobarCambios</b> - Booleano que indica si queremos que la función compruebe, previamente,
  403. * si se han producido cambios de datos en la ventana, presentando en tal caso el mensaje emergente
  404. * correspondiente.<BR>
  405. * <b>isCallOut</b> - Booleano que indica si estamos haciendo una llamada a un callout.
  406. *
  407. * @return <b>true</b> - si todo va correctamente y se envían los datos.<BR>
  408. * <b>false</b> - si hay algún problema y los datos no se pueden enviar o pulsa el boton CANCEL de la
  409. * ventana emergente de comprobación de cambios.
  410. * @example submitCommandFormParameter("FIND", document.forms[0].inpClave, "12", false, null, null, null, true, false);
  411. */
  412. function submitCommandFormParameter(accion, campo, valor, bolDepurar, Formulario, formAction, newTarget, bolComprobar, bolComprobarCambios, isCallOut, controlEvt, evt) {
  413. if (Formulario == null) Formulario = document.forms[0];
  414. if (bolDepurar!=null && bolDepurar==true) if (!depurar(accion, Formulario, valor)) return false;
  415. if (bolComprobarCambios==null) bolComprobarCambios = false;
  416. if (isCallOut==null) isCallOut = false;
  417. if (controlEvt==null) controlEvt = false;
  418. if (controlEvt) {
  419. if (!evt) evt = window.event;
  420. var target = (document.layers) ? evt.target : evt.srcElement;
  421. dispatchEventChange(target);
  422. }
  423. if (gWaitingCallOut || (arrGeneralChange!=null && arrGeneralChange.length>0 && bolComprobarCambios)) {
  424. var strFunction = "submitCommandFormParameter('" + accion + "', " + campo.form.name + "." + campo.name + ", '" + valor + "', " + bolDepurar + ", " + Formulario.name + ", " + ((formAction!=null)?("'" + formAction + "'"):"null") + ", " + ((newTarget!=null)?("'" + newTarget + "'"):"null") + ", " + bolComprobar + ", " + bolComprobarCambios + ", " + isCallOut + ")";
  425. reloadFunction(strFunction);
  426. return false;
  427. }
  428. if (bolComprobarCambios && !checkForChanges(Formulario)) return false;
  429. if (confirmar(accion)) {
  430. campo.value = valor;
  431. if (formAction != null) Formulario.action = formAction;
  432. if (newTarget != null) Formulario.target = newTarget;
  433. submitForm(Formulario.Command, accion, Formulario, bolComprobar, isCallOut);
  434. }
  435. return true;
  436. }
  437. /**
  438. * @name campoNumerico
  439. * @format function campoNumerico(CampoNumerico, Decimales, Negativo)
  440. * @comment Es la función encargada de controlar que los datos introducidos en un campo sean
  441. * numéricos, de tal forma que si no lo son, será la propia función la que lance un mensaje
  442. * de error y posicione el foco en el control. Se nos va a permiter controlar que el número
  443. * que se haya introducido sea un número entero o no, e incluso que sólo sea positivo o no.
  444. *
  445. * @param <b>CampoNumerico</b> - Objeto que referencia el control de la página que queremos depurar.<BR>
  446. * <b>Decimales</b> - Booleano que indica si se admiten números decimales o no. <BR>
  447. * <b>Negativos</b> - Booleano que indica si se admiten números negativos o no.
  448. * @return <b>true</b> - si el contenido del campo es numérico.<BR>
  449. * <b>false</b> - si no es numérico o no cumple alguno de los requisitos especificados.
  450. * @example campoNumerico(document.forms[0].inpImporte, true, false);
  451. * @see @link esNumerico , @link esNumero
  452. */
  453. function campoNumerico(CampoNumerico, bolDecimales, bolNegativo)
  454. {
  455. if (!esNumero(CampoNumerico.value, bolDecimales, bolNegativo))
  456. {
  457. mensaje(4);
  458. CampoNumerico.focus();
  459. CampoNumerico.select();
  460. return false;
  461. }
  462. return true;
  463. }
  464. /**
  465. * @name esNumero
  466. * @format function esNumero(ValorNumerico, Decimales, Negativo)
  467. * @comment Recorre el texto pasado, controlando si todos sus elementos son numéricos o no
  468. *
  469. * @param <b>ValorNumerico</b> - String que contiene el número a depurar.<BR>
  470. * <b>Decimales</b> - Booleano que indica si se admiten números decimales o no. <BR>
  471. * <b>Negativos</b> - Booleano que indica si se admiten números negativos o no.
  472. * @return <b>true</b> - si el contenido del campo es numérico.<BR>
  473. * <b>false</b> - si no es numérico o no cumple alguno de los requisitos especificados.
  474. */
  475. function esNumero(strValorNumerico, bolDecimales, bolNegativo) {
  476. var bolComa = false;
  477. var esNegativo = false;
  478. var i=0;
  479. if (strValorNumerico == null || strValorNumerico=="") return true;
  480. if (strValorNumerico.substring(i, i+1)=="-") {
  481. if (bolNegativo !=null && bolNegativo) {
  482. esNegativo = true;
  483. i++;
  484. } else {
  485. return false;
  486. }
  487. } else if (strValorNumerico.substring(i, i+1)=="+")
  488. i++;
  489. var total = strValorNumerico.length;
  490. for (i=i;i<total;i++) {
  491. if (isNaN(strValorNumerico.substring(i,i+1))) {
  492. if (bolDecimales && strValorNumerico.substring(i,i+1)=="." && !bolComa)
  493. bolComa = true;
  494. else
  495. return false;
  496. }
  497. }
  498. return true;
  499. }
  500. function getArrayValue(data, name, defaultValue) {
  501. if (data==null || data.length<=0) return ((defaultValue!=null)?defaultValue:"");
  502. var total = data.length;
  503. for (var i=0;i<total;i++) {
  504. if (data[i][0]==name) return data[i][1];
  505. }
  506. return ((defaultValue!=null)?defaultValue:"");
  507. }
  508. function addArrayValue(data, name, value, isUrlParameter) {
  509. if (isUrlParameter==null) isUrlParameter=false;
  510. if (data==null || data.length<=0) {
  511. data = new Array();
  512. data[0] = new Array(name, value, (isUrlParameter?"true":"false"));
  513. return data;
  514. }
  515. var total = data.length;
  516. for (var i=0;i<total;i++) {
  517. if (data[i][0]==name) {
  518. data[i][1] = value;
  519. return data;
  520. }
  521. }
  522. data[total] = new Array(name, value, (isUrlParameter?"true":"false"));
  523. return data;
  524. }
  525. function addUrlParameters(data) {
  526. if (data==null || data.length<=0) return "";
  527. var total = data.length;
  528. var text = "";
  529. for (var i=0;i<total;i++) {
  530. if (data[i][2]=="true") text += ((text!=null && text!="")?"&":"") + data[i][0] + "=" + escape(data[i][1]);
  531. }
  532. if (text!=null && text!="") text = "?" + text;
  533. return text;
  534. }
  535. function openNewLink(url, _name, height, width, top, left, checkChanges, target, doSubmit, closeControl, parameters) {
  536. parameters = addArrayValue(parameters, "location", "1");
  537. parameters = addArrayValue(parameters, "scrollbars", "1");
  538. parameters = addArrayValue(parameters, "status", "1");
  539. parameters = addArrayValue(parameters, "menubar", "1");
  540. parameters = addArrayValue(parameters, "toolbar", "1");
  541. parameters = addArrayValue(parameters, "resizable", "1");
  542. return openPopUp(url, _name, height, width, top, left, checkChanges, target, doSubmit, closeControl, parameters);
  543. }
  544. function openPopUp(url, _name, height, width, top, left, checkChanges, target, doSubmit, closeControl, parameters) {
  545. var adds = "";
  546. if (height==null) height = screen.height - 50;
  547. if (width==null) width = screen.width;
  548. if (top==null) top = (screen.height - height) / 2;
  549. if (left==null) left = (screen.width - width) / 2;
  550. if (checkChanges==null) checkChanges = false;
  551. if (closeControl==null) closeControl = false;
  552. if (doSubmit==null) doSubmit = false;
  553. if (checkChanges && !checkForChanges()) return false;
  554. if (url!=null && url!="") url += addUrlParameters(parameters);
  555. if (target!=null && target!="" && target.indexOf("_")!=0) {
  556. var objFrame = eval("parent." + target);
  557. objFrame.location.href=url;
  558. return true;
  559. }
  560. adds = "height=" + height + ", width=" + width + ", left=" + left + ", top=" + top;
  561. if (navigator.appName.indexOf("Netscape")) {
  562. adds += ", alwaysRaised=" + getArrayValue(parameters, "alwaysRaised", "1");
  563. adds += ", dependent=" + getArrayValue(parameters, "dependent", "1");
  564. adds += ", directories=" + getArrayValue(parameters, "directories", "0");
  565. adds += ", hotkeys=" + getArrayValue(parameters, "hotkeys", "0");
  566. }
  567. adds += ", location=" + getArrayValue(parameters, "location", "0");
  568. adds += ", scrollbars=" + getArrayValue(parameters, "scrollbars", "0");
  569. adds += ", status=" + getArrayValue(parameters, "status", "1");
  570. adds += ", menubar=" + getArrayValue(parameters, "menubar", "0");
  571. adds += ", toolbar=" + getArrayValue(parameters, "toolbar", "0");
  572. adds += ", resizable=" + getArrayValue(parameters, "resizable", "1");
  573. if (doSubmit && (getArrayValue(parameters, "debug", false)==true)) {
  574. if (!depurar(getArrayValue(parameters, "Command", "DEFAULT"), null, "")) return false;
  575. }
  576. var winPopUp = window.open((doSubmit?"":url), _name, adds);
  577. if (closeControl) window.onunload = function(){winPopUp.close();}
  578. if (doSubmit) {
  579. submitCommandForm(getArrayValue(parameters, "Command", "DEFAULT"), (getArrayValue(parameters, "debug", false)==true), null, url, _name, target, checkChanges);
  580. }
  581. winPopUp.focus();
  582. return winPopUp;
  583. }
  584. function abrirNuevoBrowser(url, _name, height, width, top, left) {
  585. return openNewLink(url, _name, height, width, top, left, null, null, null, true, null);
  586. }
  587. function abrirExcel(url, _name, checkChanges) {
  588. return openPopUp(url, _name, null, null, null, null, checkChanges, null, null, false, null);
  589. }
  590. function abrirPDF(url, _name, checkChanges) {
  591. return openPopUp(url, _name, null, null, null, null, checkChanges, null, null, false, null);
  592. }
  593. function abrirPDFFiltered(url, _name, checkChanges) {
  594. return openPopUp(url, _name, null, null, null, null, checkChanges, null, true, false, null);
  595. }
  596. function abrirPopUp(url, _name, height, width, closeControl, showstatus) {
  597. if (height==null) height = 250;
  598. if (width==null) width = 230;
  599. return openPopUp(url, _name, height, width, null, null, null, null, null, closeControl, null);
  600. }
  601. function abrirPDFSession(strPagina, strDirectPrinting, strHiddenKey, strHiddenValue, bolComprobarCambios) {
  602. var direct = (strDirectPrinting!="")?"Y":"N";
  603. return submitCommandForm("DEFAULT", false, null, "../businessUtility/PrinterReports.html?inppdfpath=" + escape(strPagina) + "&inpdirectprint=" + escape(direct) + "&inphiddenkey=" + escape(strHiddenKey) + ((strHiddenValue!=null)?"&inphiddenvalue=" + escape(strHiddenValue):""), "frameOculto", null, bolComprobarCambios);
  604. }
  605. function abrirBusqueda(url, _name, tabId, windowName, windowId, checkChanges) {
  606. var parameters = new Array();
  607. parameters = addArrayValue(parameters, "inpTabId", tabId, true);
  608. parameters = addArrayValue(parameters, "inpWindow", windowName, true);
  609. parameters = addArrayValue(parameters, "inpWindowId", windowId, true);
  610. return openPopUp(url, _name, 450, 600, null, null, checkChanges, null, null, true, parameters);
  611. }
  612. function openHelp(windowId, url, _name, checkChanges, height, width, windowType, windowName) {
  613. if (height==null) height = 450;
  614. if (width==null) width = 700;
  615. var parameters = new Array();
  616. parameters = addArrayValue(parameters, "inpwindowId", windowId, true);
  617. parameters = addArrayValue(parameters, "inpwindowType", windowType, true);
  618. parameters = addArrayValue(parameters, "inpwindowName", windowName, true);
  619. return openPopUp(url, _name, height, width, null, null, checkChanges, null, null, true, parameters);
  620. }
  621. function openServletNewWindow(Command, depurar, url, _name, processId, checkChanges, height, width, resizable, hasStatus) {
  622. if (height==null) height = 350;
  623. if (width==null) width = 500;
  624. var parameters = new Array();
  625. parameters = addArrayValue(parameters, "scrollbars", "1");
  626. parameters = addArrayValue(parameters, "debug", depurar, false);
  627. if (processId!=null && processId!="") parameters = addArrayValue(parameters, "inpProcessId", processId, true);
  628. if (Command!=null && Command!="") parameters = addArrayValue(parameters, "Command", Command, false);
  629. return openPopUp(url, _name, height, width, null, null, checkChanges, null, true, true, parameters);
  630. }
  631. function openLink(url, _name, height, width) {
  632. return openNewLink(url, ((_name.indexOf("_")==0)?"":_name), height, width, null, null, null, ((_name.indexOf("_")==0)?_name:""), false, false, null);
  633. }
  634. function editHelp(url, tipo, id, value, height, width) {
  635. if (height==null) height = 500;
  636. if (width==null) width = 600;
  637. var parameters = new Array();
  638. parameters = addArrayValue(parameters, "Command", tipo, true);
  639. parameters = addArrayValue(parameters, "inpClave", value, true);
  640. return openPopUp(url, "HELP_EDIT", height, width, null, null, null, null, false, true, parameters);
  641. }
  642. /**
  643. * @name pulsarTecla
  644. * @format function pulsarTecla(CodigoTecla)
  645. * @comment Esta función es interna y es ejecutada por otras funciones que activan el control de
  646. * eventos en una ventana HTML. Asocian esta función al evento <b>KeyDown</b> de la página,
  647. * controlando así las pulsaciones de teclas en la página. Esta función se encarga de controlar
  648. * la pulsación de la tecla <em>ENTER<em>, para ejecutar una acción por defecto.
  649. *
  650. * @param <b>CodigoTecla</b> - Es el código ASCII de la tecla que se ha pulsado. Este código lo pasa
  651. * el propio controlador de eventos, por lo que no tenemos que preocuparnos de él.
  652. * @return <b>true</b> - en caso de no haber pulsado ninguna de las teclas a controlar.<BR>
  653. * <b>false</b> - si se ha pulsado alguna de las teclas a controlar.
  654. */
  655. function pulsarTecla(CodigoTecla)
  656. {
  657. if (gBotonPorDefecto!=null)
  658. {
  659. var tecla = (!CodigoTecla) ? window.event.keyCode : CodigoTecla.which;
  660. if (tecla == 13)
  661. {
  662. eval(gBotonPorDefecto);
  663. return false;
  664. }
  665. }
  666. return true;
  667. }
  668. /**
  669. * @name porDefecto
  670. * @format function porDefecto(Accion)
  671. * @comment Esta función se encarga de establecer una <b>Accion</b> por defecto en la página, es decir,
  672. * la que se ejecutará al pulsar la tecla <em>ENTER</em>.<BR>
  673. * La <b>Accion</b> se le pasa en formato de texto, pero ha de ser un comando perfectamente
  674. * ejecutable. No es bueno abusar de esta función, porque se pueden mezclar funciones. <BR>
  675. * Es importante saber que en las páginas de tipo frame, esta función es común a los frames,
  676. * por lo que sólo podremos establecer en un frame esta función pero teniendo cuidado de que
  677. * el usuario no pueda ponerse en otro frame pulsando <em>ENTER</em> porque, en tal caso,
  678. * se ejecutará este comando igualmente, pudiéndo producirse algún error no deseado.
  679. *
  680. * @param <b>Accion</b> - es el comando que se debe ejecutar en caso de pulsar <em>ENTER</em>.
  681. * @example porDefecto("alert('Hola')");
  682. */
  683. function porDefecto(accion)
  684. {
  685. gBotonPorDefecto = accion;
  686. if (!document.all)
  687. {
  688. document.captureEvents(Event.KEYDOWN);
  689. }
  690. document.onkeydown=pulsarTecla;
  691. return true;
  692. }
  693. /**
  694. * @name Teclas
  695. * @format function Teclas(tecla, evento, campo, teclaAuxiliar)
  696. * @comment Esta función sirve para ir formando el array de teclas para cada pantalla.<BR>
  697. * Cada tecla que queremos utilizar debe contener esta estrtuctura.
  698. *
  699. * @param <b>tecla</b> - es la tecla que se debe pulsar en formato texto. No diferencia entre
  700. * mayúsculas y minúsculas.<BR>
  701. * <b>evento</b> - Se trata de la acción que queremos que se ejecute cuando se pulse
  702. * dicha tecla. Se le debe pasar el código a ejecutar como si fuese un
  703. * strring.<BR>
  704. * <b>campo</b> - Se indica aquí el nombre de un campo de la ventana. Sirve para decir
  705. * que el evento se deverá ejecutar sólo si nos encontramos en ese campo.
  706. * Si este parámetro se deja null, estamos indicando que se trata de un evento
  707. * global, es decir, para toda la ventana.
  708. * <b>teclaAuxiliar</b> - Sus valores serán, <em>CTRL</em>, <em>ALT</em> ó <em>null</em>,
  709. * donde <em>CTRL</em> indica que se debe pulsar CONTROL a la que
  710. * la tecla que se ha especificado, <em>ALT</em> indica que se debe
  711. * pulsar ALTERNATIVA a la vez que la tecla indicada y <em>null</em>
  712. * indica que no se debe pulsar ninguna tecla a la vez.
  713. * @example Teclas("A", "alert('Hola')", "inpcBpartnerId_D", null);
  714. */
  715. function Teclas(tecla, evento, campo, teclaAuxiliar) {
  716. this.tecla = tecla;
  717. this.evento = evento;
  718. this.campo = campo;
  719. this.teclaAuxiliar = teclaAuxiliar;
  720. }
  721. /**
  722. * @name obtenerCodigoTecla
  723. * @format function obtenerCodigoTecla(codigo)
  724. * @comment Se trata de una función interna que devuelve el código de la tecla que corresponde
  725. * a la letra pasada.
  726. *
  727. * @param <b>codigo</b> - Es el texto que corresponde a la letra de la que queremos obtener su
  728. * codigo de tecla.
  729. * @return el código de la tecla de la letra pasada.
  730. * @example obtenerCodigoTecla("A");
  731. */
  732. function obtenerCodigoTecla(codigo) {
  733. if (codigo==null) return 0;
  734. else if (codigo.length==1) return codigo.toUpperCase().charCodeAt(0);
  735. switch (codigo.toUpperCase()) {
  736. case "BACKSPACE": return 8;
  737. case "TAB": return 9;
  738. case "ENTER": return 13;
  739. case "SPACE": return 32;
  740. case "DELETE": return 46;
  741. case "INSERT": return 45;
  742. case "END": return 35;
  743. case "HOME": return 36;
  744. case "REPAGE": return 33;
  745. case "AVPAGE": return 34;
  746. case "LEFTARROW": return 37;
  747. case "RIGHTARROW": return 39;
  748. case "UPARROW": return 38;
  749. case "DOWNARROW": return 40;
  750. case "NEGATIVE": return 189;
  751. case "NUMBERNEGATIVE": return 109;
  752. case "DECIMAL": return 190;
  753. case "NUMBERDECIMAL": return 110;
  754. case "ESCAPE": return 27;
  755. case "F1": return 112;
  756. case "F2": return 113;
  757. case "F3": return 114;
  758. case "F4": return 115;
  759. case "F5": return 116;
  760. case "F6": return 117;
  761. case "F7": return 118;
  762. case "F8": return 119;
  763. case "F9": return 120;
  764. case "F10": return 121;
  765. case "F11": return 122;
  766. case "F12": return 123;
  767. case "P": return 80;
  768. /* case "shiftKey": return 16;
  769. case "ctrlKey": return 17;
  770. case "altKey": return 18;*/
  771. default: return 0;
  772. }
  773. }
  774. /**
  775. * @name controlTecla
  776. * @format function controlTecla(CodigoTecla)
  777. * @comment Se encarga de controlar la pulsación de teclas en una página, comprobando que
  778. * no se pulse ninguna de las teclas especificadas en el array global arrTeclas, en
  779. * cuyo caso procede a ejecutar la acción asociada a dicha tecla en dicho array.
  780. *
  781. * @param <b>CodigoTecla</b> - Es el código de la tecla pulsada por el usuario.
  782. * @return <b>true</b> - en caso de no pulsarse ninguna de las teclas del array.<BR>
  783. * <b>false</b> - en caso de pulsarse una tecla del array arrTeclas.
  784. */
  785. function controlTecla(CodigoTecla) {
  786. if (arrTeclas==null || arrTeclas.length==0) return true;
  787. if (!CodigoTecla) CodigoTecla = window.event;
  788. var tecla = window.event ? CodigoTecla.keyCode : CodigoTecla.which;
  789. var target = (CodigoTecla.target?CodigoTecla.target: CodigoTecla.srcElement);
  790. //var target = (document.layers) ? CodigoTecla.target : CodigoTecla.srcElement;
  791. var total = arrTeclas.length;
  792. for (var i=0;i<total;i++) {
  793. if (arrTeclas[i]!=null && arrTeclas[i]) {
  794. if (tecla == obtenerCodigoTecla(arrTeclas[i].tecla)) {
  795. if (arrTeclas[i].teclaAuxiliar==null || arrTeclas[i].teclaAuxiliar=="" || arrTeclas[i].teclaAuxiliar=="null") {
  796. if (arrTeclas[i].campo==null || (target!=null && target.name!=null && isIdenticalField(arrTeclas[i].campo, target.name))) {
  797. var eventoTrl = replaceEventString(arrTeclas[i].evento, target.name, arrTeclas[i].campo);
  798. eval(eventoTrl);
  799. return false;
  800. }
  801. } else if (arrTeclas[i].campo==null || (target!=null && target.name!=null && isIdenticalField(arrTeclas[i].campo, target.name))) {
  802. if (arrTeclas[i].teclaAuxiliar=="ctrlKey" && CodigoTecla.ctrlKey && !CodigoTecla.altKey && !CodigoTecla.shiftKey) {
  803. var eventoTrl = replaceEventString(arrTeclas[i].evento, target.name, arrTeclas[i].campo);
  804. eval(eventoTrl);
  805. return false;
  806. } else if (arrTeclas[i].teclaAuxiliar=="altKey" && !CodigoTecla.ctrlKey && CodigoTecla.altKey && !CodigoTecla.shiftKey) {
  807. var eventoTrl = replaceEventString(arrTeclas[i].evento, target.name, arrTeclas[i].campo);
  808. eval(eventoTrl);
  809. return false;
  810. } else if (arrTeclas[i].teclaAuxiliar=="shiftKey" && !CodigoTecla.ctrlKey && !CodigoTecla.altKey && CodigoTecla.shiftKey) {
  811. var eventoTrl = replaceEventString(arrTeclas[i].evento, target.name, arrTeclas[i].campo);
  812. eval(eventoTrl);
  813. return false;
  814. }
  815. }
  816. }
  817. }
  818. }
  819. return true;
  820. }
  821. function isIdenticalField(nombreArray, nombreActual) {
  822. if (nombreArray.substring(nombreArray.length-1)=="%") return (nombreActual.indexOf(nombreArray.substring(0, nombreArray.length-1))==0);
  823. else return (nombreArray == nombreActual);
  824. }
  825. function replaceEventString(eventoJS, inputname, arrayName) {
  826. eventoJS = ReplaceText(eventoJS, "@inputname@", inputname);
  827. if (arrayName!=null && arrayName!="" && arrayName.substring(arrayName.length-1)=="%") {
  828. var endname = inputname.substring(arrayName.length-1);
  829. eventoJS = ReplaceText(eventoJS, "@endinputname@", endname);
  830. }
  831. return eventoJS;
  832. }
  833. /**
  834. * @name activarControlTeclas
  835. * @format function activarControlTeclas()
  836. * @comment Es la encargada de activar el controlador de pulsación de teclas para la página.<BR>
  837. * Esta función se deberá activar tras haber definido el array de teclas global en dicha
  838. * página, es decir, <em>arrTeclas</em>.
  839. *
  840. * @example onLoad="activarControlTeclas();"
  841. */
  842. function activarControlTeclas() {
  843. if (arrTeclas==null || arrTeclas.length==0) return true;
  844. var agt=navigator.userAgent.toLowerCase();
  845. /* if (agt.indexOf('gecko') != -1) {
  846. document.releaseEvents(Event.KEYDOWN);
  847. }
  848. if (agt.indexOf('gecko') != -1)
  849. document.captureEvents(Event.KEYDOWN);*/
  850. document.onkeydown=controlTecla;
  851. return true;
  852. }
  853. /**
  854. * @name rellenarComboHijo
  855. * @format function rellenarComboHijo(combo, arrayDatos, padre, Selected, sinBlanco)
  856. * @comment Esta función se encarga de rellenar un combo de datos, a partir de un array que se le pasa,
  857. * buscando los elementos que contengan la clave padre indicada.
  858. *
  859. * @param <b>combo</b> - Es un objeto que identifica el combo a rellenar.<BR>
  860. * <b>arrayDatos</b> - Es un array con los datos que compondrán el combo. Este array debe estar
  861. * compuesto por los siguientes campos en orden:<BR>
  862. * <ol>
  863. * <li>Campo clave que representa el padre o elemento de agrupación de datos</li>
  864. * <li>Clave de cada elemento</li>
  865. * <li>Texto a presentar en el combo para cada elemento</li>
  866. * <li>Booleano que indica si se debe seleccionar o no</li>
  867. * </ol>.<BR>
  868. * <b>padre</b> - Es la clave del padre para buscar los elementos comunes a presentar.<BR>
  869. * <b>Selected</b> - Booleano que indica si se debe contemplar el último campo del array para seleccionar
  870. * elementos dentro del nuevo array. Si este campo es null o false, no es necesario
  871. * implementar el último elemento del array de datos.<BR>
  872. * <b>sinBlanco</b> - Booleano que indica si se debe añadir o no un elemento en blanco. Para los combos
  873. * en los que se puede no elegir ningún elemento. Por defecto es false.
  874. *
  875. * @return Devuelve <b>true</b> si todo va bien y, si no, devuelve <b>false</b>.
  876. * @example rellenarComboHijo(document.frmMain.inpCombo, arrDatos, '12', true, true);
  877. */
  878. function rellenarComboHijo(combo, arrayDatos, padre, bolSelected, sinBlanco) {
  879. var i, value="";
  880. for (i = combo.options.length;i>=0;i--)
  881. combo.options[i] = null;
  882. i=0;
  883. if (sinBlanco==null || !sinBlanco)
  884. combo.options[i++] = new Option("", "");
  885. if (arrayDatos==null) return false;
  886. var total = arrayDatos.length;
  887. for (var j=0;j<total;j++) {
  888. if (arrayDatos[j][0]==padre) {
  889. combo.options[i] = new Option(arrayDatos[j][2], arrayDatos[j][1]);
  890. if (bolSelected!=null && bolSelected && arrayDatos[j][3]=="true") {
  891. value = arrayDatos[j][1];
  892. combo.options[i].selected = true;
  893. }
  894. else combo.options[i].selected = false;
  895. i++;
  896. }
  897. }
  898. return value;
  899. }
  900. /**
  901. * @name layer
  902. * @format function layer(Span, Texto, esId)
  903. * @comment Esta función permite introducir un texto en objeto span, div o layer. Su finalidad es la
  904. * de poder cambiar texto en una página HTML de forma dinámica sin que el texto deba estar en
  905. * un campo de formulario.
  906. *
  907. * @param <b>Span</b> - Objeto que referencia a un span, div o layer de la página o el id de uno de
  908. * esos objetos que exista en la página. <BR>
  909. * <b>Texto</b> - Texto que queremos que ponga en el span, div o layer. Si ponemos "", entonces,
  910. * lo deja vacío. <BR>
  911. * <b>esID</b> - Booleano que indica a la función si el primer parámetro que se le ha pasado es
  912. * el id (true) o el objeto (false).
  913. * @example layer("idSpan", "HOLA", true);
  914. */
  915. function layer(nodo, strTexto, esId, isAppend)
  916. {
  917. if (strTexto==null)
  918. strTexto = "";
  919. if (isAppend==null) isAppend=false;
  920. if (document.layers)
  921. {
  922. if (esId!=null && esId)
  923. nodo = document.layers[nodo];
  924. if (nodo==null) return;
  925. nodo.document.write(strTexto);
  926. nodo.document.close();
  927. }
  928. else if (document.all)
  929. {
  930. if (esId!=null && esId)
  931. nodo = document.all[nodo];
  932. if (nodo==null) return;
  933. //nodo.innerHTML = '';
  934. try {
  935. if (isAppend) {
  936. strTexto = ((nodo.innerHTML==null)?"":nodo.innerHTML) + strTexto;
  937. isAppend = false;
  938. }
  939. nodo.innerHTML = strTexto;
  940. } catch (e) {
  941. if (isAppend) {
  942. strTexto = ((nodo.outterHTML==null)?"":nodo.outterHTML) + strTexto;
  943. isAppend = false;
  944. }
  945. nodo.outterHTML = strTexto;
  946. }
  947. nodo=null;
  948. }
  949. else if (document.getElementById)
  950. {
  951. if (esId!=null && esId)
  952. nodo = document.getElementById(nodo);
  953. if (nodo==null) return;
  954. var range = document.createRange();
  955. range.setStartBefore(nodo);
  956. var domfrag = range.createContextualFragment(strTexto);
  957. while (nodo.hasChildNodes())
  958. {
  959. nodo.removeChild(nodo.lastChild);
  960. }
  961. nodo.appendChild(domfrag);
  962. nodo=null;
  963. }
  964. }
  965. function readLayer(nodo, esId) {
  966. if (document.layers) {
  967. if (esId!=null && esId) nodo = document.layers[nodo];
  968. if (nodo==null) return "";
  969. return getChildText(nodo);
  970. } else if (document.all) {
  971. if (esId!=null && esId) nodo = document.all[nodo];
  972. if (nodo==null) return "";
  973. try {
  974. return nodo.innerHTML;
  975. } catch (e) {
  976. return nodo.outterHTML;
  977. }
  978. } else if (document.getElementById) {
  979. if (esId!=null && esId) nodo = document.getElementById(nodo);
  980. if (nodo==null) return "";
  981. return getChildText(nodo);
  982. }
  983. return "";
  984. }
  985. function getChildText(nodo) {
  986. if (nodo==null) return "";
  987. if (nodo.data) return nodo.data;
  988. else return getChildText(nodo.firstChild);
  989. }
  990. /**
  991. * @name rellenarCombo
  992. * @format function rellenarCombo(Combo, ArrayDatos, Selected, sinBlanco)
  993. * @comment Rellena un <b>Combo</b> con los valores del <b>ArrayDatos</b>. Admite que se ponga un
  994. * valor seleccionado en el <b>Combo</b>, que será el que se indique como tal en el
  995. * <b>ArrayDatos</b>.
  996. *
  997. * @param <b>Combo</b> - referencia a un objeto del tipo combo, que es el que queremos rellenar con
  998. * los valores del <b>ArrayDatos</b>. <BR>
  999. * <b>ArrayDatos</b> - es un Array que contiene los valores que queremos que aparezcan en el
  1000. * <b>Combo</b>. Su formato es (value, texto, selected), donde <em>valor</em> es el value que
  1001. * tendrá en <b>Combo</b>, <em>texto</em> es el texto que se verá en la lista desplegable y
  1002. * <em>selected</em> es un campo que tendrá el valor <strong>true</strong> o
  1003. * <strong>false</strong>, dependiendo de si queremos que ese registro aparezca…

Large files files are truncated, but you can click here to view the full file