PageSourceSearch

https://www.almazarahotel.com/modulos/buscador_V5/templates/public/js/engine__-2107141207.js

js almazarahotel.com collected 2026-10-09 21:25:45 UTC 22,489 bytes, 904 lines download raw bytes

1(function($){
2	'use strict';
3
4	/* --------------------------------- */
5	/* ------------ GENERAL ------------ */
6	/* --------------------------------- */
7
8	// TEMP JS - BEGIN //
9
10	$.fn.shown = function()
11	{
12		var o = $(this);
13
14		return o.css('display') === 'none' || o.width() === 0 || o.height() === 0 ? false : true;
15	};
16
17	$.fn.formSelect = function()
18	{
19		var o = this;
20
21		o.each(function(i,o)
22		{
23			$('select',o).val( $('option[selected]',o).length ? $('option[selected]',o).val(): $('option:selected',o).val() )
24				.closest('.select').find('span:eq(0)').text( $('option:selected',o).text() )
25				.end().change(function()
26				{
27					$('select',o).val( $('option:selected',o).val() )
28						.closest('.select').find('span:eq(0)').text( $('option:selected',o).text() );
29				});
30		});
31
32		return o;
33	};
34
35	$.fn.canvas = function(a,b)
36	{
37		var o = this;
38
39		if ( a && typeof a === 'function' && !ie.lt9 )
40			for ( var i = 0; i < o.length; i++ )
41				a( o[i].getContext('2d') );
42		else if ( a.name && a.name !== '' )
43			o.canvas
44			(
45				function(c)
46				{
47					if ( a.fillStyle )
48						c.fillStyle = a.fillStyle;
49					else if ( a.strokeStyle )
50						c.strokeStyle = a.strokeStyle;
51					if ( a.name === 'plus' )
52					{
53						c.fillRect(7,0,2,16);
54						c.fillRect(0,7,16,2);
55					}
56					else if ( a.name === 'arrow' )
57					{
58						c.moveTo(0,0);
59						c.lineTo(6,7);
60						c.lineTo(12,0);
61						c.stroke();
62					}
63					else if ( a.name === 'calendar' )
64					{
65						var w = 4;
66						c.fillRect(0,0,w,w);
67						c.fillRect(5,0,w,w);
68						c.fillRect(10,0,w,w);
69						c.fillRect(0,5,w,w);
70						c.fillRect(5,5,w,w);
71						c.fillRect(10,5,w,w);
72						c.fillRect(0,10,w,w);
73						c.fillRect(5,10,w,w);
74						c.fillRect(10,10,w,w);
75					}
76					else if ( a.name === 'bed' )
77					{
78						c.fillRect(0,0,2,13);
79						c.fillRect(2,8,19,2);
80						c.fillRect(21,4,2,10);
81						c.fillRect(3,4,3,3);
82						c.fillRect(7,4,13,3);
83					}
84					else if ( a.name === 'close' )
85					{
86						c.moveTo(0,0);
87						c.lineTo(12,12);
88						c.moveTo(12,0);
89						c.lineTo(0,12);
90						c.stroke();
91					}
92				},
93				b ? b : ''
94			);
95		else if ( b && typeof b === 'string' )
96			o.parent().css('background-image', 'url(' + config.url + '/' + b + ')' );
97
98		return o;
99	};
100
101	// TEMP JS - END //
102
103	var engine		=	window.engine = {
104							o			:	$('#engine'),
105							form		:	$('#engine').closest('form'),
106							header		:	$('#engine header'),
107							section		:	$('#engine section'),
108							calendar	:	$('#engineCalendar'),
109							datepicker	:	$('#datepicker'),
110							rooms		:	$('#engineRooms'),
111							code		:	$('#engine .code'),
112							handler		:	true,
113							speed		:	250,
114							background	:	$( '<div/>', { 'id': 'engineDarkBg', 'css': { opacity:0.6 } } )
115						},
116	engineForm		=	{
117							checkin		:	$('#fecha_entrada', engine.o),
118							checkout	:	$('#fecha_salida', engine.o),
119							rooms		:	$('#rooms_input', engine.o)
120						},
121	engineDefault	=	{
122							adults		:	$('.rooms.container select:eq(0) option:selected', engine.o),
123							children	:	$('.rooms.container select:eq(1) option:selected', engine.o)
124						},
125	ie				=	window.ie = {													// IE VARS
126							o:			/MSIE/.test(navigator.userAgent),
127							lt7:		/MSIE [0-6]{1}\./.test(navigator.userAgent),
128							lt9:		/MSIE [0-8]{1}\./.test(navigator.userAgent)
129						};
130
131	if ( ie.lt9 )
132	{
133		var oldSize = { width: $(window).width(), height: $(window).height() };
134
135		$(window).resize(function()
136		{
137			var currSize = { width: $(window).width(), height: $(window).height() };
138
139			if ( currSize.height != oldSize.height || currSize.width != oldSize.width )
140			{
141				oldSize = currSize;
142
143				if ( engine.o.length )
144					engineWindowShown();
145			}
146		});
147	}
148	else
149		$(window).resize(function()
150		{
151			if ( engine.o.length )
152				engineWindowShown();
153		});
154
155	if ( engine.o.length ) {
156
157		$(function(){
158
159			// TEMP CODE - BEGIN //
160
161			$('canvas', engine.header).canvas({
162					name:		'plus',
163					fillStyle:	'#fff'
164				},
165				'images/engine/close_white.png'
166			);
167
168			$('.select canvas', engine.o).canvas({
169					name:			'arrow',
170					strokeStyle:	'#000'
171				},
172				'images/engine/arrow_black.png'
173			);
174
175			$('.select canvas', engine.rooms).canvas({
176					name:			'arrow',
177					strokeStyle:	'#000'
178				},
179				'images/engine/arrow_black.png'
180			);
181
182			$('.calendar.input canvas', engine.o).canvas({
183					name:		'calendar',
184					fillStyle:	'#000'
185				},
186				'images/engine/calendar_black.png'
187			);
188
189			$('.rooms.input canvas', engine.o).canvas({
190					name:		'bed',
191					fillStyle:	'#000'
192				},
193				'images/engine/bed_black.png'
194			);
195
196			$('.code canvas', engine.o).canvas({
197					name:			'close',
198					strokeStyle:	'#000'
199				},
200				'images/engine/close_black.png'
201			);
202
203			$('canvas', engine.calendar).canvas({
204					name:			'close',
205					strokeStyle:	'#fff'
206				},
207				'images/engine/cross_white.png'
208			);
209
210			$('.close canvas', engine.rooms).canvas({
211					name:			'close',
212					strokeStyle:	'#fff'
213				},
214				'images/engine/cross_white.png'
215			);
216
217			// TEMP CODE - END //
218
219			$('.select', engine.o).formSelect();
220
221			$('.select:lt(3) select', engine.o).change(function()
222			{
223				$('.select:lt(3)', engine.o).each(function()
224				{
225					var o = $('span:eq(0)', this), s = $('option:selected', this).text();
226
227					if ( o.text() !== s )
228						o.text(s);
229				});
230			});
231
232			// Toggle the section when the header is clicked
233
234			engine.o.on('click','header',function()
235			{
236				if ( engine.handler )
237				{
238					engineWindowShown();
239
240					$(this).delay( engine.rooms.shown() ? engine.speed*2 : 0 ).queue(function()
241					{
242						handler( engine );
243
244						$(this).dequeue();
245
246						var shown = engine.section.shown();
247
248						engine.section.slideToggle( engine.speed * 1.5, function(){ handler( engine ); } );
249
250						$('.canvas', this).fadeOut
251						(
252							engine.speed * 0.75,
253							function()
254							{
255								if (ie.lt9) {
256									$(this).css('background-image','url(' + config.url + '/images/engine/' + ( shown ? 'open_white' : 'close_white' ) + '.png)');
257								}
258								else {
259									$(this).css('transform','rotate(' + ( shown ? 0 : 45 ) + 'deg)');
260								}
261
262								$(this).fadeIn(engine.speed * 0.75);
263							}
264						);
265					});
266				}
267			});
268
269			// CALENDAR //
270
271			var checkInSelected  = false,
272				checkOutSelected = false,
273				engineCheckIn	 = $('#fecha_entrada', engine.o).val(),
274				engineCheckOut	 = $('#fecha_salida', engine.o).val(),
275				dateFormat       = 'dd/mm/yy',
276				start            = $.datepicker.parseDate(dateFormat,engineCheckIn),
277				end              = $.datepicker.parseDate(dateFormat,engineCheckOut),
278				getOffsetDay     = function( date, offSet ){
279					var nextDayDate = new Date(date.getTime());
280					nextDayDate.setDate( nextDayDate.getDate() + offSet );
281					return nextDayDate;
282				},
283				setInputDate     = function(date,checkIn){
284					engineFormUpdate( checkIn ? engineForm.checkin : engineForm.checkout, date );
285					$('.calendar.input '+ (checkIn ? '.in' : '.out'), engine.o).text( date );
286				};
287
288			// Show the calendar when some hotel's option is selected
289
290			$('.select.hotel', engine.o).change(function()
291			{
292				if ( $('option:selected', this).index() > 0 && !checkInSelected )
293					$('.calendar.input .in', engine.o).click();
294			});
295
296			$('.calendar.input .in', engine.o).text(engineCheckIn);
297			$('.calendar.input .out', engine.o).text(engineCheckOut);
298
299			$.datepicker.setDefaults( $.datepicker.regional[ ( config.lang !== 'en' ? config.lang: '' ) ] );
300			$.datepicker.setDefaults( {
301					firstDay       : 1,
302					prevText       : '',
303					nextText       : '',
304					maxDate        : '+2y+1m',
305					yearRange      : '0:+2',
306					yearSuffix     : '',
307					numberOfMonths : tablet ? 1 : 2,
308					dateFormat     : 'dd/mm/yy'
309			} );
310
311			// Attach the datepicker plugin to the DOM element
312
313			engine.datepicker
314				.append($('<div/>').addClass('dp in').datepicker( {
315					defaultDate: start,
316					minDate:     "+0d",
317					onSelect:    function( selectedDate ) {
318
319						checkInSelected = true;
320						start = $.datepicker.parseDate(dateFormat, selectedDate);
321						setInputDate(selectedDate,true);
322
323						var minDate = getOffsetDay(start, 1);
324						var changeCheckOut = minDate > end;
325
326						if (changeCheckOut) {
327							end = minDate;
328							setInputDate( $.datepicker.formatDate(dateFormat, end), false );
329							$('.dp.out', engine.datepicker)
330								.datepicker( "setDate", end )
331								.datepicker( "option", "gotoCurrent", true );
332							checkOutSelected = false;
333						}
334
335						$('.dp.out', engine.datepicker)
336							.datepicker( "option", "minDate", minDate );
337
338						$('.close', engine.calendar).trigger('click',function(){
339							if (!checkOutSelected) {
340								$('.calendar.input .out', engine.o).click();
341							}
342						});
343					}
344				} ))
345				.append($('<div/>').addClass('dp out').datepicker( {
346					defaultDate: end,
347					minDate:     "+1d",
348					onSelect:    function( selectedDate ) {
349
350						checkOutSelected = true;
351						end = $.datepicker.parseDate(dateFormat, selectedDate);
352						if (start >= end) {
353							var prevDayDate = getOffsetDay(end, -1);
354							setInputDate($.datepicker.formatDate(dateFormat, prevDayDate),true);
355							$('.dp.in', engine.datepicker).datepicker( "setDate", prevDayDate );
356						}
357
358						setInputDate(selectedDate,false);
359
360						$('.close', engine.calendar).click();
361					}
362				} ));
363
364			// Show the calWin
365
366			$('.calendar.input', engine.o).each(function()
367			{
368				$(this).click(function()
369				{
370					var checkinClicked = $(this).find('>.in').length>0;
371
372					$('.title',engine.calendar).text(checkinClicked?engineTag.checkin:engineTag.checkout);
373
374					$(checkinClicked?'.out':'.in',engine.datepicker).hide();
375
376					var o = $(checkinClicked?'.in':'.out',engine.datepicker).show();
377
378					if ( engine.handler && !engine.calendar.shown() )
379					{
380						engineWindowShown( engine.rooms );
381
382						handler( engine );
383
384						var x = engine.o.position().left + engine.o.outerWidth() + 10,
385							y = $(this).position().top + ( engine.o.css('top') == 'auto' ? 0 : parseFloat( engine.o.css('top') ) ) + parseFloat( engine.o.css('margin-top') ) + 7,
386							c = tablet || engine.form.hasClass('static');
387
388						engine.calendar.css({ top: y, left: x });
389
390						o.css({ 'max-width': ( c ? 270 : '' ), 'min-width': ( c ? 220 : '' ) });
391
392						if ( mobile || engine.form.hasClass('static') )
393						{
394							engine.background.appendTo('body').fadeIn( engine.speed );
395							engine.calendar.slideDown( engine.speed, function(){ handler( engine ); } );
396						}
397						else
398						{
399							engine.calendar.appendTo('body');
400
401							var w = $('#engineCalendar').show().outerWidth();
402
403							$('#engineCalendar').insertBefore( engine.rooms );
404
405							engine.calendar.hide().find('header').outerWidth(w).next().hide();
406
407							engine.calendar.width(0).show().animate
408							(
409								{ width: w },
410								engine.speed / 2,
411								function()
412								{
413									$('header div', engine.calendar).show().delay(50).animate({ left: -16 },engine.speed);
414
415									$('section', this).delay(50).slideDown
416									(
417										engine.speed,
418										function()
419										{
420											handler( engine );
421										}
422									);
423								}
424							);
425						}
426					}
427				});
428			});
429
430			// Hide the calWin
431
432			$('.close', engine.calendar).click(function(e,callback)
433			{
434				if ( engine.handler )
435				{
436					handler( engine );
437
438					$('#engineDarkBg').fadeOut( engine.speed, function(){ $(this).remove(); } );
439
440					engine.calendar.fadeOut
441					(
442						engine.speed * 1.5,
443						function()
444						{
445							$(this).width('')
446								.find('header').width('')
447								.find('div').hide().css('left',0);
448
449							handler( engine );
450
451							if ( typeof callback === "function" )
452								callback();
453						}
454					);
455				}
456			});
457
458			// ROOMS WINDOW //
459
460			// Clone the first room
461
462			var addRoom = $('.container:eq(0)', engine.rooms).clone().hide();
463
464			$('.container:eq(0) .remove', engine.rooms).addClass('vh');
465
466			// Default statements
467
468			$('.select', engine.rooms).formSelect();
469
470			if ( RoomsInfo && RoomsInfo !== '' && RoomsInfo.hab)
471				$.each
472				(
473					RoomsInfo.hab,
474					function(i,v)
475					{
476						// If there are no room with this index, make it
477
478						if ( !$('.container:eq(' + i + ')', engine.rooms).length )
479							engineRoomCreate( addRoom );
480
481						// Then, select the right options of each room
482
483						$('.container:eq(' + i + ') select', engine.rooms).each(function(index)
484						{
485                            var maxAdults = $("option",this).length;
486							$(this).val( index === 0 ? (maxAdults >= v.adultos ? v.adultos : maxAdults) : v.ninos )
487								.closest('.select').find('span:eq(0)').text( $('option:selected', this).val() );
488						});
489					}
490				);
491
492			engineFormUpdate( engineForm.rooms, $('.container', engine.rooms).length );
493
494			$('.container:eq(0) select', engine.rooms).each(function(index)
495			{
496				var o = $('.rooms.container:eq(' + index + ') select', engine.o), s = $('option:selected', this);
497
498				o.val( $('option:eq(' + s.index() + ')', o).val() )
499					.closest('.select').find('span:eq(0)').text( s.text() );
500			});
501
502			// Verify if there are more than only one room
503
504			if ( engineForm.rooms.val() > 1 )
505			{
506				$('.rooms.container, .rooms.input', engine.o).toggle();
507				engineRoomUpdate( engineForm.rooms.val() );
508			}
509
510			// Update automatically the first room data in both places
511
512			$.each
513			(
514				[
515					$('.rooms.container select', engine.o),
516					$('.container:eq(0) select', engine.rooms)
517				],
518				function(i,v)
519				{
520					$.each
521					(
522						v,
523						function(index)
524						{
525							$(this).change
526							(
527								function()
528								{
529									var o = $(this).closest( engine.rooms ).length ? $('.rooms.container:eq(' + index + ') select', engine.o) : $('.container:eq(0) select:eq(' + index + ')', engine.rooms),
530										s = $('option:selected', this);
531
532									o.val( $('option:eq(' + s.index() + ')', o).val() )
533										.closest('.select').find('span:eq(0)').text( s.text() );
534								}
535							);
536						}
537					);
538				}
539			);
540
541			// Show the engine.rooms
542
543			$('.rooms.input, .rooms.more span:eq(1)', engine.o).click(function()
544			{
545				if ( engine.handler && !engine.rooms.shown() )
546				{
547					engineWindowShown( engine.calendar );
548
549					handler( engine );
550
551					engine.rooms.css('margin-top', engine.o.css('margin-top') );
552
553					if ( $('.rooms.container', engine.o).shown() && $('.container', engine.rooms).length > 1 )
554						$('.rooms.container, .rooms.input', engine.o).slideToggle(engine.speed * 2);
555
556					var rooms = $('.container', engine.rooms).length;
557
558					if ( mobile || engine.form.hasClass('static') )
559					{
560						engine.background.appendTo('body').fadeIn( engine.speed );
561						engine.rooms.slideDown
562						(
563							engine.speed,
564							function()
565							{
566								handler( engine );
567
568								if ( rooms == 1 )
569									$('.add span', engine.rooms).click();
570							}
571						);
572					}
573					else
574					{
575						var e = engine.o.outerHeight(),
576							r = engine.rooms.show().outerHeight(),
577							x = engine.o.position().left + engine.o.outerWidth(),
578							y = engine.o.position().top + ( e > r ? e - r : 0 );
579
580							if($('html')[0].lang == 'ar'){
581								engine.rooms.css({top:y,right:'270px'})	
582								.children()	.animate
583								(
584									{ right: 0 },
585									engine.speed * 2,
586									function()
587									{
588										handler( engine );
589	
590										if ( rooms == 1 )
591											$('.add span', engine.rooms).click();
592									}
593								);
594							} else {
595								engine.rooms.css({top:y,left:x})	
596								.children()	.animate
597								(
598									{ left: 0 },
599									engine.speed * 2,
600									function()
601									{
602										handler( engine );
603	
604										if ( rooms == 1 )
605											$('.add span', engine.rooms).click();
606									}
607								);
608							}
609					}
610				}
611			});
612
613			// Hide the engine.rooms
614
615			$('.close, button', engine.rooms).click(function()
616			{
617				if ( engine.handler )
618				{
619					handler( engine );
620
621					$('#engineDarkBg').fadeOut( engine.speed, function(){ $(this).remove(); });
622
623					if (mobile || engine.form.hasClass('static')) {
624						engine.rooms.fadeOut(engine.speed, function(){ handler( engine ); });
625					}
626					else {
627						if($('html')[0].lang == 'ar'){
628							engine.rooms.children().animate(
629								{ right: '-100%' },
630								engine.speed*2,
631								function()
632								{
633									$(this).parent().hide();
634									handler( engine );
635								}
636							);
637						} else {
638							engine.rooms.children().animate(
639								{ left: '-100%' },
640								engine.speed*2,
641								function()
642								{
643									$(this).parent().hide();
644									handler( engine );
645								}
646							);
647						}
648					}
649				}
650			});
651
652			// Add a new room
653
654			$('.add span', engine.rooms).click(function()
655			{
656				if( max_rooms === 0 || $('.container', engine.rooms).length < max_rooms )
657				{
658					if ( engine.handler )
659					{
660						handler( engine );
661
662						if ( engine.section.shown() )
663							engineRoomPose(1);
664
665						var rooms = $('.container', engine.rooms).length + 1;
666
667						engineFormUpdate( engineForm.rooms, rooms );
668
669						engineRoomCreate( addRoom, 'slideDown' );
670
671						if (rooms == 2 && $('.rooms.container', engine.o).shown()) {
672							$('.rooms.container, .rooms.input', engine.o).slideToggle(engine.speed);
673						}
674						else {
675							engineRoomUpdate(rooms);
676						}
677
678						if(rooms == max_rooms)
679						{
680							$('.add span').hide();
681						}
682					}
683				}
684				else
685				{
686					$('.add span').hide();
687				}
688			});
689
690			// Remove an existing room
691
692			engine.rooms.on
693			(
694				'click',
695				'.remove',
696				function()
697				{
698					if ( engine.handler )
699					{
700						handler( engine );
701
702						engineRoomPose();
703
704						var rooms = $('.container', engine.rooms).length;
705
706						engineFormUpdate( engineForm.rooms, rooms-1 );
707
708						if (rooms == 2 && $('.rooms.input', engine.o).shown()) {
709							$('.rooms.container, .rooms.input', engine.o).slideToggle(engine.speed);
710						}
711						else {
712							engineRoomUpdate(rooms-1);
713						}
714
715						if( ! $('.add span').shown())
716						{
717							$('.add span').show();
718						}
719
720						$(this).closest('.container').slideUp
721						(
722							engine.speed,
723							function()
724							{
725								var rooms = $('.container', engine.rooms).length;
726
727								handler( engine );
728
729								$(this).remove();
730
731								if ( $('.container:eq(-1) .fl span', engine.rooms).text() != $('.container', engine.rooms).length )
732									$('.container', engine.rooms).each
733									(
734										function(index)
735										{
736											if ( $('.fl span', this).text() != index + 1 )
737											{
738												$('.fl span', this).fadeOut
739												(
740													engine.speed/2,
741													function()
742													{
743														$(this).text( index + 1 ).fadeIn(engine.speed/2);
744													}
745												);
746
747												$('select', this).each
748												(
749													function()
750													{
751														var attr = $(this).attr('name'),
752															begin = attr.indexOf(']') + 1,
753															end = attr.indexOf(']', begin ) - begin + 1,
754															str = attr.substr( begin, end );
755
756														$(this).attr('name', attr.replace( str, '[' + ( index + 1 ) + ']' ) );
757													}
758												);
759											}
760										}
761									);
762							}
763						);
764					}
765				}
766			);
767
768			// PROMO CODE
769
770			$('input', engine.code).attr('placeholder', $('input', engine.code).attr('placeholder').toUpperCase() );
771
772			// Toggle the promotional code input
773
774			$('span, .canvas', engine.code).click(function(){ $('div', engine.code).toggle(engine.speed); });
775
776			// FORM SUBMIT
777
778			$('button', engine.o).click(function()
779			{
780				var submit = true;
781
782				if ( engine.calendar.shown() || engine.rooms.shown() )
783					engineWindowShown();
784
785				if ( ( $('#selector_pais',engine.form).val() == "0" && $('#selector_ciudad',engine.form).val() == "0" && $('#selector_hotel',engine.form).val() == "0" ) || engineForm.checkout.val() === '' )
786					submit = false;
787
788				if ( submit && typeof ejecuta_buscar != "undefined" )
789					ejecuta_buscar();
790
791				return false;
792			});
793
794		});
795	}
796
797	// Return the opposite of the received var
798
799	function handler(o){ o.handler = !o.handler; }
800
801	// Update the <input type="hidden"/> as 'o' with a new value as 'v'
802
803	function engineFormUpdate(o,v){ o.val( v ); }
804
805	// Hide the engine windows if they are shown
806
807	function engineWindowShown(o)
808	{
809		if (typeof o === 'object' && o.shown()) {
810			$('.close', o).click();
811		}
812		else {
813			$('.engineWindow').each(function(){ if ( $(this).shown() ) $('.close', this).click(); });
814		}
815	}
816
817	// Clone 'o' showed by default or slided down when 'e' is equal to 'slideDown', given as a string
818
819	function engineRoomCreate(o,e)
820	{
821		if ( typeof o !== 'object' )
822			return;
823
824		var rooms	= $('.container', engine.rooms).length + 1,
825			last	= $('.container:eq(-1)', engine.rooms);
826
827		o.clone()
828			.find('.fl span').text( rooms )
829			.end().find('.select').formSelect()
830			.end().find('select').each
831			(
832				function(index)
833				{
834					/*var attr	= $(this).attr('name'),
835						begin	= attr.indexOf(']', attr.indexOf(']') + 1) + 1,
836						end		= attr.indexOf(']', begin ) - begin + 1,
837						str		= attr.substr( begin, end );
838
839					$(this).attr('name', attr.replace( str, '[' + rooms + ']' ) );
840					*/
841					$(this).attr('name', $(this).attr('name') );
842				}
843			)
844			.end().find('canvas').canvas
845			(
846				{
847					name:			'arrow',
848					strokeStyle:	'#000'
849				},
850				'images/engine/arrow_black.png'
851			)
852			.end().insertAfter( last );
853
854		if (e && e === 'slideDown') {
855
856			last.next().slideDown(engine.speed,function(){
857				if ( !engine.handler )
858					handler( engine );
859			});
860		}
861		else {
862			last.next().show();
863		}
864	}
865
866	function engineRoomUpdate(l){
867		$('.rooms.input span:eq(0)', engine.o).fadeOut(engine.speed/2, function(){ $(this).text( l ).fadeIn(engine.speed/2); });
868	}
869
870	function engineRoomPose(i)
871	{
872		var o = $('.container', engine.rooms),
873			wh = engine.rooms.outerHeight(),
874			wt = engine.rooms.position().top,
875			eh = engine.o.outerHeight(),
876			ah = o.outerHeight(),
877			al = i === 1 ? o.length + 1 : o.length - 1,
878			wf = i === 1 ? wh + ah : wh - ah,
879			st = engine.rooms.scrollTop();
880
881		o.hide();
882
883		var ta = parseInt( ( eh - engine.rooms.outerHeight() ) / ah ),
884			wr = eh - ( ah * ta + engine.rooms.outerHeight() );
885
886		o.show();
887
888		engine.rooms.scrollTop( st );
889
890		if ( i === 1 && al == ta + 1 )
891			wt -= wr;
892		else if ( i !== 1 && al == ta )
893			wt += wr;
894
895		if ( i === 1 && eh > wf )
896			wt -= ah;
897		else if ( i !== 1 && eh > wh )
898			wt += ah;
899
900		if ( wt != engine.rooms.position().top )
901			engine.rooms.animate( { top: wt }, engine.speed );
902	}
903
904}(jQuery));

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.