PageSourceSearch

https://dourorun.pt/scripts/main.js?0.5.0.39

js dourorun.pt collected 2026-10-06 07:18:50 UTC 36,404 bytes, 1,329 lines download raw bytes

1var ADMEUS = {};
2var PORTAL = {};
3jQuery.noConflict();
4var baseJsUrl = baseUrl + '/scripts/library/';
5var jsUrl = baseUrl + '/scripts/';
6var timeoutMsg = '';
7var portalName = '';
8
9
10/**
11 * ajax - wrapper based on prototype to do custom ajax calls
12 * @param request {boolean} 'post' or true=POST, 'get' or false=GET
13 * @param action {string} url to call
14 * @param option {string} optional info to send with call
15 * @param e {string} html tag id where to send response
16 * @param form {string} if we are POSTing name of form
17 * @param confirm {string} optional message to request confirmation from user
18 * @param execute {string} optional extra js function to execute after this request is complete
19 * @return false
20 */
21function ajax (request, action, option, e, form, confirm, execute, exec_params, load_text)
22{
23	// check GET params
24	params = window.location.href.toQueryParams();
25	// by default with don't need confirmation
26	var go = true;
27	if (confirm)
28	{
29		go = window.confirm(confirm);
30	}
31	// inject our base params
32	parameters = new Hash();
33    parameters.set('option', option);
34	if (params['lang'])
35	{
36		parameters.set('lang', params['lang']);
37	}
38    else
39    {
40        parameters.lang = '';
41    }
42	// our followup function needs to execute with params
43	if (exec_params)
44	{
45		execute = String(execute+'("'+exec_params+'")');
46	}
47	// set load image location
48	if (go)
49	{
50        if (!load_text) load_text = '';
51		ajaxShowLoadingImage(e, request, load_text);
52	}	
53	// process regular get requests
54	if ((!request || request == 'get' || request == 'geth') && go)
55	{
56		var myAjax = new Ajax.Request(action, {
57			method: 'get',
58			parameters: parameters,
59            timeoutDelay: 30,
60            onFailure: ajaxTimeout,
61            onTimeout: ajaxTimeout,
62			onComplete: function (transport) {
63				ajaxHideLoadingImage(e);
64                var response = transport.responseText;
65                var regexp = /trackPageview/;
66                if (response.match(regexp))
67                {
68                    if (!baseUrl) baseUrl = '/';                    
69                    window.location = baseUrl;
70                    return false;
71                }
72				$(e).innerHTML = transport.responseText;
73				if (execute)
74				{
75					eval(execute);
76				}
77                return true;
78			}
79		});
80	}
81	// process form post requests
82	else if ((request || request == 'post') && go)
83	{
84		if ($(form))
85		{
86            // add hidden element for option
87            var o = document.createElement('INPUT');
88            o.setAttribute('type', 'hidden');
89            o.setAttribute('name', 'option');
90            o.setAttribute('value', option);
91    		$(form).appendChild(o);
92			//capture file uploads
93			/*var formData = new FormData($(form));
94			var upload_fields = $(form).getInputs('file');
95			if (upload_fields.length)
96			{
97				for (var i = 0; i < upload_fields.length; i++)
98				{
99					if (upload_fields[i].id && upload_fields[i].files[0])
100					{
101						formData.append(upload_fields[i].id, upload_fields[i].files[0], upload_fields[i].value);
102					}
103				}
104			}
105			var queryString = new URLSearchParams(formData);*/
106            // submit form
107			$(form).request({
108                onFailure: ajaxTimeout,
109                onTimeout: ajaxTimeout,
110				onComplete: function (transport) {
111					ajaxHideLoadingImage(e);
112                    var response = transport.responseText;
113                    var regexp = /trackPageview/;
114                    if (response.match(regexp))
115                    {
116                        if (!baseUrl) baseUrl = '/';
117                        window.location = baseUrl;
118                        return false;
119                    }
120					$(e).innerHTML = transport.responseText;
121					if (execute)
122					{
123						eval(execute);
124					}
125                    return true;
126				}
127			});
128		}
129		else
130		{
131            ajaxHideLoadingImage(e);
132			if (execute)
133			{
134				eval(execute);
135			}
136		}
137	}
138	return false;
139}
140
141/**
142 * hide possible secondary image location
143 */
144function ajaxHideLoadingImage(target)
145{
146	if ($(target+'_load'))
147	{
148        showElement(target);
149		target = target + '_load';
150		hideElement(target);
151	}
152}
153
154/**
155 * show ajax load image
156 */
157function ajaxShowLoadingImage(target, request, load_text)
158{
159	if ($(target+'_load'))
160	{
161        if (request == 'post' ||  request == 'get')
162        {
163            hideElement(target);
164        }
165		target = target + '_load';
166		$(target).innerHTML = '<img src="'+baseUrl+'/images/manager/ajax_loader.gif" class="vmiddle"> ' + load_text;
167		showElement(target);
168	}
169}
170
171/**
172 * ajax timeout
173 */
174var ajaxTimeout = function(arg)
175{
176    displayMessenger('messenger', timeoutMsg, 'error');
177    /*
178    if (arg.request.timeout)
179        failureNode.update("failure has occured, server timeout at fault");
180    else
181        console.log("failure has occured, unknown causes.");
182    */
183}
184
185var cX = 0; var cY = 0; var rX = 0; var rY = 0;
186function UpdateCursorPosition(e){ cX = e.pageX; cY = e.pageY;}
187function UpdateCursorPositionDocAll(e){ cX = event.clientX; cY = event.clientY;}
188if(document.all) { document.onmousemove = UpdateCursorPositionDocAll; }
189else { document.onmousemove = UpdateCursorPosition; }
190
191function AssignPosition(e)
192{
193	if (self.pageYOffset)
194	{
195		rX = self.pageXOffset;
196		rY = self.pageYOffset;
197	}
198	else if (document.documentElement && document.documentElement.scrollTop)
199	{
200		rX = document.documentElement.scrollLeft;
201		rY = document.documentElement.scrollTop;
202	}
203	else if (document.body)
204	{
205		rX = document.body.scrollLeft;
206		rY = document.body.scrollTop;
207	}
208	if (document.all)
209	{
210		cX += rX;
211		cY += rY;
212	}
213	e.style.position = 'absolute';
214	e.style.left = (cX+20) + "px";
215	e.style.top = (cY-20) + "px";
216}
217
218/**** UPLOAD ****/
219
220/**
221 * avatar uploader
222 *
223 * @param int register_id
224 */
225function avatarUploader(register_id)
226{
227	//get upload position
228	var avatar_width = jQuery('#avatarHolder').width();
229	var avatar_height = jQuery('#avatarHolder').height();
230	var avatar_top = jQuery('#avatarHolder').offset().top;
231	var avatar_left = jQuery('#avatarHolder').offset().left;
232	//set upload position
233	jQuery('#avatarUploader').appendTo('body');
234	jQuery('#avatarUploader').css('width', avatar_width);
235	jQuery('#avatarUploader').css('height', avatar_height);
236	jQuery('#avatarUploader').css('top', avatar_top);
237	jQuery('#avatarUploader').css('left', avatar_left);
238	jQuery('#avatarUploader').css('padding-top', '60px');
239	//uploader
240	var uploader = new qq.FileUploader({
241		// pass the dom node 
242		element: document.getElementById('file-uploader'),
243		// path to server-side upload script
244		action: baseUrl+'/index/upload',
245		params: {
246			path: 'avatars',
247			register: register_id,
248			text: 'xxx'
249		 },
250		onComplete: function(id, fileName, responseJSON) {
251			if (avatarChanger(register_id))
252			{
253				if (typeof(responseJSON) == 'object') {
254					if (typeof(responseJSON.success) != 'undefined') {
255						new PNotify({
256							title: 'Upload de foto concluido',
257							type: 'success',
258							styling: 'bootstrap3'
259						});
260					}
261					else if (typeof(responseJSON.error) != 'undefined') {
262						new PNotify({
263							title: responseJSON.error,
264							type: 'error',
265							styling: 'bootstrap3'
266						});
267					}
268				}
269				jQuery('#avatarHolder').click();
270			}
271		}
272	});
273}
274
275/**
276 * avatar changer
277 *
278 * @param int register_id
279 */
280function avatarChanger(register_id)
281{
282	var randomnumber=Math.floor(Math.random()*1001)
283	jQuery('#avatarHolderTemp').attr('src', baseUrl+'/account/personal/avatar?id='+register_id+'&'+randomnumber);
284	if (jQuery('#avatarHolder').attr('src', baseUrl+'/account/personal/avatar?id='+register_id+'&'+randomnumber))
285	{
286		return true;
287	}
288}
289
290// classSelect - changes the css class of an element
291function classSelect (id, offClass, onClass)
292{
293	if ($(id).hasClassName(onClass))
294	{
295		$(id).removeClassName(onClass);
296		$(id).addClassName(offClass);
297	}
298	else
299	{
300		$(id).removeClassName(offClass);
301		$(id).removeClassName(offClass);
302		$(id).addClassName(onClass);
303	}
304}
305
306/**
307 * clean search datatables
308 */
309function cleanSearch(idTable,search,deleteElem){
310	var table = jQuery('#'+idTable).DataTable();
311	//hideElement('search-clear');
312	jQuery('#search-clear'+deleteElem).hide();
313	jQuery('#'+search).val('');
314	jQuery('#'+search).removeClass('active');
315	table.search('').draw();
316	
317}
318/**
319 * check areas
320 *
321 */
322function checkAreas()
323{
324	//check areas
325	if (jQuery('#areas-element').length && jQuery('#areas_control').length)
326	{
327        jQuery('#areas_control').val('');
328		jQuery('#areas-element input').each(function(v, index) {
329            if (jQuery(index).prop('checked'))
330            {
331                jQuery('#areas_control').val(1);
332                return false;
333            }
334        });
335	}
336}
337/**
338 * checks forms for empty fields and hightlights
339 *
340 * @param string form
341 */
342function checkForm(form)
343{
344    var status = true;
345    jQuery('#'+form+' input').each(function(){
346        
347        if (!jQuery('#'+this.id).val()) {
348            jQuery('#'+this.id).removeClass('border').addClass('errorField');
349            if (status) jQuery('#'+this.id).focus();
350            status = false;            
351        }
352        else jQuery('#'+this.id).removeClass('errorField').addClass('border');
353    });
354    return status;
355}
356
357
358/**
359 * checks a form for errors messages and hightlights
360 *
361 * @param string form
362 */
363function checkTypesInfo(type_id, type_name) {
364	jQuery('.registrationType').each(function(index, value) {
365		var id = jQuery(this).attr('id');
366		id = id.split('_')[1];
367		jQuery('#registrationType_' + id).html(jQuery('#textButton_' + id).html());
368	});
369	if (jQuery('#visibleInfo').html() == type_name)
370	{
371		window.location = baseUrl + '/registration?type=' + type_id;
372	}
373	else
374	{
375		jQuery('.portalRegistrationInfo').addClass('hidden');
376		jQuery('#portalRegistrationInfo_' + type_name).removeClass('hidden');
377		jQuery('.infoClick').removeClass('infoClickChecked');
378		jQuery('#infoClick_' + type_name).addClass('infoClickChecked');
379		jQuery('#visibleInfo').html(type_name);
380		jQuery('#registrationType_' + type_id).html('<div class="font small">' + jQuery('#continueText').html() +'</div>' + jQuery('#textButton_' + type_id).html());
381		jQuery('#panelLeft').scrollTop(0);
382		jQuery('#panelLeft').animate({
383            scrollTop: jQuery('#infoClick_' + type_name).position().top - 30
384        }, 500);
385	}
386}
387
388/**
389 * checks a form for errors messages and hightlights
390 *
391 * @param string form
392 */
393function checkFormErrors() {
394	var count = 0;
395	
396	var elems = [];
397    jQuery('.errors').each(function(index) {
398        var text = '';
399        // get texts
400        jQuery(this).children('li').each(function() {
401            text += jQuery(this).text()+'<br>';
402        });
403        var id = jQuery(this).parent().attr('id');
404        id = id.replace("-element", "");
405		if (id != 'formRegister')
406		{
407        	jQuery('#'+id).removeClass('border').addClass('errorField');
408		}
409		if( jQuery('#portal').length > 0){
410			if(id == 'contactName'){
411				elems.push('contactName');
412				jQuery('#'+id).parent().addClass('col-md-5');
413			}else{
414				if(id == 'contactEmail'){
415					jQuery('#'+id).parent().addClass('col-md-4');
416					elems.push('contactEmail');
417				}else{
418					if(id == 'contactPhone'){
419						jQuery('#'+id).parent().addClass('col-md-3');
420						jQuery('#'+id).removeClass('errorField').addClass('border');
421						elems.push('contactPhone');
422					}else{
423						if(id == 'message'){
424						jQuery('#'+id).parent().addClass('col-md-12');
425						elems.push('message');
426					}
427					}
428				}
429			}
430		}
431		
432        // change helper
433        jQuery('#'+id).attr('help', text);
434        jQuery('#helper').removeClass('assistant').addClass('error');
435        // holder if any
436        if (jQuery('#'+id).attr('holder'))
437        {
438            jQuery('#'+id).val(jQuery('#'+id).attr('holder'));
439        }
440		count ++;
441    });
442	if( jQuery('#portal').length > 0){
443		if(count != 0){
444			showElement('text');
445		}
446		if(jQuery.inArray( "contactName", elems ) == -1){
447			jQuery('#contactName').parent().addClass('col-md-5');
448		}
449		if(jQuery.inArray( "contactPhone", elems ) == -1){
450			jQuery('#contactPhone').parent().addClass('col-md-3');
451		}
452		if(jQuery.inArray( "contactEmail", elems ) == -1){
453			jQuery('#contactEmail').parent().addClass('col-md-4');
454		}
455		if(jQuery.inArray( "message", elems ) == -1){
456			jQuery('#message').parent().addClass('col-md-12');
457		}
458	}
459}
460
461/**
462 * checks if country exists
463 *
464 * @param country
465 * @param countriesList
466 */
467function check_country (country, countriesList, fieldName)
468{
469	var field_name = 'country';
470	if (fieldName)
471	{
472		field_name = fieldName;
473	}
474	var search = '';
475	//cycle throw countries
476	for (var i = 0; i < countriesList.length; i++)
477	{
478		//if contry is found
479		if (country.toLowerCase() == countriesList[i].toLowerCase())
480		{
481			search = countriesList[i];
482			continue;
483		}
484	}
485	if (!search)
486	{
487		//clean country
488		jQuery('#' + field_name).val('');
489	}
490	else
491	{
492		//add formated location
493		jQuery('#' + field_name).val(search);
494	}
495}
496
497/**
498 * shows the messenger
499 *
500 * @param element - where to display the message on
501 * @param msg - message to display (optional)
502 * @param type - type of message (sucess, error), optional
503 */
504function displayMessenger(element, msg, type)
505{
506	if (!element)
507	{
508		element = 'messenger';
509	}
510    // try to auto detect a type
511    if (!type || type == 'undefined' || type == '')
512    {
513        if (!msg && jQuery('#' + element).length)
514        {
515            msg = $(element).innerHTML;
516        }
517        if (msg && msg.search(/%E%/) > -1)
518        {
519            type = 'error';
520            msg = msg.replace(/%E%/, " ");
521        }
522		else if (msg && msg.search(/%S%/) > -1)
523        {
524            type = 'sucess';
525            msg = msg.replace(/%S%/, " ");
526        }
527		else
528        {
529			type = 'info';
530			if (msg) {
531				msg = msg.replace(/%I%/, " ");
532			}
533        }
534    }
535    // add message
536	if (msg)
537	{
538		if (!jQuery('#' + element).length && !jQuery('#messenger').length)
539		{
540			jQuery('body').append('<div id="messenger" class="hidden"></div>');
541			element = 'messenger';
542		}
543		$(element).innerHTML = msg;
544	}
545    // change aspect according to type
546    if (type)
547    {
548		var m = '';
549		if ($(element) && $(element).innerHTML)
550		{
551			m = $(element).innerHTML;
552		}
553        if (m && type == 'sucess')
554        {
555			new PNotify({
556                title: m,
557                type: 'success',
558                styling: 'bootstrap3',
559				delay:3000
560            });
561        }
562        else if (m && type == 'error')
563        {
564			new PNotify({
565                title: m,
566                type: 'error',
567                styling: 'bootstrap3',
568				delay:3000
569            });
570        }
571		else if (m && type == 'info')
572        {
573			new PNotify({
574                title: m,
575                type: 'info',
576                styling: 'bootstrap3',
577				delay:3000
578            });
579        }
580    }
581    // display
582	//showElement(element);
583}
584
585/**
586 * Displays the given element in the given position of other element
587 *
588 * @param target{string} - element to show
589 * @param ref {string} - element
590 * @param position {string} - position of the element to show
591 */
592function displayOn(target, ref, position)
593{
594	// if already on, hide it and quit
595    if($(target).hasClassName('visible'))
596    {
597        hideElement(target);
598        return false;
599    }
600	if ($(ref) && !$(ref).id)
601	{
602		document.body.appendChild($(ref));
603	}
604	if ($(ref))
605	{
606		var ref_ele = getAbsolutePos($(ref));
607		showElement(target);
608		if (typeof(jQuery('.nav_title').text()) != 'undefined')
609			document.body.appendChild($(target));
610		//left bottom left-point
611		if(position == 'lb1')
612		{
613			$(target).style.left = parseFloat(ref_ele.x) - parseFloat($(target).offsetWidth) + "px";
614			$(target).style.top = parseFloat(ref_ele.y) + parseFloat($(ref).offsetHeight) + "px";
615		}
616		//left top right-point
617		else if(position == 'lt4' || position == 'lt_rb')
618		{
619			$(target).style.left = parseFloat(ref_ele.x) + "px";
620			$(target).style.top = parseFloat(ref_ele.y) + "px";
621		}
622		//left bottom right-point
623		else if(position == 'lb2')
624		{
625			$(target).style.left = parseFloat(ref_ele.x) + "px";
626			$(target).style.top = parseFloat(ref_ele.y) + parseFloat($(ref).offsetHeight) + "px";
627		}
628		//right bottom left-point
629		else if(position == 'rb1')
630		{
631			$(target).style.left = parseFloat(ref_ele.x) + parseFloat($(ref).offsetWidth) - parseFloat($(target).offsetWidth) + "px";
632			$(target).style.top = parseFloat(ref_ele.y) + parseFloat($(ref).offsetHeight) + "px";
633		}
634		//right bottom right-point
635		else if(position == 'rb2')
636		{
637			$(target).style.left = parseFloat(ref_ele.x) + parseFloat($(ref).offsetWidth) + "px";
638			$(target).style.top = parseFloat(ref_ele.y) + parseFloat($(ref).offsetHeight) + "px";
639		}
640		//left top left-point
641		else if(position == 'lt1')
642		{
643			$(target).style.left = parseFloat(ref_ele.x) - parseFloat($(target).offsetWidth) + "px";
644			$(target).style.top = parseFloat(ref_ele.y) - parseFloat($(target).offsetHeight) + "px";
645		}
646		//left top right-point
647		else if(position == 'lt2')
648		{
649			$(target).style.left = parseFloat(ref_ele.x) + "px";
650			$(target).style.top = parseFloat(ref_ele.y) - parseFloat($(target).offsetHeight) + "px";
651		}
652		//right top left-point
653		else if(position == 'rt1')
654		{
655			$(target).style.left = parseFloat(ref_ele.x) + parseFloat($(ref).offsetWidth) - parseFloat($(target).offsetWidth) + "px";
656			$(target).style.top = parseFloat(ref_ele.y) - parseFloat($(target).offsetHeight) + "px";
657		}
658		//right top right-point
659		else if(position == 'rt2')
660		{
661			$(target).style.left = parseFloat(ref_ele.x) + parseFloat($(ref).offsetWidth) + "px";
662			$(target).style.top = parseFloat(ref_ele.y) - parseFloat($(target).offsetHeight) + "px";
663		}
664		//right top left-point inside
665		else if(position == 'rti1')
666		{
667			$(target).style.left = parseFloat(ref_ele.x) + parseFloat($(ref).offsetWidth) - parseFloat($(target).offsetWidth) + "px";
668			$(target).style.top = parseFloat(ref_ele.y) - parseFloat($(target).offsetHeight) + parseFloat($(target).offsetHeight) + "px";
669		}
670		 //right top left-point outside
671		else if(position == 'rti2')
672		{
673			$(target).style.left = parseFloat(ref_ele.x) + parseFloat($(ref).offsetWidth) + "px";
674			$(target).style.top = parseFloat(ref_ele.y) - parseFloat($(target).offsetHeight) + parseFloat($(target).offsetHeight) + "px";
675		}
676		$(target).style.position = 'absolute';
677		$(target).style.display = 'block';
678		$(target).style.zIndex = "50";
679		//if target is inside of a modal window
680		if ($('modal'))
681		{
682			$(target).style.zIndex = parseFloat($('modal').style.zIndex) + parseFloat(1);
683		}
684	}
685}
686
687function getAbsolutePos(el)
688{
689	var SL = 0, ST = 0;
690	var is_div = /^div$/i.test(el.tagName);
691	if (is_div && el.scrollLeft)
692		SL = el.scrollLeft;
693	if (is_div && el.scrollTop)
694		ST = el.scrollTop;
695	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
696	if (el.offsetParent) {
697		var tmp = this.getAbsolutePos(el.offsetParent);
698		r.x += tmp.x;
699		r.y += tmp.y;
700	}
701	return r;
702}
703
704/**
705 * find participant
706 *
707 */
708function findParticipant()
709{
710	if (jQuery.trim(jQuery('#findParticipant').val()))
711	{
712		jQuery('#noResults').removeClass('hidden');
713		jQuery.each(jQuery('.tdName'), function( index, value ) {
714			if (jQuery(value).attr('title').toLowerCase().indexOf(jQuery.trim(jQuery('#findParticipant').val()).toLowerCase()) >= 0)
715			{
716				jQuery(value).parent().removeClass('hidden');
717				jQuery('#noResults').addClass('hidden');
718			}
719			else
720			{
721				jQuery(value).parent().addClass('hidden');
722			}
723		});	
724	}
725	else
726	{
727		jQuery('.tdName').parent().removeClass('hidden');
728		jQuery('#noResults').addClass('hidden');
729	}
730}
731
732/**
733 * add help comments to form tags
734 *
735 * @param form {string}
736 */
737function formHelper(form, new_line)
738{
739	elements = $(form).getElements();
740	if (elements)
741	{
742		for(i=0; i<elements.length; i++)
743		{
744			elements[i].onfocus=function(){
745				var on_focus = '';
746				if ($(this.id).readAttribute('onfocus'))
747				{
748					on_focus = $(this.id).readAttribute('onfocus');
749				}
750				if ($(this).readAttribute('help'))
751				{
752					help = 'helper';
753					if (!$(help).hasClassName('help'))
754					{
755						$(help).addClassName('help hidden font small textleft');
756					}
757					$(help).innerHTML = $(this).readAttribute('help');
758					if (new_line)
759					{
760						jQuery('#'+(this).readAttribute('id')).parent().append(jQuery('#helper'));
761						jQuery('#helper').removeClass('hidden');
762					}
763					// we might have a support element to index our help
764					else if ($($(this).readAttribute('id')+'_help'))
765					{
766						displayOn(help, $(this).readAttribute('id')+'_help', 'rti2');
767					}
768					// just display next to element
769					else
770					{
771						displayOn(help, $(this).readAttribute('id'), 'rti2');
772					}
773				}
774				if (on_focus) eval(on_focus);
775			}
776			elements[i].onblur=function(){
777				if ($(this).readAttribute('help'))
778				{
779					help = 'helper';
780					hideElement(help);
781				}
782			}
783		}
784	}
785}
786
787/**
788 * get viewport from browser
789 */
790function getBrowserDimensions()
791{
792	var viewport = { x: 0, y: 0 };
793	if (Prototype.Browser.IE) {
794		viewport.height = document.documentElement.clientHeight;
795		viewport.width = document.documentElement.clientWidth;
796	} else {
797		viewport.height = window.innerHeight;
798		viewport.width = document.width || document.body.offsetWidth;
799	}
800	return viewport;
801}
802
803/**
804 * hides an element using css class
805 *
806 * @param e {string}
807 */
808function hideElement(e)
809{
810	if (jQuery('#'+e))
811	{
812		jQuery('#'+e).removeClass('visible');
813		jQuery('#'+e).addClass('hidden');
814	}
815}
816
817/**
818 * hides a floating element
819 *
820 * @param e {string}
821 */
822function hideFloat(e)
823{
824	if (e.length < 1) { return; }
825	$(e).removeClassName('show');
826	$(e).removeClassName(e);
827	$(e).addClassName('hidden');
828}
829
830/**
831 * opens an ajax in a modal window
832 *
833 * @param width {string} width of modal window
834 * @param height {string} height of modal window
835 * @param element {string} element name for modal window
836 * @param closeText {string} text to close window
837 * @param closeImage {string} image to close window
838 * @param closeFunction {string} function to execute after closure
839 */
840function modalWindowOpen(width, height, element, closeText, closeImage, closeFunction)
841{
842	// get viewport and center point
843	viewport = getBrowserDimensions();
844	var center = { x: 0, y: 0 };
845	center.height = viewport.height/2;
846	center.width = viewport.width/2;
847	// build overlay
848	var overlay = Element.extend(document.createElement('div'));
849	overlay.writeAttribute('id', 'overlay');
850	overlay.observe('click', function(){
851		modalWindowClose(closeFunction);
852	});
853	overlay.setStyle({
854		top:0,
855		left:0,
856		zIndex:999,
857		backgroundColor:'black',
858		opacity:'0.7',
859		position:'absolute',
860		width:'100%',
861		height:viewport.height+'px',
862		display:'none'
863	});
864	// build modal window
865	var modal = Element.extend(document.createElement('div'));
866	modal.writeAttribute('id', 'modal');
867	modal.setStyle({
868		top:(center.height-height/2)+'px',
869		left:(center.width-width/2)+'px',
870		zIndex:1001,
871		background:'none repeat scroll 0 0 #F8F7F7',
872		position:'absolute',
873		width:width+'px',
874		height:height+'px',
875		overflow:'auto',
876		display:'none'
877	});
878	// build close button
879	var modalClose = Element.extend(document.createElement('div'));
880	modalClose.setAttribute('id', 'modalClose');
881	modalClose.observe('click', function(){
882		modalWindowClose(closeFunction);
883	});
884	modalClose.setStyle({
885		top:(center.height-(20+height/2))+'px',
886		left:(center.width-width/2)+'px',
887		zIndex:1001,
888		color:'white',
889		position:'absolute',
890		width:width+'px',
891		height:'20px',
892		textAlign:'right',
893		display:'none'
894	});
895	modalClose.addClassName('link font normal bold');
896	modalClose.innerHTML = closeText;
897	if(closeImage)
898	{
899		modalClose.innerHTML = modalClose.innerHTML + ' <img src="'+ closeImage + '" class="vmiddle"/>';
900	}
901	// build out content element
902	var content = Element.extend(document.createElement('div'));
903	content.setAttribute('id', element);
904	content.setStyle({
905		position:'relative',
906		display:'none'
907	});
908	// build out content loading element
909	var contentLoad = Element.extend(document.createElement('div'));
910	contentLoad.setAttribute('id', element+'_load');
911	contentLoad.setStyle({
912		position:'relative'
913	});
914	// add our modal elements to the document body for display
915	var body = document.getElementsByTagName('body')[0];
916	body.appendChild(overlay);
917	body.appendChild(modal);
918	modal.appendChild(content);
919	modal.appendChild(contentLoad);
920	body.appendChild(modalClose);
921	// display our modal element
922	overlay.show();
923	modal.show();
924	modalClose.show();
925	content.show();
926}
927
928/**
929 * destroys modal elements thus closing modal window and execute a function
930 *
931 * @param closeFunction {string}
932 */
933function modalWindowClose(closeFunction)
934{
935	var body = document.getElementsByTagName('body')[0];
936	body.removeChild($('modal'));
937	body.removeChild($('modalClose'));
938	body.removeChild($('overlay'));
939	if(closeFunction)
940	{
941		eval(closeFunction);
942	}
943}
944
945function openNewCalendar(options)
946{
947	// ensure that options is an object
948	if (typeof options != 'object')
949	{
950		options = {field: options}
951	}
952	// set default vales if not passed
953	if (!options.format) options.format = "yy-mm-dd";	
954	//call calendar
955	var current_date = new Date();
956	if (options.type == 'event') {
957		var start_year = current_date.getFullYear() - 3;	
958		var end_year = current_date.getFullYear() + 10;	
959		jQuery('#' + options.field).datepicker({
960			changeMonth: true,
961			changeYear: true,
962			dateFormat: options.format,
963			yearRange: start_year + ':' + end_year,
964			onSelect: function(date) {
965				var start_date = jQuery("#start").datepicker("getDate");
966				var end_date = jQuery("#end").datepicker("getDate");
967				if (options.field == 'start' && (!jQuery("#end").val() || start_date >= end_date))
968				{
969					var new_end_date = jQuery("#start").datepicker("getDate");
970					new_end_date.setHours(new_end_date.getHours() + 1); 
971					jQuery("#end").datepicker("setDate", new_end_date);
972				}
973			}
974		});	
975		/*jQuery('#' + options.field).datetimepicker({
976			changeMonth: true,
977			changeYear: true,
978			dateFormat: options.format,
979			yearRange: current_date.getFullYear()+ ':' + end_year,
980			timeFormat: "HH:mm:ss",
981			hour: 8,
982			onSelect: function(date) {
983				var start_date = jQuery("#start").datepicker("getDate");
984				var end_date = jQuery("#end").datepicker("getDate");
985				if (options.field == 'start' && (!jQuery("#end").val() || start_date >= end_date))
986				{
987					var new_end_date = jQuery("#start").datepicker("getDate");
988					new_end_date.setHours(new_end_date.getHours() + 1); 
989					jQuery("#end").datepicker("setDate", new_end_date);
990				}
991			}
992		});*/
993	}
994	else if (options.type == 'quota')
995	{
996		var start_year = current_date.getFullYear() - 3;
997		var end_year = current_date.getFullYear() + 25;
998		jQuery('#' + options.field).datepicker({
999			changeMonth: true,
1000			changeYear: true,
1001			dateFormat: options.format,
1002			yearRange: start_year + ':' + end_year,
1003			onSelect: function(date) {
1004				var start_date = jQuery("#start").datepicker("getDate");
1005				var end_date = jQuery("#end").datepicker("getDate");
1006				if (options.field == 'start' && (!jQuery("#end").val() || start_date >= end_date))
1007				{
1008					var new_end_date = jQuery("#start").datepicker("getDate");
1009					new_end_date.setDate(new_end_date.getDate() + 1);
1010					jQuery("#end").datepicker("setDate", new_end_date);
1011				}
1012				else if (options.field == 'end' && start_date > end_date)
1013				{
1014					var new_end_date = jQuery("#start").datepicker("getDate");
1015					jQuery("#end").datepicker("setDate", new_end_date);
1016				}
1017			}
1018		});		
1019	}	
1020	else
1021	{
1022		var end_year = current_date.getFullYear() - 1;	
1023		jQuery('#' + options.field).datepicker({
1024			changeMonth: true,
1025			changeYear: true,
1026			dateFormat: options.format,
1027			yearRange: '1930:' + end_year,
1028			defaultDate: '-30y'
1029		});		
1030	}	
1031}
1032
1033function prepareJsForm()
1034{
1035	if (typeof(jQuery('#formPersonal').attr('id')) != 'undefined')
1036	{
1037		//formHelper('formPersonal', true);
1038	}
1039	// automplete countries
1040	if (typeof(jQuery('#listCountries').attr('id')) != 'undefined') {
1041		var countriesList = jQuery('#listCountries').text().split(',');
1042		if (countriesList) {
1043			if (typeof(jQuery("#country").attr('id')) != 'undefined') {
1044				jQuery("#country").autocomplete({ source:countriesList });
1045				jQuery('#country').blur(function() { check_country (this.value, countriesList, 'country'); });
1046			}
1047			if (typeof(jQuery("#nacionality").attr('id')) != 'undefined') {
1048				jQuery("#nacionality").autocomplete({ source:countriesList });
1049				jQuery('#nacionality').blur(function() { check_country (this.value, countriesList, 'nacionality'); });
1050			}
1051		}
1052	}
1053	window.scrollTo(0, 0);
1054	if (jQuery('.errors').length)
1055	{
1056		jQuery('.question').css('background', 'rgb(253, 237, 237)');
1057	}
1058	jQuery.each(jQuery('.errors'), function( index, value ) {
1059		jQuery(value).siblings('input').css('background', 'rgb(253, 237, 237)');
1060		jQuery(value).siblings('select').css('background', 'rgb(253, 237, 237)');
1061		jQuery(value).siblings('input[type=checkbox]').parent().parent().css('color', '#FF0000');
1062		jQuery(value).siblings('input[type=checkbox]').parent().parent().siblings('.checkboxDivText').css('color', '#FF0000');
1063	});
1064	if (jQuery('#no_email').length)
1065	{
1066		PORTAL.account.noEmail();
1067	}
1068}
1069
1070function reverseFloat(d)
1071{
1072	if (d.length < 1) { return; }
1073	var e = $(d);
1074	AssignPosition(e);
1075	if ($(e).hasClassName('hidden'))
1076	{
1077		$(e).removeClassName('hidden');
1078		$(e).addClassName('show');
1079		$(e).addClassName(d);
1080	}
1081	else
1082	{
1083		$(e).removeClassName('show');
1084		$(e).removeClassName(d);
1085		$(e).addClassName('hidden');
1086	}
1087}
1088
1089/**
1090 * reverses the current visibility of an element
1091 *
1092 * @param string e
1093 */
1094function reverseVisibility (e)
1095{
1096	if ($(e).hasClassName('hidden'))
1097	{
1098		$(e).removeClassName('hidden');
1099		$(e).addClassName('show');
1100	}
1101	else
1102	{
1103		$(e).removeClassName('show');
1104		$(e).addClassName('hidden');
1105	}
1106}
1107
1108function selector(field, value)
1109{
1110	for (i=0; i<$(field).length; i++)
1111	{
1112		if ($(field).options[i].value == value)
1113		{
1114			$(field).selectedIndex=i;
1115			break;
1116		}
1117	}
1118}
1119
1120/**
1121 * changes the innerHTML of an element
1122 *
1123 * @param content
1124 * @param element
1125 */
1126function setContent(content, element)
1127{
1128    $(element).innerHTML = content;
1129}
1130
1131/**
1132 * supplies an handy calendar selector
1133 *
1134 * @param field {string} where to tie the calendar to
1135 * @param relative {string} opens the calendar with
1136 */
1137function setRelated(calendar)
1138{
1139	if ($('end') && $('start'))
1140	{
1141		date1 = $('start').value.split('-');
1142		date2 = $('end').value.split('-');
1143		var startDate = new Date(date1[0], date1[1], date1[2]);
1144		var endDate = new Date(date2[0], date2[1], date2[2]);
1145	}
1146	if ($('end') && $('start') && $('start') == calendar.params.inputField)
1147	{
1148		$('end').value = $('start').value;
1149	}
1150	else if ($('end') && $('start') && startDate>endDate)
1151	{
1152		$('end').value = $('start').value;
1153	}
1154}
1155
1156/**
1157 * sets the translated timeout msg
1158 *
1159 * @param msg {string}
1160 */
1161function setTimeoutMsg(msg)
1162{
1163    timeoutMsg = msg;
1164}
1165
1166/**
1167 * sets tiny mce
1168 *
1169 * @param lang {string}
1170 */
1171function setTinyMce (lang, t_width, t_height, tiny_height = 500)
1172{
1173	if (!t_width)
1174	{
1175		t_width = '100%';
1176	}
1177	if (!t_height)
1178	{
1179		t_height = '100%';
1180	}
1181	if (!lang)
1182	{
1183		lang = 'en';
1184	}
1185	lang = (lang == 'br' ? 'pt' : lang);
1186	
1187		buttons1 = "bold italic underline strikethrough undo redo | alignleft aligncenter alignright al
1187ignjustify";
1188		buttons2 = "fontselect | fontsizeselect | bullist numlist link unlink | image table  forecolor backcolor styleprops | nonbreaking hr removeformat preview code ";
1189
1190	//tiny mce
1191				tinymce.init({
1192					selector: 'textarea',
1193					/*external_plugins: {
1194					  "xhtmlxtras": baseUrl+"/scripts/library/tiny_mce/plugins/xhtmlxtras/editor_plugin.js"
1195					},*/
1196					theme: "modern",
1197					height: tiny_height,
1198					menubar: false,
1199					language: lang,
1200					relative_urls: false,
1201					convert_urls : false,
1202					verify_html: false,
1203					toolbar: 'fontsizeselect',
1204					fontsize_formats: '8pt 9pt 10pt 11pt 12pt 13pt 14pt 15pt 16pt 17pt 18pt 19pt 20pt',
1205					extended_valid_elements: "a[class|name|href|target|title|onclick|rel],script[type|src],iframe[src|style|width|height|scrolling|marginwidth|marginheight|frameborder],img[align<bottom?left?middle?right?top|alt|border|class|dir<ltr?rtl|height|hspace|id|ismap<ismap|lang|longdesc|name|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|src|style|title|usemap|vspace|width],$elements",
1206					plugins: [
1207					  'advlist autolink lists link image charmap print preview hr anchor pagebreak',
1208						'searchreplace wordcount visualblocks visualchars code fullscreen',
1209						'insertdatetime media nonbreaking save table contextmenu directionality',
1210						'emoticons template paste textcolor colorpicker textpattern imagetools codesample toc spellchecker'
1211					],
1212					autosave_ask_before_unload: true,
1213					toolbar1:buttons1 ,
1214					toolbar2:buttons2 ,
1215					content_css: baseUrl + "/scripts/library/tiny_mce/themes/advanced/skins/default/custom_content.css",
1216					valid_children: "+body[style]",
1217					setup : function(ed) {
1218						ed.on("click", function(ed, e) {
1219							actualCaretPositionBookmark = tinymce.EditorManager.activeEditor.selection.getBookmark(1);
1220						});
1221						ed.on("keyup", function(ed,e) {
1222							actualCaretPositionBookmark = tinymce.activeEditor.selection.getBookmark(1);
1223						});
1224						ed.on("Event", function() {
1225							actualCaretPositionBookmark = tinymce.EditorManager.activeEditor.selection.getBookmark(1);
1226						});
1227					}
1228  
1229	
1230});
1231	/*tinyMCE.init({
1232		theme: "advanced",
1233		mode: "textareas",
1234		language: lang,
1235		relative_urls: false,
1236		convert_urls : false,
1237		verify_html: false,
1238		extended_valid_elements: "a[class|name|href|target|title|onclick|rel],script[type|src],iframe[src|style|width|height|scrolling|marginwidth|marginheight|frameborder],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],$elements",
1239		plugins: "safari,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
1240		theme_advanced_buttons1: buttons1,
1241		theme_advanced_buttons2: buttons2,
1242		theme_advanced_buttons3: buttons3,
1243		theme_advanced_buttons4: buttons4,
1244		content_css : baseUrl + "/scripts/library/tiny_mce/themes/advanced/skins/default/custom_content.css",
1245		theme_advanced_font_sizes: "8pt,9pt,10pt,11pt,12pt,13pt,14pt,15pt,16pt,17pt,18pt,19pt,20pt",
1246		font_size_style_values : "8pt,9pt,10pt,11pt,12pt,13pt,14pt,15pt,16pt,17pt,18pt,19pt,20pt",
1247		height: t_height,
1248		width: t_width,
1249		theme_advanced_toolbar_location: "top",
1250		theme_advanced_toolbar_align: "left",
1251		valid_children: "+body[style]",
1252		setup: function (ed) {
1253			ed.onKeyUp.add(function (ed, e) {
1254				actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark(1);
1255			});
1256			ed.onClick.add(function (ed, e) {
1257				actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark(1);
1258			});
1259			ed.onEvent.add(function (ed, e) {
1260				actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark(1);
1261			});
1262		}
1263	});*/
1264}
1265
1266function showElement(e)
1267{
1268	if (jQuery('#'+e))
1269	{
1270		jQuery('#'+e).removeClass('hidden');
1271		jQuery('#'+e).addClass('visible');
1272	}
1273}
1274
1275/**
1276 * shows an element next to the mouse
1277 *
1278 * @param d {string} element to display
1279 */
1280function showFloat(d)
1281{
1282	if (d.length < 1) { return; }
1283	var e = $(d);
1284	AssignPosition(e);
1285	$(e).removeClassName('hidden');
1286	$(e).addClassName('show');
1287	$(e).addClassName(d);
1288}
1289
1290/**
1291 * show waiting image
1292 *
1293 * @param target {string} what to replace to show waiting image
1294 * @param text {string} text to show next to image
1295 */
1296function showWaiting(target, text)
1297{
1298	if ($(target))
1299	{
1300		$(target).innerHTML = '<img src="'+baseUrl+'/images/manager/ajax_loader.gif" class="vmiddle">' + ' ' + text;
1301	}
1302}
1303
1304function check(){
1305	 var error_field = jQuery('#error_field').html();
1306    if (error_field != null && error_field) {
1307        checkFormErrors();
1308        $(error_field).focus();
1309    }else{
1310		var msg = jQuery('#successMsg').text();
1311        if (msg.search(/%S%/) > -1)
1312        {
1313            displayMessenger('successMsg', msg);
1314            var msg_only_text = msg.replace('%S%', '');
1315            new PNotify({
1316                title: msg_only_text,
1317                type: 'success',
1318				display:3000,
1319                styling: 'bootstrap3'
1320            });
1321        }
1322		if (typeof(jQuery('#redirectUrlForm').attr('id')) != 'undefined') {
1323			var temp_url = jQuery('#redirectUrlForm').text();
1324			if (temp_url) {
1325				setTimeout(function(){ window.location = baseUrl+'/'+temp_url; }, 2000);
1326			}
1327		}
1328	}
1329}

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.