PageSourceSearch

https://discolux.ru/components/com_rsform/assets/js/script.js

js discolux.ru collected 2026-10-05 11:42:24 UTC 20,646 bytes, 752 lines download raw bytes

1var RSFormProCalendars = {};
2var RSFormProPrices = {};
3
4if (typeof RSFormPro != 'object') {
5	var RSFormPro = {};
6}
7
8var RSFormProUtils = {
9	hasClass: function (el, name) {
10		return new RegExp('(\\s|^)' + name + '(\\s|$)').test(el.className);
11	},
12	addClass: function(el, name) {
13		if (!RSFormProUtils.hasClass(el, name)) {
14			el.className += (el.className ? ' ' : '') + name;
15		}
16	},
17	removeClass: function(el, name) {
18		if (RSFormProUtils.hasClass(el, name)) {
19			el.className = el.className.replace(new RegExp('(\\s|^)' + name + '(\\s|$)'),' ').replace(/^\s+|\s+$/g, '');
20		}
21	}
22};
23
24RSFormPro.Forms = {};
25
26function isset () {
27  // http://kevin.vanzonneveld.net
28  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
29  // +   improved by: FremyCompany
30  // +   improved by: Onno Marsman
31  // +   improved by: Rafał Kukawski
32  // *     example 1: isset( undefined, true);
33  // *     returns 1: false
34  // *     example 2: isset( 'Kevin van Zonneveld' );
35  // *     returns 2: true
36  var a = arguments,
37    l = a.length,
38    i = 0,
39    undef;
40
41  if (l === 0) {
42    throw new Error('Empty isset');
43  }
44
45  while (i !== l) {
46    if (a[i] === undef || a[i] === null) {
47      return false;
48    }
49    i++;
50  }
51  return true;
52}
53
54function refreshCaptcha(componentId, captchaPath)
55{
56	if(!captchaPath) captchaPath = 'index.php?option=com_rsform&task=captcha&componentId=' + componentId;
57	document.getElementById('captcha' + componentId).src = captchaPath + '&' + Math.random();
58	document.getElementById('captchaTxt' + componentId).value='';
59	document.getElementById('captchaTxt' + componentId).focus();
60}
61
62function number_format(number, decimals, dec_point, thousands_sep)
63{
64    var n = number, prec = decimals;
65    n = !isFinite(+n) ? 0 : +n;
66    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
67    var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
68    var dec = (typeof dec_point == "undefined") ? '.' : dec_point;
69 
70    var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
71 
72    var abs = Math.abs(n).toFixed(prec);
73    var _, i;
74 
75    if (abs >= 1000) {
76        _ = abs.split(/\D/);
77        i = _[0].length % 3 || 3;
78 
79        _[0] = s.slice(0,i + (n < 0)) +
80              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
81 
82        s = _.join(dec);
83    } else {
84        s = s.replace('.', dec);
85    }
86 
87    return s;
88}
89
90function buildXmlHttp()
91{
92	var xmlHttp;
93	try
94	{
95		xmlHttp=new XMLHttpRequest();
96	}
97	catch (e)
98	{
99		try
100		{
101			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
102		}
103		catch (e)
104		{
105			try
106			{
107				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
108			}
109			catch (e)
110			{
111				alert("Your browser does not support AJAX!");
112				return false;
113			}
114		}
115	}
116	return xmlHttp;
117}
118
119function ajaxValidation(form, page)
120{
121	try
122	{
123		var el = form.elements.length;
124	}
125	catch (err)
126	{
127		form = this;
128	}
129		
130	var xmlHttp = buildXmlHttp();
131	var url = '';
132	if (typeof rsfp_ajax_url != 'undefined') {
133		url = rsfp_ajax_url;
134	} else {
135		url = 'index.php?option=com_rsform&task=ajaxValidate';
136	}
137	
138	var params = new Array();
139	var submits = new Array();
140	var success = false;
141	var formId = 0;
142	for (i=0; i<form.elements.length; i++)
143	{
144		// don't send an empty value
145		if (!form.elements[i].name) continue;
146		if (form.elements[i].name.length == 0) continue;
147		// check if the checkbox is checked
148		if (form.elements[i].type == 'checkbox' && form.elements[i].checked == false) continue;
149		// check if the radio is selected
150		if (form.elements[i].type == 'radio' && form.elements[i].checked == false) continue;
151		
152		if (form.elements[i].type == 'submit')
153		{
154			submits.push(form.elements[i]);
155			form.elements[i].disabled = true;
156		}
157		
158		// check if form is a dropdown with multiple selections
159		if (form.elements[i].type == 'select-multiple')
160		{
161			for (var j=0; j<form.elements[i].options.length; j++)
162				if (form.elements[i].options[j].selected)
163					params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].options[j].value));
164			
165			continue;
166		}
167		
168		if (form.elements[i].name == 'form[formId]')
169			formId = form.elements[i].value;
170		
171		params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value));
172	}
173	
174	if (typeof ajaxExtraValidationScript[formId] == 'function') {
175		ajaxExtraValidationScript[formId]('beforeSend', formId, {'url': url, 'params': params});
176	}
177	
178	if (page) {
179		params.push('page=' + page);
180	}
181	
182	params = params.join('&');
183	
184	xmlHttp.open("POST", url, false);
185
186	//Send the proper header information along with the request
187	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
188	//xmlHttp.setRequestHeader("Content-length", params.length);
189	//xmlHttp.setRequestHeader("Connection", "close");
190	xmlHttp.send(params);
191	var success = true;
192	
193	if (xmlHttp.responseText.indexOf("\n") != -1)
194	{
195		var response = xmlHttp.responseText.split("\n");
196		// All spans set to no error
197		var ids = response[0].split(',');
198		for (var i=0; i<ids.length; i++)
199			if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i]))
200				document.getElementById('component'+ids[i]).className = 'formNoError';
201			
202		// Show errors
203		var ids = response[1].split(',');
204		for (var i=0; i<ids.length; i++)
205			if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i]))
206			{
207				document.getElementById('component'+ids[i]).className = 'formError';
208				success = false;
209			}
210		
211		if (response.length == 4)
212		{
213			page = parseInt(response[2]) - 1;
214			totalPages = parseInt(response[3]);
215			rsfp_changePage(formId, page, totalPages, false);
216		}
217		
218		if (typeof ajaxExtraValidationScript[formId] == 'function') {
219			ajaxExtraValidationScript[formId]('afterSend', formId, {'url': url, 'params': params, 'response': response});
220		}
221	}
222	
223	for (var i=0; i<submits.length; i++)
224		submits[i].disabled = false;
225	
226	if (success == false && document.getElementById('rsform_error_' + formId))
227	{
228		try {
229			document.getElementById('rsform_error_' + formId).style.display = 'block';
230		}
231		catch (err) { }
232	}
233	
234	if (success == true) {
235		try {
236			document.getElementById('rsform_error_' + formId).style.display = 'none';
237		}
238		catch (err) { }
239	}
240	
241	return success;
242}
243
244var ajaxExtraValidationScript = {};
245
246function rsfp_addEvent(obj, evType, fn){ 
247 if (obj.addEventListener){ 
248   obj.addEventListener(evType, fn, false); 
249   return true; 
250 } else if (obj.attachEvent){ 
251   var r = obj.attachEvent("on"+evType, fn); 
252   return r; 
253 } else { 
254   return false; 
255 } 
256}
257
258function rsfp_getForm(formId)
259{
260	if (typeof RSFormPro.Forms[formId] == 'undefined') {
261		var formIds = document.getElementsByName('form[formId]');
262		for (var i=0; i<formIds.length; i++)
263		{
264			if (parseInt(formIds[i].value) != parseInt(formId))
265				continue;
266			
267			var form = formIds[i].parentNode;		
268			if (form.tagName == 'FORM' || form.nodeName == 'FORM') {
269				RSFormPro.Forms[formId] = form;
270				return form;
271			}
272			
273			while (form.parentNode)
274			{
275				form = form.parentNode;
276				if (form.tagName == 'FORM' || form.nodeName == 'FORM') {
277					RSFormPro.Forms[formId] = form;
278					return form;
279				}
280			}
281		}
282	}
283	
284	return RSFormPro.Forms[formId];
285}
286
287function rsfp_setCalculationsEvents(formId, fields) {
288	var func 		= window["rsfp_Calculations" + formId];
289	var thefields	= fields ? fields : RSFormProPrices;
290	
291	// Detect IE8.
292	var isIE8 = navigator.userAgent.match(/MSIE 8\.0/);
293	var event = 'click';
294	
295	for(field in thefields) {
296		field = field.replace(formId+'_','');
297		objects = rsfp_getFieldsByName(formId,field);
298		for(i=0;i<objects.length;i++) {
299			tagName = objects[i].tagName || objects[i].nodeName;
300			
301			if (tagName == 'INPUT' || tagName == 'SELECT') {
302				// IE8 fix.
303				if (tagName == 'INPUT' && isIE8 && objects[i].type && objects[i].type.toLowerCase() == 'checkbox') {
304					event = 'click';
305				} else {
306					event = 'change';
307				}
308				
309				rsfp_addEvent(objects[i], event, function() {
310					if (typeof func == "function") {
311						func();
312					}
313				});
314			}
315		}
316	}
317}
318
319function rsfp_getValue(formId, name) {
320	form		= rsfp_getForm(formId);
321	values		= [];
322	
323	if (typeof form != 'undefined')
324	{
325		for (var i=0; i<form.elements.length; i++)
326		{
327			var element = form.elements[i];
328			var tagName = element.tagName || element.nodeName;
329			
330			switch (tagName)
331			{
332				case 'INPUT':
333					if (element.type)
334						switch (element.type.toUpperCase())
335						{
336							case 'TEXT':
337							case 'HIDDEN':
338								if (!element.name || element.name != 'form[' + name + ']') continue;
339								return element.value;
340							break;
341							
342							case 'RADIO':
343								if (!element.name || element.name != 'form[' + name + ']') continue;
344								
345								if (element.checked == true) {
346									values.push(element.value);
347								}
348							break;
349							
350							case 'CHECKBOX':
351								if (!element.name || element.name != 'form[' + name + '][]') continue;
352								if (element.checked == true) {
353									values.push(element.value);
354								}
355							break;
356						}
357				break;
358				
359				case 'SELECT':
360					if (!element.name || element.name != 'form[' + name + '][]') continue;
361					
362					if (element.options)
363						for (var o=0; o<element.options.length; o++)
364							if (element.options[o].selected)
365							{
366								values.push(element.options[o].value);
367							}
368				break;
369			}
370		}
371	}
372	
373	return values;
374}
375
376function rsfp_toNumber(number, decimal, thousands, decimals) {
377	// Remove decimals first
378	if (parseInt(decimals) > 0 && number.lastIndexOf(decimal) > -1) {
379		var index = number.lastIndexOf(decimal);
380		number = number.substring(0, index) + 'DECIMALS' + number.substring(index + 1);
381	}
382	
383	// Remove thousands separator
384	if (number.indexOf(thousands) > -1) {
385		number = number.split(thousands).join('');
386	}
387	
388	number = number.split('DECIMALS').join('.');
389	
390	return parseFloat(number);
391}
392
393function rsfp_verifyChecked(formId, name, value) {
394	isChecked = false;
395	form = rsfp_getForm(formId);
396	
397	if (typeof form != 'undefined')
398	{
399		primary_loop:
400		for (var i=0; i<form.elements.length; i++)
401		{
402			var element = form.elements[i];
403			var tagName = element.tagName || element.nodeName;
404			
405			switch (tagName)
406			{
407				case 'INPUT':
408					if (element.type)
409						switch (element.type.toUpperCase())
410						{
411							case 'RADIO':
412								if (!element.name || element.name != 'form[' + name + ']') continue;
413								if (element.checked == true && element.value == value)
414								{
415									isChecked = true;
416									break primary_loop;
417								}
418							break;
419							
420							case 'CHECKBOX':
421								if (!element.name || element.name != 'form[' + name + '][]') continue;
422								if (element.checked == true && element.value == value)
423								{
424									isChecked = true;
425									break primary_loop;
426								}
427							break;
428						}
429				break;
430				
431				case 'SELECT':
432					if (!element.name || element.name != 'form[' + name + '][]') continue;
433					
434					if (element.options)
435						for (var o=0; o<element.options.length; o++)
436							if (element.options[o].selected && element.options[o].value == value)
437							{
438								isChecked = true;
439								break primary_loop;
440							}
441				break;
442			}
443		}
444	}
445	
446	return isChecked;
447}
448
449function rsfp_addCondition(formId, name, fnCondition) {
450	form = rsfp_getForm(formId);
451	
452	if (typeof form != 'undefined') {
453		for (var i=0; i<form.elements.length; i++) {
454			var element = form.elements[i];
455			var tagName = element.tagName || element.nodeName;
456			if (element.name && (element.name == 'form[' + name + ']' || element.name == 'form[' + name + '][]')) {
457				if (tagName == 'SELECT') {
458					rsfp_addEvent(element, 'change', function() {
459						fnCondition();
460					});
461				} else {
462					rsfp_addEvent(element, 'click', function() {
463						fnCondition();
464					});
465				}
466			}
467		}
468	}
469}
470
471function rsfp_getBlock(formId, block) {
472	form = rsfp_getForm(formId);
473	
474	var possible = false;
475	
476	if (typeof form != 'undefined') {
477		if (blocks = getElementsByClassName('rsform-block')) {
478			for (i=0; i<blocks.length; i++) {
479				var classes = blocks[i].className.split(' ');
480				for (c=0; c<classes.length; c++) {
481					if (classes[c] == 'rsform-block-' + block) {
482						if (blocks[i].parentNode) {
483							current_block = blocks[i];
484							if (current_block == form)
485								return [ blocks[i] ];
486								
487							while (current_block.parentNode) {
488								current_block = current_block.parentNode;
489								if (current_block == form)
490									return [ blocks[i] ];
491							}
492						}
493						
494						possible = [ blocks[i] ];
495					}
496				}
497			}
498		}
499	}
500	
501	return possible;
502}
503
504function rsfp_getFieldsByName(formId, name) {
505	form = rsfp_getForm(formId);
506	
507	var results = [];
508	
509	if (typeof form != 'undefined') {
510		for (var i=0; i<form.elements.length; i++) {
511			var element = form.elements[i];
512			pushed = false;
513			if (element.name && (
514				// single fields
515				element.name == 'form[' + name + ']' ||
516				// multiple fields
517				element.name == 'form[' + name + '][]' ||
518				// new field - Birthday field
519				element.name == 'form[' + name + '][d]' ||
520				element.name == 'form[' + name + '][m]' ||
521				element.name == 'form[' + name + '][y]'
522				)) {
523				results.push(element);
524				pushed = true;
525			}
526			
527			if (pushed) {
528				// for calendar
529				if (element.id && element.id.indexOf('txtcal') > -1) {
530					var suffix = element.id.replace('txtcal', '');
531					results.push(document.getElementById('btn' + suffix));
532				}
533				// for labels (radio, checkbox)
534				var labels = form.getElementsByTagName('label');
535				for (var l=0; l<labels.length; l++) {
536					if (labels[l].htmlFor && labels[l].htmlFor == element.id)
537						results.push(labels[l]);
538				}
539			}
540		}
541	}
542	
543	return results;
544}
545
546function rsfp_setDisplay(items, value) {
547	for (i=0; i<items.length; i++)
548		items[i].style.display = value;
549}
550
551function rsfp_checkValidDate(fieldName) {
552	var theDate = new Date();
553	for (var day=1; day<=31; day++) {
554		var year 	= parseInt(document.getElementById(fieldName + 'y').value);
555		var month 	= parseInt(document.getElementById(fieldName + 'm').value) - 1;
556		
557		var index = day - 1;
558		if (document.getElementById(fieldName + 'd').options[0].value == '') {
559			index++;
560		}
561		document.getElementById(fieldName + 'd').options[index].disabled = false;
562		if (!isNaN(year) && !isNaN(month)) {
563			if (typeof theDate.__msh_oldSetFullYear == 'function') {
564				theDate.__msh_oldSetFullYear(year, month, day);
565			} else {
566				theDate.setFullYear(year, month, day);
567			}
568			
569			if (theDate.getDate() != day || theDate.getMonth() != month) {
570				document.getElementById(fieldName + 'd').options[index].disabled = true;
571			}
572		}
573	}
574	if (document.getElementById(fieldName + 'd').options[document.getElementById(fieldName + 'd').selectedIndex].disabled == true) {
575		for (var day=31; day>=28; day--) {
576			var index = day - 1;
577			if (document.getElementById(fieldName + 'd').options[0].value == '') {
578				index++;
579			}
580			if (document.getElementById(fieldName + 'd').options[index].disabled == false) {
581				document.getElementById(fieldName + 'd').value = day;
582				break;
583			}
584		}
585	}
586}
587
588function rsfp_geolocation(term, id, mapid,  map, marker, geocoder, type) {
589	var content = document.getElementById('rsform_geolocation'+id);
590	var address	= document.getElementById(mapid).clientWidth;
591	
592	document.getElementById('rsform_geolocation'+id).style.width = address+'px';
593	document.getElementById('rsform_geolocation'+id).style.display = 'none';
594	document.getElementById('rsform_geolocation'+id).innerHTML = '';
595	
596	if (term != '') {
597		geocoder.geocode( {'address': term }, function(results, status) {
598			if (status == 'OK') {
599				for (var i=0; i<results.length; i++) {
600					var item	= results[i];
601					var theli	= document.createElement('li');
602					var thea	= document.createElement('a');
603					
604					thea.setAttribute('href','javascript:void(0)');
605					thea.innerHTML = item.formatted_address;
606					
607					rsfp_addEvent(thea,'click', (function() {
608						var mapValue = type ? item.formatted_address : item.geometry.location.lat().toFixed(5) + ',' + item.geometry.location.lng().toFixed(5);
609						var mapId	 = mapid;
610						var location = new google.maps.LatLng(item.geometry.location.lat().toFixed(5), item.geometry.location.lng().toFixed(5));
611						
612						return function() {
613							document.getElementById(mapId).value = mapValue;							
614							marker.setPosition(location);
615							map.setCenter(location);
616							document.getElementById('rsform_geolocation'+id).style.display = 'none';
617						}
618					})());
619					
620					theli.appendChild(thea);
621					content.appendChild(theli);
622				}
623			
624				document.getElementById('rsform_geolocation'+id).style.display = '';
625			}
626		});
627	}
628}
629
630function rsfp_runAllConditions(formId) {
631	var func = window["rsfp_runAllConditions" + formId];
632	if (typeof func == "function") {
633		func();
634	}
635}
636
637/*
638	Developed by Robert Nyman, http://www.robertnyman.com
639	Code/licensing: http://code.google.com/p/getelementsbyclassname/
640*/	
641var getElementsByClassName = function (className, tag, elm){
642	if (document.getElementsByClassName) {
643		getElementsByClassName = function (className, tag, elm) {
644			elm = elm || document;
645			var elements = elm.getElementsByClassName(className),
646				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
647				returnElements = [],
648				current;
649			for(var i=0, il=elements.length; i<il; i+=1){
650				current = elements[i];
651				if(!nodeName || nodeName.test(current.nodeName)) {
652					returnElements.push(current);
653				}
654			}
655			return returnElements;
656		};
657	}
658	else if (document.evaluate) {
659		getElementsByClassName = function (className, tag, elm) {
660			tag = tag || "*";
661			elm = elm || document;
662			var classes = className.split(" "),
663				classesToCheck = "",
664				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
665				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
666				returnElements = [],
667				elements,
668				node;
669			for(var j=0, jl=classes.length; j<jl; j+=1){
670				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
671			}
672			try	{
673				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
674			}
675			catch (e) {
676				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
677			}
678			while ((node = elements.iterateNext())) {
679				returnElements.push(node);
680			}
681			return returnElements;
682		};
683	}
684	else {
685		getElementsByClassName = function (className, tag, elm) {
686			tag = tag || "*";
687			elm = elm || document;
688			var classes = className.split(" "),
689				classesToCheck = [],
690				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
691				current,
692				returnElements = [],
693				match;
694			for(var k=0, kl=classes.length; k<kl; k+=1){
695				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
696			}
697			for(var l=0, ll=elements.length; l<ll; l+=1){
698				current = elements[l];
699				match = false;
700				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
701					match = classesToCheck[m].test(current.className);
702					if (!match) {
703						break;
704					}
705				}
706				if (match) {
707					returnElements.push(current);
708				}
709			}
710			return returnElements;
711		};
712	}
713	return getElementsByClassName(className, tag, elm);
714};
715
716function rsfp_changePage(formId, page, totalPages, validate)
717{	
718	if (validate)
719	{
720		var form = rsfp_getForm(formId);
721		if (!ajaxValidation(form, page))
722			return false;
723	}
724	
725	for (var i=0; i<=totalPages; i++)
726	{
727		var thePage = document.getElementById('rsform_' + formId + '_page_' + i);
728		if (thePage)
729			rsfp_hidePage(thePage);
730	}
731	
732	var thePage = document.getElementById('rsform_' + formId + '_page_' + page);
733	if (thePage)
734	{
735		rsfp_showPage(thePage);
736		try {
737			var func = window["rsfp_showProgress_" + formId];
738			if (typeof func == "function") {
739				func(page);
740			}
741		}
742		catch (err) { }
743	}
744}
745
746function rsfp_hidePage(thePage) {
747	RSFormProUtils.addClass(thePage, 'formHidden');
748}
749
750function rsfp_showPage(thePage) {
751	RSFormProUtils.removeClass(thePage, 'formHidden');
752}

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.