PageSourceSearch

https://www.baenegocios.com/tools/form.js?

js baenegocios.com collected 2026-10-02 03:47:10 UTC 16,502 bytes, 406 lines download raw bytes

1// Javascript Form Validator
2var vsmlang;						// Define el idioma en que se muestran los mensajes de error.
3var vsmfSubmitted = false;			// Flag que indica si fue ejecutado el submit.
4var vsmfOnSubmitHandle = 'alert';	// Función llamada cuando se produce un error en un elemento del formulario al hacer submit.
5var vsmfOnBlurHandle = null;		// Función llamada cuando se produce un error en un elemento del formulario al perder el foco. 
6var vsmfOnFocusError = null;		// Función llamada cuando se produce un error al querer enfocar el campo que produjo el error. 
7var vsmfProcesses = 0;				// Flag que indica la cantidad de procesos de validación pendiente. Incluye los llamados AJAX + vsmSubmit;
8var vsmfErrorDisplayed = false;		// Flag que indica si ya se mostró un error.
9var vsmfForm = null;				// Contiene el objeto tipo FORM con el formulario validado. En caso de que el submit deba hacerse asincronico al finalizar un llamado AJAX.
10var vsmfElement = null;				// Contiene el objeto tipo INPUT con el último elemento validado.
11
12function vsmRequireValidation() {
13	// Llamado en los inputs que requieren validación
14	if(!vsmfSubmitted) vsmfErrorDisplayed = false;
15}
16
17function vsmSubmit(frm, lang, onSubmitHandle, onBlurHandle) {
18	// Define el idioma
19	lang = lang.toLowerCase();
20	if (lang != 'en' && lang !='pt' && lang !='es') {vsmlang='en';} else {vsmlang=lang;}
21	// Resetea las variables
22	vsmfForm = frm;
23	vsmfErrorDisplayed = '';
24	vsmfProcesses = 1;
25	vsmfSubmitted = true;
26	// Define los handlers
27	if(onSubmitHandle != undefined) vsmfOnSubmitHandle = onSubmitHandle;
28	if(onBlurHandle != undefined) vsmfOnBlurHandle = onBlurHandle;
29	// Desactiva el botón de submit
30	vsmSubmitButtonEnabled(false);
31	// Recorre los elementos del formulario y los valida
32    
33	for(var index=0;index<frm.elements.length;index++) {
34		var el= frm.elements[index];
35		if(!el.type) continue;
36		if(el.onblur && el.onblur !== "") el.onblur();
37		if(vsmfErrorDisplayed) return false;
38	}
39    
40	vsmfProcesses-=1;
41    if(vsmfProcesses==0 && vsmfSubmitted) {return true;} else {return false;}
42}
43
44function vsmSubmitButtonEnabled(value) {
45	// Activa o desactiva el botón de submit
46	var frm = vsmfForm;
47	for(var index= 0; index < frm.elements.length;index++)
48		if(frm.elements[index].type == 'submit' || frm.elements[index].type == 'image') frm.elements[index].disabled= !value;
49}
50
51function vsmFocusElement(element) {
52	// Intenta hacer foco en el elemento del formulario
53	try {
54		element.focus(); 
55	} catch (error) {
56		if(vsmfOnFocusError) eval(vsmfOnFocusError+'()');
57	}
58	// Determina si el elemento informa que el destaque de error debe hacerse sobre otro elemento a través del atributo highlight
59	var obj;
60	var highlight = element.getAttribute('highlight');
61	if(highlight) obj = document.getElementById(highlight);
62	if(!obj) obj = element;
63	if(obj.className.indexOf('vsmformerror') == -1) obj.className+= ' vsmformerror';
64}
65
66function vsmFieldDescription(fld) { 
67	// Devuelve la descripción del campo
68	if(fld.title) return fld.title;
69	if(fld.id && document.getElementsByTagName) {
70		for(var i= 0, lbl= document.getElementsByTagName('LABEL'); i < lbl.length; i++)
71			if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
72		for(var i= 0, lbl= document.getElementsByTagName('label'); i < lbl.length; i++)
73			if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
74	}
75	return fld.name;
76}
77
78function vsmTrim(str) {
79	return str.replace(/^\s*|\s*$/g,"");
80}
81
82function vsmAjaxValidation(fld, url) {
83	// Dispara una validación ajax
84	if(vsmfSubmitted) vsmfProcesses+=1;
85	if(!vsmfErrorDisplayed && (vsmfSubmitted || vsmfOnBlurHandle)) vsm.ajaxCall(url, 'vsmAjaxValidationOK("'+fld.id+'")', 'vsmAjaxValidationError("'+fld.id+'")');
86}
87
88function vsmAjaxValidationOK(response, fldid) {
89    if(response.length) document.getElementById(fldid).value = response;
90	if(vsmfSubmitted) {
91		vsmfProcesses-=1;
92		// Si no quedan llamados ajax pendientes envia el formulario
93		if(vsmfProcesses==0) vsmfForm.submit();
94	} 
95}
96
97function vsmAjaxValidationError(response, fldid) {
98	var fld = document.getElementById(fldid);
99	if(vsmfSubmitted) vsmfProcesses-=1;
100    // response devuelve un array json con value (nuevo valor del campo) y error mensaje de error
101    var e= eval('(' + response + ')');
102    if(e['value']) fld.value = e['value'];
103    if(e['error']) vsmfShowError(fld, e['error']);
104}
105
106function vsmfShowError(fld,errorMsg) {
107    
108	if(!vsmfErrorDisplayed) {
109		vsmfErrorDisplayed = true;
110		vsmfElement = fld;
111		if(vsmfSubmitted) {
112			if(vsmfOnSubmitHandle) eval(vsmfOnSubmitHandle+"(errorMsg)");
113			vsmFocusElement(vsmfElement);
114			vsmSubmitButtonEnabled(true);
115			vsmfSubmitted=false;
116		} else {
117			if(vsmfOnBlurHandle) eval(vsmfOnBlurHandle+"(errorMsg)");
118		}
119	}
120}
121
122function vsmOnInput(fld) {
123    if(fld.value) {
124        vsm.removeClass(fld.parentNode, 'empty');   
125    } else {
126        vsm.addClass(fld.parentNode, 'empty');
127    }
128}
129
130/* Funciones de validación */
131function vsmRequired(fld) {
132	if(fld.disabled) return;
133	switch(fld.type) {
134		case 'checkbox': 
135			if(fld.checked) return true;
136			break;
137		case 'radio':
138			var radios = fld.form[fld.name];
139			for(var i=0;i<radios.length;i++) {
140				if (radios[i].checked) return true;
141			}
142			break;
143		case 'select-one':
144			if(fld.selectedIndex!=-1 && fld.options[fld.selectedIndex].value!='') return true;
145			break;
146		default:
147			if(fld.value.length) return true;
148			break;
149	}
150	switch (vsmlang) {
151		case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' no puede ser omitido.'; break;
152		case 'pt': var errorMsg= 'Deve preencher o campo '+vsmFieldDescription(fld)+'.'; break;
153		default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field cannot be left blank.'; break;
154	}
155	vsmfShowError(fld, errorMsg);
156}
157
158function vsmConfirmation(fld, confirmfld) {
159	if(fld.disabled) return;
160	if(fld.value != confirmfld.value) {
161		switch (vsmlang) {
162			case 'es': var errorMsg= 'Los campos '+vsmFieldDescription(fld)+' y '+vsmFieldDescription(confirmfld)+' deben ser idénticos.'; break; 
163			case 'pt': var errorMsg= 'Os campos '+vsmFieldDescription(fld)+' e '+vsmFieldDescription(confirmfld)+' devem ser iguais.'; break; 
164			default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field does not match the '+vsmFieldDescription(confirmfld)+' field.'; break; 
165		}
166		vsmfShowError(fld, errorMsg);
167	}
168}
169
170function vsmLength(fld, min, max) { 
171	if(fld.disabled) return;
172	var len= fld.value.length;
173	if(min > -1 && len < min) {
174		switch (vsmlang) {
175			case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' debe tener al menos '+min+ ' caracteres; Actualmente tiene '+len+'.'; break;
176			case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' deve conter no mínimo '+min+ ' caracteres; Atualmente contem '+len+'.'; break;
177			default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field must be at least '+min+ ' characters long; it is currently '+len+' characters long.'; break;
178		}
179		vsmfShowError(fld, errorMsg);
180		return;
181	}
182
183  	if(max > -1 && len > max) { 
184		switch (vsmlang) {
185			case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' debe tener un máximo de '+max+ ' caracteres; Actualmente tiene '+len+'.'; break;
186			case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' deve conter no máximo '+max+ ' caracteres; Atualmente contem '+len+'.'; break;
187			default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field must be no more than '+max+' characters long; it is currently '+len+' characters long.'; break; 
188		}
189		vsmfShowError(fld, errorMsg);
190		return;
191	}
192}
193
194function vsmInteger(fld, min, max) { 
195	// Controla que el campo sea entero entre los valores min y max
196	if(fld.disabled) return true;
197	if(fld.value && fld.value != parseInt(fld.value)) {
198		switch (vsmlang) {
199			case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' debe ser numérico.'; break;
200			case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' deve ser numérico.'; break;
201			default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field must be a number.'; break;
202		}
203		vsmfShowError(fld, errorMsg);
204		return;
205	}
206	
207	if(fld.value < min || fld.value > max) {
208		switch (vsmlang) {
209			case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' debe ser numérico entre '+min+ ' y '+max+'.'; break;
210			case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' deve ser numérico entre '+min+ ' y '+max+'.'; break;
211			default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field must be a number between '+min+ ' and '+max+'.'; break;
212		}
213		vsmfShowError(fld, errorMsg);
214		return;
215	}
216}
217
218
219function vsmAllowChars(fld, chars) { 
220	// provide a string of acceptable chars for a field
221	if(fld.disabled) return true;
222	var length = fld.value.length;
223	for(var i=0;i<length;i++) {
224		if(chars.indexOf(fld.value.charAt(i)) == -1) {
225			switch (vsmlang) {
226				case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' contiene caracteres no permitidos.\r\n" '+fld.value.charAt(i)+' " no es un caracter permitido.\r\nLos caracteres permitidos son:\r\n'+chars; break;
227				case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' contem caracteres não permitidos.\r\n" '+fld.value.charAt(i)+' " não é um caracter permitido.\r\nOs caracteres permitidos são:\r\n'+chars; break;
228				default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' contain invali
228d characters. It may only contain the following characters:\r\n'+chars; break; 
229			}
230			vsmfShowError(fld, errorMsg);
231			return;
232		}
233	}
234}
235
236function vsmDisallowChars(fld, chars){ 
237	// provide a string of unacceptable chars for a field
238	if(fld.disabled) return true;
239	var length = fld.value.length;
240	for(var i=0;i<length;i++) {
241    	if(chars.indexOf(fld.value.charAt(i)) != -1) {
242	 		switch (vsmlang) {
243				case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' no puede contener ninguno de los siguientes caracteres:\r\n'+chars; break; 
244				case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' não pode conter nenhum dos seguintes caracteres:\r\n'+chars; break; 
245				default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field cannot contain any of the following characteres:\r\n'+chars; break; 
246			}
247			vsmfShowError(fld, errorMsg);
248			return;
249  		}
250	}
251}
252
253function vsmEmail(fld) { 
254	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
255	fld.value = vsmTrim(fld.value.toLowerCase());
256	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,8})+$/;
257	if (!filter.test(fld.value)) {
258		switch (vsmlang) {
259			case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' no es una dirección de correo válida.'; break;
260			case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' não é um endereço válido'; break;
261			default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field must contain a valid email address.'; break;
262		}
263		vsmfShowError(fld, errorMsg);
264		return;
265	}
266}
267
268function vsmFile(fld, allowedfiletypes) {
269	var ok = true;
270	if(!fld.value.length||fld.disabled) return true; 
271    if(typeof allowedfiletypes == 'undefined') allowedfiletypes = fld.getAttribute('data-vsm-file-types');
272	// Obtiene la extension el archivo
273	var filepath = fld.value;
274	if(filepath.lastIndexOf(".") == -1) ok = false;
275	if (ok) {
276		var fileext = (filepath.substring(filepath.lastIndexOf(".")+1)).toLowerCase();
277		if (allowedfiletypes && (allowedfiletypes+',').indexOf(fileext+',') == -1) ok = false;
278	} 
279    
280	if (!ok) {
281		switch(vsmlang) {
282			case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' no contiene un archivo válido.\r\n\r\nTipos de archivos válidos:\r\n' + allowedfiletypes.toUpperCase(); break;
283			case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' não é um arquivo válido.\r\n\r\nTipos de arquivos validos:\r\n' + allowedfiletypes.toUpperCase(); break;
284			default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field must contain a valid file type.\r\n\r\nValid file types:\r\n' + allowedfiletypes.toUpperCase(); break;
285		}
286		vsmfShowError(fld, errorMsg);
287		return;
288	} else {
289        return true;
290    }
291}
292
293function vsmLabel(fld, objectType, objectID, settings, fieldlabel) {
294	// Valida si la clave única de un objeto es válida
295    /*
296	var newValue = '';
297	fld.value = vsmTrim(fld.value);
298	for(var i=0;i<fld.value.length;i++) {
299		var car = fld.value.charAt(i).toLowerCase();
300		if(String('abcdefghijklmnopqrstuvwxyz0123456789').indexOf(car) != -1) {
301			newValue+= car;
302		} else if (String(' -_;:,.').indexOf(car) != -1) {
303			newValue+= '-';
304		} else if (String('áàâä').indexOf(car) != -1) {
305			newValue+= 'a';
306		} else if (String('éèêë').indexOf(car) != -1) {
307			newValue+= 'e';
308		} else if (String('íìîï').indexOf(car) != -1) {
309			newValue+= 'i';
310		} else if (String('óòôö').indexOf(car) != -1) {
311			newValue+= 'o';
312		} else if (String('úùûü').indexOf(car) != -1) {
313			newValue+= 'u';
314		} else if (car == 'ñ') {
315			newValue+= 'n';
316		} else if (car == 'ç') {
317			newValue+= 'c';
318		}
319	}
320	fld.value = newValue;
321    */
322    fld.value = vsmTrim(fld.value);
323    if(fld.value) {
324	    var url = '/tools/ajax/validLabel.php?ot='+objectType+'&oid='+objectID+'&s='+settings+'&v='+escape(fld.value)+'&c='+fieldlabel+'&l='+vsmlang;
325	    vsmAjaxValidation(fld, url);
326    }
327}
328
329
330function vsmDate(fld, format) {
331	// Esta ok si el campo está vacio o disabled
332	if(!fld.value.length||fld.disabled) return true; 
333	// Normaliza la fecha quitando los espacios y convirtiendo cualquier separador en /
334	fld.value = vsmTrim(fld.value);
335	var d = fld.value.replace(/\D/g, '/');
336	// Obtiene los valores separados por /
337	dateArray = d.split('/');
338	if (dateArray.length == 3) {
339		format = format.toLowerCase();
340		switch(format) {
341			case 'ymd': year=dateArray[0]; month = dateArray[1]; day = dateArray[2]; break;
342			case 'dmy': year=dateArray[2]; month = dateArray[1]; day = dateArray[0]; break;
343			case 'mdy': year=dateArray[2]; month = dateArray[0]; day = dateArray[1]; break;
344		}
345		ok = vsmValidDate(year, month, day);
346		if (ok) {
347			fld.value = d;
348			return;
349		}
350		
351	}
352	switch (vsmlang) {
353		case 'es': var errorMsg= 'El campo '+vsmFieldDescription(fld)+' no es una fecha válida.'; break;
354		case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(fld)+' não é uma data válida'; break;
355		default:   var errorMsg= 'The '+vsmFieldDescription(fld)+' field must contain a valid date.'; break;
356	}
357	vsmfShowError(fld, errorMsg);
358	return;
359}
360
361function vsmComboDate(yearfld, monthfld, dayfld, required) {
362	if (typeof(required)=='undefined') required = false;
363	if (yearfld.disabled || monthfld.disabled || dayfld.disabled) return true;
364	if (!yearfld.value.length && !monthfld.value.length && !dayfld.value.length) {
365		if (required) {
366			switch (vsmlang) {
367			case 'es': var errorMsg= 'El campo '+vsmFieldDescription(yearfld)+' no puede quedar vacío.'; break; 
368			case 'pt': var errorMsg= 'Deve preencher o campo '+vsmFieldDescription(yearfld)+'.'; break; 
369			default:   var errorMsg= 'The '+vsmFieldDescription(yearfld)+' field cannot be left blank.'; break; 
370			}
371			vsmfShowError(dayfld, errorMsg);
372			return;
373		} else {
374			return;
375		}
376	}
377	ok =  vsmValidDate(yearfld.value, monthfld.value, dayfld.value);
378	if (!ok) {
379		switch (vsmlang) {
380			case 'es': var errorMsg= 'El campo '+vsmFieldDescription(yearfld)+' no es una fecha válida.'; break;
381			case 'pt': var errorMsg= 'O campo '+vsmFieldDescription(yearfld)+' não é uma data válida'; break;
382			default:   var errorMsg= 'The '+vsmFieldDescription(yearfld)+' field must contain a valid date.'; break;
383		}
384		vsmfShowError(dayfld, errorMsg);
385		return;
386	}
387}
388
389function vsmValidDate(year, month, day) {
390	if (!isNaN(day) && !isNaN(month) && !isNaN(year)) {
391		month = month-1;
392		var dteDate=new Date(year,month,day);
393		if ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear())) return true;
394	}
395	return false;
396}
397
398function vsmDependants(enabled, elements) { 
399	// Para Activar/Desactivar campos
400	// convenience function to enable/disable dependant fields, passed in as an array 
401	if(!elements.length) return true;
402	for(var i= 0; i < elements.length; i++) {
403    	elements[i].disabled= !enabled;
404	}
405}
406

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.