PageSourceSearch

https://samtredia.gov.ge/media/com_rsform/js/script.js

js samtredia.gov.ge collected 2026-10-03 02:48:00 UTC 27,315 bytes, 981 lines download raw bytes

1var RSFormProCalendars = {};
2var RSFormProPrices = {};
3var ajaxExtraValidationScript = {};
4
5if (typeof RSFormPro != 'object') {
6	var RSFormPro = {};
7}
8
9RSFormPro.Forms = {};
10
11/* Field specific functions */
12
13RSFormPro.refreshCaptcha = function(componentId, captchaPath) {
14	if (!captchaPath) {
15		captchaPath = 'index.php?option=com_rsform&task=captcha&componentId=' + componentId;
16	}
17	document.getElementById('captcha' + componentId).src = captchaPath + '&' + Math.random();
18	document.getElementById('captchaTxt' + componentId).value = '';
19	document.getElementById('captchaTxt' + componentId).focus();
20};
21
22RSFormPro.initGeoLocation = function(term, id, mapid,  map, marker, geocoder, type) {
23	var content = document.getElementById('rsform_geolocation'+id);
24	var address	= document.getElementById(mapid).clientWidth;
25
26	document.getElementById('rsform_geolocation'+id).style.width = address+'px';
27	document.getElementById('rsform_geolocation'+id).style.display = 'none';
28	document.getElementById('rsform_geolocation'+id).innerHTML = '';
29
30	if (term != '') {
31		geocoder.geocode( {'address': term }, function(results, status) {
32			if (status == 'OK') {
33				for (var i=0; i<results.length; i++) {
34					var item	= results[i];
35					var theli	= document.createElement('li');
36					var thea	= document.createElement('a');
37
38					thea.setAttribute('href','javascript:void(0)');
39					thea.innerHTML = item.formatted_address;
40
41					RSFormProUtils.addEvent(thea,'click', (function() {
42						var mapValue = type ? item.formatted_address : item.geometry.location.lat().toFixed(5) + ',' + item.geometry.location.lng().toFixed(5);
43						var mapId	 = mapid;
44						var location = new google.maps.LatLng(item.geometry.location.lat().toFixed(5), item.geometry.location.lng().toFixed(5));
45
46						return function() {
47							document.getElementById(mapId).value = mapValue;
48							marker.setPosition(location);
49							map.setCenter(location);
50							document.getElementById('rsform_geolocation'+id).style.display = 'none';
51						}
52					})());
53
54					theli.appendChild(thea);
55					content.appendChild(theli);
56				}
57
58				document.getElementById('rsform_geolocation'+id).style.display = '';
59			}
60		});
61	}
62};
63
64RSFormPro.disableInvalidDates = function(fieldName) {
65	var theDate = new Date(),
66		day,
67		index;
68
69	for (day = 1; day <= 31; day++) {
70		var year 	= parseInt(document.getElementById(fieldName + 'y').value);
71		var month 	= parseInt(document.getElementById(fieldName + 'm').value) - 1;
72
73		index = day - 1;
74		if (document.getElementById(fieldName + 'd').options[0].value == '') {
75			index++;
76		}
77		document.getElementById(fieldName + 'd').options[index].disabled = false;
78		if (!isNaN(year) && !isNaN(month)) {
79			if (typeof theDate.__msh_oldSetFullYear == 'function') {
80				theDate.__msh_oldSetFullYear(year, month, day);
81			} else {
82				theDate.setFullYear(year, month, day);
83			}
84
85			if (theDate.getDate() != day || theDate.getMonth() != month) {
86				document.getElementById(fieldName + 'd').options[index].disabled = true;
87			}
88		}
89	}
90	if (document.getElementById(fieldName + 'd').options[document.getElementById(fieldName + 'd').selectedIndex].disabled == true) {
91		for (day = 31; day >= 28; day--) {
92			index = day - 1;
93			if (document.getElementById(fieldName + 'd').options[0].value == '') {
94				index++;
95			}
96			if (document.getElementById(fieldName + 'd').options[index].disabled == false) {
97				document.getElementById(fieldName + 'd').value = day;
98				break;
99			}
100		}
101	}
102};
103
104/* Number functions */
105
106RSFormPro.formatNumber = function(number, decimals, dec_point, thousands_sep) {
107	var n = number, prec = decimals;
108	n = !isFinite(+n) ? 0 : +n;
109	prec = !isFinite(+prec) ? 0 : Math.abs(prec);
110	var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
111	var dec = (typeof dec_point == "undefined") ? '.' : dec_point;
112
113	var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
114
115	var abs = Math.abs(n).toFixed(prec);
116	var _, i;
117
118	if (abs >= 1000) {
119		_ = abs.split(/\D/);
120		i = _[0].length % 3 || 3;
121
122		_[0] = s.slice(0,i + (n < 0)) +
123			_[0].slice(i).replace(/(\d{3})/g, sep+'$1');
124
125		s = _.join(dec);
126	} else {
127		s = s.replace('.', dec);
128	}
129
130	return s;
131};
132
133RSFormPro.toNumber = function(number, decimal, thousands, decimals) {
134	// Remove decimals first
135	if (parseInt(decimals) > 0 && number.lastIndexOf(decimal) > -1) {
136		var index = number.lastIndexOf(decimal);
137		number = number.substring(0, index) + 'DECIMALS' + number.substring(index + 1);
138	}
139
140	// Remove thousands separator
141	if (number.indexOf(thousands) > -1) {
142		number = number.split(thousands).join('');
143	}
144
145	number = number.split('DECIMALS').join('.');
146	return parseFloat(number);
147};
148
149/* Form and element functions */
150
151RSFormPro.getForm = function(formId) {
152	if (typeof RSFormPro.Forms[formId] == 'undefined') {
153		var formIds = document.getElementsByName('form[formId]');
154		for (var i=0; i<formIds.length; i++)
155		{
156			if (parseInt(formIds[i].value) != parseInt(formId))
157				continue;
158
159			var form = formIds[i].parentNode;
160			if (form.tagName == 'FORM' || form.nodeName == 'FORM') {
161				RSFormPro.Forms[formId] = form;
162				return form;
163			}
164
165			while (form.parentNode)
166			{
167				form = form.parentNode;
168				if (form.tagName == 'FORM' || form.nodeName == 'FORM') {
169					RSFormPro.Forms[formId] = form;
170					return form;
171				}
172			}
173		}
174	}
175
176	return RSFormPro.Forms[formId];
177};
178
179RSFormPro.getValue = function(formId, name) {
180	var form	= RSFormPro.getForm(formId);
181	var values	= [];
182
183	if (typeof form != 'undefined')
184	{
185		for (var i = 0; i < form.elements.length; i++)
186		{
187			var element = form.elements[i];
188			var tagName = element.tagName || element.nodeName;
189
190			switch (tagName)
191			{
192				case 'INPUT':
193					if (element.type)
194						switch (element.type.toUpperCase())
195						{
196							case 'TEXT':
197							case 'NUMBER':
198							case 'HIDDEN':
199								if (!element.name || element.name != 'form[' + name + ']') continue;
200								return element.value;
201								break;
202
203							case 'RADIO':
204								if (!element.name || element.name != 'form[' + name + ']') continue;
205
206								if (element.checked == true) {
207									values.push(element.value);
208								}
209								break;
210
211							case 'CHECKBOX':
212								if (!element.name || element.name != 'form[' + name + '][]') continue;
213								if (element.checked == true) {
214									values.push(element.value);
215								}
216								break;
217						}
218					break;
219
220				case 'SELECT':
221					if (!element.name || element.name != 'form[' + name + '][]') continue;
222
223					if (element.options)
224						for (var o=0; o<element.options.length; o++)
225							if (element.options[o].selected)
226							{
227								values.push(element.options[o].value);
228							}
229					break;
230			}
231		}
232	}
233
234	return values;
235};
236
237RSFormPro.isChecked = function(formId, name, value) {
238	var isChecked 	= false;
239	var form 		= RSFormPro.getForm(formId);
240
241	if (typeof form != 'undefined')
242	{
243		primary_loop:
244			for (var i=0; i<form.elements.length; i++)
245			{
246				var element = form.elements[i];
247				var tagName = element.tagName || element.nodeName;
248
249				switch (tagName)
250				{
251					case 'INPUT':
252						if (element.type)
253							switch (element.type.toUpperCase())
254							{
255								case 'RADIO':
256									if (!element.name || element.name != 'form[' + name + ']') continue;
257									if (element.checked == true && element.value == value)
258									{
259										isChecked = true;
260										break primary_loop;
261									}
262									break;
263
264								case 'CHECKBOX':
265									if (!element.name || element.name != 'form[' + name + '][]') continue;
266									if (element.checked == true && element.value == value)
267									{
268										isChecked = true;
269										break primary_loop;
270									}
271									break;
272							}
273						break;
274
275					case 'SELECT':
276						if (!element.name || element.name != 'form[' + name + '][]') continue;
277
278						if (element.options)
279							for (var o=0; o<element.options.length; o++)
280								if (element.options[o].selected && element.options[o].value == value)
281								{
282									isChecked = true;
283									break primary_loop;
284								}
285						break;
286				}
287			}
288	}
289
290	return isChecked;
291};
292
293RSFormPro.getBlock = function(formId, block) {
294	var form 	 = RSFormPro.getForm(formId);
295	var possible = false;
296	var blocks, current_block;
297
298	if (typeof form != 'undefined') {
299		if (blocks = getElementsByClassName('rsform-block')) {
300			for (i=0; i<blocks.length; i++) {
301				var classes = blocks[i].className.split(' ');
302				for (c=0; c<classes.length; c++) {
303					if (classes[c] == 'rsform-block-' + block) {
304						if (blocks[i].parentNode) {
305							current_block = blocks[i];
306							if (current_block == form)
307								return [ blocks[i] ];
308
309							while (current_block.parentNode) {
310								current_block = current_block.parentNode;
311								if (current_block == form)
312									return [ blocks[i] ];
313							}
314						}
315
316						possible = [ blocks[i] ];
317					}
318				}
319			}
320		}
321	}
322
323	return possible;
324};
325
326RSFormPro.getFieldsByName = function(formId, name) {
327	var form 	= RSFormPro.getForm(formId);
328	var results = [];
329	var pushed  = false;
330
331	if (typeof form != 'undefined') {
332		for (var i=0; i<form.elements.length; i++) {
333			var element = form.elements[i];
334			pushed = false;
335			if (element.name && (
336					// single fields
337					element.name == 'form[' + name + ']' ||
338						// multiple fields
339					element.name == 'form[' + name + '][]' ||
340						// new field - Birthday field
341					element.name == 'form[' + name + '][d]' ||
342					element.name == 'form[' + name + '][m]' ||
343					element.name == 'form[' + name + '][y]'
344				)) {
345				results.push(element);
346				pushed = true;
347			}
348
349			if (pushed) {
350				// for calendar
351				if (element.id && element.id.indexOf('txtcal') > -1) {
352					var suffix = element.id.replace('txtcal', '');
353					results.push(document.getElementById('btn' + suffix));
354				}
355				// for labels (radio, checkbox)
356				var labels = form.getElementsByTagName('label');
357				for (var l=0; l<labels.length; l++) {
358					if (labels[l].htmlFor && labels[l].htmlFor == element.id)
359						results.push(labels[l]);
360				}
361			}
362		}
363	}
364
365	return results;
366};
367
368/* Pagination functions */
369
370RSFormPro.Pages = {
371	change: function(formId, page, totalPages, validate, parentErrorClass) {
372		// callback functions if next page is clicked
373		var direction = RSFormPro.Pages.checkDirection(formId, page);
374		if (direction == 'next') {
375			RSFormPro.callbacks.runCallback(formId, 'nextPage');
376		}
377		
378		var thePage;
379
380		if (validate) {
381			var form = RSFormPro.getForm(formId);
382			if (!RSFormPro.Ajax.validate(form, page, parentErrorClass)) {
383				return false;
384			}
385		}
386
387		for (var i = 0; i <= totalPages; i++) {
388			thePage = document.getElementById('rsform_' + formId + '_page_' + i);
389			if (thePage) {
390				rsfp_hidePage(thePage);
391			}
392		}
393
394		thePage = document.getElementById('rsform_' + formId + '_page_' + page);
395		if (thePage) {
396			rsfp_showPage(thePage);
397			try {
398				var func = window["rsfp_showProgress_" + formId];
399				if (typeof func == "function") {
400					func(page);
401				}
402			}
403			catch (err) {}
404		}
405	},
406	hide: function(thePage) {
407		RSFormProUtils.addClass(thePage, 'formHidden');
408	},
409	show: function(thePage) {
410		RSFormProUtils.removeClass(thePage, 'formHidden');
411	},
412	
413	checkDirection : function(formId, page) {
414		var base = RSFormPro.Pages;
415		if (typeof base.history[formId] == 'undefined') {
416			base.history[formId] = page;
417			return 'next';
418		} else {
419			var direction;
420			if (base.history[formId] <= page ) { 
421				direction = 'next';
422			} else {
423				direction = 'prev';
424			}
425			base.history[formId] = page;
426			
427			return direction;
428		}
429	},	
430	history: {}
431};
432
433/* Condition functions */
434RSFormPro.Conditions = {
435	add: function(formId, name, fnCondition) {
436		var form = RSFormPro.getForm(formId);
437
438		if (typeof form != 'undefined') {
439			for (var i = 0; i < form.elements.length; i++) {
440				var element = form.elements[i];
441				var tagName = element.tagName || element.nodeName;
442				if (element.name && (element.name == 'form[' + name + ']' || element.name == 'form[' + name + '][]')) {
443					if (tagName == 'SELECT') {
444						RSFormProUtils.addEvent(element, 'change', function() {
445							fnCondition();
446						});
447					} else {
448						RSFormProUtils.addEvent(element, 'click', function() {
449							fnCondition();
450						});
451					}
452				}
453			}
454		}
455	},
456	runAll: function(formId) {
457		var func = window["rsfp_runAllConditions" + formId];
458		if (typeof func == "function") {
459			func();
460		}
461	}
462};
463
464/* Calculation functions */
465
466RSFormPro.Calculations = {
467	addEvents: function(formId, fields) {
468		var func 		= window["rsfp_Calculations" + formId];
469		var thefields	= fields ? fields : RSFormProPrices;
470
471		// Detect IE8.
472		var isIE8 = navigator.userAgent.match(/MSIE 8\.0/);
473		var event = 'click';
474
475		for (var field in thefields) {
476			if (!thefields.hasOwnProperty(field)) {
477				continue;
478			}
479			field = field.replace(formId+'_','');
480			objects = RSFormPro.getFieldsByName(formId,field);
481			for(i = 0; i < objects.length;i++) {
482				tagName = objects[i].tagName || objects[i].nodeName;
483
484				if (tagName == 'INPUT' || tagName == 'SELECT') {
485					// IE8 fix.
486					if (tagName == 'INPUT' && isIE8 && objects[i].type && objects[i].type.toLowerCase() == 'checkbox') {
487						event = 'click';
488					} else {
489						event = 'change';
490					}
491
492					RSFormProUtils.addEvent(objects[i], event, function() {
493						if (typeof func == "function") {
494							func();
495						}
496					});
497				}
498			}
499		}
500	}
501};
502
503/* AJAX functions */
504RSFormPro.Ajax = {
505	URL: false,
506	getXHR: function() {
507		try {
508			return new window.XMLHttpRequest();
509		} catch ( e ) {}
510	},
511	displayValidationErrors: function(formComponents, task, formId, data) {
512		if (task == 'afterSend') {
513			var ids,
514				i,
515				j,
516				id,
517				formComponent,
518				elementBlock;
519
520			ids = data.response[0].split(',');
521			for (i = 0; i < ids.length; i++) {
522				id = parseInt(ids[i]);
523				if (!isNaN(id) && typeof formComponents[id] != 'undefined') {
524					formComponent = RSFormPro.getFieldsByName(formId, formComponents[id]);
525					if (formComponent && formComponent.length > 0) {
526						for (j = 0; j < formComponent.length; j++) {
527							if (formComponent[j]) {
528								formComponent[j].className = formComponent[j].className.replace(' rsform-error', '');
529								if (typeof data.parentErrorClass != 'undefined') {
530									try {
531										elementBlock = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(formComponents[id]));
532
533										elementBlock = elementBlock[0];
534										elementBlock.className = elementBlock.className.replace(data.parentErrorClass, '');
535									} catch (err) {}
536								}
537							}
538						}
539					}
540				}
541			}
542
543			ids = data.response[1].split(',');
544			for (i = 0; i < ids.length; i++) {
545				id = parseInt(ids[i]);
546				if (!isNaN(id) && typeof formComponents[id] != 'undefined') {
547					formComponent = RSFormPro.getFieldsByName(formId, formComponents[id]);
548					if (formComponent && formComponent.length > 0) {
549						for (j = 0; j < formComponent.length; j++) {
550							if (formComponent[j]) {
551								formComponent[j].className = formComponent[j].className.replace(' rsform-error', '') + ' rsform-error';
552								if (typeof data.parentErrorClass != 'undefined') {
553									try {
554										elementBlock = RSFormPro.getBlock(formId, RSFormProUtils.getAlias(formComponents[id]));
555
556										elementBlock = elementBlock[0];
557										elementBlock.className = elementBlock.className.replace(data.parentErrorClass, '') + data.parentErrorClass;
558									} catch (err) {}
559								}
560							}
561						}
562					}
563				}
564			}
565		}
566	},
567	validate: function(form, page, parentErrorClass) {
568		try {
569			var el = form.elements.length;
570		} catch (err) {
571			form = this;
572		}
573
574		var xmlHttp = RSFormPro.Ajax.getXHR();
575		var url = 'index.php?option=com_rsform&task=ajaxValidate';
576		if (typeof RSFormPro.Ajax.URL == 'string') {
577			url = RSFormPro.Ajax.URL;
578		}
579
580		var params = [],
581			submits = [],
582			success = false,
583			formId = 0,
584			ids,
585			i,
586			j;
587
588		for (i=0; i<form.elements.length; i++)
589		{
590			// don't send an empty value
591			if (!form.elements[i].name) continue;
592			if (form.elements[i].name.length == 0) continue;
593			// check if the checkbox is checked
594			if (form.elements[i].type == 'checkbox' && form.elements[i].checked == false) continue;
595			// check if the radio is selected
596			if (form.elements[i].type == 'radio' && form.elements[i].checked == false) continue;
597
598			if (form.elements[i].type == 'submit') {
599				submits.push(form.elements[i]);
600				form.elements[i].disabled = true;
601			}
602
603			// check if form is a dropdown with multiple selections
604			if (form.elements[i].type == 'select-multiple')
605			{
606				for (j = 0; j < form.elements[i].options.length; j++) {
607					if (form.elements[i].options[j].selected) {
608						params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].options[j].value));
609					}
610				}
611
612				continue;
613			}
614
615			if (form.elements[i].name == 'form[formId]') {
616				formId = form.elements[i].value;
617			}
618
619			params.push(form.elements[i].name + '=' + encodeURIComponent(form.elements[i].value));
620		}
621
622		if (typeof ajaxExtraValidationScript[formId] == 'function') {
623			ajaxExtraValidationScript[formId]('beforeSend', formId, {'url': url, 'params': params});
624		}
625
626		if (page) {
627			params.push('page=' + page);
628		}
629
630		params = params.join('&');
631
632		xmlHttp.open("POST", url, false);
633
634		//Send the proper header information along with the request
635		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
636		xmlHttp.send(params);
637		success = true;
638
639		if (xmlHttp.responseText.indexOf("\n") != -1)
640		{
641			var response = xmlHttp.responseText.split("\n");
642			// All spans set to no error
643			ids = response[0].split(',');
644			for (i = 0; i < ids.length; i++)
645				if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i])) {
646					document.getElementById('component'+ids[i]).className = 'formNoError';
647				}
648
649			// Show errors
650			ids = response[1].split(',');
651			for (i = 0; i < ids.length; i++)
652				if (!isNaN(parseInt(ids[i])) && document.getElementById('component'+ids[i]))
653				{
654					document.getElementById('component'+ids[i]).className = 'formError';
655					success = false;
656				}
657
658			if (response.length == 4)
659			{
660				page = parseInt(response[2]) - 1;
661				var totalPages = parseInt(response[3]);
662				rsfp_changePage(formId, page, totalPages, false);
663			}
664
665			if (typeof ajaxExtraValidationScript[formId] == 'function') {
666				ajaxExtraValidationScript[formId]('afterSend', formId, {'url': url, 'params': params, 'response': response, 'parentErrorClass': parentErrorClass});
667			}
668		}
669
670		for (i = 0; i < submits.length; i++) {
671			submits[i].disabled = false;
672		}
673		
674		if (success == false && document.getElementById('rsform_error_' + formId))
675		{
676			try {
677				if (typeof page == 'undefined' || page == 0) {
678					RSFormPro.callbacks.runCallback(formId, 'afterValidationFailed'); // callback functions if validation fails when form is submitted
679				} else {
680					RSFormPro.callbacks.runCallback(formId, 'nextPageFailed'); // callback functions if validation fails when a specific page of the form is checked
681				}
682				document.getElementById('rsform_error_' + formId).style.display = 'block';
683			}
684			catch (err) { }
685		}
686
687		if (success == true) {
688			try {
689				if (typeof page == 'undefined' || page == 0) {
690					RSFormPro.callbacks.runCallback(formId, 'afterValidationSuccess'); // callback functions if validation succeeds
691				} else {
692					RSFormPro.callbacks.runCallback(formId, 'nextPageSuccess'); // callback functions if validation succeeds when a specific page of the form is checked
693				}
694				document.getElementById('rsform_error_' + formId).style.display = 'none';
695			}
696			catch (err) { }
697		}
698
699		return success;
700	}
701};
702
703RSFormPro.callbacks = {
704	allCallbacks: {},
705	
706	addCallback: function(formId, callbackName, args) {
707		var base = RSFormPro.callbacks;
708		
709		if (typeof base.allCallbacks[formId] == 'undefined') {
710			base.allCallbacks[formId] = {}
711		}
712		
713		if (typeof base.allCallbacks[formId][callbackName] == 'undefined') {
714			base.allCallbacks[formId][callbackName] = [];
715		}
716		
717		base.allCallbacks[formId][callbackName].push(args);
718	},
719	
720	runCallback: function(formId, callbackName) {
721		var base = RSFormPro.callbacks;
722		if (typeof base.allCallbacks[formId] != 'undefined' && typeof base.allCallbacks[formId][callbackName] != 'undefined' && base.allCallbacks[formId][callbackName].length > 0) {
723			for (var i = 0; i < base.allCallbacks[formId][callbackName].length; i++) {
724				var args = base.allCallbacks[formId][callbackName][i];
725				var functionName = args[0];
726				
727				var functionArgs =  [];
728				for (var j = 1; j < args.length; j++) {
729					functionArgs.push(args[j]);
730				}
731				
732				// execute the callback function set for this trigger
733				functionName.apply(self, functionArgs);
734			}
735		}
736	}
737}
738
739/* Helper functions */
740
741var RSFormProUtils = {
742	addEvent: function(obj, evType, fn) {
743		if (obj.addEventListener) {
744			obj.addEventListener(evType, fn, false);
745			return true;
746		} else if (obj.attachEvent){
747			var r = obj.attachEvent("on"+evType, fn);
748			return r;
749		} else {
750			return false;
751		}
752	},
753	hasClass: function (el, name) {
754		return new RegExp('(\\s|^)' + name + '(\\s|$)').test(el.className);
755	},
756	addClass: function(el, name) {
757		if (!RSFormProUtils.hasClass(el, name)) {
758			el.className += (el.className ? ' ' : '') + name;
759		}
760	},
761	removeClass: function(el, name) {
762		if (RSFormProUtils.hasClass(el, name)) {
763			el.className = el.className.replace(new RegExp('(\\s|^)' + name + '(\\s|$)'),' ').replace(/^\s+|\s+$/g, '');
764		}
765	},
766	setDisplay: function (items, value) {
767		for (var i = 0; i < items.length; i++) {
768			items[i].style.display = value;
769		}
770	},
771	getAlias: function(str) {
772		str = str.replace(/\-/g, ' ');
773
774		if (!String.prototype.trim) {
775			str = str.replace(/^\s+|\s+$/g, '');
776		} else {
777			str = str.trim();
778		}
779
780		str = str.toLowerCase();
781		str = str.replace(/(\s|[^A-Za-z0-9\-])+/g, '-');
782		str = str.replace(/^\-+|\-+$/g, '');
783
784		return str;
785	},
786	getElementsByClassName: function (className, tag, elm) {
787		if (document.getElementsByClassName) {
788			getElementsByClassName = function (className, tag, elm) {
789				elm = elm || document;
790				var elements = elm.getElementsByClassName(className),
791					nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
792					returnElements = [],
793					current;
794				for(var i=0, il=elements.length; i<il; i+=1){
795					current = elements[i];
796					if(!nodeName || nodeName.test(current.nodeName)) {
797						returnElements.push(current);
798					}
799				}
800				return returnElements;
801			};
802		} else if (document.evaluate) {
803			getElementsByClassName = function (className, tag, elm) {
804				tag = tag || "*";
805				elm = elm || document;
806				var classes = className.split(" "),
807					classesToCheck = "",
808					xhtmlNamespace = "http://www.w3.org/1999/xhtml",
809					namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
810					returnElements = [],
811					elements,
812					node;
813				for(var j=0, jl=classes.length; j<jl; j+=1){
814					classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
815				}
816				try	{
817					elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
818				}
819				catch (e) {
820					elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
821				}
822				while ((node = elements.iterateNext())) {
823					returnElements.push(node);
824				}
825				return returnElements;
826			};
827		} else {
828			getElementsByClassName = function (className, tag, elm) {
829				tag = tag || "*";
830				elm = elm || document;
831				var classes = className.split(" "),
832					classesToCheck = [],
833					elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
834					current,
835					returnElements = [],
836					match;
837				for(var k=0, kl=classes.length; k<kl; k+=1){
838					classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
839				}
840				for(var l=0, ll=elements.length; l<ll; l+=1){
841					current = elements[l];
842					match = false;
843					for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
844						match = classesToCheck[m].test(current.className);
845						if (!match) {
846							break;
847						}
848					}
849					if (match) {
850						returnElements.push(current);
851					}
852				}
853				return returnElements;
854			};
855		}
856
857		return getElementsByClassName(className, tag, elm);
858	}
859};
860
861function isset() {
862  // http://kevin.vanzonneveld.net
863  // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
864  // +   improved by: FremyCompany
865  // +   improved by: Onno Marsman
866  // +   improved by: Rafał Kukawski
867  // *     example 1: isset( undefined, true);
868  // *     returns 1: false
869  // *     example 2: isset( 'Kevin van Zonneveld' );
870  // *     returns 2: true
871  var a = arguments,
872    l = a.length,
873    i = 0,
874    undef;
875
876  if (l === 0) {
877    throw new Error('Empty isset');
878  }
879
880  while (i !== l) {
881    if (a[i] === undef || a[i] === null) {
882      return false;
883    }
884    i++;
885  }
886  return true;
887}
888
889/* Legacy functions */
890
891function rsfp_geolocation(term, id, mapid,  map, marker, geocoder, type) {
892	return RSFormPro.initGeoLocation(term, id, mapid, map, marker, geocoder, type);
893}
894
895function refreshCaptcha(componentId, captchaPath) {
896	return RSFormPro.refreshCaptcha(componentId, captchaPath);
897}
898
899function number_format(number, decimals, dec_point, thousands_sep) {
900	return RSFormPro.formatNumber(number, decimals, dec_point, thousands_sep);
901}
902
903function rsfp_toNumber(number, decimal, thousands, decimals) {
904	return RSFormPro.toNumber(number, decimal, thousands, decimals);
905}
906
907function rsfp_getForm(formId) {
908	return RSFormPro.getForm(formId);
909}
910
911function rsfp_getValue(formId, name) {
912	return RSFormPro.getValue(formId, name);
913}
914
915function rsfp_verifyChecked(formId, name, value) {
916	return RSFormPro.isChecked(formId, name, value);
917}
918
919function rsfp_getBlock(formId, block) {
920	return RSFormPro.getBlock(formId, block);
921}
922
923function rsfp_getFieldsByName(formId, name) {
924	return RSFormPro.getFieldsByName(formId, name);
925}
926
927function rsfp_addEvent(obj, evType, fn) {
928	return RSFormProUtils.addEvent(obj, evType, fn);
929}
930
931function rsfp_setDisplay(items, value) {
932	return RSFormProUtils.setDisplay(items, value);
933}
934
935function stringURLSafe(str) {
936	return RSFormProUtils.getAlias(str);
937}
938
939function rsfp_changePage(formId, page, totalPages, validate, parentErrorClass) {
940	return RSFormPro.Pages.change(formId, page, totalPages, validate, parentErrorClass);
941}
942
943function rsfp_hidePage(thePage) {
944	return RSFormPro.Pages.hide(thePage);
945}
946
947function rsfp_showPage(thePage) {
948	return RSFormPro.Pages.show(thePage);
949}
950
951function rsfp_checkValidDate(fieldName) {
952	return RSFormPro.disableInvalidDates(fieldName);
953}
954
955function rsfp_addCondition(formId, name, fnCondition) {
956	return RSFormPro.Conditions.add(formId, name, fnCondition);
957}
958
959function rsfp_runAllConditions(formId) {
960	return RSFormPro.Conditions.runAll(formId);
961}
962
963function rsfp_setCalculationsEvents(formId, fields) {
964	return RSFormPro.Calculations.addEvents(formId, fields);
965}
966
967function getElementsByClassName(className, tag, elm) {
968	return RSFormProUtils.getElementsByClassName(className, tag, elm);
969}
970
971function buildXmlHttp() {
972	return RSFormPro.Ajax.getXHR();
973}
974
975function ajaxDisplayValidationErrors(formComponents, task, formId, data) {
976	return RSFormPro.Ajax.displayValidationErrors(formComponents, task, formId, data);
977}
978
979function ajaxValidation(form, page, parentErrorClass) {
980	return RSFormPro.Ajax.validate(form, page, parentErrorClass);
981}

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.