PageSourceSearch

https://www.hertz.cn/rentacar/assets/1788380323808/all/global.js

js hertz.cn collected 2026-10-05 00:59:12 UTC 234,111 bytes, 5,564 lines download raw bytes

1                                                                                                                   
2                              
3   																																																																																																																																																																																																																																																																																																																																																																																																						
4 																																																																																																																			
5  
6                                                     
7                 
8	                                                                                                                  
9	                            
10		/**
11	@description Checks if provided JavaScript NameSpace(s) exist, if not creates one.
12	@function
13*/
14window.checkHertzNameSpace = function() {   
15    var a = arguments,    
16        i = 0,   
17        j = 0, 
18        o = null,
19        p = null,   
20        n = null;
21        ref = [];
22    for (i = 0; i < a.length; i++) {
23    	o = window;
24        p = a[i].split(".");   
25        for (j = 0; j < p.length; j++) {   
26            n = p[j];             
27            o[n] = o[n] || {};   
28            o = o[n];   
29        }
30        ref[i] = o;
31    }
32    
33    return ref;
34};
35
36window.checkHertzNameSpace('htz.utils');
37
38/**
39    @description Various util methods
40    @class Utils
41    @requires JQuery
42 */
43var Utils = Utils ||  (function() {
44
45	return /** @lends Utils */ {
46
47		//hz464486//irac-647//Update online-check in form for International
48		handlePlaceHolderFocusOut:function(e){
49			e.stopPropagation();
50			var target= e.currentTarget;
51			if(!htz.config.isApp){
52					if ($(target).val() != "") {
53						$(target).next("span.floating-label").css({
54							'font-size': '14px',
55							'margin-top': '-65px'
56
57						});
58					} else {
59						$(target).next("span.floating-label").css("margin-top", "-65px").css("font-size", "14px").find("label").css("vertical-align", "top");
60
61					}
62			}
63		},
64
65		//hz464486//irac-647//Update online-check in form for International
66		handlePlaceHolderFocusIn:function(e,target){
67			//e.stopPropagation();
68			var target=target!=null?target:e.currentTarget;
69
70			if(!htz.config.isApp){
71				if(!($(target)[0].id=="")){
72
73					$(target).next("span.floating-label").css({
74						'font-size' : '14px',
75						'margin-top' : '-65px'
76					});
77				}
78			}
79
80		},
81
82		//dtc4102//irac-770
83		//Display error special character handling when unsupported character is entered in a field
84		//display Error
85		handleInvalidCharsError : function(ele, error, index){
86			var list = ele.closest(".sectionContainer").prev(".bookableErrorMsgPadding"), ul = list.find("ul"), li = $('<li>').text(error).attr("lang", index);
87			if(!ul.length || (ul.length && !ul.find('li').filter(function(){return $(this).text()===error;}).length)){
88				if(ul.length){
89					var last = ul.find('li[lang="1"]');
90					if(last.length){
91						last.before(li);
92					}
93					else {
94						ul.append(li);
95					}
96				}
97				else {
98					list.append($('<ul class="field-error-list">').append(li))
99				}
100			}
101			list.show();
102		},
103		//dtc4102//irac-770
104		//Display error special character handling when unsupported character is entered in a field
105		//clear Error
106		clearInvalidCharsError : function(ele,error){
107			ele.closest(".sectionContainer").prev(".bookableErrorMsgPadding").find('.field-error-list li').filter(function(){
108				return $(this).text()===error;
109			}).remove();
110		},
111		//dtc4102//irac-770
112		//Display error special character handling when unsupported character is entered in a field
113		//checks input for special characters
114		getUsAsciiValidationPattern : function(fieldName) {
115			if (!fieldName) {
116				return null;
117			}
118			var nameFields = ['firstName', 'lastName'];
119			var addressLineFields = [
120				'homeAddressLine1', 'homeAddressLine2',
121				'businessAddressLine1', 'businessAddressLine2',
122				'pickupServiceAddressLine1', 'pickupServiceAddressLine2'
123			];
124			var cityFields = ['homeCity', 'businessCity', 'pickupServiceAddressCity'];
125			var zipFields = ['homeZip', 'businessZip', 'pickupServiceAddressZipCode'];
126			var emailFields = [
127				'emailAddress', 'verifyEmailAddress',
128				'secondaryEmailAddress', 'verifySecondaryEmailAddress',
129				'email', 'emailVerify'
130			];
131
132			if (nameFields.indexOf(fieldName) >= 0) {
133				return /^[a-zA-Z -']*$/;
134			}
135			if (addressLineFields.indexOf(fieldName) >= 0) {
136				return /^[a-zA-Z0-9 -'.#]*$/;
137			}
138			if (cityFields.indexOf(fieldName) >= 0 || zipFields.indexOf(fieldName) >= 0) {
139				return /^[a-zA-Z0-9 -.']*$/;
140			}
141			if (emailFields.indexOf(fieldName) >= 0) {
142				return /^[a-zA-Z0-9@._+-]*$/;
143			}
144			return null;
145		},
146		getUsAsciiValidationError : function(referrer, fieldName) {
147			if (fieldName === 'firstName') {
148				return referrer.formData.get('firstNameInvalidCharsError');
149			}
150			if (fieldName === 'lastName') {
151				return referrer.formData.get('lastNameInvalidCharsError');
152			}
153			var emailFields = [
154				'emailAddress', 'verifyEmailAddress',
155				'secondaryEmailAddress', 'verifySecondaryEmailAddress',
156				'email', 'emailVerify'
157			];
158			if (emailFields.indexOf(fieldName) >= 0
159					&& referrer.formData.get('emailInvalidCharsError')) {
160				return referrer.formData.get('emailInvalidCharsError');
161			}
162			return referrer.formData.get('genericInvalidCharsError');
163		},
164		validateInput:function(referrer,e){
165			var self=referrer;
166			var obj = $(e.target);
167			var value = obj.val();
168			var fieldName = obj.attr("name") || obj.attr("id");
169			var pattern = this.getUsAsciiValidationPattern(fieldName);
170			var error = this.getUsAsciiValidationError(self, fieldName);
171			var index;
172			if(fieldName === "firstName" || fieldName === "lastName") {
173				index = fieldName === "firstName" ? 0 : 1;
174			}
175
176			if (value === "") {
177				this.clearInvalidCharsError(obj, error);
178				return;
179			}
180
181			if (pattern) {
182				if (!pattern.test(value)) {
183					this.handleInvalidCharsError(obj, error, index);
184				} else {
185					this.clearInvalidCharsError(obj, error);
186				}
187				return;
188			}
189
190			var highestCharCode = value.charCodeAt(0);
191			var lowestCharCode = value.charCodeAt(0);
192			for (let i = 0; i < String(value).length; i++) {
193				if (value.charCodeAt(i) > highestCharCode) {
194					highestCharCode = value.charCodeAt(i);
195				}
196				if (value.charCodeAt(i) < lowestCharCode) {
197					lowestCharCode = value.charCodeAt(i);
198				}
199			}
200
201			if(lowestCharCode<0 || highestCharCode>255){
202				this.handleInvalidCharsError(obj, error, index);
203			}
204			else {
205				this.clearInvalidCharsError(obj, error);
206			}
207		},
208		/**
209			@description Exports namespace of a module. For legacy support.
210			@function
211		*/
212		exportToNameSpace : function(namespace, definition) {
213			if(!namespace || !definition) { return; } 
214			var reference = checkHertzNameSpace(namespace);
215			reference[0] = definition;
216		},
217		/**
218			@description Returns a boolean of whether the browser is IE8
219			@function 
220			@return {boolean}
221		*/
222		isIE8 : function(){
223			return $('body').hasClass('lt-ie9') && !$('body').hasClass('lt-ie8');
224		},
225		/**
226			@description Returns a boolean of whether the browser is IE
227			@function 
228			@return {boolean}
229		 */
230		isIE : function(){
231			ua = navigator.userAgent;
232			
233			var is_IE = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;
234			
235			return is_IE;
236		},
237		/**
238			@description Returns a boolean of whether the body dom element has a class lt-ie8
239			@function 
240			@return {boolean}
241		*/
242		isUseStoragePolyfill : function(){
243			return $('body').hasClass('lt-ie8');
244		},
245		/**
246			@description Creates the item for storage in session
247			@function 
248			@param {String} key 
249			@param {object} value JSON object
250		*/
251		storeItemIE : function(key, value, options){
252			var ie = new Backbone.Model({ id : key });
253			ie.url = htz.config.rootContext + '/rest/home/save-ie/' + key;
254			
255			var fOptions = {};
256			if(options) {
257				fOptions = $.extend(fOptions, options);
258			} 
259			fOptions.type = 'POST';
260			ie.save(value, fOptions);
261		},
262		/**
263			@description Creates the item for storage in session
264			@function 
265			@param {String} key 
266			@param {object} value JSON object
267		*/
268		fetchItemIE : function(key, options){
269			var ie = new Backbone.Model();
270			ie.url = htz.config.rootContext + '/rest/home/retrieve-ie/' + key;
271			
272			var fOptions = {};
273			if(options) {
274				fOptions = $.extend(fOptions, options);
275			} 
276			fOptions.type = 'POST';
277			ie.fetch(fOptions);
278		},
279		/**
280			@description Remove the item from storage in session using the key parameter
281			@function 
282			@param {String} key 
283		*/
284		removeItemIE : function(key){
285			var ie = new Backbone.Model({ id : key });
286			ie.url = htz.config.rootContext + '/rest/home/clear-ie/' + key;
287			ie.save({}, { type : 'POST'});
288		},
289		/**
290			@description Fix for IE6 to display the select dropdown element used when hiding the lightbox 
291			@function 
292		*/
293		showSelects: function() {
294			if ((navigator.userAgent.toLowerCase().indexOf('msie') != -1) && (navigator.appVersion=="6.0")) {
295				$("select").each(function(i,o){ $(o).css( { 'visibility' : 'visible' } ) 	 })	
296			}
297		},
298		/**
299			@description Fix for IE6 to hide the select dropdown element used when showing the lightbox 
300			@function 
301		*/
302		hideSelects: function() { 
303			if ((navigator.userAgent.toLowerCase().indexOf('msie') != -1) && (navigator.appVersion=="6.0")) {
304				$("select").each(function(i,o){ if(!$(this).hasClass('noHide')) $(o).css( { 'visibility' : 'hidden' } ) 	 })	
305				if ($("#lboxDivLBContent")) $("#lboxDivLBContent select").each(function(i,o){ if(!$(this).hasClass('noHide')) $(o).css( { 'visibility' : 'visible' } )  })			
306			}			
307		},
308		
309		/**
310			@description Look for whether session has timeout out on an ajax call and takes action on timeout
311			@function 
312			@param {object} xhr 
313		*/
314		sessionTimedOut : function(xhr) {
315			if(this.hasSessionTimedOut(xhr, null)) {
316				window.location.href = xhr.getResponseHeader("Location");
317				return true;
318			}
319
320			return false;
321		},
322		/**
323		 @description Looks for whether session has timeout out on an ajax call
324		 @function
325		 @param {object} xhr
326		 */
327		hasSessionTimedOut : function(xhr, response) {
328			return xhr && xhr.getResponseHeader("Ajax-Session-Timeout") == "true" && xhr.getResponseHeader("Location");
329		},
330		/**
331			@description Gets the first error from an errors object
332			@function 
333			@param {object} errors
334			@return {*} first error value
335		*/
336		getErrorToTrack : function(errors){
337			return errors && Object.keys(errors).length ? errors[Object.keys(errors)[0]] : "";
338		},
339		/**
340			@description Display the errors from deeplink/hertzlink
341			@function 
342			@param {object} res response object
343		*/
344		displayBootStrappedErrors : function(res){
345			if(!res) return;
346			
347			if(res.message && (res.message.fieldErrors || res.message.messages || res.message.systemErrors || res.message.errorData)){
348				Utils.trackError(res.message);
349				htz.helpers.SessionHelper.setItem('errors', JSON.stringify(res.message));
350			}
351		},
352		/**
353			@description Handle and display error messages non field error messages
354			@function 
355			@param {object} errors
356			@param {String} target dom element to display error message 
357		*/
358		displayErrorMessage: function (errors, target){
359			var nonFieldErrors = this.buildNonFieldErrors(errors);
360
361			if(!nonFieldErrors) return;
362
363			var errStr = '<ul>' + nonFieldErrors + '</ul>';
364
365			if (htz.config.isApp){
366				Utils.showErrors(errStr, target);
367			} else {
368				if(target){
369					$(target).html(errStr).show();
370				}
371				else {
372					$('#error-list').html(errStr).show();
373				}
374			}
375			AmplitudeUtils.trackApiEvent("API", "", "failed", this.getErrorToTrack(errors));
376
377		},
378		/**
379			@description Handle and display field error messages
380			@function 
381			@param {object} errors
382			@param {String} target dom element to display error message 
383		*/
384		displayFieldErrors : function(errors, target) {
385			var fieldErrors = this.buildFieldErrors(errors);
386
387			if(!fieldErrors) return;
388
389			var errStr = '<ul><pre style="font-family:'+ 'Avenir'+', Verdana, sans-serif; font-size: 13px">' + fieldErrors + '</pre></ul>';
390			if(target){
391				$(target).html(errStr).show();
392			}
393			else {
394				$('#error-list').html(errStr).show();
395			}
396			AmplitudeUtils.trackApiEvent("API", "", "failed", this.getErrorToTrack(errors));
397		},	
398		/**
399			@description Handle and display all error messages
400			@function 
401			@param {object} errors
402			@param {String} target dom element to display error message 
403		*/
404		displayAllErrors : function(errors, target) {
405			if(!errors) return;
406
407			var nonFieldErrors = this.buildNonFieldErrors(errors);
408			var fieldErrors = this.buildFieldErrors(errors.fieldErrors);
409
410			if(!nonFieldErrors && !fieldErrors) return;
411
412			var errStr = '<ul>';
413			if(nonFieldErrors) {
414				errStr += nonFieldErrors;
415			}
416			if(fieldErrors) {
417				errStr += fieldErrors;
418			}
419
420			errStr += '</ul>';
421
422			if (htz.config.isApp){
423				Utils.showErrors(errStr, target);
424			} else {
425				if(target){
426					$(target).html(errStr).show();
427				}
428				else {
429					$('#error-list').html(errStr).show();
430				}
431			}
432		},	
433		/**
434			@description Build html for non field error messages
435			@function 
436			@param {object} errors
437			@return {String}
438		*/
439		buildNonFieldErrors: function (errors){
440			if(!errors.messages && !errors.systemErrors) { return null; }
441			
442			var errStr = '';
443
444			if (errors.messages){
445				for(var i=0; i<errors.messages.length;i++){
446					var message = errors.messages[i];
447					errStr += '<li><pre style="font-family:'+ 'Avenir'+', Verdana, sans-serif; font-size: 13px">' + message + '</pre></li>';
448					
449					
450				}
451			}
452
453			if (errors.systemErrors){
454				for(var i=0; i<errors.systemErrors.length;i++){
455					var systemError = errors.systemErrors[i];
456					errStr += '<li><pre style="font-family:'+ 'Avenir'+', Verdana, sans-serif; font-size: 13px">' + systemError + '</pre></li>';
457				}
458			}
459			
460			return errStr;
461		},
462		/**
463			@description Build html for field error messages
464			@function 
465			@param {object} errors
466			@return {String}
467		*/
468		buildFieldErrors : function(errors) {
469			if(!errors || errors.length == 0) { return null; }
470
471			var errorList = [];
472			var errStr = '';
473
474			try {
475				for(var i in errors){
476					for(var k in errors[i][1]){
477						errorList[errors[i][1][k]] = '';
478					}
479				}
480			}
481			catch(e){ }
482
483			for(var error in errorList) {
484				errStr += "<li>"+error+"</li>";
485		    }
486
487			return errStr;
488		},
489		/**
490			@description Remove error messages
491			@function 
492		*/
493		clearErrorMessage : function(target){
494			if(!target) {
495				target = '#error-list';
496			}
497			$(target).empty().hide();
498		},
499		/**
500			@description Display error messages from session storage and removes the errors item from session storage
501			@function 
502		*/
503		showErrorFromSession : function(){
504			var errors = htz.helpers.SessionHelper.getItem('errors');
505
506			if(errors){
507				Utils.displayAllErrors(JSON.parse(errors));	
508				htz.helpers.SessionHelper.removeItem('errors');
509			}
510		},
511		/**
512			@description Extracts error codes from error list
513			@function 
514		*/
515		findErrorCodes : function(errors) {
516			if(!errors) { return ''; }
517			
518			var errorCodes = '', error = '';
519
520			for(var e in errors){
521				if(errors.fieldErrors){
522					for(var j in errors[e]){						
523							if(typeof errors[e][j] == "string"){
524								error = errors[e][j];
525								errorCodes += error.substring(error.lastIndexOf('[') + 1, error.lastIndexOf(']')) + ',';
526							}else{
527								for(var i in errors[e][j][1]){
528									error = errors[e][j][1][i];
529									errorCodes += error.substring(error.lastIndexOf('[') + 1, error.lastIndexOf(']')) + ',';
530								}
531							}
532					}
533				}
534				else {
535					for(var i in errors[e]){
536						if(typeof errors[e][i] == "string"){
537							error = errors[e][i];
538							errorCodes += error.substring(error.lastIndexOf('[') + 1, error.lastIndexOf(']')) + ',';
539						}
540						else{
541							error = errors[e][i].errorCode;
542							errorCodes += error + ',';
543						}
544					}
545				}
546			}
547
548			if(errorCodes.length > 0){
549				errorCodes = errorCodes.substring(0, errorCodes.length - 1);
550			}
551			
552			return errorCodes;
553		},
554		/**
555			@description Track errors
556			@function 
557			@param {object} errors
558			@param {String} page
559		*/
560		trackError : function(errors, page){
561			var errorCodes = this.findErrorCodes(errors);
562			
563			if(errorCodes && typeof WebTracking !== 'undefined'){
564				WebTracking.setError(errorCodes, page);
565			}
566		},
567		/**
568			@description Remove the homeModel from session storage
569			@function 
570		*/
571		clearReservationSession : function(){
572			htz.helpers.SessionHelper.removeItem('homeModel');
573		},
574		/**
575			@description Whether or not the color code is a valid hex color code
576			@function 
577			@return {boolean}
578		*/
579		isHexColorCode : function(colorCode) {
580			var regColorcode  = /^#[0-9a-f]{3}([0-9a-f]{3})?$/i;
581			return regColorcode.test(colorCode);
582		},
583		/**
584			@description Return an array of the url paramaters
585			@function 
586			@return {array}
587		*/
588		getUrlVars: function(){
589			var vars = [], hash;
590			var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
591			for(var i = 0; i < hashes.length; i++)
592			{
593			hash = hashes[i].split('=');
594			vars.push(hash[0]);
595			vars[hash[0]] = decodeURIComponent(hash[1]);
596			}
597			return vars;
598		},
599		/**
600			@description Get url paramters 
601			@function 
602			@param {String} name
603		*/
604		getUrlVar: function(name){
605			return Utils.getUrlVars()[name];
606		},
607		/**
608			@description Format price into a string with two decimal points
609			@function 
610			@param {float} raw price
611			@param {integer} digit number of decimal places
612			@return {String} formatted price
613		*/
614		formatPrice: function(raw, digit) {
615			if(!raw && raw !== 0) { return ''; } 
616			if(!digit || digit < 0) {
617				digit = 2;
618			}
619			var formatted;
620			if(typeof raw =='string') {
621				formatted = parseFloat(raw).toFixed(digit);
622			} else{
623				formatted = raw.toFixed(digit);
624			}
625			
626			if(formatted && (formatted.indexOf(".") == 0)) {
627				formatted = "0"+formatted;
628			}
629
630			return formatted;
631		},
632		padNumber : function(rawNumber, length, placeHolder) {
633			if(!rawNumber) return '';
634			
635			placeHolder = placeHolder || '0';
636			rawNumber = rawNumber + '';
637			
638			return rawNumber.length >= length ? rawNumber : new Array((length - rawNumber.length) + 1).join(placeHolder) + rawNumber;
639		},
640		/**
641			@description Merge error message responses
642			@function 
643			@param {object} res1
644			@param {object} res2
645		*/
646		mergeErrors : function(res1, res2) {      
647			if(!res1 || !res1.message) return res2;
648			if(!res2 || !res2.message) return res1;
649
650			var res = {};
651			res.message = {};
652
653			if(res1.message.messages || res2.message.messages) {
654				res.message.messages = [];
655				if(res1.message.messages) {
656					res.message.messages = $.merge(res.message.messages, res1.message.messages);
657				}
658				if(res2.message.messages) {
659					res.message.messages = $.merge(res.message.messages, res2.message.messages);
660				}
661			}
662
663			if(res1.message.systemErrors || res2.message.systemErrors) {
664				res.message.systemErrors = [];
665				if(res1.message.systemErrors) {
666					res.message.systemErrors = $.merge(res.message.systemErrors, res1.message.systemErrors); 
667				}
668				if(res2.message.systemErrors) {
669					res.message.systemErrors = $.merge(res.message.systemErrors, res2.message.systemErrors); 
670				}
671			}
672
673			if(res1.message.fieldErrors || res2.message.fieldErrors) {
674				res.message.fieldErrors = [];
675				if(res1.message.fieldErrors) {
676					res.message.fieldErrors = $.merge(res.message.fieldErrors, res1.message.fieldErrors); 
677				}
678				if(res2.message.fieldErrors) {
679					res.message.fieldErrors = $.merge(res.message.fieldErrors, res2.message.fieldErrors);
680				}
681			}
682			
683            return res;
684		},
685		/**
686			@description Build html dropdown options
687			@function 
688			@param {object} list List of dropdown options
689			@param {String} valSelected Value of the selected item in the dropdown
690			@param {object} label Content of first option in dropdown list (optional)
691			@return {String} options HTML dropdwon options
692		*/
693		buildDropdown: function(list, valSelected, label) {
694			var options = '';
695			if (label) {
696				options += '<option value="">' + label + '</option>';
697			}
698			if (list.length > 0) {
699				for (var i in list) {
700					if (list[i].value === valSelected) {
701						options += '<option selected="selected" value="' + list[i].value + '">' + list[i].name + '</option>';
702					} else {
703						options += '<option value="' + list[i].value + '">' + list[i].name + '</option>';
704					}
705				}
706			}
707			return options;
708		},
709		createElm : function(childId, elmType, isHidden, parentId, attributes) {
710			var parentElm = parentId ? $('#'+parentId) : $('body');
711			if(!elmType) {
712				elmType = 'div';
713			}
714			var fElm = parentElm.find('#'+childId);
715			if(fElm.length == 0) {
716				var elm = $('<'+elmType+'/>').attr('id', childId);
717				if(attributes){
718					for(var key in attributes){
719						val = attributes[key];
720						elm.attr(key, val);
721					}
722				}
723				if(isHidden) {
724					elm.hide();
725				}
726				parentElm.append(elm);
727				
728				return elm;
729			}
730			
731			return fElm.eq(0);
732		},
733		/**
734			@description Returns a boolean of whether the browser is IE8
735			@function 
736			@return {boolean}
737		*/
738		touchScrollElem : function(elem){
739			if( Modernizr && Modernizr.touch ) {
740				var ua = navigator.userAgent,
741					scrollOverflowUnsupported = false;
742
743				if( ua.indexOf("Android") >= 0 ) {
744					var androidversion = parseFloat(ua.slice(ua.indexOf("Android")+8)); 
745					if ( androidversion <= 2.3 ) {
746						scrollOverflowUnsupported = true;
747					}
748				} else if ( ua.indexOf("Silk") >= 0 ) {
749					scrollOverflowUnsupported = true;
750				} else {
751					return;
752				}
753
754				if ( scrollOverflowUnsupported ) {
755					var scrollStartPosY = 0;
756					var scrollStartPosX = 0;
757					$('body').on('touchstart', elem, function(e) {
758						scrollStartPosY = this.scrollTop + e.originalEvent.touches[0].pageY;
759						scrollStartPosX = this.scrollLeft + e.originalEvent.touches[0].pageX;
760					});
761					$('body').on('touchmove', elem, function(e) {
762						if ((this.scrollTop < this.scrollHeight - this.offsetHeight && this.scrollTop + e.originalEvent.touches[0].pageY < scrollStartPosY - 5) || (this.scrollTop != 0 && this.scrollTop + e.originalEvent.touches[0].pageY > scrollStartPosY + 5)) e.preventDefault();
763						if ((this.scrollLeft < this.scrollWidth - this.offsetWidth && this.scrollLeft + e.originalEvent.touches[0].pageX < scrollStartPosX - 5) || (this.scrollLeft != 0 && this.scrollLeft + e.originalEvent.touches[0].pageX > scrollStartPosX + 5)) e.preventDefault();
764						this.scrollTop = scrollStartPosY - e.originalEvent.touches[0].pageY;
765						this.scrollLeft = scrollStartPosX - e.originalEvent.touches[0].pageX;
766					});
767				}
768			}
769		},
770		/**
771			@description For debugging purposes, returns a string of the deviceGroup, browser and browserVersion
772			@function 
773			@return {String} deviceGroup-browser-browserVersion
774		*/
775		browserDeviceType : function(){ 
776			var browser = 'Other',
777				browserVer = 'Unknown',
778				uaString = 'Other',
779				os = 'Other OS',
780				ua,
781				myNav = navigator.userAgent.toLowerCase();
782			
783			try {
784				if(myNav.indexOf('msie') != -1) {
785					browser = 'IE';
786				} else if(myNav.indexOf('firefox') != -1) {
787					browser = 'Mozilla';
788				} else if(!!window.opera || myNav.indexOf('opr') != -1) {
789					browser = 'Opera';
790				} else if(/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {
791					browser = 'Webkit';
792				} else {
793					browser = 'Other';
794				}		
795
796				browserVer = navigator.appVersion;
797
798				ua = navigator.userAgent;
799
800				if (ua.indexOf('Win')!=-1) {
801					uaString = ua.slice(ua.indexOf('Windows NT')).split(' ');
802					os = 'Windows NT ' + uaString[2];
803				} else if (ua.indexOf('Mac')!=-1) {
804					uaString = ua.slice(ua.indexOf('Mac OS X')).split(' ');
805					os = 'MacOSX ' + uaString[3];
806				} else if (ua.indexOf('x11')!=-1) {
807					os = 'UNIX';
808				} else if (ua.indexOf('linux')!=-1) {
809					os = 'Linux';
810				}
811
812			} catch (e) {}
813
814			return htz.config.deviceGroup + '-' + browser + '-' + browserVer + '-' + os;
815		},
816		getUniqueErrorKey : function() {
817			try {
818				var cDate = new Date();
819				return 'UE-' + this.padNumber(cDate.getUTCMonth() + 1, 2) + '' + this.padNumber(cDate.getUTCDate(), 2) +
820				       '' + this.padNumber(cDate.getUTCHours(), 2) + 
821				       '' + this.padNumber(cDate.getUTCMinutes(), 2) + '-' + cDate.getTimezoneOffset() + '-' + cDate.getSeconds() + 
822				       '-' + (cDate.getMilliseconds()*(Math.floor(Math.random()*100)+1));
823			} catch (e) {
824				return '';
825			}
826		},
827		isPrivateMode : function() {
828			try {
829				sessionStorage.setItem('private-mode', 'test');
830				sessionStorage.removeItem('private-mode');
831			} catch(e) {
832				return true;
833			}
834			return false;
835		}
836	}
837})();
838(typeof define=='function' && define.amd && define('utils/utils',[],function(){return Utils;}));
839htz.utils.Utils = Utils;
840
841define("config/app-config",["utils/sessionhelper","json","reservation/process-config/core/reservation-constants"],function(a,c,b){if(htz&&htz.config)try{a.getItem(b.APP_CONFIG)||a.setItem(b.APP_CONFIG,c.stringify(htz.config))}catch(d){}return htz});
842define("config/app-info",["config/app-config"],function(){var a=footerRef=null;return{setHeader:function(b){a=b},getHeader:function(){return a},setFooter:function(a){footerRef=a},getFooter:function(){return footerRef},doCleanup:function(){a=footerRef=null}}});
843window.checkHertzNameSpace("htz.framework");htz.framework.DependencyManager=function(){var b=[];return{addDependencies:function(a,c){a&&(c&&0<c.length)&&(b[a]=c)},removeDependencies:function(a){a&&(b[a]=null)},getDependencies:function(a){return a?b[a]:null},reset:function(){b=[]}}}();getDependencies=htz.framework.DependencyManager.getDependencies;addDependencies=htz.framework.DependencyManager.addDependencies;
844"function"==typeof define&&define.amd&&define("framework/dependency-injection/dependency-manager",[],function(){return htz.framework.DependencyManager});
845define("framework/view/abstract-view",["backbone"],function(c){return c.View.extend({optional:!1,preInitialize:function(){},postInitialize:function(){},preSubmit:function(){return!0},preRender:function(){},postRender:function(){},doCleanup:function(){},refresh:function(){},renderView:function(a){try{return this.preRender(),this.renderYourself(a),this.postRender(),this}catch(b){if(this.isOptional())this.handleRenderFailure(b,a);else throw b;}},renderYourself:function(){},handleRenderFailure:function(){},
846setOptional:function(a){this.optional=a},isOptional:function(){return this.optional}})});
847define("utils/utils-proxy",["config/utilconfig"],function(c){var e={};return{getLightbox:function(){var a=e.lightbox;a||(a=[],e.lightbox=a);for(var b=null,d=0;d<a.length;d++)if(b=a[d],null!=b&&!b.isInUse())return b;b=new (c.getLightbox());a.push(b);return b},getSpinner:function(){return c.getSpinner()},getNotifier:function(){return c.getNotifier()},getSlider:function(){return c.getSlider()},getAciveLightboxes:function(){var a=e.lightbox,b=[];if(a&&0<a.length)for(var d=null,c=0;c<a.length;c++)d=a[c],
848null!=d&&d.isInUse()&&b.push(d);return b},doCleanup:function(){e={}}}});
849define("utils/cc-tools",[],function(){return{unMaskCC:function(a,b,c){a=$(a.target);b?a.val(b.get("creditCardNumber")):a.val(c)},get3DCardType:function(a,b,c){a=$(a.target);b?a.val(b.get("creditCardType")):a.val(c)},displayLastFourDigits:function(a,b){var c=$(a.target),d=b.substr(b.length-4),e=c.val().substr(0,b.length-4);c.val(e+d)},maskCC:function(a,b,c){if(a.ctrlKey)return!1;var d=$(a.target),e=d.val(),b=/^[0-9]*$/i.test(b+a.key)?b+a.key:e;d.val(e.replace(/[\w]/g,"*"));
849c&&c.set({creditCardNumber:b},
850{silent:!0});return b}}});
851define("utils/tracker",[],function(){return{track:function(a){a&&(Global&&"function"===typeof Global.track)&&Global.track(a)}}});
852//dtc4102//PRC91530//Google Data Layer
853
854define('utils/gtm-tracker', [], function() {
855	var gtmTracker = {	
856		findFilter:function(str,key){
857			var fields=str.split('/');
858			
859			try{
860				if(key=="category"){
861					return fields[1];
862				}else if(key=="selection"){
863					return fields[2];
864				}
865			}catch(e){
866				return "";
867			}
868			
869		},	
870		clearField:function(){
871			window.dataLayer.push({ 'ecommerce': null });
872		},
873		formatDate:function(inputDate,isEuro) {
874			var dateComponents = inputDate.split('/');
875
876			var month,day;
877
878			if(isEuro){
879				month = dateComponents[1];
880				day = dateComponents[0];
881			} else {
882				month = dateComponents[0];
883				day = dateComponents[1];
884			}
885
886			var year = dateComponents[2];
887
888			var formattedDate = year + '-' + month + '-'+ day ;
889
890			return formattedDate;
891		},
892		formatDateTime:function(inputDate,inputTime,isEuro) {
893			var formattedDate = this.formatDate(inputDate,isEuro).replace(/\//g, "-");
894			var formattedTime= this.formatTime(inputTime);
895			var combinedDateTime = formattedDate + 'T' +formattedTime;
896			var combinedDateTimeString=combinedDateTime.toString();
897			var timeStamp = Date.parse(combinedDateTimeString)
898
899			return timeStamp;
900		},
901		formatTime:function(timeString) {
902			var [hours, minutes] = timeString.split(':');
903
904			// Convert hours and minutes to integers
905			hours = parseInt(hours, 10);
906			minutes = parseInt(minutes, 10);
907
908			// Add leading zeros and seconds
909			var formattedTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:00`;
910
911			return formattedTime;
912		},
913		calculate:function(what,value1,value2,value3,value4,value5){
914			var self=this;
915			switch(what){
916			
917				case 'rentalDays':
918
919					var isEuro = value5==1?true:false;
920					var pickupDateTimeStamp = self.formatDateTime(value1,value3,isEuro);
921					var dropOffDateTimeStamp = self.formatDateTime(value2,value4,isEuro);
922					
923					var diff = dropOffDateTimeStamp-pickupDateTimeStamp;
924			    	var diffDays = diff / (24 * 60 * 60 * 1000);
925
926					if (diffDays<1){
927						return 1;
928					}
929					else{
930						return Math.ceil(diffDays);
931					}
932					
933				break;
934				
935			}
936		},
937		track : function(options) {
938			var self=this;
939			var scenario=options.scenario;
940			var trackingObjectArray=[];
941			
942			switch(scenario){
943
944				case 'flashbanner_select_promotion':
945					var payload=options.payload;
946
947					try{
948						window.dataLayer.push({
949							'event': 'select_promotion',
950							'ecommerce': {
951								'promoClick': {
952									'promotions': [{
953										'id':payload.id,
954										'name':payload.name,
955										'creative':payload.creative,
956										'position': payload.position
957									}]
958								}
959							}
960						});
961
962					}
963					catch(e){
964						console.log("Error with itinerary flashbanner tracking."+e.message);
965					}
966					break;
967			
968			//dtc4102/accept PTU impression
969			case 'select_promotion':
970				var payload=options.payload;
971				
972				try{
973					window.dataLayer.push({
974					  'event': 'select_promotion',
975					  'ecommerce': {
976					      'promoClick': {
977					          'promotions': [{
978					        	  	'id':payload.attributes.confirmationSummaryInfo.attributes.extrasDetailModel.id,
979					                'name':payload.attributes.confirmationSummaryInfo.attributes.extrasDetailModel.name,  
980					                'creative':'PTU',
981					                'position': 1,
982					                'promoAmount':payload.attributes.confirmationSummaryInfo.attributes.extrasDetailModel.price
983					            }]
984					      }
985					  }
986					});
987
988				}
989				catch(e){
990					console.log("Error with PTU impression."+e.message);
991				}			  
992			 break;
993			 
994			//dtc4102/accept PTU impression
995			case 'view_promotion':
996				var payload=options.payload;
997				
998				try{
999					window.dataLayer.push({
1000					  'event': 'view_promotion',
1001					  'ecommerce': {
1002					      'promoView': {
1003					          'promotions': [{
1004					                'id':payload.attributes.confirmationSummaryInfo.attributes.extrasDetailModel.id,
1005					                'name':payload.attributes.confirmationSummaryInfo.attributes.extrasDetailModel.name,              
1006					                'creative':'PTU',
1007					                'position': 1
1008					            }
1009					         ]
1010					      }
1011					  }
1012					});
1013
1014				}catch(e){
1015					console.log("Error with PTU impression."+e.message);
1016				}			  
1017			 break;
1018			
1019			//dtc4102//AAA CDP validation
1020			//IRAC-4849
1021			case 'cdp_validation':
1022				var payload=options.payload;
1023				var CDP="";
1024				
1025				try{
1026					var split_string=payload.name.split("-->");
1027					var CDP_Index=split_string[1].indexOf("AAA");
1028					var CDP_end_Index=split_string[1].indexOf("<!--");
1029					CDP= split_string[1].substring(CDP_Index-1,CDP_end_Index);
1030				}catch(e){
1031					CDP=payload.name;
1032				}
1033				
1034				try{
1035				  	window.dataLayer.push({
1036				  	  'event': 'cdp_validation',
1037				  	  'cdp_id':payload.id,
1038					  'cdp_name':CDP,
1039					  'cdp_status':payload.status
1040				  	});
1041				}
1042				catch(e){
1043					console.log("Error with AAA CDPvalidation."+e.message);
1044				}			  
1045			 break;
1046			
1047			//Rental Search
1048			case 'rental-search':
1049				try{
1050					var formData=options.payload[0];	//dtc4102//IRAC-5349 Recommendation Engine Tracking
1051					var isRecommendationEngine=(options.payload[1])?options.payload[1]:"undefined";
1052				
1053					window.dataLayer.push({
1054						'event':'rental_search',
1055					    'pickUpLocationCode':(formData!=undefined)?formData.pickupHiddenEOAG:"undefined",
1056					    'dropoffLocationCode':(formData!=undefined)?formData.dropoffHiddenEOAG:"undefined",
1057					    'pickupCity':(formData.itinerary)?((formData.itinerary.pickupLocation!=undefined)?formData.itinerary.pickupLocation.city:"undefined"):"undefined",
1058					    'dropoffCity':(formData.itinerary)?((formData.itinerary.dropoffLocation!=undefined)?formData.itinerary.dropoffLocation.city:"undefined"):"undefined", 
1059					    'pickupDate_mmddyy':(formData!=undefined)?formData.pickupDay:"undefined",
1060					    'dropoffDate_mmddyy':(formData!=undefined)?formData.dropoffDay:"undefined",
1061					    'pickupCountryCode':(formData.itinerary)?((formData.itinerary.pickupLocation!=undefined)?formData.itinerary.pickupLocation.countryCode:"undefined"):"undefined",
1062					    'dropoffCountryCode':(formData.itinerary.dropoffLocation!=undefined)?formData.itinerary.dropoffLocation.countryCode:"undefined",
1063					    'pickupDoW':"",
1064					    'dropoffDoW':"",
1065					    'pickupMonth_mm':"",
1066					    'dropoffMonth_mm':"",
1067					    'pickupState':(formData!=undefined)?formData.inpPickupStateCode:"undefined",
1068					    'dropoffState':(formData.itinerary)?((formData.itinerary.dropoffLocation!=undefined)?formData.itinerary.dropoffLocation.state:"undefined"):"undefined",
1069					    'pickupTime24HR':(formData!=undefined)?formData.pickupTime:"undefined",
1070					    'dropoffTime24HR':(formData!=undefined)?formData.dropoffTime:"undefined",
1071					    'pickupYear_yyyy':"",
1072					    'dropoffYear_yyyy':"",
1073					    'pickupOAGCode':(formData!=undefined)?formData.pickupHiddenEOAG:"undefined",
1074					    'dropoffOAGCode':(formData!=undefined)?formData.dropoffHiddenEOAG:"undefined",
1075					    'rentalDays':self.calculate("rentalDays",formData.pickupDay,formData.dropoffDay,formData.pickupTime,formData.dropoffTime,formData.militaryClock),
1076					    'reservationLocationType':"",
1077					    'isDomestic':"",
1078					    'isOneWay':(formData.itinerary!=undefined)?formData.itinerary.isOneWay:"undefined",
1079					    'bookingWindow':"",
1080					    'ageRange':(formData.itinerary!=undefined)?formData.itinerary.age:"undefined",
1081					    'isRecommendationEngine':isRecommendationEngine
1082					});
1083				}
1084				catch(e){
1085					console.log("Error with Rental Search."+e.message);
1086				}
1087			break;
1088			
1089			//dtc4102//IRAC-5349 Recommendation Engine Tracking
1090			case 'recommendation-engine':
1091				var payload=options.payload;
1092				
1093				try{
1094					window.dataLayer.push({
1095						'event':'recommendation_engine',
1096						'recommendation_type': 'vehicles',
1097						'recommendation_sipp': (payload.recommendationSipp!=undefined)?payload.recommendationSipp:"undefined",
1098						'recommendation_weight': (payload.recommendationWeight!=undefined)?payload.recommendationWeight:"undefined"
1099					});
1100				}
1101				catch(e){
1102					console.log("Error with Rental Search."+e.message);
1103				}
1104			break;
1105			
1106			//Look up reservation
1107			case 'lookup-reservation':
1108				var payload=options.payload;
1109				
1110				try{
1111				  	window.dataLayer.push({
1112					  'event':'lookup_reservation',
1113					  'lookup_status':payload.response,
1114					  'lookup_code':payload.code
1115				  	});
1116				}
1117				catch(e){
1118					console.log("Error with Look up reservation."+e.message);
1119				}			  
1120			 break;
1121
1122			
1123			// Email Sign Up
1124			case 'email-sign-up':
1125				var location=options.payload;
1126				
1127				try{
1128					window.dataLayer.push({
1129					    'event':'email_signup',
1130					    'notification_signup_location':location
1131					});
1132				}
1133				catch(e){
1134					console.log("Error with Email Sign Up."+e.message);
1135				}				
1136			break;
1137			
1138			// SMS Sign Up
1139			case 'sms-sign-up':
1140				var location=options.payload;
1141				try{
1142					window.dataLayer.push({
1143						'event':'sms_signup',
1144					    'notification_signup_location':location
1145					});
1146				}
1147				catch(e){
1148					console.log("Error with SMS Sign Up."+e.message);
1149				}
1150			break;
1151			
1152			// Error-Tracking
1153			case 'system-errordata-tracking':
1154			   var defaultValue=options.payload;
1155			   if(defaultValue){
1156			    for (i = 0; i < defaultValue.length; i++) {
1157				   var errorDetail = defaultValue[i].match(/\[(.*?)\]/);
1158				   if (errorDetail) {
1159					var errorType = errorDetail[1];
1160					var errorMsg = errorDetail.input.replace(/ *\[[^\]]*]/, '');
1161					var cleanErrorMsg = errorMsg.replace(/<[^>]*>/g, '');
1162				   }					
1163			    	            						 				
1164				 try{
1165					window.dataLayer.push({
1166				 		'event': 'error',
1167					    'error_type': errorType, 
1168					    'error_message': cleanErrorMsg	
1169					});
1170				 }
1171				 catch(e){
1172					console.log("Error with tracking form errors."+e.message);
1173				 }
1174			    }
1175			  }	
1176			break;
1177			
1178			case 'submit-reservation-tracking':
1179				   var defaultValue=options.payload;									    	            						 				
1180					 try{
1181						window.dataLayer.push({
1182					 		'event': 'submit_reservation',
1183					 		'status': defaultValue	
1184						});
1185					 }
1186					 catch(e){
1187						console.log("Error with submit-reservation-tracking"+e.message);
1188					 }	
1189			       break;
1190			
1191			case 'error-message-tracking':
1192				   var defaultValue=options.payload;
1193				   if(defaultValue != undefined){
1194					   var errorDetail = defaultValue.match(/\[(.*?)\]/);
1195					   if (errorDetail != undefined) {
1196						var errorType = errorDetail[1];
1197						var errorMsg = errorDetail.input.replace(/ *\[[^\]]*]/, '');
1198						var cleanErrorMsg = errorMsg.replace(/<[^>]*>/g, '');
1199					   }					
1200				    	            						 				
1201					 try{
1202						window.dataLayer.push({
1203					 		'event': 'error',
1204						    'error_type': errorType, 
1205						    'error_message': cleanErrorMsg	
1206						});
1207					 }
1208					 catch(e){
1209						console.log("Error with tracking form errors."+e.message);
1210					 }
1211				  }	
1212				break;
1213						
1214			// Filter & Sort Vehicles
1215			case 'filter-sort-vehicles':
1216				var filter=options.payload;
1217				var category=self.findFilter(filter,"category");
1218				var selection=self.findFilter(filter,"selection");
1219				try{
1220					window.dataLayer.push({
1221						'event':'filter_vehicle_list',
1222					    'filter_category':category,
1223					    'filter_selection':selection
1224					});
1225				}
1226				catch(e){
1227					console.log("Error with Filter & Sort Vehicles."+e.message);
1228				}
1229			break;
1230			
1231			//Apply Discount
1232			case 'apply-discount':
1233				var discount=options.payload;
1234				var discountType=discount.discountType;
1235				var discountCode=discount.discountCode;
1236				
1237				try{
1238					window.dataLayer.push({
1239						'event':'apply_discount',
1240					    'discount_type':discountType,
1241					    'discount_code':discountCode
1242					});
1243				}
1244				catch(e){
1245					console.log("Error with Apply Discount."+e.message);
1246				}
1247			break;
1248			
1249			//ENHANCED ECOMMERCE Setup//Impressions - Product Data Car
1250			case 'impressions-car':
1251				var vehicles=options.payload;
1252				
1253				for (i in vehicles){
1254					var price;					
1255					if(vehicles[i].quotes.length>1){
1256						
1257						vehicles[i]["availability"] = "vehicle list – available";
1258						
1259						    if(vehicles[i].quotes[0] != null && vehicles[i].quotes[1] != null){
1260						    	if(vehicles[i].quotes[0].cannotBeQuoted != undefined && vehicles[i].quotes[1].cannotBeQuoted != undefined && 
1261						    			vehicles[i].quotes[0].cannotBeQuoted == '1' && vehicles[i].quotes[1].cannotBeQuoted == '1'){
1262									vehicles[i]["availability"] = "vehicle list – cannot be quoted";
1263								}else if(vehicles[i].quotes[0].unavailable != undefined && vehicles[i].quotes[1].unavailable != undefined && 
1264						    			vehicles[i].quotes[0].unavailable == '1' && vehicles[i].quotes[1].unavailable == '1'){
1265									vehicles[i]["availability"] = "vehicle list – no rate available";
1266								}
1267						    }
1268							if(vehicles[i].quotes[0] == null && vehicles[i].quotes[1] == null){
1269								vehicles[i]["availability"] = "vehicle list – no rate available";
1270						    }
1271						
1272						for(j in vehicles[i].quotes){
1273						
1274							if(vehicles[i].quotes[j]==null){
1275								j++;								
1276								price=vehicles[i].quotes[j].approxTotalPrice?vehicles[i].quotes[j].approxTotalPrice:vehicles[i].quotes[j].price;
1277								break;
1278							}
1279							else if(vehicles[i].quotes[j].prepaid==0){
1280								price=vehicles[i].quotes[j].approxTotalPrice?vehicles[i].quotes[j].approxTotalPrice:vehicles[i].quotes[j].price;
1281								break;
1282							}
1283						}
1284						
1285					}else{
1286						if(vehicles[i].quotes[0]!=null){
1287							if(vehicles[i].quotes[0].selectForQuote != undefined && vehicles[i].quotes[0].selectForQuote == '1'){
1288								vehicles[i]["availability"] = "vehicle list – select for quote";
1289							}else if(vehicles[i].quotes[0].soldout != undefined && vehicles[i].quotes[0].soldout == '1'){
1290								vehicles[i]["availability"] = "vehicle list – sold out";
1291							}else if (vehicles[i].quotes[0].call != undefined && vehicles[i].quotes[0].call == '1'){
1292								vehicles[i]["availability"] = "vehicle list - call to book";
1293							}else if (vehicles[i].quotes[0].unavailable != undefined && vehicles[i].quotes[0].unavailable == '1'){
1294								vehicles[i]["availability"] = "vehicle list - Rate Not Available";
1295							}else{
1296								vehicles[i]["availability"] = "vehicle list – available";
1297							}
1298							price=vehicles[i].quotes[0].approxTotalPrice;
1299							
1300							if(isNaN(price)==true){
1301								price=vehicles[i].quotes[0].price;
1302							}
1303						}else {
1304							vehicles[i]["availability"] = "vehicle list – no rate available";
1305						}
1306					}
1307						try{
1308							var currentObj={
1309								'id':vehicles[i].sipp,
1310								'name':vehicles[i].name,
1311								'category':vehicles[i].carTypeDisplay,
1312								'brand': "car",
1313								'variant': vehicles[i].passengers,
1314								'price':parseFloat(price) ,//dtc4102//IRAC-4952//added condition to check quote[1] if quote[0] is null for european region
1315								'position':vehicles[i].vehicleIndex+1,
1316								'list': vehicles[i].availability
1317							}
1318							if(vehicles[i].allNotAvailableOrSoldout != undefined && !vehicles[i].allNotAvailableOrSoldout){
1319								trackingObjectArray.push(currentObj);
1320							}
1321						}catch(e){
1322							console.log("Error with Impressions - Product Data Car."+e.message);
1323						}
1324				}
1325				
1326				window.dataLayer.push({
1327					'event': 'view_item_list',
1328					'ecommerce':{
1329						'impressions':trackingObjectArray							
1330					}
1331				});
1332				
1333			break;
1334			
1335			//ENHANCED ECOMMERCE Setup//Impressions - Product Data Add on	Extras
1336			case 'impressions-addOn':
1337				var categories=options.payload;
1338				
1339				for (i in categories){
1340					for(j in categories[i].extras){
1341						try{
1342							var currentObj={
1343								'id':categories[i].extras[j].id,
1344								'name':categories[i].extras[j].name,
1345								'category':categories[i].name,
1346								'brand': "add-on",
1347								'variant': '',
1348								'price':parseFloat(categories[i].extras[j].price) ,
1349								'unit': categories[i].extras[j].periodText, 
1350								'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined",
1351								'position':parseInt(j)+1,
1352								'list': 'add on list'
1353							}
1354						
1355							trackingObjectArray.push(currentObj);
1356						}catch(e){
1357							console.log("Error with Impressions - Product Data Add on Extras."+e.message);
1358						}
1359					}
1360				}
1361				
1362				self.clearField();
1363				window.dataLayer.push({
1364					'event': 'view_item_list',
1365					'ecommerce':{
1366						'impressions':trackingObjectArray							
1367					}
1368				});
1369				
1370			break;
1371			
1372			//ENHANCED ECOMMERCE Setup//Product View - Car
1373			case 'productView-car':
1374				var details=options.payload;
1375				
1376				try{
1377					var currentObj={
1378						'id':details.get("sipp"),
1379						'name':details.get("name"),
1380						'category':details.get("carTypeDisplay"),
1381						'brand': "car",
1382						'variant': details.get("passengers"),
1383						'price':'' ,//need price
1384						'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
1385					}
1386						
1387					trackingObjectArray.push(currentObj);
1388					
1389				}catch(e){
1390					console.log("Error with Product View - Car ."+e.message);
1391				}
1392				
1393				self.clearField();
1394				window.dataLayer.push({
1395					'event': 'view_item',
1396					'ecommerce':{
1397						'currencyCode':htz.tracking.common.currencyCode,
1398						'detail': {
1399							'actionField': {'list': 'vehicle list'},
1400							'products': trackingObjectArray
1401						}
1402					}
1403				});
1404				
1405			break;
1406
1407			//dtc4102
1408				// irac-773
1409				//Vehicle Upsell Tracking Events Update
1410				case 'upsellDisplayed':
1411					var payload =options.payload;
1412					var selectedCar={};
1413					var selectedCarIndex;
1414
1415					try{
1416						for (i in payload){
1417							if(payload[i].selected && payload[i].selected==1){
1418								selectedCar=payload[i];
1419								selectedCarIndex=i;
1420							}
1421						}
1422						for (i in payload) {
1423							if(i!=selectedCarIndex){
1424								var currentObj={
1425									"upsellPriceDifference":payload[i].upsellPrice-selectedCar.upsellPrice,
1426									"currentSipp": selectedCar.sipp,
1427									"currentTotalPrice": selectedCar.upsellPrice,
1428									"upsellSipp": payload[i].sipp,
1429									"upsellTotalPrice": payload[i].upsellPrice
1430								}
1431								trackingObjectArray.push(currentObj);
1432
1433							}
1434						}
1435
1436						window.dataLayer.push({
1437							'event': 'upsellDisplayed',
1438							'upsells':trackingObjectArray
1439						});
1440
1441					}catch(e){
1442						console.log("Error with upsellDisplayed View."+e.message);
1443					}
1444
1445					break;
1446
1447				//dtc4102
1448				// irac-773
1449				//Vehicle Upsell Tracking Events Update
1450				case 'upsellError':
1451					var errorCode =options.payload;
1452
1453					try{
1454						window.dataLayer.push({
1455							'event': 'error',
1456							"error_type": "vehicle upsell",
1457							'error_message':errorCode
1458						});
1459
1460					}catch(e){
1461						console.log("Error with upsellDisplayed Error View ."+e.message);
1462					}
1463
1464					break;
1465
1466
1467			//dtc4102//23.19//irac-490
1468				// Please add tracking code on checkout page for vehicle upsells - INC001777224
1469			case 'vehicleUpgrade':
1470				var details=options;
1471
1472				try{
1473					window.dataLayer.push({
1474						'event':details.scenario,
1475						'oldSipp':details.oldSipp,
1476						'newSipp':details.newSIPP,
1477					});
1478				}catch(e){
1479					console.log("Error with vehicle upgrade ."+e.message);
1480				}
1481				break;
1482
1483				//dtc4102//23.19//irac-490
1484				// Please add tracking code on checkout page for vehicle upsells - INC001777224
1485				case 'upgradeReselect':
1486					var details=options;
1487
1488					try{
1489						window.dataLayer.push({
1490							'event':details.scenario,
1491							'oldSipp':details.oldSipp,
1492							'newSipp':details.newSIPP,
1493						});
1494					}catch(e){
1495						console.log("Error with vehicle upgrade ."+e.message);
1496					}
1497					break;
1498			
1499			//ENHANCED ECOMMERCE Setup//Add to Cart - Car
1500			case 'addToCart-car':
1501				var details=options.payload;
1502				
1503				try{
1504					var currentObj={
1505						'id':details.model.id,
1506						'name':details.options.name,
1507						'category':details.options.carTypeDisplay,
1508						'brand': "car",
1509						'variant': '',
1510						'price':parseFloat(details.model.get("approxTotalPrice")) ,
1511						'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
1512					}
1513						
1514					trackingObjectArray.push(currentObj);
1515
1516					self.clearField();
1517					window.dataLayer.push({
1518						'event': 'add_to_cart',
1519						'ecommerce':{
1520							'currencyCode': details.model.get("currency"),
1521							'add':{
1522								'products':trackingObjectArray
1523							}
1524						}
1525					});
1526					
1527				}catch(e){
1528					console.log("Error with Add to Cart - Car ."+e.message);
1529				}
1530				
1531
1532				
1533			break;
1534			
1535			//ENHANCED ECOMMERCE Setup//Product Click - Car
1536			case 'productClick-car':
1537				var details=options.payload.model.toJSON();
1538				if(details != undefined && details != null){
1539					if(details.prepaid == '0' && details.price != "" && details.selectForQuote != "1" 
1540							&& details.call != '1'){
1541						var propValue = 'pay later';
1542					}else if(details.prepaid == '1' && details.price != "" && details.selectForQuote != "1" 
1543							&& details.call != '1'){
1544						var propValue = 'pay now';
1545					}else if(details.selectForQuote == '1' && details.call != '1'){
1546						var propValue = 'select for quote';
1547					}else if(details.call == '1' && details.selectForQuote != '1'){
1548						var propValue = 'call to book';
1549					}else{
1550						var propValue = 'undefined';
1551					}
1552				}
1553					
1554				try{
1555					var currentObj={
1556						'id':details.id,
1557						'name':'',
1558						'category':'',
1559						'brand': "car",
1560						'variant': '',
1561						'price':parseFloat(details.approxTotalPrice) ,
1562						'position': parseInt(details.quoteIndex),
1563						'availability': propValue
1564					}
1565						
1566					trackingObjectArray.push(currentObj);
1567					
1568				}catch(e){
1569					console.log("Error with Product Click - Car."+e.message);
1570				}
1571				
1572				self.clearField();
1573				window.dataLayer.push({
1574					'event': 'select_item',
1575					'ecommerce': {
1576						'click': {
1577							'actionField': {'list':'vehicle list-' + propValue },
1578							'products': trackingObjectArray
1579						}
1580					}
1581				});
1582				
1583			break;
1584			
1585			//ENHANCED ECOMMERCE Setup//Remove from Cart-Car
1586			case 'removeFromCart-car':
1587				var details=options.payload;
1588				
1589				try{
1590					var currentObj={
1591						'id':details.get("vehicle").get("sipp"),
1592						'name':details.get("vehicle").get("name"),
1593						'category':details.get("vehicle").get("carTypeDisplay"),
1594						'brand': "car",
1595						'variant': details.get("vehicle").get("passengers"),
1596						'price':parseFloat(details.get("rateInfo").get("approxTotal")),
1597						'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
1598					}
1599						
1600					trackingObjectArray.push(currentObj);
1601					
1602				}catch(e){
1603					console.log("Error with Remove from Cart-Car."+e.message);
1604				}
1605				
1606				self.clearField();
1607				window.dataLayer.push({
1608					'event': 'remove_from_cart',
1609					'ecommerce':{
1610						'currencyCode': htz.tracking.common.currencyCode,
1611						'remove': {
1612							'products': trackingObjectArray
1613						}
1614					}
1615				});
1616				break;
1617				
1618			//ENHANCED ECOMMERCE Setup//Add to Cart - Add on Extras 
1619			case 'addToCart-addOnExtras':
1620				var details=options.payload;
1621				
1622				try{
1623					var currentObj={
1624						'id':details.get("id"),
1625						'name':details.get("name"),
1626						'category':'',
1627						'brand': "add-on",
1628						'variant': '',
1629						'price':parseFloat(details.get("price")),
1630						'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
1631					}
1632						
1633					trackingObjectArray.push(currentObj);
1634					
1635				}catch(e){
1636					console.log("Error with Add to Cart - Add on Extras."+e.message);
1637				}
1638				
1639				self.clearField();
1640				window.dataLayer.push({
1641					'event': 'add_to_cart',
1642					'ecommerce':{
1643						'currencyCode': htz.tracking.common.currencyCode,
1644						'add': {
1645							'products': trackingObjectArray
1646						}
1647					}
1648				});			
1649			break;
1650			
1651			//ENHANCED ECOMMERCE Setup//Product Click - Add on Extras
1652			case 'productClick-addOnExtras':
1653				var details=options.payload;
1654				
1655				try{
1656					var currentObj={
1657						'id':details.get("id"),
1658						'name':details.get("name"),
1659						'category':'',
1660						'brand': "add-on",
1661						'variant': '',
1662						'price':parseFloat(details.get("price")),
1663						'position': ''
1664					}
1665						
1666					trackingObjectArray.push(currentObj);
1667					
1668				}catch(e){
1669					console.log("Error with Product Click - Car."+e.message);
1670				}
1671				
1672				self.clearField();
1673				window.dataLayer.push({
1674					'event': 'select_item',
1675					'ecommerce': {
1676						'click': {
1677							'actionField': {'list':'add on list' },
1678							'products': trackingObjectArray
1679						}
1680					}
1681				});
1682				
1683			break;
1684			
1685			//ENHANCED ECOMMERCE Setup//Remove from Cart-Add on Extras 
1686			case 'removeFromCart-addOnExtras':
1687				var details=options.payload;
1688				
1689				try{
1690					var currentObj={
1691							'id':details.get("id"),
1692							'name':details.get("name"),
1693							'category':'',
1694							'brand': "add-on",
1695							'variant': '',
1696							'price':parseFloat(details.get("price")),
1697							'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
1698						}
1699						
1700					trackingObjectArray.push(currentObj);
1701					
1702				}catch(e){
1703					console.log("Error with Remove from Cart-Add on Extras."+e.message);
1704				}
1705				
1706				self.clearField();
1707				window.dataLayer.push({
1708					'event': 'remove_from_cart',
1709					'ecommerce':{
1710						'currencyCode': htz.tracking.common.currencyCode,
1711						'remov
1711e': {
1712							'products': trackingObjectArray
1713						}
1714					}
1715				});
1716				break;
1717			
1718			//Checkout Funnel//	Step 1 - Choose your vehicle
1719			case 'begin_checkout':
1720				var vehicles=options.payload;
1721				
1722				for (i in vehicles){
1723					for(j in vehicles[i].quotes){
1724						try{
1725							var currentObj={
1726								'id':vehicles[i].quotes[j].id,
1727								'name':vehicles[i].name,
1728								'category':vehicles[i].carTypeDisplay,
1729								'brand': "car",
1730								'variant': vehicles[i].passengers,
1731								'price':parseFloat(vehicles[i].quotes[j].approxTotalPrice) ,
1732								'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined",
1733								'position':vehicles[i].quotes[j].vehicleIndex+1,
1734								'list': 'vehicle list'
1735							}
1736						
1737						trackingObjectArray.push(currentObj);
1738						}catch(e){
1739							console.log("Error with Checkout Funnel-Step 1 - Choose your vehicle"+e.message);
1740						}
1741					}
1742				}
1743				
1744				self.clearField();
1745				window.dataLayer.push({
1746				    'event': 'begin_checkout',
1747				    'step_name': '1 - choose your vehicle',
1748				    'ecommerce': {
1749				      'checkout': {
1750				        'actionField': {'step': 1}
1751				      },
1752				      'impressions': trackingObjectArray
1753				    }    
1754				});
1755				
1756				break;	
1757				
1758			//Checkout Funnel- Step 2 - Choose your vehicle
1759			case 'checkout_add-ons-step':
1760				var addOnsPayload = options.payload || {};
1761				var categories = addOnsPayload.optionals;
1762				var vehicle = addOnsPayload.vehicle;
1763				var rateInfo = addOnsPayload.rateInfo;
1764				if (!vehicle || !rateInfo) {
1765					break;
1766				}
1767				if (!categories) {
1768					categories = [];
1769				}
1770				for (i in categories){
1771					try{
1772						var currentObj={
1773							'id':'',
1774							'name':categories[i].name,
1775							'category':categories[i].key,
1776							'brand': "add-on",
1777							'variant': '',
1778							'price':parseFloat(categories[i].unitRate) ,
1779							'quantity': categories[i].quantity,
1780							'position':'',//need position
1781							'list': 'add on list'
1782						}
1783							
1784						trackingObjectArray.push(currentObj);
1785					}catch(e){
1786						console.log("Error with Checkout Funnel- Step 2 - Choose your vehicle."+e.message);
1787					}
1788				}
1789				
1790				self.clearField();
1791				window.dataLayer.push({
1792				    'event': 'checkout_add-ons-step',
1793				    'step_name': '2 - choose add-ons',
1794				    'ecommerce': {
1795				      'checkout': {
1796				        'actionField': {'step': 2},
1797				        'products':[{
1798				        	'name': vehicle.name,
1799				            'id': vehicle.sipp,
1800				            'price': parseFloat(rateInfo.approxTotal),
1801				            'brand': 'car',
1802				            'category': vehicle.carTypeDisplay,
1803				            'variant': vehicle.passengers,
1804				            'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
1805
1806				        }],
1807				        },
1808				        'impressions': trackingObjectArray
1809				    }    
1810				});
1811				
1812				break;	
1813				
1814			//Checkout Funnel- Step 3 - Checkout & Payment
1815			case 'add_payment_info':
1816				var paymentPayload = options.payload || {};
1817				var payLaterSection = paymentPayload.payLater;
1818				var payNowSection = paymentPayload.payNow;
1819				var payLaterExtras = (payLaterSection && payLaterSection.extras) ? payLaterSection.extras : [];
1820				var payNowExtras = (payNowSection && payNowSection.extras) ? payNowSection.extras : [];
1821				try{
1822					var categories = paymentPayload.optionals;
1823					var vehicle = paymentPayload.vehicle;
1824					var rateInfo = paymentPayload.rateInfo;
1825					if (!vehicle || !rateInfo) {
1826						break;
1827					}
1828					if (!categories) {
1829						categories = [];
1830					}
1831					var selectedVehicle={
1832						'name': vehicle.name,
1833						'id': vehicle.sipp,
1834						'price': parseFloat(rateInfo.approxTotal),
1835						'brand': 'car',
1836						'category': vehicle.carTypeDisplay,
1837						'variant': vehicle.passengers,
1838						'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
1839					}
1840					trackingObjectArray.push(selectedVehicle);
1841
1842					for (i in categories){
1843						try{
1844							var currentObj={
1845								'id':categories[i].key,
1846								'name':categories[i].name,
1847								'category':'',
1848								'brand': "add-on",
1849								'variant': '',
1850								'price':categories[i].unitRate,
1851								'quantity': categories[i].quantity
1852							}
1853							if(categories[i].quantity>0){
1854								trackingObjectArray.push(currentObj);
1855							}
1856						}catch(e){
1857							console.log("Error with Checkout Funnel- Step 2 - Choose your vehicle."+e.message);
1858						}
1859					}
1860
1861					for (i in payLaterExtras) {
1862						try {
1863							var currentObj = {
1864								'id': payLaterExtras[i].id,
1865								'name': payLaterExtras[i].name,
1866								'price': payLaterExtras[i].total,
1867								'brand': 'add-on',
1868								'category': '',
1869								'variant': '',
1870								'quantity':payLaterExtras[i].quantity
1871							}
1872							if (payLaterExtras[i].quantity > 0) {
1873								trackingObjectArray.push(currentObj);
1874							}
1875						}
1876						catch (e) {
1877							console.log(e.message);
1878						}
1879					}
1880
1881					for (i in payNowExtras) {
1882						try {
1883							var currentObj = {
1884								'id': payNowExtras[i].id,
1885								'name': payNowExtras[i].name,
1886								'price': payNowExtras[i].total,
1887								'brand': 'add-on',
1888								'category': '',
1889								'variant': '',
1890								'quantity':payNowExtras[i].quantity
1891							}
1892							if (payNowExtras[i].quantity > 0) {
1893								trackingObjectArray.push(currentObj);
1894							}
1895						}
1896						catch (e) {
1897							console.log(e.message);
1898						}
1899					}
1900
1901					self.clearField();
1902					window.dataLayer.push({
1903						'event': 'add_payment_info',
1904						'step_name': '3 - review and book',
1905						'ecommerce': {
1906							'checkout': {
1907								'actionField': {'step': 3},
1908								'currencyCode': rateInfo.currency,
1909								'products':trackingObjectArray
1910							}
1911						}
1912					});
1913				}catch(e){
1914				console.log("Error with Checkout Funnel- Purchase / Booking confirmation."+e.message);
1915				}
1916				
1917				break;	
1918				
1919			//Checkout Funnel- Purchase / Booking confirmation
1920			case 'purchase':
1921				var confirmationSummaryInfo=options.payload.confirmationSummaryInfo;
1922				var vehicle=options.payload.model.get("rateDetails").get("vehicle");
1923				var rateInfo=options.payload.model.get("rateDetails").get("rateInfo");
1924				var categories=options.payload.model.get("rateDetails").get("optionals").models;
1925				var payLaterExtras=options.payload.model.get("rateDetails").get("payLater").get("extras").models;
1926				var payNowExtras=options.payload.model.get("rateDetails").get("payNow").get("extras").models;
1927
1928				try{
1929				var selectedVehicle={
1930						'name': vehicle.get("name"),
1931				        'id': vehicle.get("sipp"),
1932				        'price': parseFloat(rateInfo.get("approxTotal")),
1933				        'brand': 'car',
1934				        'category': vehicle.get("carTypeDisplay"),
1935				        'variant': vehicle.get("passengers"),
1936				        'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
1937				}
1938				trackingObjectArray.push(selectedVehicle);
1939					
1940				for (i in categories){
1941						var currentObj={
1942								'id': categories[i].get("key"),
1943								'name': categories[i].get("name"),
1944								'category':'',
1945								'brand': "add-on",
1946								'variant': '',
1947								'price': categories[i].get("unitRate") ,
1948								'quantity': categories[i].get("quantity")
1949							}
1950						if (categories[i].get("quantity") > 0) {
1951							trackingObjectArray.push(currentObj);
1952						}
1953				}
1954				
1955				for (i in payLaterExtras) {
1956					try {
1957						var currentObj = {
1958							'id': payLaterExtras[i].get("id"),
1959							'name': payLaterExtras[i].get("name"),
1960							'price': payLaterExtras[i].get("total"),
1961							'brand': 'add-on',
1962							'category': '',
1963							'variant': '',
1964							'quantity':payLaterExtras[i].get("quantity")
1965						}
1966						if (payLaterExtras[i].get("quantity") > 0) {
1967							trackingObjectArray.push(currentObj);
1968						}
1969					}
1970					catch (e) {
1971						console.log(e.message);
1972					}
1973				}
1974				
1975				for (i in payNowExtras) {
1976					try {
1977						var currentObj = {
1978							'id': payNowExtras[i].get("id"),
1979							'name': payNowExtras[i].get("name"),
1980							'price': payNowExtras[i].get("total"),
1981							'brand': 'add-on',
1982							'category': '',
1983							'variant': '',
1984							'quantity':payNowExtras[i].get("quantity")
1985						}
1986						if (payNowExtras[i].get("quantity") > 0) {
1987							trackingObjectArray.push(currentObj);
1988						}
1989					}
1990					catch (e) {
1991						console.log(e.message);
1992					}
1993				}
1994				
1995				self.clearField();
1996				window.dataLayer.push({
1997					'checkout_funnel_type': 'regular',
1998					'discountAmount': '',
1999				    'reservationDaysOut': '',
2000				    'rentalDays': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined",
2001				    'carRevenue': parseFloat(rateInfo.get("approxTotal")), //car revenue
2002				    'extrasAmount':'',
2003				    'event': 'purchase',
2004				    'ecommerce':{
2005					    'purchase': {
2006					        'actionField': {
2007					        	'id': confirmationSummaryInfo.confirmationNumber,
2008					        	'affiliation':'', //payment type: pay now or later
2009					        	'revenue': parseFloat(rateInfo.get("approxTotal")),
2010					        	'tax':'',
2011					        	'coupon': ''  //coupon code applied to booking
2012					        },
2013					        'currencyCode': rateInfo.get("currency"),
2014					        'products':trackingObjectArray
2015					    } 
2016				    }
2017				});
2018
2019				}catch(e){
2020					console.log("Error with Checkout Funnel- Purchase / Booking confirmation."+e.message);
2021				}
2022
2023				break;
2024				
2025			//Checkout Funnel- Step 4 - Modify Reservation
2026			case 'checkout_modify_reservation':
2027				var vehicle=options.payload.get("rateDetails").get("vehicle");
2028				var rateInfo=options.payload.get("rateDetails").get("rateInfo");
2029				var categories=options.payload.get("rateDetails").get("optionals");
2030
2031				try{
2032					var selectedVehicle={
2033						'name': vehicle.get("name"),
2034						'id': vehicle.get("sipp"),
2035						'price': parseFloat(rateInfo.get("approxTotal")),
2036						'brand': 'car',
2037						'category': vehicle.get("carTypeDisplay"),
2038						'variant': vehicle.get("passengers"),
2039						'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
2040					}
2041					trackingObjectArray.push(selectedVehicle);
2042
2043					for (i in categories){
2044						try{
2045							var currentObj={
2046								'id':'',
2047								'name':categories.get("name"),
2048								'category':categories.get("key"),
2049								'brand': "add-on",
2050								'variant': '',
2051								'price':parseFloat(categories.get("unitRate")) ,
2052								'quantity': categories.get("quantity")
2053							}
2054							if(categories[i].quantity>0){
2055								trackingObjectArray.push(currentObj);
2056							}
2057						}catch(e){
2058							console.log("Error with Step 4 - Modify Reservation."+e.message);
2059						}
2060					}
2061
2062					self.clearField();
2063					window.dataLayer.push({
2064						'event': 'checkout_modify_reservation',
2065						'step_name': '4 - modify reservation',
2066						'ecommerce': {
2067							'checkout': {
2068								'actionField':{'step':4},
2069								'products':trackingObjectArray
2070							}
2071						}
2072					});
2073				}catch(e){
2074					console.log("Error with Checkout Funnel- Purchase / Booking confirmation."+e.message);
2075				}
2076
2077				break;
2078				
2079			//Custom Events//Modify Reservation
2080			case 'modify_reservation':
2081				var confNumber=options.payload.confNumber;
2082				var modificationType=options.payload.modificationType;
2083					
2084				window.dataLayer.push({
2085				    'event': 'modify_reservation',
2086				    'modification_type':modificationType,
2087				    'confirmation_code':confNumber
2088				});
2089				
2090				break;
2091				
2092			//Checkout Funnel- Step 5 - Save Modification
2093			case 'modify_reservation_saved':
2094				var confirmationSummaryInfo=options.payload.confirmationSummaryInfo;
2095				var vehicle=options.payload.model.get("rateDetails").get("vehicle");
2096				var rateInfo=options.payload.model.get("rateDetails").get("rateInfo");
2097				var categories=options.payload.model.get("rateDetails").get("optionals").models;
2098				var payLaterExtras=options.payload.model.get("rateDetails").get("payLater").get("extras").models;
2099				var payNowExtras=options.payload.model.get("rateDetails").get("payNow").get("extras").models;
2100
2101				try{
2102					var selectedVehicle={
2103						'name': vehicle.get("name"),
2104						'id': vehicle.get("sipp"),
2105						'price': parseFloat(rateInfo.get("approxTotal")),
2106						'brand': 'car',
2107						'category': vehicle.get("carTypeDisplay"),
2108						'variant': vehicle.get("passengers"),
2109						'quantity': (htz.tracking!=undefined)?parseInt(htz.tracking.common.rentalDays):"undefined"
2110					}
2111					trackingObjectArray.push(selectedVehicle);
2112
2113					for (i in categories){
2114						try{
2115							var currentObj={
2116								'id': categories[i].get("key"),
2117								'name': categories[i].get("name"),
2118								'category':'',
2119								'brand': "add-on",
2120								'variant': '',
2121								'price': categories[i].get("unitRate") ,
2122								'quantity': categories[i].get("quantity")
2123							}
2124							if (categories[i].get("quantity") > 0) {
2125								trackingObjectArray.push(currentObj);
2126							}
2127						}catch(e){
2128							console.log("Error with Checkout Funnel- Purchase / Booking confirmation."+e.message);
2129						}
2130					}
2131
2132					for (i in payLaterExtras) {
2133						try {
2134							var currentObj = {
2135								'id': payLaterExtras[i].get("id"),
2136								'name': payLaterExtras[i].get("name"),
2137								'price': payLaterExtras[i].get("total"),
2138								'brand': 'add-on',
2139								'category': '',
2140								'variant': '',
2141								'quantity':payLaterExtras[i].get("quantity")
2142							}
2143							if (payLaterExtras[i].get("quantity") > 0) {
2144								trackingObjectArray.push(currentObj);
2145							}
2146						}
2147						catch (e) {
2148							console.log(e.message);
2149						}
2150					}
2151
2152					for (i in payNowExtras) {
2153						try {
2154							var currentObj = {
2155								'id': payNowExtras[i].get("id"),
2156								'name': payNowExtras[i].get("name"),
2157								'price': payNowExtras[i].get("total"),
2158								'brand': 'add-on',
2159								'category': '',
2160								'variant': '',
2161								'quantity':payNowExtras[i].get("quantity")
2162							}
2163							if (payNowExtras[i].get("quantity") > 0) {
2164								trackingObjectArray.push(currentObj);
2165							}
2166						}
2167						catch (e) {
2168							console.log(e.message);
2169						}
2170					}
2171
2172					self.clearField();
2173					window.dataLayer.push({
2174						'event': 'modify_reservation_saved',
2175						'step_name': '5 - save modification',
2176						'ecommerce': {
2177							'checkout': {
2178								'actionField':{'step':5},
2179								'currencyCode': rateInfo.get("currency"),
2180								'products':trackingObjectArray
2181							}
2182						}
2183					});
2184				}catch(e){
2185					console.log("Error with Checkout Funnel- Purchase / Booking confirmation."+e.message);
2186				}
2187				
2188				break;
2189			}
2190			
2191
2192		}
2193	}
2194	
2195	return gtmTracker;
2196});
2197
2198(function(){navigator.cookieEnabled||(window.location.href=htz.config.rootContext+"/errors/jsCookieErrorPage?noCookie
2198=true")})();                                                                                                                                                                                          
2199var RestModel=Backbone.Model.extend({initialize:function(){this.on("error",this.syncError,this);this.on("sync",this.syncSuccess,this)},parse:function(a,b){if(Utils.hasSessionTimedOut(b,null))this.trackSessionTimeout(),this.handleSessionTimeout(b.getResponseHeader("Location"));else return a?a.data?this.parseModel(a.data):this.parseModel(a):this.parseModel({})},parseModel:function(a){return a},syncSuccess:function(a,b){b&&(b.message&&(b.message.fieldErrors||b.message.messages||b.message.systemErrors)?
2200(Utils.trackError(b.message,this.getPage()),this.get("preventErrorStorage")||(htz.helpers.SessionHelper.setItem("errors",JSON.stringify(b.message)),Utils.isUseStoragePolyfill()&&Utils.storeItemIE("ieErrors",b.message))):this.get("preventErrorStorage")||htz.helpers.SessionHelper.removeItem("errors"))},getErrors:function(a){try{return"string"==typeof a?null:JSON.parse(a.responseText)}catch(b){try{var c=window.location.hash,c=c?c.substring(1):"itinerary",d=""+a.responseText;0<d.length&&(d=d.replace(/(\r\n|\n|\r)/gm,
2201""),100<d.length&&(d=d.substring(0,100)));WebTracking.setError("debug-error-"+Utils.browserDeviceType()+"-"+c+"-"+this.get("href")+"-"+d+"-"+b.message,c)}catch(e){}return null}},syncError:function(a,b,c){a=b&&b.status?b.status:null;htz.helpers.SessionHelper.removeItem("errors");this.handleStatus(a,b,c);Loader.hideLoader()},handleStatus:function(a,b,c){if(htz.config.isApp&&(500==a||403==a))try{$.publish("error-"+a)}catch(d){}else 500===a?this.handleError500():403===a?this.handleError403():this.checkForErrors(this.getErrors(b),
2202c)},handleError500:function(){window.location.href=htz.config.rootContext+"/error/index.jsp"},handleError403:function(){window.location.href=htz.config.rootContext+"/reservation/"},handleSessionTimeout:function(a){a&&(window.location.href=a)},checkForErrors:function(a,b){if(a){if(a.message){this.trigger("message",this,a.message);a.message.fieldErrors&&this.trigger("fieldError",this,a.message.fieldErrors,b);if(a.message.messages||a.message.systemErrors||a.message.errorData){"phone"===htz.config.deviceGroup?
2203window.scrollTo(0,60):window.scrollTo(0,0);var c=b||this.get("errorLocation")||this.getErrorLocation();Utils.displayErrorMessage(a.message,c);a.message.messages?this.trigger("messages",this,a.message.messages):this.trigger("systemErrors",this,a.message.systemErrors);a.message.errorData&&this.trigger("errorData",this,a.message.errorData)}Utils.trackError(a.message,this.getPage())}a.data&&this.trigger("errordata",this,a.data)}},saveChanged:function(a,b,c){var d;_.isObject(a)||null==a?(d=a,c=b):(d={},
2204d[a]=b);a=this.changedAttributes()?_.extend(this.changedAttributes(),d):d;a=this.isNew()?a:_.extend(a,{id:this.get("id")});c=c?_.clone(c):{};c=_.extend(c,{data:JSON.stringify(a),contentType:"application/json"});this.save(d,c)},url:function(){return this.get("href")},getPage:function(){return null},getErrorLocation:function(){return null},trackSessionTimeout:function(){try{"undefined"!==typeof WebTracking&&WebTracking.trackData({eVar22:"NZX305"})}catch(a){}}});
2205"function"==typeof define&&define.amd&&define("utils/restmodel",["backbone"],function(){return RestModel});                                                          
2206/**
2207    @description  jQuery Cookie plugin - https://github.com/carhartl/jquery-cookie. 
2208    Dual licensed under the MIT and GPL licenses:
2209 	http://www.opensource.org/licenses/mit-license.php
2210	http://www.gnu.org/licenses/gpl.html
2211    @requires Jquery
2212 */ 
2213(function(g){g.cookie=function(h,b,a){if(1<arguments.length&&(!/Object/.test(Object.prototype.toString.call(b))||null===b||void 0===b)){a=g.extend({},a);if(null===b||void 0===b)a.expires=-1;if("number"===typeof a.expires){var d=a.expires,c=a.expires=new Date;c.setDate(c.getDate()+d)}b=""+b;return document.cookie=[encodeURIComponent(h),"=",a.raw?b:encodeURIComponent(b),a.expires?"; expires="+a.expires.toUTCString():"",a.path?"; path="+a.path:"",a.domain?"; domain="+a.domain:"",a.secure?"; secure":
2214""].join("")}for(var a=b||{},d=a.raw?function(a){return a}:decodeURIComponent,c=document.cookie.split("; "),e=0,f;f=c[e]&&c[e].split("=");e++)if(d(f[0])===h)return d(f[1]||"");return null}})(jQuery);                                                                                                                                                       
2215window.checkHertzNameSpace("htz.utils");
2216var LightBox=LightBox||function(){var c=function(){c.OVERLAYSEQUENCE+=1;this.id="light-box-"+c.OVERLAYSEQUENCE;this.zIndex+=10*c.OVERLAYSEQUENCE;c.INSTANCES.push(this)};c.OVERLAYSEQUENCE=0;c.INSTANCES=[];c.adjust=function(){for(var a=0;a<c.INSTANCES.length;a++){var b=c.INSTANCES[a];
2216b&&b.isInUse()&&b.adjustBackground()}};var e=null;c.prototype={inUse:!1,zIndex:1050,backBreak:600,avlWidth:0,pageContainer:null,id:"",background:null,foreground:null,dataContainer:null,orginalWidth:0,setDefaults:function(){this.params=
2217{url:"",top:0,left:0,width:500,height:"auto",hCenter:!0,vCenter:!1,scroll:!1,darkness:0.8,dismiss:!0,complete:null,error:null,close:null,zIndex:0,closeLabel:null,title:null,footNote:null,sourceElement:null,sourceElementOffset:null,bgSourceElement:null,plain:!1,referrer:null,hMargin:80,backButton:!0,showBackButton:!0,suppressClose:!1,autoScrollAdjust:!0,noPadding:!1,suppressHeader:!1,allowOverflow:!1}},getDisplayWidth:function(){return $("body").width()},ajaxError:function(a){try{this.showContent(htz.content.ajaxFail)}catch(b){}"function"==
2218typeof this.params.error&&this.params.error(a)},ajaxComplete:function(a){"function"==typeof this.params.complete&&this.params.complete(a)},renderTemplate:function(){var a=[];a.push('<div class="lb-background"></div>');a.push('<div class="lb-foreground">');this.params.backButton&&(this.params.showBackButton&&!htz.config.isApp)&&a.push('<div class="lb-back lb-close"><div><div class="icons-back_icon"></div></div><div>'+this.params.backLabel+"</div></div>");a.push('<div class="lb-foreground-cont" role="dialog" aria-label="'+
2219this.params.title+'" tabindex="0">');if(!this.params.plain)if(this.params.suppressClose)this.params.title&&a.push('<header class="lb-header clearfix"><span class="swoosh multiline"><section>'+this.params.title+'</section></span><span class="lb-close lb-deny"></span></header>');else if(this.params.title&&this.params.closeLabel){if(a.push('<header class="lb-header clearfix"><span class="swoosh multiline"><section>'+this.params.title+'</section></span><span class="lb-close lb-deny" role="button" tabindex="0" >'+
2220this.params.closeLabel.toUpperCase()+'<div class="icons-ic_close_x lb-close-icon"></div></span></header>'),htz.config.isApp){var b=localStorage.getItem("itineraryPageBack"),c=localStorage.getItem("vehiclePageBack"),d=$("#location-popup h1").text();b?(a.push("<a id=\"lbBackButton\" onclick=\"$(&apos;.lb-back&apos;).trigger(&apos;click&apos;); hzm.shared.googleTagManger('Hertz Car Rental Locations', 'Reservation Flow','"+d+"', 'Back', '-1');\"><span></span></a>"),a.push("<a id=\"lbCloseButton\" onclick=\"$(&apos;.lb-back&apos;).trigger(&apos;click&apos;); hzm.shared.googleTagManger('Hertz Car Rental Locations', 'Reservation Flow','"+
2221d+"', 'X', '-1');\"><span></span></a>")):c?(a.push("<a id=\"lbBackButton\" onclick=\"$(&apos;.lb-back&apos;).trigger(&apos;click&apos;); hzm.shared.googleTagManger('Select Vehicle', '', '', '', '');\"><span></span></a>"),a.push("<a id=\"lbCloseButton\" onclick=\"$(&apos;.lb-back&apos;).trigger(&apos;click&apos;); hzm.shared.googleTagManger('Select Vehicle', '', '', '', '');\"><span></span></a>")):(a.push("<a id=\"lbBackButton\" onclick=\"$(&apos;.lb-back&apos;).trigger(&apos;click&apos;); hzm.shared.googleTagManger('Hertz Car Rental Locations', 'Reservation Flow','"+
2222d+"', 'Back', '-1');\"><span></span></a>"),a.push("<a id=\"lbCloseButton\" onclick=\"$(&apos;.lb-back&apos;).trigger(&apos;click&apos;); hzm.shared.googleTagManger('Hertz Car Rental Locations', 'Reservation Flow','"+d+"', 'X', '-1');\"><span></span></a>"))}}else this.params.closeLabel&&this.backBreak<=this.avlWidth&&a.push('<header class="lb-header-plain clearfix"><span class="lb-close lb-deny">'+this.params.closeLabel.toUpperCase()+'<div class="icons-ic_close_x lb-close-icon"></div></span></header>');
2223this.params.noPadding?a.push('<div class="lb-content-box-no-padding"></div>'):a.push('<div class="lb-content-box"></div>');this.params.footNote&&a.push('<footer class="lb-footer">'+this.params.footNote+"</footer>");a.push("</div>");this.params.backButton&&(this.params.showBackButton&&htz.config.isApp)&&(b=localStorage.getItem("itineraryPageBack"),c=localStorage.getItem("vehiclePageBack"),b?(a.push("<div class=\"lb-back lb-close\"><div class=\"lb-back-btn\" onclick=\"hzm.shared.googleTagManger('Hertz Car Rental Locations', 'Reservation Flow','"+
2224d+"', 'Back', '-1');\"><div><div class=\"icons-back_icon\"></div></div><div>"+this.params.backLabel+"</div></div></div>"),localStorage.removeItem("itineraryPageBack")):c?(a.push("<div class=\"lb-back lb-close\"><div class=\"lb-back-btn\" onclick=\"hzm.shared.googleTagManger('Select Vehicle', '', '', '', '');\"><div><div class=\"icons-back_icon\"></div></div><div>"+this.params.backLabel+"</div></div></div>"),localStorage.removeItem("vehiclePageBack")):a.push("<div class=\"lb-back lb-close\"><div class=\"lb-back-btn\" onclick=\"hzm.shared.googleTagManger('Hertz Car Rental Locations', 'Reservation Flow','"+
2225d+"', 'Back', '-1');\"><div><div class=\"icons-back_icon\"></div></div><div>"+this.params.backLabel+"</div></div></div>"));a.push("</div>");$(".tmplPageContainer :visible").addClass("disabled").attr("tabindex",-1);$("#container :visible").addClass("disabled").attr("tabindex",-1);return a.join("")},initTemplate:function(){this.params.backLabel=this.params.closeLabel;if(!this.params.closeLabel)try{this.params.closeLabel=htz.content.close,this.params.backLabel=htz.content.back}catch(a){}this.params.closeLabel||
2226(this.params.dismiss=!0);0<this.params.zIndex&&(this.zIndex=this.params.zIndex);var b=this.renderTemplate();0==$("#"+this.id).length?(0<$(".tmplPageContainer").length?this.pageContainer=$(".tmplPageContainer"):0<$("#container").length&&(this.pageContainer=$("#container")),this.pageContainer.after($("<div />").attr("id",this.id).html(b))):$("#"+this.id).html(b);this.background=$("#"+this.id+" .lb-background").css({"z-index":this.zIndex});this.foreground=$("#"+this.id+" .lb-foreground").css({"z-index":this.zIndex+
22275});this.dataContainer=this.params.noPadding?$("#"+this.id+" .lb-content-box-no-padding"):$("#"+this.id+" .lb-content-box");0==this.params.darkness?this.foreground.addClass("lb-foreground-shadow"):this.foreground.removeClass("lb-foreground-shadow");htz.config.isApp&&$("#"+this.id).show();this.adjustBackground()},closeOverlay:function(a){this.isInUse()&&($(".tmplPageContainer").find("*").removeClass("disabled").removeAttr("tabindex"),$("#container").find("*").removeClass("disabled").removeAttr("tabindex"),
2228!a&&"function"==typeof this.params.close&&(this.params.referrer?this.params.close.call(this.params.referrer):this.params.close()),this.hide(),htz.config.isApp&&($("#"+this.id).hide(),"Select for Quote"==localStorage.getItem("selectQuote")&&"Continue with Pay Later"==$(".lb-foreground .lb-content-box #cancel-fee-overlay button.secondary").text()&&(this.stop(),localStorage.removeItem("selectQuote"))))},makeRequest:function(){var a=this;a.showLightbox();a.showProgress();$.ajax({type:"post",url:a.params.url,
2229success:function(b,c,d){"undefined"!=typeof Utils&&Utils.sessionTimedOut(d)||a.showContent(b)},error:function(b,c,d){a.ajaxError(d)},complete:function(b){a.ajaxComplete(b)}})},adjustScroll:function(){e&&(window.scrollTo(e.x,e.y),e=null)},hide:function(){this.foreground.hide();this.background.hide();this.pageContainer.show();"undefined"!=typeof Utils&&Utils.showSelects();this.unbindEvents();this.inUse=!1;"phone"===htz.config.deviceGroup&&this.params.autoScrollAdjust&&this.adjustScroll()},show:function(a){this.showLightbox();
2230this.showContent(a)},showLightbox:function(){this.params.backButton&&this.avlWidth<this.backBreak?(this.background.show(),this.background.css({opacity:this.params.darkness})):("undefined"!=typeof Utils&&Utils.hideSelects(),this.background.css({opacity:this.params.darkness}).show());this.foreground.show();"phone"===htz.config.deviceGroup&&window.scrollTo(0,0)},showProgress:function(){this.dataContainer.html($("<div />").addClass("lb-progress"))},showContent:function(a){this.isInUse()?("auto"===this.params.height?
2231this.params.allowOverflow?this.dataContainer.css({"overflow-y":"visible"}):this.dataContainer.css({"overflow-y":"auto"}):this.dataContainer.css({height:this.params.height,"overflow-y":"scroll"}),this.dataContainer.html(a)):this.dataContainer.html("")},setPosition:function(){"phone"===htz.config.deviceGroup&&(this.params.autoScrollAdjust&&!e)&&(e={x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?
2232window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop});this.avlWidth=this.getDisplayWidth();if(this.params.backButton&&this.avlWidth<this.backBreak)this.params.width=this.avlWidth-20,this.foreground.css({top:0,left:0,width:this.params.width}),htz.config.isApp&&this.foreground.css("max-width",this.params.width+20);else{this.pageContainer.show();this.background.show();this.params.backButton||(this.foreground.addClass("fullWidth"),this.params.hMargin=10);this.params.width=
2233this.avlWidth-this.params.hMargin<this.orginalWidth?this.avlWidth-this.params.hMargin:this.orginalWidth;0<this.params.left?this.params.left+this.params.width>this.avlWidth&&(this.params.hCenter=!0):this.params.hCenter=!0;if(this.params.sourceElement){var a=$(this.params.sourceElement).offset();this.params.left=this.params.hCenter?Math.round((this.avlWidth-this.params.width)/2):$("body").width()>a.left+this.params.width+25?a.left+25:a.left>this.params.width+5?a.left-this.params.width-5:a.left-this.params.width/
22342;this.params.top=this.params.sourceElementOffset?a.top+this.params.sourceElementOffset:a.top;
2234this.params.dismiss&&this.background.removeClass("lb-close-ncursor")}else this.params.hCenter&&(this.params.left=Math.round((this.avlWidth-this.params.width)/2)),0==this.params.top&&(this.params.top=$(document).scrollTop()+100),this.params.dismiss&&this.background.addClass("lb-close-ncursor");this.background.css({width:$(document).width(),height:$(document).height()});this.foreground.css({width:this.params.width,
2235top:this.params.top,left:this.params.left});htz.config.isApp&&hzm.utils.isIPAD()&&($("#light-box-2 .lb-foreground.fullWidth").css("left","0px"),$("#light-box-2 .lb-foreground.fullWidth").css("top","0px"))}},adjustBackground:function(){this.params.bgSourceElement?this.background.css({width:$(document).width(),height:$(document).height(),top:$(this.params.sourceElement).offset().top}):this.background.css({width:$(document).width(),height:$(document).height()})},showPageData:function(){var a="string"==
2236typeof this.params.url?$("#"+this.params.url).get(0):this.params.url;this.show($(a).html())},bindEvents:function(){var a=this;a.params.hCenter&&($(window).on("resize.lightBox",function(){a.setPosition();a.params.bgSourceElement&&a.adjustBackground()}),$(window).on("orientationchange.lightBox",function(){a.setPosition();a.params.bgSourceElement&&a.adjustBackground()}));a.params.scroll&&$(window).bind("scroll.lightBox",function(){a.setPosition()});a.params.dismiss&&$(document).bind("keyup.lightBox",
2237function(b){27==b.keyCode&&a.closeOverlay()});a.params.dismiss?a.background.addClass("lb-close-ncursor"):a.background.removeClass("lb-close-ncursor");$("#"+a.id+" .lb-close, #"+a.id+" .lb-close-ncursor").bind("click",function(){a.closeOverlay()});$("#"+a.id+" .lb-close, #"+a.id+" .lb-close-ncursor").bind("keydown.lightBox",function(b){if(32==b.keyCode)return b.preventDefault(),a.closeOverlay(),!1})},unbindEvents:function(){$(window).off(".lightBox");this.background.off("click");$(document).off("keyup.lightBox");
2238$("#"+this.id+" .lb-close, #"+this.id+" .lb-close-ncursor").off("click")},init:function(){this.avlWidth=this.getDisplayWidth();this.orginalWidth=this.params.width;this.initTemplate();this.bindEvents();this.setPosition()},getDataContainer:function(){return this.dataContainer},isInUse:function(){return this.inUse},overlay:function(a,b){this.inUse=!0;this.setDefaults();this.params=$.extend(this.params,a);this.init();b?this.show(b):"string"==typeof this.params.url&&0<=this.params.url.indexOf("/")?this.makeRequest():
2239this.showPageData()}};return c}();htz.utils.LightBox=LightBox;"function"==typeof define&&define.amd&&define("utils/lightbox",[],function(){return LightBox});                                                                                                                                                                                                 
2240var LazyLoad=function(){var a=[],c=[];return{init:function(){a=a.concat(c);a.length&&function(b){var e=arguments.callee,d=a[b],c=d.complete;d.complete=function(d,f){c&&c(d,f);b+1<a.length&&e(b+1)};$.ajax(d)}(0)},queueJS:function(b,e){"high"==e?a.push(b):c.push(b)}}}();                                                                                                                                                                                                                                    
2241window.checkHertzNameSpace("htz.utils");
2242var Loader=Loader||function(){function d(a,e){var b=$("body").width(),c=$(window).height();htz&&htz.config&&"desktop"===htz.config.deviceGroup?a.css({left:b/2,top:$(document).scrollTop()+100}):a.css({left:b/2,top:$(document).scrollTop()+(c-40)/2});e.css({opacity:0.4,background:"#000","z-index":99999,position:"fixed",top:0,left:0,right:0,bottom:0})}var c,b;$(document).ready(function(){$("input[type='submit'], button.submit").on("click",function(){Loader.showLoader()});$(window).on("resize.loader",
2243Loader.resize);window.onorientationchange=function(){Loader.resize()}});return{resize:function(){var a=$("#loading-fg"),b=$("#loading_bg");a.length&&b.length&&d(a,b)},spin:function(a){a||(a={});a.timeout||(a.timeout=25E3);this.showLoader(a)},showLoader:function(a){Loader.reset();var b=$("<div />").attr("id","loading_bg"),c=$("<div />").attr("id","loading-fg").addClass("loading-fg");d(c,b);b.appendTo($("body")).show();c.appendTo($("body")).show();Loader.setTimer(a)},setTimer:function(a){a&&a.timeout&&
2244(b&&window.clearTimeout(b),b=window.setTimeout(Loader.hideLoader,a.timeout),(a=a.callback)&&"function"==typeof a&&(c=a))},reset:function(){c=null;this.resetTimer();Loader.hideLoader()},resetTimer:function(){b&&window.clearTimeout(b);b=null},stop:function(){this.hideLoader()},hideLoader:function(){try{this.resetTimer()}catch(a){}$("#loading_bg, #loading-fg").remove();c&&(c(),c=null)}}}();htz.utils.Spinner=Loader;"function"==typeof define&&define.amd&&define("utils/loader",[],function(){return htz.utils.Spinner});                                                                                                           
2245if(typeof window.localStorage=="undefined"||typeof window.sessionStorage=="undefined")(function(){var e=function(e){function t(e,t,n){var r,i;if(n){r=new Date;r.setTime(r.getTime()+n*24*60*60*1e3);i="; expires="+r.toGMTString()}else{i=""}document.cookie=e+"="+t+i+"; path=/"}function n(e){var t=e+"=",n=document.cookie.split(";"),r,i;for(r=0;r<n.length;r++){i=n[r];while(i.charAt(0)==" "){i=i.substring(1,i.length)}if(i.indexOf(t)==0){return i.substring(t.length,i.length)}}return null}function r(n){var r=[],i,s,o;for(o in n){i=n[o];s=typeof i;
2245if(s=="string"){r.push("'"+o+"':"+String(i))}}n="{"+String(r)+"}";if(e=="session"){window.name=n}else{t("localStorage",n,365)}}function i(){if(e=="session"){window.name=""}else{t("localStorage","",365)}}function s(){var t=e=="session"?window.name:n("localStorage");try{var r=jQuery.parseJSON(t);return r!=null?r:{}}catch(i){return{}}}var o=s();return{length:0,clear:function(){o={};this.length=0;i()},getItem:function(e){return o[e]===undefined?null:o[e]},key:function(e){var t=0;for(var n in o){if(t==e)return n;else t++}return null},removeItem:function(e){delete o[e];this.length--;r(o)},setItem:function(e,t){o[e]=t+"";this.length++;r(o)}}};if(typeof window.localStorage=="undefined")window.localStorage=new e("local");if(typeof window.sessionStorage=="undefined")window.sessionStorage=new e("session")})();var HStorage=function(e,t){var n=[];return{setItem:function(r,i,s,o){var u;if(s){u='{"data":"'+i+'", "exp":'+((new Date).getTime()+s*24*60*60*1e3)+"}"}else{u='{"data":"'+i+'"}'}if(o=="s"){if(typeof e!="undefined"){try{e.setItem(r,u)}catch(a){n[r]=u}}else{n[r]=u}}else{if(typeof t!="undefined"){try{t.setItem(r,u)}catch(a){}}}},removeItem:function(r,i){if(i=="s"){if(typeof e!="undefined"){try{e.removeItem(r);n[r]=null}catch(s){n[r]=null}}else{n[r]=null}}else{if(typeof t!="undefined"){try{t.removeItem(r)}catch(s){}}}},getItem:function(r,i){if(i=="s"){if(typeof e!="undefined"){var s=null;try{s=e.getItem(r);if(!s){s=n[r]}}catch(o){s=n[r]}if(s!=null){try{return JSON.parse(s).data}catch(o){return null}}else{return null}}else{if(n[r]!=null){try{return jQuery.parseJSON(n[r]).data}catch(o){return null}}else{return null}}}else{if(typeof t!="undefined"){try{var u=t.getItem(r);var a=JSON.parse(u || "null");if(a&&a.exp){if((new Date).getTime()>a.exp){HStorage.removeItem(r);return null}}return a!=null?a.data:null}catch(o){return null}}else{return null}}}}}(window.sessionStorage,window.localStorage)      
2246window.checkHertzNameSpace("htz.utils");
2247htz.utils.Tracking=function(){function f(a){var g={cache:!1,dataType:"html",success:function(b,d,c){if(!htz.utils.Utils.sessionTimedOut(c)){d=$("#web-tracking-container");0<d.length?d.unbind().empty():(d=$("<div/>").attr("id","web-tracking-container").hide(),$("body").append(d));try{d.html(b)}catch(e){}try{"Y"==a.dataonly&&"N"!=a.omniture&&htz.utils.OmnitureHelper.track(htz.omniture,d)}catch(f){}}}},b=[];a&&(a.bt&&b.push("bt="+a.bt),a.ga&&b.push("ga="+a.ga),a.tags&&b.push("tags="+a.tags),a.omniture&&
2248b.push("omniture="+a.omniture),a.dataonly&&b.push("dataonly="+a.dataonly));0<b.length?(b=b.join("&"),b="&"+b):b="";var c=a&&a.step?a.step:document.location.hash;try{c&&0<=c.indexOf("#")&&(c=c.substring(c.indexOf("#")+1))}catch(f){}var e="webTracking.jsp";try{"Y"==a.dataonly&&"N"!=a.omniture&&(e="omnitureTracking.jsp")}catch(h){}e=a.rootContext+"/templates/framework/"+e+"?";e+="targetPage="+a.targetPage+b+"&hashValue="+c+"&originatingUrl="+document.location.href;g.url=e;return g}return{track:function(a){a&&
2249(a.isApp&&(a.bt=a.ga=a.tags="N",a.dataonly="Y"),$.ajax(f(a)))}}}();                                                                                                                                                      
2250window.checkHertzNameSpace('htz.utils');
2251
2252var Global = htz.utils.Global = (function() {
2253	if(document.addEventListener){
2254		document.addEventListener("touchstart", function() {}, false);
2255	} else if(document.attachEvent){
2256		document.attachEvent("touchstart", function() {});
2257	}
2258	
2259	try {
2260		$.subscribe('resource-load-failure', function(_, err) { htz.utils.Global.trackResourceLoadFailure(err); });
2261	} catch (e) {}
2262	
2263	var showBrowserUpgradeWarning = function() {
2264		if(htz.browser.upgradeWarningShown == "Y") {return;}
2265		
2266		if(!Modernizr.mq('only all')){
2267			var warningOverlay = new LightBox();
2268			warningOverlay.overlay({ 
2269				url: htz.config.rootContext + "/customersupport/templates/browserUpgradeWarningView.jsp",
2270				width:560,
2271				center:true,
2272				scroll:false,
2273				screen:70
2274			});
2275		}
2276	};
2277
2278	/**
2279	 * Cookies Popup.
2280	 * @type invoke properties and methods.
2281	 * @methodOf htz.utils.Global.
2282	 * @returns Loads the Cookies Popup on the current page.
2283	 */
2284	var showCookieOverlay = function() {
2285			if(window.location.href.indexOf("manage-cookies") === -1) {
2286				this.cookieOverlay = new LightBox();
2287				
2288				//dtc4102//IRAC-4800
2289				//Update the cookie overlay - INC000673612
2290				require(['common/cookie/cookieOverlay-view'], function(cookieOverlayView){
2291					var self = this;
2292					self.cookieOverlay.overlay({		
2293						center:true,
2294						dismiss:false,
2295						width:'80%',
2296						hcenter:true,
2297						suppressClose:true,
2298						plain:true
2299					}, new cookieOverlayView({ 
2300						referrer : self,
2301						 template : '#cookie-overlay-tpl'
2302						 }).render().el);	
2303					
2304					//dtc4102//IRAC-4892 
2305					//moved it from lightbox.js since the css was being applied to all lightboxes instead of this one instance
2306					$("#cookiePopup-tpl").closest(".lb-foreground-cont").addClass("lb-cookie-bottom");
2307					$("#cookiePopup-tpl").closest(".lb-content-box").css( {"padding":"0px"});
2308					
2309				});
2310				
2311
2312			}
2313			
2314			$('body').bind('euCookieSaved', function(){
2315				/**
2316				 *@description EU Cookie Law: Trigger the web Tracking Call after the user has set his cookie preferences. 
2317				 */
2318				prepareTracking();
2319			});
2320	};
2321	
2322	function prepareTracking(options) {
2323		if(!options) { options = {}; }
2324		
2325		options.rootContext = htz.config.rootContext;
2326		options.isApp = htz.config.isApp;
2327		
2328		var page = '';
2329		if(options && options.targetPage) {
2330			page = options.targetPage;
2331		} else {
2332			page = (htz.config.legacyPage && htz.config.legacyPage !== '') ? htz.config.legacyPage : htz.config.targetPage;
2333		}
2334		options.targetPage = page;
2335		
2336		htz.utils.Tracking.track(options);
2337	}
2338		
2339	return {
2340		initiateTracking : function(options) {
2341			if(htz.config.isOmnitureToLoad) {
2342				if(!htz.config.isCountryinEuropeUnion || (htz.config.isCountryinEuropeUnion && document.cookie.indexOf('cookie_pref') != -1) ) {
2343					prepareTracking(options);
2344				}	
2345			}
2346		},
2347		track : function(options) {
2348			this.initiateTracking(options);
2349		},
2350		loadManifest : function () {
2351			/**
2352			 *@description Add Cache Manifest to show Contact Phone Numbers when user is offline 
2353			 */
2354			if(htz.config.subSystemId === 'IRAC' && !navigator.userAgent.toLowerCase().indexOf('firefox') != -1) {
2355				$('<iframe />', {
2356				    id:   'cache-manifest',
2357				    src: htz.config.rootContext + '/templates/manifest.jsp?deviceGroup=' + htz.config.orgDeviceGroup
2358				}).appendTo('body');
2359			}
2360		},
2361		showEstara : function(text, url) {
2362			if(!htz.config.isApp && (text.length) && (htz.config.deviceGroup !== 'phone') && (htz.config.deviceGroup !== 'tablet')) {
2363				var eStaraLoad = { cache: false, dataType: 'script' };
2364				
2365				if(!url) { url = htz.eStara.url; }
2366				eStaraLoad.url = htz.config.protocol +"://"+ url;
2367				
2368				window.eStaraText = text;
2369				$('.tmplLayoutLeftColumn').empty().append('<div id="eStaraDiv" style="height:88px;margin-top:10px;"></div>');
2370				
2371				$.ajax(eStaraLoad);
2372			}
2373		},
2374		removeEstara : function() {
2375			$('.tmplLayoutLeftColumn').empty().hide();
2376			var estaraDivId = this.getEstaraId();
2377			if(estaraDivId) {
2378				$('#'+estaraDivId).remove();
2379			}
2380			$('#estara-text').remove();
2381		},
2382		getEstaraId : function() {
2383			try {
2384				return wv_vars["timeout336323_layerid"];
2385			} catch(e) {}
2386			
2387			return null;
2388		},
2389		initiateFooterMisc : function() {
2390			if($('#footer-container').length > 0) {
2391				var globalLazyLoadInfo = { cache: false, dataType: 'html', success: function(data) {
2392					htz.integrated.footer.controller.FooterController.showFooterPage();
2393				},
2394				complete: function() {
2395					LightBox.adjust();
2396				}};
2397			    //tracking for emember pages need the new query string originatingUrl since those pages do not have targetpage query string
2398				globalLazyLoadInfo.url = htz.config.rootContext + '/framework/globalLazyLoad.jsp?targetPage=' + htz.config.targetPage;
2399				LazyLoad.queueJS(globalLazyLoadInfo, 'high');	
2400			}	
2401		},
2402		handleCookieLaw : function() {
2403			/**
2404			 *@description Shows popup for user to manage his cookies and stores the permanent cookie in user's machine. Applied for EU countries only. 
2405			 *This should be shown if its an EU country and if the cookie is already not set in the user's machine and when its not a manage my cookie page. 
2406			 */
2407			if(htz.config.isCountryinEuropeUnion && document.cookie.indexOf('cookie_pref') == -1) {
2408				showCookieOverlay();
2409			} 
2410		},
2411		initiate : function () {
2412			this.bindRequireJSListener();
2413
2414			if (htz.config.isApp) {
2415				Utils.showErrorFromSession();
2416
2417				setTimeout('LazyLoad.init()', 1);
2418
2419				return;
2420			}
2421
2422			this.handleCookieLaw();
2423			this.loadManifest();
2424			this.showEstara(htz.eStara.text, htz.eStara.url);
2425			this.initiateFooterMisc();
2426			if (!htz.config.isSPP) {
2427				this.initiateTracking();
2428			}
2429			setTimeout('LazyLoad.init()', 1);
2430			if (htz.tracking) {
2431				sessionStorage.setItem("cp_code", htz.tracking.common.consumerProductFromHertzLink);
2432			}
2433
2434			//hz464486//irac-918,950,951,952//Add Hertzlink SEQ_ID to session storage
2435			if (htz.sessionHertzLink){
2436				try
2437				{
2438					var jsonObj = JSON.parse(htz.sessionHertzLink);
2439					jsonObj = Object.entries(jsonObj).reduce((a, [k, v]) => (v == undefined ? a : (a[k] = v, a)), {});
2440					this.convertToBoolean(jsonObj, "Y", true);
2441					this.convertToBoolean(jsonObj, "N", false);
2442					this.convertToBoolean(jsonObj, 0, false);
2443					this.convertToBoolean(jsonObj, 1, true);
2444
2445					sessionStorage.setItem("sessionHertzLink", JSON.stringify(jsonObj));
2446				}
2447				catch(e){
2448					console.error(e);
2449				}
2450			}
2451
2452			showBrowserUpgradeWarning();
2453			Utils.showErrorFromSession();
2454		},
2455		//hz464486//irac-918,950,951,952//Add Hertzlink SEQ_ID to session storage
2456		convertToBoolean : function(obj,stringValue,booleanValue){
2457			Object.keys(obj).forEach(key=>{
2458				if(obj[key] === stringValue){
2459					obj[key] = booleanValue;
2460				}
2461			});
2462		},
2463		trackResourceLoadFailure : function(err) {
2464			try {
2465				var browser_device = Utils.browserDeviceType();
2466				
2467				var pageName = window.location.hash;
2468				if(pageName) {
2469					pageName = pageName.substring(1);
2470				} else {
2471					pageName = 'itinerary';
2472				}
2473				
2474				if (err.requireModules) {
2475					var errorInfo = browser_device + '-' + pageName + '-' + err,
2476					    requireType = err.requireType || 'unknown';
2477				
2478					WebTracking.setError('debug-resource-failure-' + requireType + '-' + errorInfo, pageName);
2479				}
2480			} catch(e) {}
2481		},
2482		bindRequireJSListener : function() {
2483			var browser_device = Utils.browserDeviceType();
2484			
2485			try {
2486				if(typeof requirejs === 'undefined' || requirejs === null) { 
2487					WebTracking.setError('debug-resource-requirejs-missing-' + browser_device);
2488					
2489					return; 
2490				}
2491			} catch(e) {}
2492			
2493			requirejs.onError = htz.utils.Global.trackResourceLoadFailure;
2494		}
2495	};
2496})();
2497
2498$(window).on("load",function() {
2499	htz.utils.Global.initiate();
2500});
2501        
2502var ErrorHelper=function(){function v(b){if(!b)return null;var a=null,d;for(d in b){if(b=d.match(/\[(.*?)\]/)){var h=b[1],e=b.input.replace(/ *\[[^\]]*]/,""),b=window.dataLayer;for(i=0;i<b.length;i++)if(void 0!=b[i].error_type&&b[i].error_type==h){delete b[i].event;delete b[i].error_type;delete b[i].error_message;break}}window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:"error",error_type:h,error_message:e});null==a&&(a="");a+='<li aria-label="'+d+'" tabindex="0">'+d+"</li>"}a&&(a=
2503"<ul class='"+o+"' tabindex='0' aria-label='error-list'>"+a+"</ul>");return a}var o="field-error-list",m=[],s=[],p=[],k=null,l=null,t=[],u=!0,q=null;return{displayErrors:function(b,a){if(b){var d;a&&a.context?this.reset(a.context):this.reset();a&&(d=a.mappings,k=a.context,l=a.allErrTarget,"undefined"!=typeof a.showErrorWithField&&(u=a.showErrorWithField),q=a.genericError);if(d&&0!=d.length)for(var h=0;h<d.length;h++)for(var e=d[h],f=e.target,e=e.fields.split(","),n=0;n<e.length;n++)t[e[n]]=f;for(d=
25040;d<b.length;d++)if((f=b[d])&&0<f.length){h=f[0];e=null;1<f.length&&(e=f[1]);f=e;e=u;n=l;if(e&&f&&0<f.length){var j=t[h];j||(j=h+"_ut-err");var r=m[j];r||(r=[],m[j]=r);for(j=0;j<f.length;j++)e&&(r[f[j]]=""),!q&&n&&(p[f[j]]="")}q&&(p[q]="");s[h]=""}var c;k&&(c="string"==typeof k?$(k).eq(0):k);c||$(document);for(var g in m)(c=v(m[g]))&&(0<g.indexOf("_ut-err")?$("#"+g.substring(0,g.length-7)).closest("label").prepend(c):$("#"+g).html(c).show());for(var o in s)g=null,c=$("#"+o),0<c.length&&(g=c.eq(0)),
2505g&&((c=g.parent("label"))&&0<c.length?c.addClass("error"):(c=g.prop("tagName").toLowerCase(),("input"==c||"select"==c||"textarea"==c)&&g.addClass("error-input")));l&&(c=v(p))&&$(l).html(c).show()}else this.reset()},reset:function(b){var a;b?a=b:k&&(a=k);a&&(a="string"==typeof a?$(a).eq(0):a);a||(a=$(document));a.find(".error").removeClass("error");a.find(".error-input").removeClass("error-input");a.find("."+o).remove();b=$(l);0<b.length&&b.eq(0).empty().hide();m=[];s=[];p=[];k=l=null;t=[];u=!0}}}();
2506"function"==typeof define&&define.amd&&define("utils/errorutil",[],function(){return ErrorHelper});
2507var faq=function(a){path="&searchTerm=";"function"==typeof LightBox&&htz.faq.display&&(lbFaq=new LightBox,domain=htz.faq.URL,url=domain+path+a.value,a='<iframe id="ifrFaq" style="border:0px;" frameborder="0" width="760" height="460" src="'+url+'"></iframe>',lbFaq.overlay({width:"780",title:htz.faq.overlayTitle},a))};  
2508window.checkHertzNameSpace("htz.helpers");htz.helpers.SessionHelper=function(d){var c=[];
2508return{getItem:function(a){if("undefined"!=typeof d){var b=null;try{(b=d.getItem(a))||(b=c[a])}catch(e){b=c[a]}return b}return c[a]},setItem:function(a,b){if("undefined"!=typeof d)try{d.setItem(a,b)}catch(e){c[a]=b}else c[a]=b},removeItem:function(a){if("undefined"!=typeof d)try{d.removeItem(a),c[a]=null}catch(b){c[a]=null}else c[a]=null},removeListedItems:function(a){if(a&&0!=a.length)for(var b=0;b<a.length;b++)this.removeItem(a[b])}}}(window.sessionStorage);
2509"function"==typeof define&&define.amd&&define("utils/sessionhelper",[],function(){return htz.helpers.SessionHelper});             
2510window.checkHertzNameSpace("htz.helpers");
2511htz.helpers.ResourceLoader=function(i,o,l){function m(a,c,b){for(var e,d=0;d<c.length;d++)if(e=c[d],e===u)a[d]?b.css=a[d]:delete b.css;else if(e===n){e=a[d];try{i.setItem(b.content,l.stringify(e))}catch(f){}b.content=e}else e===p?b.template=a[d]:e===q&&(a[d]?b.js=a[d]:delete b.js);b.callback&&b.callback(b)}function r(a){for(var a=a.requireModules,c=0;c<a.length-1;c++)requirejs.undef(a[c])}function j(a,c){a&&c&&(c[a]=null,c["is"+a+"loaderror"]=!0)}function s(a,c,b){require(a.toLoad,function(b,d,f){m(arguments,
2512a.order,c)},function(e){r(e);if(b){var d=e.requireModules;if(d)for(var f=a.toLoad,i=a.order,g=0;g<=d.length-1;g++)for(var h=0;h<=f.length-1;h++)if(0<=f[h].indexOf(d[g])){f.splice(h,1);h=i.splice(h,1);j(h,c);break}0<a.toLoad.length?require(a.toLoad,function(b,d,e){m(arguments,a.order,c)},function(b){r(b);for(var b=a.order,d=0;d<b.length-1;d++)j(b[d],c);c.callback&&c.callback(c)}):t(c);try{o.publish("resource-load-failure",e)}catch(k){}}else window.setTimeout(function(){s(a,c,!0)},v)})}function t(a){if(a){if(a.content){var c=
2513i.getItem(a.content);if(c)try{c=l.parse(c),a.content=c}catch(b){i.removeItem(a.content),a.content=null,j(n,a)}}a.callback&&a.callback(a)}}var u="css",q="js",p="template",n="content",v=500;return{load:function(a){if(a){if(a.css){var c=a.css,b=document.getElementsByTagName("head").item(0),e=o(b).find("link"),d=!1;e.each(function(a){if(c==e.eq(a).attr("href"))return d=!0,!1});if(!d){var f=document.createElement("link");f.setAttribute("href",c);f.setAttribute("type","text/css");f.setAttribute("rel","stylesheet");
2514b.appendChild(f)}delete a.css}b=[];if(a){var f=[],j=a.template,g=a.content,h=a.js;if(g){var k=i.getItem(g);if(k)try{a.content=l.parse(k)}catch(m){i.removeItem(g),k=null}k||(g=0<g.indexOf("?")?g+"&callback=define":g+"?callback=define",f.push(n),b.push(g))}j&&(f.push(p),b.push("text!"+j));h&&(f.push(q),b.push(h));b={toLoad:b,order:f}}else b={toLoad:b};0<b.toLoad.length?s(b,a,!1):t(a)}}}}(htz.helpers.SessionHelper,$,JSON);"function"==typeof define&&define.amd&&define("helpers/resource-loader",[],function(){return htz.helpers.ResourceLoader});
2515window.checkHertzNameSpace("htz.utils.config");
2516htz.utils.config.UtilConfig=function(){var b,c,d,e,f,g,h,i,j;return{configure:function(a){a.spinner&&(b=a.spinner);a.lightBox&&(c=a.lightBox);a.networkHelper&&(d=a.networkHelper);a.navigator&&(e=a.navigator);a.rotar&&(f=a.rotar);a.domHelper&&(g=a.domHelper);a.router&&(h=a.router);a.notifier&&(i=a.notifier);a.slider&&(j=a.slider)},getSpinner:function(){return b},getLightbox:function(){return c},getNetworkHelper:function(){return d},getNavigator:function(){return e},getRotar:function(){return f},getDomHelper:function(){return g},
2517getRouter:function(){return h},getNotifier:function(){return i},getSlider:function(){return j}}}();"function"==typeof define&&define.amd&&define("config/utilconfig",[],function(){return htz.utils.config.UtilConfig}); 
2518var Tooltip=function(){};
2519Tooltip.prototype={defaults:{height:200,width:300,contentBgcolor:"#FEFED9",border:"3px solid #FFD60D",scroll:!1,closeLabel:!0,footerBgcolor:"#FFD60D",close:!0,closeLabel:htz.content.close},id:null,els:{},config:{},inUse:!1,show:function(a){this.inUse=!0;var b=$(a),a=b.parent().find(".tooltip-link:eq(0)"),b=b.parent().find(".tooltip-container:eq(0)");b.is(":hidden")?($(".tooltip-container").hide(),this.displayTooltip(b,a)):this.hide(b);return this},hide:function(a){$(a).hide()},create:function(a){this.config=
2520$.extend(!0,{},this.defaults,a);a=[];a.push('<div class="tooltip-container">');a.push('<div class="tooltip-content">');a.push('<div class="user-content">');a.push("</div> ");a.push("</div>");this.config.close&&(a.push('<div class="tooltip-footer learnMoreLink"> <span class="icons-close_lg close-pointer"> </span> <span class="close-pointer">'),this.config.closeLabel&&a.push(this.config.closeLabel),a.push("</span></div>"));a.push("</div>");a.join("");a=(a+"").replace(/\,/g,"");this.els.container=$(a).appendTo("#"+
2521this.config.containerID);this.els.tooltipContainer=this.els.container.find(".tooltip-container");this.els.innerContainer=this.els.container.find(".tooltip-content");this.els.close=this.els.container.find(".close-pointer");this.els.content=this.els.container.find(".user-content");this.els.content.append(""==this.config.content?defaults.content:this.config.content);this.els.overylay=this.els.container.find(".tooltip-container");this.els.footer=this.els.container.find(".tooltip-footer");this.els.innerContainer.css({width:""==
2522this.config.width?defaults.width:this.config.width,height:""==this.config.height?defaults.height:this.config.height,backgroundColor:""==this.config.contentBgcolor?defaults.contentBgcolor:this.config.contentBgcolor,overflow:"hidden",border:""==this.config.border?defaults.border:this.config.border,"overflow-y":!0==this.config.scroll?"scroll":"hidden"});this.els.footer.css({backgroundColor:""==this.config.footerBgcolor?defaults.footerBgcolor:this.config.footerBgcolor,width:""==this.config.width?defaults.width:
2523this.config.width});this.bindEvents();return this},displayTooltip:function(a,b){var a=$(a),b=$(b),f=b.offset().top,g=b.offset().left,h=$(window).height(),c=$(window).width(),d=b.position().top,e=b.position().left,d=f+a.height()>h+$(window).scrollTop()?b.position().top-a.height():b.position().top+b.height(),e=600<=c+$(window).scrollLeft()?g+a.width()+50>c+$(window).scrollLeft()?b.position().left-a.width():b.position().left+b.width():50;a.css({top:d,left:e});(0<$(a).parents("div").closest("#rewards-container").length||
25240<$(a).parents("div").closest("#anydayrewards-container").length)&&$(a).attr("style","display:block");a.show();return this},bindEvents:function(){var a=this;this.els.close.bind("click",function(b){target=$(b.target);b=target.closest(".tooltip-container");a.hide(b)})},isInUse:function(){return this.inUse}};
2525var googletag=googletag||{};googletag.cmd=googletag.cmd||[];
2526var gptBannerAds={init:function(){var a=this;this.render();$(window).on("resize",function(){a.refreshAds()})},getCookie:function(a){for(var a=a+"=",c=decodeURIComponent(document.cookie).split(";"),d=0;d<c.length;d++){for(var b=c[d];" "==b.charAt(0);)b=b.substring(1);if(0==b.indexOf(a))return b.substring(a.length,b.length)}return""},render:function(){var a=this.getCookie("cookie_pref");if(!0==htz.config.isCountryinEuropeUnion&&(""==a||""!=a&&0>a.indexOf("_4")))return 0;var c=this;c.gptAdSlots=[];$(".gptAdBlock:visible,.gptAdBlock.gblFloatLeft").each(function(){var a=
2527$(this).find(".adDisplayBlock"),b=a.attr("data-item"),f=parseInt(a.attr("width")),g=parseInt(a.attr("height")),e=a.attr("id"),a="/rentacar/rest/banner/style/"+b+"?v="+Math.floor(100*Math.random());"/htv"==htz.config.rootContext&&(a="/htv/BannerAdHandler?style="+b);$.ajax({type:"GET",url:a,dataType:"json",async:!1,success:function(a){c.generateAd(e,a.data,b,f,g)},error:function(){console.log("Unable to Receive Response from GPT Webservice")}})})},generateAd:function(a,c,d,b,f){var g=this;googletag.cmd.push(function(){var e=
2528"hertz.irac";"/htv"==htz.config.rootContext&&(e="hertz.trucks");e=googletag.defineSlot("/5246/"+e+"/"+d,[b,f],a).addService(googletag.pubads());g.gptAdSlots.push(e);for(gptItem in c)e.setTargeting(gptItem,c[gptItem]);googletag.enableServices();googletag.display(a)})},createAd:function(a,c,d,b){var f="banner_gpt"+$(".gptAdBlock").length;a.addClass("gptAdBlock").append("<div id='banner_gpt"+f+"' class='adDisplayBlock' data-item='"+c+"' width='"+d+"' height='"+b+"'></div>")},refreshAds:function(){googletag.pubadsReady&&
2529googletag.pubads().refresh()},clean:function(){try{googletag.destroySlots()}catch(a){console.log(a)}}};googletag.cmd.push(function(){gptBannerAds.init()});(function(){var a=document.createElement("script");a.async=!0;
2529a.type="text/javascript";a.src=("https:"==document.location.protocol?"https:":"http:")+"//www.googletagservices.com/tag/js/gpt.js";var c=document.getElementsByTagName("script")[0];c.parentNode.insertBefore(a,c)})();
2530window.checkHertzNameSpace('htz.utils');
2531
2532/**
2533@description Various functions for cookies for GDPR requirements 
2534@class Utils
2535@requires JQuery
2536*/
2537
2538htz.utils.termsAndConditions = (function(){
2539	return{
2540		
2541		/**
2542		@description 
2543		This function is loaded when the base page loads and checks if a cookie is present or not at the root level.
2544		If the cookie is not present, the given element pops up.
2545		 */
2546		checkCookie: function(cookieName,elementID,systemID){
2547			
2548			var expression = new RegExp(cookieName + "=([^;]+)");
2549		    var cookieValue = expression.exec(document.cookie);
2550		    var result = (cookieValue != null) ? unescape(cookieValue[1]) : null;
2551		    
2552		    if(systemID==="IRAC"){		    				    		
2553		    	this.fetchTandCcontent();		//IRAC uses web service to fetch the content.This web service is different than the usual content web service.
2554			}
2555		    
2556		    //if no cookie is present
2557		    if(result==null){
2558		    	var startDate = new Date(this.getDate("startDate","hiddenStartDate"));
2559		    	
2560		    	var endDate = new Date(this.getDate("endDate","hiddenEndDate"));	
2561		    	endDate.setHours(23,59,59);
2562		   
2563		    	var todaysDate= new Date();
2564		    	
2565		    	//requirement to not show the popup till the start date is reached or if the start day has already passed
2566		    	if(((startDate.toDateString()===todaysDate.toDateString()) || (startDate<todaysDate)) && (todaysDate<endDate)){
2567		    		$("#" +elementID).show();
2568		    	}
2569		    }
2570		    else{
2571		    	//if a cookie is present, check to see if the startDate or endDates have changed and proceed accordingly
2572		    	this.handleCookieDates(cookieName,elementID,result);	
2573		    }
2574		},
2575		
2576		/**
2577		@description 
2578		This function checks to see if the startDate or endDate for a cookie/legal TandC has changed and proceed accordingly.
2579		 */
2580		handleCookieDates:function(cookieName,elementID,cookieSetDate){
2581			
2582			var todaysDate= new Date();	    	
2583	    	var startDate = new Date(this.getDate("startDate","hiddenStartDate"));	    	
2584	    	var endDate = new Date(this.getDate("endDate","hiddenEndDate"));	    	
2585	    	var cookieStartDate = new Date(cookieSetDate);
2586	    	
2587	    	if((startDate.toDateString()!=cookieStartDate.toDateString()) && (startDate.toDateString()===todaysDate.toDateString()) ){
2588	    		document.cookie=cookieName+ "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;Path = /;";
2589	    		$("#"+elementID).show();		//remove the cookie and display the popup	    		
2590	    	}   
2591	    	else{
2592	    		this.updateCookieExpDate(cookieName);	//update the expiry date on the cookie
2593	    	}
2594		},
2595		
2596		/**
2597		@description 
2598		This function updates the expiry date on the cookie.
2599		 */
2600		updateCookieExpDate:function(cookieName){
2601			this.storeCookie(cookieName);			
2602		},
2603		
2604		/**
2605		@description 
2606		This function stores the cookie with the given name..The expiry date comes from the hidden interwoven field.
2607		 */
2608		storeCookie : function(cookieName){
2609			
2610			var cookieExpirationDate = new Date(this.getDate("endDate","hiddenEndDate"));	
2611			cookieExpirationDate.setHours(23,59,59);
2612			var expiring=cookieExpirationDate.toUTCString();
2613			
2614			document.cookie =cookieName+"="+ new Date() + ";expires="+ expiring + "; Path = /;";
2615		},
2616		
2617		/**
2618		@description 
2619		This function gets the date form the HTML elment/interwoven field.
2620		 */
2621		getDate:function(type,elementID){
2622			/*var dateHTML=$("#"+ elementID).html();
2623			
2624			var day = dateHTML.split("/")[1];
2625			var month = (dateHTML.split("/")[0])-1;
2626			var year = dateHTML.split("/")[2];
2627			
2628			if(type =="endDate"){
2629				var date = new Date();
2630				return new Date(year,month,day,date.getHours(),date.getMinutes(),date.getSeconds(),date.getMilliseconds());	
2631			}
2632			else if(type=="startDate"){
2633				return new Date(year,month,day);
2634			}*/
2635		},
2636		
2637		/**
2638		@description 
2639		This function fetches the content for the legal pop up and fills the HTML.
2640		 */
2641		fetchTandCcontent:function(){
2642			$.ajax({
2643				url		: htz.config.apiDomain+"/rest/policy-notification/" + htz.config.systemId + "/"
2643+ htz.config.dialect+"/" + htz.config.pos,
2644				type	: "GET",
2645				async:false,
2646				dataType: "json",
2647				success	: function(response) {
2648				
2649					var content = response.popupContent;
2650					var startDate= response.startDate;
2651					var endDate= response.endDate;
2652				
2653					$("#TandC-content-text").html(content);
2654					$("#hiddenStartDate").html(startDate);
2655					$("#hiddenEndDate").html(endDate);
2656					
2657				},
2658				error:function(data,status){
2659					console.log(data);
2660				}
2661			});
2662		}		
2663	}
2664})();
2665
2666$(function() {
2667	window.checkHertzNameSpace('htz.integrated.header.views');
2668
2669	htz.integrated.header.views.HeaderView = Backbone.View.extend({
2670		el:$("header"),
2671		events: {
2672			"click .logo-box": "logoClick",
2673			"click .ra-logo-large": "raLogoClick",
2674			"click .ra-logo-small": "raLogoClick",
2675			"click .change-list": "changePos",
2676			"submit .pos-box form": "submitPos",
2677			"change #pos": "selectedCountry",
2678			"keyup #pos": "pressedCountry",
2679			"focus #search-input": "searchOnFocus",
2680			"blur #search-input": "searchOnBlur",
2681			"keydown #search-input": "searchOnKeyPress",
2682			"click .search-trigger": "openSearchOverlay",
2683			"click #search-button-trigger": "searchBtnClick",
2684			"click #mob-navigation-trigger": "slideOpenMobileNav",	//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599//changed from mobMenuBtnOnClick
2685			"click #nav-close-trigger":"slideCloseMobileNav",		//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599//changed to mobMenuBtnOnClick
2686			"click .mob-back": "mobBackToMenu",
2687			"click #nav-container":"trackNavigation",				//dtc4102//PRC91530//Google Data Layer
2688			"click .new-open-nav":"openMobileNav",					//dtc4102//IRAC-5329//Re-skin of Hertz.com legacy - INC001102442
2689			"click .new-close-nav":"closeMobileNav",
2690			"click .rental-container":"scrollToRentalContainer",
2691			"click .mob-sub-menu-div":"expandSubMenu",				//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
2692			"click #mob-nav-member-info-button":"slideOpenMobileMemberNav",//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
2693			"click .gtm-itin-info-mobile":"showEditPage"					//dtc4102//IRAC-339-mobile-web-optimization-vehicle-page-phase-1-itinerary-inc-001660261
2694
2695			//dtc4102//IRAC-5329//Re-skin of Hertz.com legacy - INC001102442
2696		},
2697		//dtc4102//IRAC-339-mobile-web-optimization-vehicle-page-phase-1-itinerary-inc-001660261
2698		showEditPage: function(){
2699			$('#itinerary-info #itinerary-content .int-misc-info a.itn-edit-link').click();
2700		},
2701		//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
2702		slideOpenMobileMemberNav: function(e){
2703			e.stopPropagation();
2704			var target= e.currentTarget;
2705            if(localStorage.getItem("memberType") == 'G') {
2706				$("#member-nav-container .menu-header span:first").text("Account");
2707			}
2708			else {
2709				$("#member-nav-container .menu-header span:first").text("Menu");
2710			}
2711			var parentElement = $("#member-nav-container").parent();
2712			parentElement.addClass("mobileNavBckgrnd");
2713			$("#member-nav-container").css("width","85%");
2714
2715			target.setAttribute('aria-expanded','true');	//dtc4102//22.23//Accessibility(HER-89) - Unlabelled Button - INC001221352
2716
2717			return false;
2718		},
2719		//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
2720		expandSubMenu:function(e){
2721			e.stopPropagation();
2722			var target= e.currentTarget.parentElement;
2723
2724			$(target).find("ul").toggleClass("visibleSubMenu");
2725			$(target).find(".chevron-arrow").toggleClass("arr-down").toggleClass("arr-up");	//dtc4102//23.14//irac-336//Mobile Web Optimization - Checkout page - INC001655979//changed chevron-arrow to class from id
2726
2727			return false;
2728
2729		},
2730		//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
2731		slideCloseMobileNav: function(e){
2732			e.stopPropagation();
2733			var target= e.currentTarget;
2734
2735			$(target).closest("#sideMenuParent").removeClass("mobileNavBckgrnd");
2736
2737			$(target).closest("#nav-container").css("width","0px");
2738
2739			this.expandSubMenu(e);
2740			//$(target).closest(".mob-menu").find("#chevron-arrow").removeClass("arr-up").addClass("arr-down");
2741
2742			target.setAttribute("aria-expanded","false");	//dtc4102//22.23//Accessibility(HER-89) - Unlabelled Button - INC001221352
2743
2744			return false;
2745		},
2746		//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
2747		slideOpenMobileNav: function(e) {
2748			e.stopPropagation();
2749			var target= e.currentTarget;
2750
2751			var parentElement = $("#nav-container").parent();
2752			parentElement.addClass("mobileNavBckgrnd");
2753			$("#nav-container").css("width","85%");
2754
2755			target.setAttribute('aria-expanded','true');	//dtc4102//22.23//Accessibility(HER-89) - Unlabelled Button - INC001221352
2756
2757			return false;
2758		},
2759		mobMenuBtnOnClick: function(e) {
2760			e.stopPropagation();
2761			var menuListHt = $(".mob-menu div").outerHeight() + $("#mobile-nav-menu-top").outerHeight();
2762			$(".mob-nav-menu div").slideToggle(700, "swing", function() {
2763				e.currentTarget.setAttribute('aria-expanded','false');	//dtc4102//22.23//Accessibility(HER-89) - Unlabelled Button - INC001221352
2764				if( $(this).is(":hidden") ) {
2765					$(".mob-nav-menu").height(0);
2766					$(".mob-menu").height(0);
2767
2768				} else {
2769					e.currentTarget.setAttribute('aria-expanded','true');//dtc4102//22.23//Accessibility(HER-89) - Unlabelled Button - INC001221352
2770					$(".mob-nav-menu").height(menuListHt);
2771					var body = document.body,
2772						html = document.documentElement;
2773					var height = Math.max( body.scrollHeight, body.offsetHeight,
2774						html.clientHeight, html.scrollHeight, html.offsetHeight );
2775					$(".mob-menu").height(height);
2776
2777				}
2778			});
2779			$('#mobile-nav-menu-top').css('display','flex');
2780
2781			return false;
2782		},
2783		scrollToRentalContainer:function(){
2784			window.scrollTo('1200','1200');
2785			document.getElementById("rental-links").scrollIntoView(false);
2786			var agent = navigator.userAgent.toLowerCase();
2787 			var isUAMobile = !!(agent
2788							.match(/(iPhone|iPod|iPad|blackberry|android|htc|kindle|lg|midp|mmp|mobile|nokia|opera mini|palm|pocket|psp|sgh|smartphone|symbian|treo mini|Playstation Portable|SonyEricsson|Samsung|MobileExplorer|PalmSource|Benq|Windows Phone)/i));
2789			if(isUAMobile){
2790				$('#rental-policy-links').show();
2791
2792			}
2793		},
2794		//dtc4102//IRAC-5329//Re-skin of Hertz.com legacy - INC001102442
2795        closeMobileNav:function(){
2796        	$(".new-close-nav").addClass("new-hide")
2797			$('.new-header-content-mobile .new-open-nav').removeClass("new-hide")
2798			$('.new-header-content-dropdown').addClass("new-hide")
2799		},
2800		//dtc4102//IRAC-5329//Re-skin of Hertz.com legacy - INC001102442
2801		openMobileNav:function(){
2802			$(".new-open-nav").addClass("new-hide")
2803			$('.new-header-content-mobile .new-close-nav').removeClass("new-hide")
2804			$('.new-header-content-dropdown').removeClass("new-hide")
2805		},
2806		//dtc4102//PRC91530//Google Data Layer
2807		//Navigation
2808		trackNavigation:function(e){
2809			e.stopPropagation();
2810			
2811			var $target = $(event.target);
2812			var menu_location='navigation';
2813			var menu_button=$target.html();
2814
2815			window.dataLayer.push({
2816				    'event':'navigation',
2817				    'menu_location':menu_location,
2818				    'menu_button':menu_button
2819			});
2820
2821		},
2822		logoClick: function(e) {
2823			e.stopPropagation();
2824			
2825			//dtc4102//IRAC-4451 & 4478
2826			var pages=[
2827						'vehicles',
2828						'extras',
2829						'review-and-book'
2830					];
2831			var resetSIPP=false;
2832			for (var p in pages){
2833				if(window.location.href.indexOf("#"+pages[p])>0){
2834					resetSIPP=true;					
2835					break;
2836				}
2837			}
2838			if(resetSIPP==true){
2839				window.location.href = htz.config.protocol+"://"+htz.config.startURL+htz.config.context+"/reservation/?resetSipp=T";
2840			}
2841			else{
2842				window.location.href = htz.navigation.homeURL;
2843			}
2844			
2845		},
2846		raLogoClick: function(e) {
2847			e.stopPropagation();
2848			window.location.href = 'www.ryanair.com';
2849		},
2850		changePos: function(e) {
2851			e.stopImmediatePropagation();
2852			if( $(".pos-tab").is(":visible") ) {
2853				$('#navArrowGtm').addClass('pointer-triangle-pos');
2854				$(".pos-box").slideUp("1000", function(){
2855					$(e.target).closest("li").removeClass("pos-tab");
2856					    $($('#pos-change').find('span')[0]).addClass('icons-ic_globe');
2857					   	$($('#pos-change').find('span')[0]).removeClass('icons-ic_globe_black');
2858		    	});
2859			} else {
2860				$(e.target).closest("li").addClass("pos-tab");
2861				$(".pos-box").slideDown("1000",function(){
2862					 	$($('#pos-change').find('span')[0]).addClass('icons-ic_globe');
2863				});
2864			}
2865			$(".pos-box #pos").val( htz.config.pos );
2866			if( $('.pos-tab').is(":visible") && htz.config.pos != $(".pos-box #pos").val() )
2867				this.selectedCountry();
2868		},
2869		submitPos: function(e) {
2870			if( navigator.appVersion.indexOf("MSIE 9") > 0 ){
2871				gptBannerAds.clean();
2872				gptBannerAds.render();
2873			}
2874		},
2875		pressedCountry: function(e) {
2876			if( e.keyCode == 13 )
2877				this.selectedCountry();
2878		},
2879		selectedCountry: function() {
2880			var v, params;
2881			v = $("#pos").val();
2882			params = ( v != "" ) ? "selectedPOS=" + v : "";
2883			$.ajax({
2884				type: "post",
2885				url: htz.config.rootContext + "/PointOfSaleHandler",
2886				data: params,
2887				success: function(data) {
2888					$("#language").empty().html(data);
2889				},
2890				error: function() {
2891					alert(htz.content.ajaxFail);
2892				}
2893			});
2894		},
2895		unbindBodyClick: function(e) {
2896			if( $('.pos-tab').is(":visible") && !$.contains($('.pos-tab').get(0), e.target) ) {
2897				$("#header-container .pos-box").slideUp("1000", function(){
2898					$("#header-container .change-link").removeClass("pos-tab");
2899					//get default icon
2900					$($('#pos-change').find('span')[0]).addClass('icons-ic_globe')
2901					 $($('#pos-change').find('span')[0]).removeClass('icons-ic_globe_black')
2902		    	});
2903			}
2904		},
2905		searchOnFocus: function() {
2906			$("#search-input").addClass("highlight");
2907			if( $("#search-input").val() == $("#default-search").val() )
2908				$("#search-input").val('');
2909			else
2910				$("#search-input").val(this.value);
2911		},
2912		searchOnBlur: function(e) {
2913			if( $("#search-input").val() == '' ) {
2914				$("#search-input").removeClass("highlight");
2915				$("#search-input").val( $("#default-search").val() );
2916			}
2917		},
2918		searchOnKeyPress: function(e) {
2919			//dtc4102//retire-right-now//special character bug fix
2920			searchString=$(".lb-foreground-cont #search-input").val();
2921			safeSearchString=searchString.replace(/["<>'\[\]\{\}|\\^%&:;=?@#$\/]/gi, '');
2922			finalSearchString =encodeURI(safeSearchString);
2923			
2924			if( e.keyCode == 13 ) {
2925				//Salesforce FAQ(e.target);
2926				if( finalSearchString != '' ){
2927					window.location.href = htz.config.rootContext + '/customersupport/index.jsp?targetPage=faq.jsp&search=' + finalSearchString;
2928			}
2929				else
2930					window.location.href = htz.config.rootContext + '/customersupport/index.jsp?targetPage=faq.jsp';
2931
2932				return false;
2933			}
2934		},
2935		searchBtnClick: function() {				
2936			if( $(".lb-foreground-cont #search-input").first().val() == $(".lb-foreground-cont #default-search").val() )
2937				$(".lb-foreground-cont #search-input").first().val('');
2938			
2939			//Salesforce FAQ( $("#search-input")[0] );
2940			
2941			//dtc4102//retire-right-now//special character bug fix
2942			searchString=$(".lb-foreground-cont #search-input").val();
2943			
2944			safeSearchString=searchString.replace(/["<>'\[\]\{\}|\\^%&:;=?@#$\/]/gi, '');
2945			finalSearchString =encodeURI(safeSearchString);
2946			
2947			if( finalSearchString != '' ){
2948				window.location.href = htz.config.rootContext + '/customersupport/index.jsp?targetPage=faq.jsp&search=' + finalSearchString;
2949		}
2950				else
2951				window.location.href = htz.config.rootContext + '/customersupport/index.jsp?targetPage=faq.jsp';
2952
2953			return false;
2954		},
2955		openSearchOverlay : function(e) {
2956			var self = this;
2957			var el = $(e.target);
2958			self.lightbox = (self.lightbox === undefined) ? new LightBox() : self.lightbox;
2959			self.lightbox.overlay({ dismiss : true, width : 1248, noPadding : true, suppressClose : true, suppressHeader : true, sourceElement : el, sourceElementOffset : 50, allowOverflow : true, close : self.closeSearchInterfaceCallback() }, $('#searchBoxOverlayContainer').html());
2960			self.openSearchInterfaceUtil();
2961		},
2962		openSearchInterfaceUtil : function() {
2963			var self = this;
2964			$(document).on('mouseup click', '#search-button-trigger', function() {
2965				self.searchBtnClick();
2966			});
2967			$(document).on('keyup', '#search-input', function(e) {
2968				self.searchOnKeyPress(e);
2969			});
2970			$('.lb-foreground-cont #search-input').trigger("focus");
2971			$(document).on('mouseup click', '.icons-ic_close_search', function() {
2972				self.lightbox.closeOverlay();
2973			});
2974		},
2975		closeSearchInterfaceCallback : function() {
2976			var self = this;
2977			$('#search-button-trigger').off('mouseup click');
2978			$('#search-input').off('keypress');
2979			$('.icons-ic_close_search').off('mouseup click');
2980		},
2981		hideMemberFeature : function() {
2982			this.$el.find(".emember-container").hide();
2983			this.$el.find("#mobile-nav-menu-top").hide();
2984		},
2985		//dtc4102//IRAC-339-mobile-web-optimization-vehicle-page-phase-1-itinerary-inc-001660261
2986		showItinerary : function(itiData){
2987			this.$el.find(".gtm-itin-info-mobile").empty().append(_.template($("#nav-itinerary-tpl").html(),itiData));
2988		},
2989		//dtc4102//IRAC-339-mobile-web-optimization-vehicle-page-phase-1-itinerary-inc-001660261
2990		hideItinerary : function(){
2991			this.$el.find(".gtm-itin-info-mobile").empty();
2992		},
2993		showRentalQualificationLink : function() {
2994			this.$el.find(".rental-container").show();
2995		},
2996		hideRentalQualification : function() {
2997			this.$el.find(".rental-container").hide();
2998		},
2999		showMemberFeature : function() {
3000			this.$el.find(".emember-container").show();
3001			//this.$el.find("#mobile-nav-menu-top").show();		//dtc4102//IRAC-339-mobile-web-optimization-vehicle-page-phase-1-itinerary-inc-001660261
3002		},
3003		hidePosFeature : function() {
3004			this.$el.find(".pos-container").hide();
3005			this.$el.find(".mob-nav").addClass("hidden-xs");			//dtc4102//23.14//irac-336//Mobile Web Optimization - Checkout page - INC001655979
3006			this.$el.find(".logo-box>img").css("margin-left","24px");	//dtc4102//23.14//irac-336//Mobile Web Optimization - Checkout page - INC001655979
3007		},
3008		hideMenu : function(){
3009 			this.$el.find(".nav-menu").hide();
3010 		},
3011 		showMenu : function(){
3012 			this.$el.find(".nav-menu").show();
3013 		},
3014        mobileLoginMenu : function(){
3015 			this.$el.find("#mobile-nav-menu-top").show();
3016 		},
3017		showPosFeature : function() {
3018			this.$el.find(".pos-container .change-link").show();
3019			this.$el.find(".mob-nav").removeClass("hidden-xs");			//dtc4102//23.14//irac-336//Mobile Web Optimization - Checkout page - INC001655979
3020			this.$el.find(".logo-box>img").css("margin-left","0px");	//dtc4102//23.14//irac-336//Mobile Web Optimization - Checkout page - INC001655979
3021        },
3022		showDesktopPos : function() {
3023			this.$el.find(".pos-container").show();
3024		},
3025		showSearchMini : function() {
3026			//this.$el.find(".search-box #search-input").hide();
3027		},
3028		showSearchFull : function() {
3029			this.$el.find(".search-box #search-input").show();
3030		},
3031		navMenuTouchEnd: function() {
3032			var el = $(this);
3033			if( typeof el.attr('href') != 'undefined' && el.attr('href') != '' ) {
3034				var link = el.attr('href');
3035				window.location = link;
3036			}
3037		},
3038		navMenuMouseEnter: function() {
3039			$(this).find("dl").addClass("menu-show");
3040			//$(this).closest("td:last-child").find("dl").addClass("last-menu-show");//IRAC-5472 Top navigation isn't working on Firefox browser - INC001233682IRAC-5481
3041			$(this).find("> a").addClass("menu-hover");
3042			$(this).find("> span").addClass("menu-hover");
3043			$(this).find("> article").addClass("pointer-triangle");
3044			$(this).find("dd").first().children().addClass("no-pipe");
3045			var navItemWt = $(this).width() - 1;
3046			var subNavItemWt = $(this).find("dl").outerWidth();
3047			if( navItemWt >=  subNavItemWt && subNavItemWt != null )
3048				$(this).find("dl").width(navItemWt);
3049		},
3050		navMenuEnter: function(e){
3051		  target = e.keyCode;
3052		  if(target == 32 || target == 40) {
3053		    e.preventDefault();  
3054			$(this).find("dl").addClass("menu-show");
3055			//$(this).closest("td:last-child").find("dl").addClass("last-menu-show");//IRAC-5472 Top navigation isn't working on Firefox browser - INC001233682IRAC-5481
3056			$(this).find("> a").addClass("menu-hover");
3057			$(this).find("> span").addClass("menu-hover");
3058			$(this).find("dd").first().children().addClass("no-pipe");
3059			var navItemWt = $(this).width() - 1;
3060			var subNavItemWt = $(this).find("dl").outerWidth();
3061			if( navItemWt >=  subNavItemWt && subNavItemWt != null )
3062				$(this).find("dl").width(navItemWt);
3063		  }
3064		  if(target == 40){
3065		    $(this).closest("td").find("dl").find("dd").first().children().focus();
3066		   }
3067		
3068		},
3069		navMenuMouseLeave: function() {
3070			$(this).find("dl").removeClass("menu-show");
3071			$(this).find("dl").removeClass("last-menu-show");
3072			$(this).find("> a").removeClass("menu-hover");
3073			$(this).find("> span").removeClass("menu-hover");
3074			$(this).find("dl").removeAttr("class");
3075			$(this).find("> a").removeAttr("class");
3076			$(this).find("> span").removeAttr("class");
3077			$(this).find("> article").removeAttr("class");
3078		},
3079		navMenuEscape: function(e){
3080		  target = e.keyCode;
3081		  if(target == 27 || target == 38 || target == 35 || target == 46 || target == 8) {
3082			e.preventDefault();
3083			$(this).find("dl").removeClass("menu-show");
3084			$(this).find("dl").removeClass("last-menu-show");
3085			$(this).find("> a").removeClass("menu-hover");
3086			$(this).find("> span").removeClass("menu-hover");
3087			$(this).find("dl").removeAttr("class");
3088			$(this).find("> a").removeAttr("class");
3089			$(this).find("> span").removeAttr("class");
3090		 }	
3091		},
3092		navMenuMouseEnterIE: function() {
3093			$(this).find("dl").addClass("menu-show");
3094			//$(this).closest("td:last-child").find("dl").addClass("last-menu-show");//IRAC-5472 Top navigation isn't working on Firefox browser - INC001233682IRAC-5481
3095			$(this).find("> a").addClass("menu-hover");
3096			$(this).find("> span").addClass("menu-hover");
3097			$(this).find("> a").closest("td").addClass("menu-hover");
3098			$(this).find("> span").closest("td").addClass("menu-hover");		
3099			$(this).find("dd").first().children().addClass("no-pipe");
3100			var myNav = navigator.userAgent.toLowerCase();
3101			if( (myNav.indexOf('msie') != -1) &&( (parseInt(myNav.split('msie')[1])) <= 7 )) {
3102				var topShow = $("#container").outerHeight() - ($("#page").outerHeight() + $("#container > footer").outerHeight());
3103				$(this).closest(".nav-menu").css('position', 'static');
3104				$("#nav-container").css('position', 'static');
3105				//$(this).find(".menu-show").css('top', topShow + 'px');
3106			}
3107			var navItemWt = $(this).width() - 1;
3108			var subNavItemWt = $(this).find("dl").outerWidth();
3109			if( navItemWt >=  subNavItemWt && subNavItemWt != null )
3110				$(this).find("dl").width(navItemWt);
3111			var nwSubNavWt = $(this).find("dl").width();
3112			$(this).find("dl dd").width(nwSubNavWt);
3113		},
3114		navMenuMouseLeaveIE: function() {
3115			$(this).find("dl").removeClass("menu-show");
3116			$(this).removeClass("menu-hover");
3117			$(this).find("dl").removeAttr("class");
3118			$(this).removeAttr("class");
3119			$(this).find("> a").removeAttr("class");
3120			$(this).find("> span").removeAttr("class");
3121		},
3122		navMenuOnClickIE: function() {
3123			if( (!$(this).find("dl").length > 0) && ($(this).find("> a").length > 0) )
3124				window.location.href = $(this).find("> a").attr("href");
3125		},
3126		mobSubMenuOnClick: function(e) {
3127			e.stopPropagation();
3128			var offWid = $("#container").width();
3129			$(this).closest(".mob-menu").animate({ left: '-' + offWid + 'px'}, '1000' , function(){});
3130			$(".mob-sub-menu ul").hide();
3131			$(".mob-nav-menu").height($(this).children("ul").outerHeight());
3132			var offTop = $(this).offset().top - $(".mob-menu div").offset().top;
3133			offWid = offWid - 10;
3134			$(this)
3135				.children("ul").show()
3136				.width($(this).parent().width())
3137				.css({'top': '-' + offTop + 'px', 'left': offWid + 'px'});
3138		},
3139		mobBackToMenu: function(e) {
3140			e.stopPropagation();
3141			var offWid = $("#container").width();
3142			var menuListHt = $(".mob-menu div").outerHeight();
3143			$(this).closest(".mob-menu").animate({ left: 0 }, '1000' , function(){});
3144			$(".mob-nav-menu").height(menuListHt);
3145			$(".mob-sub-menu ul").hide();
3146		},
3147		navigationItems: function(isMobile, isMember) {
3148			var navData = htz.template.topNavJson.data.navigationInfoMap,
3149				rootSubMenus = [],
3150				sourceItems = (isMobile) ? navData.navigationItemsMobile : navData.navigationItems;
3151
3152			function parseSubMenus(subMenus) {
3153				var result = [];
3154
3155				_.each(subMenus, function(subMenu) {
3156					var menuItem = {};
3157					menuItem.displayText = subMenu.displayText;
3158					menuItem.url = subMenu.url;
3159					menuItem.imageUrl = subMenu.imageUrl;				//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
3160					menuItem.webContext = subMenu.webContext;
3161
3162					if( subMenu.subMenus && subMenu.subMenus.length > 0 ) {
3163						menuItem.subMenus = parseSubMenus(subMenu.subMenus);
3164						menuItem.isLeaf = false;
3165					} else {
3166						menuItem.isLeaf = true;
3167					}
3168
3169					result.push(menuItem);
3170					
3171				});
3172
3173				return result;
3174			}
3175
3176			$.each(sourceItems, function(index, navItem) {
3177				rootSubMenus = rootSubMenus.concat(parseSubMenus(navItem.subMenus));
3178			})
3179						
3180			for(var x = 0; x<rootSubMenus.length; x++){
3181				if(rootSubMenus[x].webContext === "JOIN" && isMember){
3182					rootSubMenus.splice(x,1);
3183				}
3184			}
3185
3186			return rootSubMenus;
3187		},
3188		isLoggedIn: function () {
3189			var loginStatus = false,
3190				loginData = htz.template.topNavJson.data.navigationInfoMap;
3191
3192			if( loginData.navigationItems && loginData.navigationItems[0] ) {
3193				loginStatus = loginData.navigationItems[0].loggedIn;
3194			} else if( loginData.navigationItemsMobile && loginData.navigationItemsMobile[0] ) {
3195				loginStatus = loginData.navigationItemsMobile[0].loggedIn;
3196			}
3197
3198			return loginStatus;
3199		},
3200		initialize: function() {
3201			topNavInitialized = true;
3202			var self =  this, member;
3203			var isMember;
3204			
3205			try{
3206				isMember = htz.template.topNavJson.data.loggedIn;
3207			}catch(ex){
3208				
3209			}
3210			let wlClientId = htz.template.topNavJson.data.wlClientId;
3211			let wlAudience = htz.template.topNavJson.data.wlAudience;
3212			let localStorageAccessKey = '@@auth0spajs@@::' + wlClientId + '::' + wlAudience + '::openid profile email offline_access';
3213			let localStorageIdKey = '@@auth0spajs@@::' + wlClientId + '::@@user@@';
3214			
3215			if (!isMember && localStorage.getItem(localStorageAccessKey) !== null && localStorage.getItem(localStorageIdKey) !== null && localStorage.getItem('loginAttempted') === null) {
3216				let currentUrl = window.location.href;
3217				let anchor = currentUrl.indexOf('#') > -1 ? currentUrl.substring(currentUrl.indexOf('#')) : null;
3218				if (anchor !== null && anchor !== undefined && anchor !== '') {
3219					currentUrl = currentUrl.substring(0, (currentUrl.length - anchor.length));
3220				}
3221				currentUrl = currentUrl + (currentUrl.indexOf('?') !== -1 ? "&" : "?") + "member=auth0";
3222				if (anchor !== null && anchor !== undefined && anchor !== '') {
3223					currentUrl += "&urlAnchor=" + anchor.substring(1);
3224				}
3225				localStorage.setItem('loginAttempted', 'Y');
3226				window.location.href = currentUrl;
3227			}
3228			
3229			if (isMember) {
3230				let wlAccessData = htz.template.topNavJson.data.accessData;
3231				let wlIdData = htz.template.topNavJson.data.idData;
3232				if (wlAccessData !== undefined && wlAccessData !== null && wlAccessData !== '' && wlIdData !== undefined && wlIdData !== null && wlIdData !== '') {
3233					if (localStorage.getItem("localStorageAccessKey") !== null && 
3234							localStorage.getItem("localStorageIdKey") !== null && 
3235							localStorage.getItem(localStorageAccessKey) == null && 
3236							localStorage.getItem(localStorageIdKey) == null) {
3237								window.location.href = '/rentacar/emember/submitLogout.do';
3238					}
3239					else {
3240						localStorage.setItem(localStorageAccessKey, wlAccessData);
3241						localStorage.setItem(localStorageIdKey, wlIdData);
3242						localStorage.setItem("localStorageAccessKey", localStorageAccessKey);
3243						localStorage.setItem("localStorageIdKey", localStorageIdKey);
3244					}
3245				}
3246			}
3247			
3248			var mainNav = self.navigationItems(false, isMember),
3249				mobNav = self.navigationItems(true, isMember),
3250				loggedData = self.isLoggedIn();
3251
3252			self.data = {
3253				navigation: htz.template.topNavJson.data.content.navigation,
3254				topNav: htz.template.topNavJson.data.topNavigationInfo,
3255				member: htz.template.topNavJson.data,
3256				menuItems: mainNav,
3257				menuItemsMobile: mobNav,
3258				loggedIn: loggedData
3259			};
3260
3261			if( htz.config.renderHtml )
3262				self.render();
3263		},
3264		render: function() {
3265			var compiledTemplate,
3266				topNav,
3267				self = this,
3268				searchRE,
3269				queryStr = {};
3270
3271			searchRE = new RegExp("&search=", "g");
3272			if( searchRE.test(location.href) == true ) {
3273				$.each(document.location.search.substr(1).split('&'),function(c, q) {
3274					var i = q.split('=');
3275					queryStr[i[0].toString()] = i[1].toString();
3276				});
3277				$("#search-input").val(queryStr.search);
3278			}
3279
3280			topNav = self.data.topNav;
3281			topNav.rootContext = htz.config.rootContext;
3282			topNav.headerImageUrl = htz.config.protocol + "://images.hertz.com" + topNav.logoUrl;
3283			topNav.ryanairHeaderImage = htz.config.protocol + "://images.hertz.com" + topNav.raLargeLogoUrl;
3284			topNav.ryanairHeaderImageSmall = htz.config.protocol + "://images.hertz.com" + topNav.raSmallLogoUrl;
3285			topNav.nvpLanguageSelected = topNav.nvpLanguageSelected.toUpperCase();
3286			topNav.pos = topNav.pos.toUpperCase();
3287
3288			$.each(topNav.nvpCountries, function (index, country) {
3289				if( country.value === htz.config.pos ) {
3290					topNav.countrySelectedName = country.name;
3291					return -1;
3292				}
3293			});
3294
3295			$.each(topNav.nvpLanguages, function (index, language) {
3296				if( language.value === topNav.nvpLanguageSelected ) {
3297					topNav.languageSelectedName = language.name;
3298					return -1;
3299				}
3300			});
3301
3302			$("#nav-container").empty().append(_.template($("#nav-tpl").html(), self.data));
3303			$("#member-nav-container").empty().append(_.template($("#mobile-member-nav-tpl").html(), self.data));	//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
3304			compiledTemplate = _.template($("#header-tpl").html());
3305			$("#header-container").html(compiledTemplate(self.data));
3306			memNavloginModel = new sdlLoginModel();
3307			memNavloginView = new sdlLoginView({ el: "header", model: memNavloginModel });
3308
3309			if( Modernizr && Modernizr.touch )
3310				$(".nav-menu a").on("touchend", self.navMenuTouchEnd);
3311			
3312			var myNav = navigator.userAgent.toLowerCase();
3313
3314			if( (myNav.indexOf('msie') != -1) &&( (parseInt(myNav.split('msie')[1])) <= 8 )) {
3315				$(".nav-menu ul li").on("mouseenter", self.navMenuMouseEnterIE);		//dtc4102//irac-61//Accessibility Fixes for Rental Car Deals Page - INC001290931
3316				$(".nav-menu ul li").on("mouseleave", self.navMenuMouseLeaveIE);		//changed td to ul li
3317				$(".nav-menu ul li").on("click", self.navMenuOnClickIE);
3318			} else {
3319				$(".nav-menu ul li").on("mouseenter", self.navMenuMouseEnter);		//dtc4102//irac-61//Accessibility Fixes for Rental Car Deals Page - INC001290931
3320				$(".nav-menu ul li").on("mouseleave", self.navMenuMouseLeave);		//changed td to ul li
3321				$(".nav-menu ul li").on("keydown", self.navMenuEnter);     // nh52943 HER-14 Nav-links control using tab
3322				$(".nav-menu ul li").on("keydown", self.navMenuEscape);
3323			}
3324
3325			$("body, html").on("click", this.unbindBodyClick);
3326
3327			//hz464486//irac-1142
3328			//Update POS US Mobile Nav for view / modify /cancel
3329			if(htz.config.pos == "US" && htz.config.dialect == "enUS"){
3330				this.$el.find(".mobile-nav-menu").find('a[href*="/rentacar/reservation/modify/home?defaultTab=2"]').attr('href','/us/en/reservation/lookup');
3331			}
3332			return this;
3333		}
3334	});
3335
3336	var topHeader = new htz.integrated.header.views.HeaderView();
3337	if( typeof define == 'function' && typeof require == 'function' && define.amd ) {
3338		require(['config/app-info'], function(appInfo){
3339			appInfo.setHeader(topHeader);
3340		});
3341	}
3342});
3343
3344var sdlLoginModel = Backbone.Model.extend({
3345	defaults: {
3346		"loggedIn" : false,
3347		"firstInit" : "",
3348		"firstName" : "",
3349		"lastName" : "",
3350		"prefix" : "",
3351		"suffix" : "",
3352		"memberNumber" : "",
3353		"memberType" : "",
3354		"legacyPage" : htz.config.legacyPage,
3355		"fullContext" : htz.config.fullContext
3356	},
3357
3358	url: htz.config.rootContext+"/member/authentication"
3359})
3360var sdlLoginView = Backbone.View.extend({
3361	events: {
3362		'click #loginLink': 'toggleLoginForm',
3363		'click #arrowDropdown': 'toggleLoginForm',
3364		'click #cookieLink': 'toggleLoginForm',
3365		'click .switchProfileLink':'handleSwitchProfile',
3366		'click #loginButton': 'homePageloginSubmit',
3367		'click #logOut': 'logOut',
3368		'click #forgotMemberNumberLink': 'forgotMemberNumberLink',
3369		'click #forgotPwdLink': 'forgotPwdLink',
3370		"click .learnMoreLink": "infoOverlay",
3371		/*  P U - This works on iOS, Android and Desktop */
3372	    'mouseover #loginButton' : "lockBlack",
3373	    'mouseout #loginButton' : "lockWhite",
3374	    'touchstart #loginButton' : "lockWhite",
3375	    'touchend #loginButton' : "lockWhite",
3376	    'mousedown #loginButton' : "lockBlack",
3377	    'mouseup #loginButton' : "lockWhite",
3378		"click #loginCreateUserId": "loginCreateUserId",
3379		"keypress #loginFormContainer ": "onEnterLogin",
3380		"mouseover .loginLink": "yellowChange",
3381		"mouseout .loginLink": "blueChange",
3382		"touchstart .loginLink": "yellowChange",
3383		"click #upgradeToGold": "upgradeToGold",
3384		"click #loggedInTravelAgent":"toggleLogOutMenu",
3385		"click #mobile-nav-close-trigger":"slideCloseMobileMemberNav"//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
3386	},
3387	initialize: function(){
3388
3389		_.bindAll(this, 'renderTopNav', 'isCookied', 'renderLogin', 'toggleLoginForm', 'showLogin', 'hideLogin', 'homePageloginSubmit', 'logOut', 'forgotPwdLink', 'forgotMemberNumberLink', 'loginCreateUserId');
3390		this.isCookied();
3391		this.useridInfo = new Tooltip();
3392
3393		this.lightbox = null;
3394
3395		this.utilsProxy = null;
3396		var self = this;
3397
3398		requirejs(['utils/utils-proxy'], function(utilsProxy) {
3399
3400			if (!htz.utils.config.UtilConfig.getLightbox()){
3401				var options = {};
3402				options.lightBox = htz.utils.LightBox;
3403				htz.utils.config.UtilConfig.configure(options);
3404			}
3405
3406			self.utilsProxy = utilsProxy;
3407		});
3408	},
3409	//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
3410	slideCloseMobileMemberNav: function(e){
3411		e.stopPropagation();
3412		var target= e.currentTarget;
3413
3414		$(target).closest("#sideMenuMember").removeClass("mobileNavBckgrnd");
3415
3416		$(target).closest("#member-nav-container").css("width","0px");
3417
3418		this.expandSubMenu(e);
3419		//$(target).closest(".mob-menu").find("#chevron-arrow").removeClass("arr-up").addClass("arr-down");
3420
3421		target.setAttribute("aria-expanded","false");	//dtc4102//22.23//Accessibility(HER-89) - Unlabelled Button - INC001221352
3422
3423		return false;
3424	},
3425	onEnterLogin: function(e){
3426		target = e.keyCode;
3427	    if(target == 13) {
3428	    	e.preventDefault();
3429	    	$("#loginButton").trigger('click');
3430	    }
3431	},
3432	isCookied: function(){
3433		var self = this;
3434		$.ajax({
3435			url: htz.config.rootContext+"/member/top/navigation",
3436			dataType: "json",
3437			cache: false,
3438			contentType: "application/json",
3439			beforeSend: function(req){},
3440			success: function(data, req, status) {
3441				self.model.set({
3442					'prefix': data.data.prefix,
3443					'firstName': data.data.firstName,
3444					'lastName': data.data.lastName,
3445					'suffix': data.data.suffix,
3446					'loggedIn': data.data.loggedIn,
3447					'memberNumber': data.data.memberNumber,
3448					'memberType': data.data.memberType,
3449					'cookieLaw': htz.config.isCountryinEuropeUnion,
3450					'auth0': data.data.auth0
3451				});
3452
3453				if (data.data.show2FA !== undefined && data.data.show2FA !== null && data.data.show2FA !== '') {
3454					htz.helpers.SiftIracLogin.otpForm(true);
3455				}
3456
3457				//hz464486
3458				//IRAC-1759
3459				//fire amplitude reset function on login
3460				if (data.data.memberNumber && data.data.memberNumber !== '') {
3461					AmplitudeUtils.whenReady(function(amplitude) {
3462						amplitude.setUserId(data.data.memberNumber);
3463					});
3464				}
3465
3466				if ((self.model.get('firstName') != null) && (self.model.get('firstName') != '')){
3467					self.model.set('firstInit', self.model.get('firstName').substring(0,1));
3468				}
3469
3470				if(data.data.displayLogin) {  // hides login and top nav in platinum -PJ
3471					self.renderTopNav();
3472					self.renderLogin();		
3473				}
3474
3475				if(data.data.displayJoin  == 'N'){
3476					$('#logIn').parent().css('display','none');
3477					$('#loginLink').css('border-right','none');
3478				}
3479
3480				if (self.getParameterByName('mN') == 't') {
3481					if (self.model.attributes.lastName) {$('#cookieLink').trigger('click');}
3482					else {$('#loginLink').trigger('click');}
3483				}
3484
3485			},
3486			error: function(req, status){}
3487		});
3488
3489	},
3490	hideDropdowns: function(){
3491		$("#loginFormContainer").hide();
3492		$(".loginLink, .myaccount, .cookieLink").removeClass("loginActive").addClass("loginInActive");
3493		if($(".loginLink")) {
3494			$(".loginLink").trigger("blur");
3495			$(".loginLink").addClass("topNavPrimary");
3496		}
3497	},
3498	renderTopNav: function(){
3499		
3500		var pathName = window.location.pathname;
3501		if(pathName.indexOf("hertzlink/index.jsp") != -1){
3502			this.templateNav = _.template($("#topNavLinks").html());
3503			this.$(".pos-container").html(this.templateNav(this.model.attributes));
3504			$(window).on('resize', function(){
3505			    var win = $(this); 
3506			    if (win.width() < 768) { 
3507			    	$('#nav-container').css('display','none');	
3508			    }
3509			    if (win.width() > 768){
3510			    	$('#nav-container').css('display','contents');
3511			    }
3512			});
3513		}else{
3514			this.templateNav = _.template($("#topNavLinks").html());
3515			this.$(".emember-container").html(this.templateNav(this.model.attributes));
3516		}
3517
3518		//dtc4102//PR013993 GPR
3519		//render the new mobile web dropdown menus
3520		this.templateMobileNavInfo = _.template($("#mobileWebtopNavMemberInfo").html());
3521		this.$("#mobile-nav-header-member-info").html(this.templateMobileNavInfo(this.model.attributes));
3522
3523		//dtc4102//IRAC-260-Optimize-hertz.com-Mobile-Web-Login-and-Navigation-INC001561599
3524		this.mobileNavTemplate = _.template($("#mobiletopNavMemberInfo").html());
3525		this.$("#mobile-nav-member-info").html(this.mobileNavTemplate(this.model.attributes));
3526
3527		return this;
3528	},	
3529	
3530	//dtc4102//PR013993 GPR
3531	showMemberDropdown:function(e){
3532		e.stopPropagation();
3533		
3534		
3535		$("#mobileWebMemberInfoUL>li>a[href$='/rentacar/emember/modify/profile.do?']").parent().remove();	//remove the Modify Profile element from the DOM for mobile web //PR013993 GPR
3536		$("#mobileWebArrowDropdown").toggleClass("mobileWebArrowOpen").toggleClass("mobileWebArrowClose");
3537		$("#mobile-nav-member-info").toggleClass("border-bottom");
3538		$("#mobile-nav-member-info-more").toggleClass("border-bottom");
3539	
3540		$("#mobile-nav-member-menu").slideToggle(700, "swing",function(){
3541			
3542			var menuListHt = $("#mobile-nav-member-info-more").outerHeight() + $("#mobileWebMemberInfoUL").outerHeight();
3543			$("#mobile-nav-member-menu").height(menuListHt);
3544			
3545		});
3546		
3547		return false;
3548	},
3549	
3550	handleSwitchProfile:function(e){
3551		e.stopPropagation();
3552	},
3553	toggleLogOutMenu:function(){
3554		if ($('.new-agent-logout').hasClass('new-hide')) {
3555            $('.new-agent-logout').removeClass('new-hide')
3556        } else {
3557            $('.new-agent-logout').addClass('new-hide')
3558        }
3559	},
3560	renderLogin:function(){
3561		var self=this;
3562		
3563		this.template = _.template($("#sdlLoginFromTemplate").html());
3564		this.$("#loginFormContainer").html(this.template(this.model.attributes));
3565
3566		if(this.model.attributes.loggedIn){
3567			$.ajax({
3568				url: htz.config.rootContext + "/member/account/navigation",
3569				dataType: "json",
3570				cache: false,
3571				contentType: "application/json",
3572				beforeSend: function(req){},
3573		  		success: function(accountData, req, status){
3574					var showMyAccount = false;
3575					if(typeof accountData.data !== "undefined") {
3576
3577						if(( accountData.data.clubType != "1") && ( accountData.data.clubType != 'express')) {
3578							$("#upgradeToGold").hide(); //This button should only show for members of type #1 Club
3579						}
3580						if(accountData.data.goldPermission == 'goldnotallowed'){
3581							$("#upgradeToGold").hide();
3582						}
3583
3584					   	clubType = accountData.data.clubType;
3585					   	clubTier = accountData.data.clubTier;
3586					   	switch (clubType) {
3587					   		case "G":
3588					   			showMyAccount = true;
3589					   			if (clubTier == "PC") {
3590					   				$('#memberNavClubHeaderName').html($('#numberOneClubPresidentCircle').html());
3591					   				$('#mobileWebMemberInfo-clubtier').html($('#numberOneClubPresidentCircle').html());
3592					   			}
3593					   			else if (clubTier == "FS") {
3594					   				$('#memberNavClubHeaderName').html($('#numberOneClubFiveStar').html());
3595					   				$('#mobileWebMemberInfo-clubtier').html($('#numberOneClubFiveStar').html());
3596					   			}
3597					   			else {
3598					   				//dtc4102//PR013993 GPR
3599					   				//desktop
3600					   				$('#memberNavClubHeaderName').html($('#numberOneClubGold').html());
3601					   				
3602					   				//dtc4102//PR013993 GPR
3603					   				//mobile web
3604					   				$('#mobileWebMemberInfo-clubtier').html($('#numberOneClubGold').html());
3605					   				
3606					   			}
3607					   			break;
3608					   		case "P":
3609					   			showMyAccount = true;
3610					   			$("#memberNavClubHeaderName").html($('#numberOneClubPlatinum').html());
3611					   			$('#mobileWebMemberInfo-clubtier').html($('#numberOneClubPlatinum').html());
3612					   			break;
3613					   		case "1":
3614					   			showMyAccount = true;
3615					   			$("#memberNavClubHeaderName").html($('#numberOneClub').html());
3616					   			$('#mobileWebMemberInfo-clubtier').html($('#numberOneClub').html());
3617					   			break;
3618					   		case "TA":
3619					   			if (accountData.data.displayExactlyRewardsLink) {
3620					   				$('.taNavLink').attr('href',accountData.data.hertzPartnersLink).html(accountData.data.hertzPartnersText).show();
3621					   			}
3622					   			$('#loggedInMember').hide();
3623					   			$('#loggedInTravelAgent').show();
3624					   			break;
3625					   	}
3626					   	
3627					   	$('#memberNavClubHeaderPoints').html(accountData.data.rewardsPoints+"&nbsp;pts");
3628		   				$('#memberNavClubHeaderMemberNo span').html(self.model.attributes.memberNumber);
3629		   				
3630		   				$('#mobileWebMemberInfo-points').html(accountData.data.rewardsPoints+"&nbsp;pts");
3631		   				$('#mobileWebMemberInfo-memberNumber span').html(self.model.attributes.memberNumber);
3632		   				
3633
3634					   	// Temporary removed rental display - IRAC-824 part of 15.2 release - Gopal
3635						/*
3636						 if (accountData.data.rentalCount == 0) { $('#rentalYTD').hide(); }
3637					 	 else { $("#rentalCount").html(accountData.data.rentalCount); }
3638						*/
3639
3640						if (accountData.data.rewardsPoints == 0) { $('#mobileNavAwards').hide(); }
3641						else { $("#mobileGoldPoints").html(accountData.data.rewardsPoints); }
3642
3643						if (htz.config.subSystemId != "IRAC") {
3644							$('#mobileNavAwards').hide();
3645						}
3646
3647						for (i = 0; i<accountData.data.items.length; i++) {
3648							$("#loggedUserDetails").append("<li><a href="+ htz.config.rootContext+accountData.data.items[i].url +">" + accountData.data.items[i].displayText +"</a></li>");			//desktop
3649							$("#mobileWebMemberInfoUL").append("<li><a href="+ htz.config.rootContext+accountData.data.items[i].url +">" + accountData.data.items[i].displayText +"</a></li>");		//mobile web
3650						}
3651						
3652						$("#mobileWebMemberInfoUL>li>a[href$='/rentacar/emember/modify/profile.do?']").parent().remove();
3653						
3654						//dtc4102//PR013993 GPR
3655		   				//append the logout button to the bottom of the dropdown menu
3656						$("#loggedUserDetails").append('<li id="logOut"> <a href="'+htz.config.rootContext+'/emember/submitLogout.do">Logout</a></li>');
3657
3658						if (showMyAccount){ $("#myaccount").show(); }
3659
3660
3661					} else {
3662						$('#myaccount').hide();
3663					}
3664
3665			   	},
3666			   	error: function(req, status){}
3667			});
3668		}
3669
3670		return this;
3671	},
3672	lockWhite: function(){
3673		$("#loginButton span").addClass("icons-white_lock").removeClass("icons-lock");
3674	},
3675	lockBlack: function(){
3676		$("#loginButton span").removeClass("icons-white_lock").addClass("icons-lock");
3677	},
3678	yellowChange: function(){
3679		if($('.loginLink').hasClass("topNavPrimary"))
3680			$('.loginLink').addClass("topNavPrimaryHover");
3681
3682		var self = this;
3683		if('ontouchstart' in document.documentElement) {
3684
3685			$('body').on('touchmove', function(ev){
3686				if(!$('#loginFormContainer').is(":visible") &&  $('.loginLink').hasClass("topNavPrimaryHover")){
3687	    			self.blueChange();
3688			    	$('body').off(ev);
3689			    }
3690		   	});
3691		}
3692
3693	},
3694	blueChange: function(){
3695		if($('.loginLink').hasClass("topNavPrimary"))
3696			$('.loginLink').removeClass("topNavPrimaryHover");
3697	},
3698	toggleLoginForm: _.debounce(function(e){
3699		e.preventDefault();
3700		e.stopPropagation();
3701		
3702		var self = this;
3703		if (self.model.get('auth0')) {
3704			this.homePageloginSubmit();
3705		}
3706		else {
3707			var $overlayStub = null;
3708		if(htz.config.protocol === 'https'){
3709			var loginEvent = 'ontouchstart' in document.documentElement ? "touchstart" : "click";
3710
3711			if($('#loginFormContainer').is(":visible")){
3712				self.hideLogin();
3713				$("#arrowDropdown").removeClass("arrowClose").addClass("arrowOpen");
3714				
3715			} else {
3716				var obj = $(e.target);
3717				if (!(self.model.get('loggedIn')) && ((self.model.get('lastName') != null) && (self.model.get('lastName') != ''))) { obj = obj.closest('#cookieLink'); }
3718				self.showLogin(obj);
3719				$('#pos-change').on('click',function(){self.hideLogin();});
3720		    	$(window).on('resize', function(){
3721					clearTimeout(this.resizeEventHandler);
3722					resizeEventHandler = setTimeout(function(){if($('#loginFormContainer').is(":visible")){self.showLogin(obj);}}, 100);
3723				});
3724		    	$('body').not(e.currentTarget).not('#loginFormContainer').on(loginEvent, { originEle: e.currentTarget.id }, function(ev){
3725		    		var sourceEle = $('#'+ev.data.originEle);
3726					if($('#loginFormContainer').is(":visible") && sourceEle.has(ev.target).length==0 && ev.target.id!=ev.data.originEle && $('#loginFormContainer').has(ev.target).length==0 ){
3727				    	self.hideLogin();
3728				    	$('body').off(ev);
3729				    }
3730			   	});
3731			}
3732
3733
3734			// window.scrollTo(0,0);
3735			// self.getLightBox().overlay({ title: "<img src="+htz.localLoyaltyLogo.hertzGoldPlusImage+" alt='' />", close : close, dismiss : false }, $('#homePageloginBox'));
3736
3737			// $overlayStub = $('#hp-overlays')
3738			// if ( !( $overlayStub.length) ) {
3739			// 	$overlayStub = $('<div id="member-login-response-container" class="hidden"></div>');
3740			// 	$('body').append($overlayStub);
3741			// }
3742			//
3743			// $.ajax({
3744			// 	url : self.appConfig.config.rootContext + "/member/login/overlay",
3745			// 	cache : false,
3746			// 	dataType: 'html',
3747			// 	success : function(res){
3748			// 		$($overlayStub).append(res);
3749			// 		window.scrollTo(0,0);
3750			// 		new LightBox().overlay({ title: "<img src="+htz.localLoyaltyLogo.hertzGoldPlusImage+" alt='' />", dismiss : true }, $('#homePageloginBox'));
3751			//
3752			// 		var lm = new loginModel();
3753			// 		var lv = new loginView({el: "#homePageloginBox", model: lm, isRes: true, metaModel: self.model.get('metaData')});
3754			// 	}
3755			// });
3756
3757
3758
3759		} else {
3760			if('ontouchstart' in document.documentElement && $('.loginLink')) {
3761				self.blueChange();
3762			}
3763			var step = location.hash;
3764			var baseUrl = document.URL.split(step)[0];
3765			var del = (document.URL.indexOf('?') == -1) ? '?':'&';
3766			window.location.href = baseUrl.replace('http:','https:') + del + 'mN=t' + step;
3767		}
3768		}
3769		
3770		
3771	},500),
3772  showLogin: function(obj){
3773		var self = this;
3774		
3775		$("#loggedUserDetails>li>a[href$='/rentacar/emember/modify/profile.do?']").parent().remove();	//remove the Modify Profile element from the DOM for desktop //PR013993 GPR
3776		$("#arrowDropdown").removeClass("arrowOpen").addClass("arrowClose");
3777		if ( !$("#loginLink")){
3778
3779			$overlayStub = $('#hp-overlays')
3780			if ( !( $overlayStub.length) ) {
3781				$overlayStub = $('<div id="member-login-response-container" class="hidden"></div>');
3782				$('body').append($overlayStub);
3783			}
3784
3785			$.ajax({
3786				url : htz.config.rootContext + "/member/login/overlay",
3787				cache : false,
3788				dataType: 'html',
3789				success : function(res){
3790					$($overlayStub).append(res);
3791					window.scrollTo(0,0);
3792					self.utilsProxy.getLightbox().overlay({ title: "<img src="+htz.localLoyaltyLogo.hertzGoldPlusImage+" alt='' class='gold-plus-lightbox-logo' />", dismiss : true, width : 762, noPadding : true }, $('#homePageloginBox'));
3793
3794					var lm = new loginModel();
3795					var lv = new loginView({el: "#homePageloginBox", model: lm, isRes: false, isInLightBox: true, metaModel: self.model.get('metaData'), referrer:self});//dtc4102//3DS-II-PR015031//added referrer
3796				}
3797			});
3798  	} else {
3799			if ($('.tmplPageContainer').length){ $(".tmplPageContainer").css({"position":"static"}); }
3800
3801	  	if(!obj.is(':visible') && $('.loginActive:visible'))
3802	  		obj = $('.loginActive:visible');
3803
3804	  	var offset = obj.offset();
3805	  	var width = obj.outerWidth();
3806	  	var height = obj.outerHeight()+23;
3807	  	var widthBox = $("#loginFormContainer").outerWidth();
3808	  	var top= offset.top + height;
3809	  	var left = offset.left + width + 10 - widthBox;
3810	  	this.$("#loginFormContainer").css({
3811	  	   "left": left
3812	  	})
3813	  	if($(".loginLink"))
3814			$(".loginLink").removeClass("topNavPrimary").removeClass("topNavPrimaryHover");
3815			obj.removeClass("loginInActive").addClass("loginActive");
3816	  	this.$("#loginFormContainer").slideDown('1000');
3817		}
3818  },
3819  hideLogin: function(){
3820  	this.$("#loginFormContainer").slideUp('1000', function(){
3821  		 $("#arrowDropdown").removeClass("arrowClose").addClass("arrowOpen");
3822          $(".loginLink, .myaccount, .cookieLink").removeClass("loginActive").addClass("loginInActive");
3823          if($(".loginLink")) {
3824          	$(".loginLink").trigger("blur");
3825          	$(".loginLink").addClass("topNavPrimary");
3826          }
3827      });
3828  },
3829  logOut: function(e){
3830	  e.stopPropagation();
3831	  	let localStorageAccessKey = localStorage.getItem("localStorageAccessKey");
3832		let localStorageIdKey = localStorage.getItem("localStorageIdKey");
3833		if (localStorageAccessKey !== undefined && localStorageAccessKey !== null && localStorageAccessKey !== "") {
3834			localStorage.removeItem(localStorageAccessKey);
3835			localStorage.removeItem("localStorageAccessKey");
3836		}
3837		if (localStorageIdKey !== undefined && localStorageIdKey !== null && localStorageIdKey !== "") {
3838			localStorage.removeItem(localStorageIdKey);
3839			localStorage.removeItem("localStorageIdKey");
3840		}
3841		localStorage.removeItem("accessToken");
3842		localStorage.removeItem("refreshToken");
3843		localStorage.removeItem("member");
3844		  //hz464486
3845		  //IRAC-1759
3846		  //fire amplitude reset function on logout
3847		  AmplitudeUtils.whenReady(function(amplitude) {
3848			  amplitude.reset();
3849		  });
3850
3851		Utils.clearReservationSession();
3852	},
3853	forgotMemberNumberLink: function(){
3854		window.location.href= htz.config.rootContext+"/emember/reset/memberNumberRetrieval.do";
3855	},
3856	forgotPwdLink: function(){
3857		$("#loginForgotPasswordNav").val("forgotPassword");
3858		this.homePageloginSubmit();
3859	},
3860	loginCreateUserId: function(){
3861		$("#loginCreateUserId").val("true");
3862		this.homePageloginSubmit();
3863	},
3864	infoOverlay: function(event){
3865		var target = $(event.target);
3866		if(!this.useridInfo.isInUse()){
3867			this.useridInfo.create({
3868				containerID : 'userid-info',
3869				content : this.$('#username-desc').html(),
3870				width:"inherit"
3871			});
3872		}
3873		this.useridInfo.show(target);
3874	},
3875    homePageloginSubmit: function(){
3876		Loader.showLoader();
3877		var self = this;
3878		
3879		localStorage.clear('localStorageAccessKey');
3880		localStorage.clear('localStorageIdKey');
3881		
3882		if(this.model.attributes.lastName){
3883			this.model.clear();
3884			this.model.set({cookieMemberOnLogin: true, loginId: 'cookie', password: $('#homePagePassword').val(), loginForgotPassword: $("#loginForgotPasswordNav").val()});
3885		}
3886		else {
3887			this.model.clear();
3888			this.model.set({loginCreateUserID: $("#loginCreateUserId").val(), loginId: $("#homePageloginId").val(), password: $("#homePagePassword").val(), cookieMemberOnLogin: $('#cookieMemberOnLogin').is(':checked'), loginForgotPassword: $("#loginForgotPasswordNav").val()});
3889		}
3890
3891		this.model.save(this.model.attributes, {
3892			success: function(collection, response){
3893				var resultStatus = response.resultInfo.result;
3894					//lets handle error first
3895				Loader.hideLoader();
3896
3897				if(resultStatus == "input" || resultStatus == "login"){
3898					if (response.resultInfo.url.indexOf(htz.config.rootContext)!= -1) {
3899						window.location.href = response.resultInfo.url;
3900					} else {
3901						window.location.href = htz.config.rootContext+response.resultInfo.url;
3902
3903					}
3904				} else if(resultStatus === "success"){
3905					if(window.location.href.indexOf('join') > 0
3906						|| window.location.href.indexOf('legacy') > 0
3907						|| window.location.href.indexOf('reset') > 0
3908						|| window.location.href.indexOf('enrollment') > 0){
3909							window.location.href = response.resultInfo.url;
3910					} else {
3911						window.location.reload();
3912					}
3913				} else if(resultStatus == "success_to_profile" || resultStatus == "success_to_upgrade") {
3914					if (response.resultInfo.url.indexOf(htz.config.rootContext)!= -1) {
3915						window.location.href = response.resultInfo.url+"?curPage="+response.resultInfo.result;
3916					} else {
3917						window.location.href = htz.config.rootContext+response.resultInfo.url+"?curPage="+response.resultInfo.result;
3918					}
3919				} else {
3920                    if ((response.resultInfo.url != null) && (response.resultInfo.url !== undefined)) {
3921                        if (response.resultInfo.url.indexOf(htz.config.rootContext)!= -1) {
3922                            window.location.href = response.resultInfo.url+"?curPage="+response.resultInfo.result;
3923                        } else {
3924                            window.location.href = htz.config.rootContext+response.resultInfo.url+"?curPage="+response.resultInfo.result;
3925                        }
3926                    } else {
3927                        window.location.hreg = htz.config.rootContext + "?curPage=" + response.resultInfo.result;
3928                    }
3929
3930				}
3931			},
3932			error: function(model, response){
3933
3934				var errors = $.parseJSON(response.responseText).message;
3935
3936				if(Utils.isUseStoragePolyfill()){
3937					Utils.storeItemIE('ieLoginError', errors);
3938				}else {
3939					var strErrors = JSON.stringify(errors);
3940                    htz.helpers.SessionHelper.setItem("errorData", strErrors);
3941				}
3942
3943				model.set({errorLocation: '#homePageloginBox #error-list'},{silent:true});
3944				self.model.trigger('error', model, response);
3945				Loader.hideLoader();
3946                var parsedResponse = $.parseJSON(response.responseText);
3947                if ((parsedResponse.resultInfo.url != null) && (parsedResponse.resultInfo.url !== undefined)) {
3948                    window.location.href = htz.config.rootContext+parsedResponse.resultInfo.url+"?curPage="+parsedResponse.resultInfo.result;
3949                } else {
3950                    window.location.href = htz.config.rootContext+"?curPage="+parsedResponse.resultInfo.result;
3951                }
3952			}
3953		});
3954    },
3955    getParameterByName : function(name){
3956		name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
3957		var regexS = "[\\?&]" + name + "=([^&#]*)";
3958		var regex = new RegExp(regexS);
3959		var results = regex.exec(window.location.search);
3960		if(results == null) { return ""; }
3961		else { return decodeURIComponent(results[1].replace(/\+/g, " ")); }
3962	},
3963	upgradeToGold: function(){
3964		$.ajax({
3965			url: htz.config.rootContext+"/rest/member/upgrade/gold",
3966			dataType: "json",
3967			cache: false,
3968			contentType: "application/json",
3969			beforeSend: function(req){},
3970			success: function(data, req, status){
3971				window.location.href = 'https://' + window.location.hostname + htz.config.rootContext + data.resultInfo.url;
3972
3973			},
3974			error: function(req, status){}
3975		});
3976	}
3977});
3978
3979
3980// var lazyLoadMemberNav = { cache: false, dataType: 'html', success: function(data) {
3981// 	$('#homePageLoginOverlay').html(data);
3982
3983//removed the lines inside document.ready.. those will now be called from navigation.js after the top nav container is rendered
3984// }};
3985$(document).ready(function(){
3986	if(window.topNavInitialized === undefined){
3987
3988		memNavloginModel = new sdlLoginModel();
3989		memNavloginView = new sdlLoginView({el: "header", model: memNavloginModel});
3990	}
3991
3992
3993});
3994
3995// lazyLoadMemberNav.url = htz.config.rootContext + '/templates/emember/login/memberLoginView.jsp';
3996// LazyLoad.queueJS(lazyLoadMemberNav, 'low');
3997
3998
3999memberViewUtil = Backbone.View.extend({
4000	events:{},
4001	initialize: function(){
4002		_.bindAll(this, 'infoMessage', 'closeOverlay', 'displayOverlay', 'hideLightBoxCloseBtn');
4003	},
4004	hideLightBoxCloseBtn: function(){
4005		$(".lb-close").hide();
4006	},
4007	infoMessage: function(target){
4008		var self = this;
4009
4010		var container = $(target);
4011		var posLink = container.closest(".overlayPopup").find(".overlayPopupLink:eq(0)");
4012		var element = container.closest(".overlayPopup").find(".overlayPopupContent:eq(0)");
4013
4014		if( element.is(":hidden") ){
4015			$(".overlayPopupContent").hide();
4016			self.displayOverlay(element, posLink, false)
4017		} else {
4018			self.closeOverlay(element, false);
4019		}
4020
4021	},
4022	displayOverlay: function(element, posLink, useScreen){
4023		element = $( element );
4024		posLink = $( posLink );
4025		var myNav = navigator.userAgent.toLowerCase();
4026		if( (myNav.indexOf('msie') != -1) &&( (parseInt(myNav.split('msie')[1])) == 6 )) {
4027			$('select').css("visibility", "hidden");
4028		}
4029
4030	    var scrollW = $(document).width();
4031	    var scrollH = $(document).height();
4032	    var posLinkTop = true ? posLink.offset().top : posLink.position().top;
4033	    var posLinkLeft = true ? posLink.offset().left : posLink.position().left;
4034
4035	    var windowHieight = $( window ).height();
4036	    var windowWidth = $( window ).width();
4037	    var cssTopPosLink = posLink.position().top;
4038	    var cssLeftPosLink = posLink.position().left;
4039
4040	    if (posLinkTop+element.height()>windowHieight+$(window).scrollTop()){
4041	    	cssTopPosLink = posLink.position().top-element.height();
4042	    } else {
4043	    	cssTopPosLink = posLink.position().top+posLink.height();
4044	    }
4045
4046	    if (posLinkLeft+element.width()+50>windowWidth+$(window).scrollLeft()){
4047	    	cssLeftPosLink = posLink.position().left-element.width();
4048	    } else {
4049	    	cssLeftPosLink = posLink.position().left+posLink.width();
4050	    }
4051
4052		element.css({'top':cssTopPosLink,'left':cssLeftPosLink});
4053
4054	    if ( useScreen ){
4055			var screen = $('#overlayScreen');
4056
4057			if ( screen.length == 0 ) {
4058				screen = $('<div>')
4059					.attr("id", 'overlayScreen')
4060					.css({
4061						width: scrollW,
4062						height: scrollH
4063					})
4064					.addClass("overlayScreen")
4065					.appendTo(document.body);
4066			}
4067
4068			screen.show();
4069		}
4070
4071		element.show();
4072	},
4073	closeOverlay: function(element, hasScreen){
4074		var myNav = navigator.userAgent.toLowerCase();
4075		if( (myNav.indexOf('msie') != -1) &&( (parseInt(myNav.split('msie')[1])) == 6 )) {
4076			$('select').css("visibility", "visible");
4077		}
4078		if(hasScreen){
4079			$(".overlayPopupContent").hide();
4080			$('#overlayScreen').hide();
4081		}
4082		$(element).hide();
4083	}
4084});
4085window.memUtil = new memberViewUtil({el : 'body'});
4086
4087
4088function loginAndCreateUserIdSubmit(formToSubmit){
4089	formToSubmit.prop('method','post');
4090	formToSubmit.prop('action',htz.config.rootContext+'/emember/submitLogin');
4091
4092	$('#loginCreateUserID').val('true');
4093	formToSubmit.submit();
4094}
4095 
4096var passwordStrengthView=Backbone.View.extend({initialize:function(){this.template=this.options.template;this.content=this.options.content;this.setElement(this.options.el)},render:function(a){var b=_.template($(this.template).html(),{content:this.content});$(this.options.el).html(b);this.display(this.getPasswordStrength(a))},display:function(a){0<=a?($(this.options.el).show(),7==a?($(this.options.el).closest(".password-div").find(".passwordVerify").removeAttr("disabled"),$(this.options.el).closest(".password-div").find(".passwordVerifyBox").removeClass("disabled")):
4097($(this.options.el).closest(".password-div").find(".passwordVerify").attr("disabled","true"),$(this.options.el).closest(".password-div").find(".passwordVerifyBox").addClass("disabled"))):$(this.options.el).hide()},handleCheckmark:function(a,b,c){a?(b.addClass("checkmark"),c++):b.removeClass("checkmark").addClass("crossmark");return c},getSpecialCharFlag:function(a){return/[#\$%\^&!@]/.test(a)&&!1===/[^a-zA-Z0-9#$%\\^&!@]/.test(a)?!0:!1},getPasswordStrength:function(a){var b=0;if(0!=a.length){var c=
4098/[0-9]/.test(a),d=this.getSpecialCharFlag(a),e=/[A-Z]/.test(a),f=8<=a.length?!0:!1,g=30>=a.length?!0:!1,h=/[a-z]/.test(a),i=/\b(\w*password\w*)\b/.test(a.toLowerCase()),a=/(.)\1{3,}/.test(a),b=this.handleCheckmark(c,$("li#passStrenghtNums"),b),b=this.handleCheckmark(d,$("li#passSymbols"),b),b=this.handleCheckmark(e,$("li#passStrenghtUpper"),b),b=this.handleCheckmark(h,$("li#passStrenghtLower"),b),b=this.handleCheckmark(!i,$("li#passPassword"),b),b=this.handleCheckmark(!a,$("li#passRepeat"),b);f&&
4099g?($("li#passStrenghtMinChars").addClass("checkmark"),b++):$("li#passStrenghtMinChars").removeClass("checkmark").addClass("crossmark");return 7==b?7:1}return-1},checkPasswordMatch:function(a){var a=$(a.target),b=a.closest(".password-div").find("#password").val(),c=a.val();7==this.getPasswordStrength(b)&&setTimeout(function(){$(".password-strength-div").empty()},300);b===c?a.closest(".password-div").find("#errorPasswordMismatch").hide():a.closest(".password-div").find("#errorPasswordMismatch").show()}}); 
4100/* pin reset confirmation */
4101
4102var resetConfirmationView = Backbone.View.extend({
4103	events: {
4104		"click #home-btn": "redirectHome",
4105		"click #profile-btn": "gotoProfile",
4106		"click #continue-res": "continueRes",
4107		"click #oci-review-ok": "handleOCIandReview"
4108	},
4109	initialize: function(){
4110		_.bindAll(this, 'renderResetConfirmation', 'redirectHome', 'gotoProfile');
4111		this.renderResetConfirmation();
4112	},
4113	renderResetConfirmation: function() {
4114		var template = _.template( $("#pinResetConfirmationTemplate").html(), {} );
4115        $(this.el).html( template ); 
4116        
4117        if(isRes || isOCI || isResReview) {
4118        	$("#profile-btn, #home-btn").hide();
4119            $("#pinResetConfirmationSection").css('width', 'auto');
4120            $(".containerTableThickBorder, .containerTableBorder").css('border', 'none');
4121            
4122            if(isOCI || isResReview) {
4123            	$("#continue-res").hide();
4124            } else { 
4125            	$("#oci-review-ok").hide();
4126            }
4127
4128            memUtil.hideLightBoxCloseBtn();
4129        } else {
4130        	$("#navLogout").css('display','block');
4131          	$("#navLogin").hide();
4132        	$("#continue-res, #oci-review-ok").hide();
4133        	memNavloginView.isCookied();
4134        }
4135    },
4136	redirectHome: function(){
4137			document.location.href = htz.config.rootContext+'/reservation/';
4138	},
4139	gotoProfile: function(e){
4140		document.location.href = htz.config.rootContext+'/emember/modify/profile';
4141	},
4142	continueRes: function(){
4143		HomePage.bookAsMemberSubmitRes();
4144	},
4145	handleOCIandReview: function() {
4146		if(isOCI) {
4147			window.location.reload();
4148		} else if(isResReview) {
4149			var callback = (this.handleMemberRes || handleMemberRes);
4150			if(callback && typeof callback === 'function') {
4151				callback();
4152			} else {
4153				window.location.href = htz.config.rootContext+"/reservation/";
4154			}
4155		}
4156	}
4157});
4158
4159/* pin reset confirmation */
4160
4161/* Reset password page  */
4162var resetPwdModel = RestModel.extend({
4163	url: htz.config.rootContext+"/member/reset/password"
4164});
4165
4166var resetPwdView = Backbone.View.extend({
4167	defaults: {
4168		isRes: false,
4169		isOCI: false,
4170		isResReview: false,
4171		clearError: false
4172	},
4173	events: {
4174		"click #resetSubmit": "resetPwdSubmit",
4175		"keyup #password": "checkPassword",
4176		"click .learnMoreLink": "learnMoreoverlay",
4177		"click .bookAsGuest,#bookAsGuest": "bookAsGuestFromresetPage",
4178		"click #strong-password-info" : "showStrongPasswordInformation",
4179		"blur #password" : "hideStrongPasswordInformation",
4180		"focusout #passwordVerify":"checkPasswordMatch"					//dtc4102 //IRAC 4514-15	
4181	},
4182	initialize: function(){
4183		_.bindAll(this, 'renderResetPwd', 'resetPwdSubmit', 'checkPassword', 'learnMoreoverlay');
4184		this.renderResetPwd();
4185        this.resetPassTooltip = new LightBox();
4186		this.model.on('fieldError', this.highlight, this);
4187		this.passwordStrengthView = new passwordStrengthView({el : '#membershipDetailsPasswordIndicatorSection', template : '#password-strength-indicator'});
4188	},
4189	
4190	//dtc4102
4191	//IRAC 4514-15
4192	checkPasswordMatch:function(e){
4193		this.passwordStrengthView.checkPasswordMatch(e);		
4194	},
4195	
4196	renderResetPwd: function(){
4197		var template = _.template( $("#pinResetSectionTemplate").html(), {deviceGroup : htz.config.deviceGroup} );
4198        $(this.el).html( template ); 
4199        
4200        if(isRes || isOCI || isResReview){
4201            $("#pinResetSection").css('width', '550px');
4202            $(".containerTableThickBorder, .containerTableBorder").css('border', '6px solid #EDEDED');
4203            $(".overlayPopup").hide();
4204            if(isOCI || isResReview){
4205	        	$(".bookAsGuest").hide();  
4206            	$("#bookAsGuest").hide(); 
4207            }
4208        }
4209        this.isClickedOutside = false;
4210		this.collapsed = false;			
4211		this.IsUserExpanded = false;
4212		this.IsUserClosed = false;
4213	},
4214	bookAsGuestFromresetPage: function(e){
4215		 var target = $(e.target);
4216		 target.closest(".lb-close").triggerHandler('click');
4217		 HomePage.bookAsGuestSubmitRes();
4218	},
4219	learnMoreoverlay: function(e){
4220        if(!this.resetPassTooltip.isInUse()){
4221            this.resetPassTooltip.overlay({title : this.$('#password-tooltip-label').html()}, this.$('#instruction-content').html());
4222        }
4223
4224//		target = $(e.target);
4225//		memUtil.infoMessage(target);
4226	},
4227	resetPwdSubmit: function(){
4228		var self = this;
4229		self.hidePasswordIndicator();
4230		Loader.showLoader();
4231		if (clearError)
4232			this.model.clear();
4233			
4234		this.model.set({
4235			password: $("#password").val(),
4236			passwordVerify: $("#passwordVerify").val()
4237		});
4238		this.model.save(this.model.attributes, { 
4239			success: function(collection, response){
4240				clearError = false;
4241				var resultStatus = response.resultInfo.result;
4242				if (resultStatus == "success") {
4243					var urlOverlay = htz.config.rootContext+response.resultInfo.url;
4244					$.ajax({
4245						url: urlOverlay,
4246						cache: false,
4247						beforeSend: function(){},
4248						success: function(data, status, req){
4249							if (isRes || isOCI || isResReview){
4250								$(".lb-content-box-no-padding").html("").html(data);
4251							}
4252								
4253							else {
4254								$(".sectionWidthSmall").html("").html(data);
4255							}
4256								
4257								
4258							var newUrl = sessionStorage.getItem("platinum");
4259							if (newUrl) {
4260								sessionStorage.removeItem("platinum");
4261								sessionStorage.setItem("resetPasswordConfirmationMessage", true);
4262								document.location.href = htz.config.rootContext + newUrl;
4263							} else {
4264								new resetConfirmationView({el: "#pinResetConfirmationSection"});
4265							}
4266							
4267							
4268						},
4269						error: function(){}
4270					});
4271				} else if(resultStatus == "success_platinum") {
4272					sessionStorage.setItem("resetPasswordConfirmationMessage", true);
4273					window.location.href = htz.config.rootContext + response.resultInfo.url;
4274				}
4275				Loader.hideLoader();
4276			},
4277			error: function(model, response){ 
4278 				clearError = true;
4279 				if (clearError)
4280					self.model.clear();
4281 				model.set({errorLocation: '#pinResetSection .error-list'},{silent:true});
4282 				self.model.trigger('error', model, response);
4283 				Loader.hideLoader();
4284			} 
4285		});
4286	},
4287	checkPassword : function (e) {
4288		var target = $(e.target);
4289	    var password = target.val();
4290	    this.passwordStrengthView.render(password);	
4291	    this.checkIndicatorStatus();
4292	},
4293	highlight : function(model, errors){
4294		ErrorHelper.reset();
4295		var mappings = [
4296			{"fields":"password", "target":"errorPassword"},
4297			{"fields":"passwordVerify", "target":"errorPasswordVerify"}
4298		];
4299		ErrorHelper.displayErrors(errors, {'mappings': mappings, 'allErrTarget': '#pinResetSection .error-list'});
4300	},
4301	showStrongPasswordInformation : function(e){
4302		var self = this;
4303    	var target = $(e.target);
4304    	if(this.isClickedOutside){
4305    		this.isClickedOutside = false;
4306    	}else{
4307	    	self.$('.password-info').slideToggle();
4308    		if(target.hasClass('icons-blue-plus-box')) {
4309	    		target.addClass('icons-grey-minus-box')
4310				      .removeClass('icons-blue-plus-box');	
4311	    		self.IsUserExpanded = true;
4312	    		self.IsUserClosed = false;
4313			} else {				
4314				target.removeClass('icons-grey-minus-box')
4315				      .addClass('icons-blue-plus-box');	
4316				self.IsUserClosed = true;
4317				self.IsUserExpanded = false;
4318			}
4319    	}
4320	},
4321	hideStrongPasswordInformation: function(){	
4322		if(!this.collapsed){
4323			$('.password-info').slideToggle();
4324			$('#strong-password-info').removeClass('icons-grey-minus-box')
4325									  .addClass('icons-blue-plus-box');
4326			this.collapsed = true;	
4327			this.isClickedOutside = true;
4328    	}	
4329		this.bindClickEvent();
4330	},
4331	checkIndicatorStatus: function(){
4332		if((this.collapsed && !this.IsUserExpanded) || (this.collapsed && this.IsUserClosed)){
4333			$('.password-info').slideToggle();
4334			$('#strong-password-info').removeClass('icons-grey-minus-box')
4335				.addClass('icons-blue-plus-box');
4336			$('.password-info').hide();						
4337		}			
4338	},
4339	hidePasswordIndicator : function(){
4340		var target = $('#strong-password-info');			
4341		if(target.hasClass('icons-grey-minus-box')) {
4342			$('.password-info').slideToggle();
4343			target.removeClass('icons-grey-minus-box')
4344					.addClass('icons-blue-plus-box');
4345			$('.password-info').hide();
4346		}		
4347	},
4348	bindClickEvent : function(){
4349		var self = this;
4350		$('body').bind('click', function(e){
4351			var target = $(e.target)[0].id;
4352			if(target == 'password' || target == 'strong-password-info'){
4353				self.isClickedOutside = false;
4354			}
4355			else{
4356				self.isClickedOutside = false;			
4357			}
4358			$('body').unbind('click');
4359		});		
4360	}		
4361});
4362
4363/* Reset password page  */
4364/* Forgot password view */ 	
4365var CardType = Backbone.Model.extend();
4366var CardTypes = Backbone.Collection.extend({
4367	url: htz.config.rootContext+'/rest/member/creditcard-list',
4368    model: CardType
4369});
4370var CardTypeView = Backbone.View.extend({
4371    tagName: "option",
4372
4373    initialize: function(){
4374        _.bindAll(this, 'render');
4375    },
4376    render: function(){
4377        $(this.el).attr('value', this.model.value).html(this.model.name);
4378        return this;
4379    }
4380});
4381var CardTypesView = Backbone.View.extend({
4382    initialize: function(){
4383		var ctr = this.collection.model.length;
4384		for(i=0; i<ctr; i++)
4385			this.addOne(this.collection.model[i]);
4386		//this.collection.each(this.addOne, this);
4387        _.bindAll(this, 'addOne', 'addAll');
4388       // this.collection.bind('reset', this.addAll);
4389    },
4390    addOne: function(cardType){
4391        $(this.el).append(new CardTypeView({ model: cardType }).render().el);
4392    },
4393    addAll: function(){
4394        this.collection.each(this.addOne);
4395    }
4396});
4397var Country = Backbone.Model.extend();
4398	var Countries = Backbone.Collection.extend({
4399		url: htz.config.rootContext+'/rest/member-drivers-license/country-list',
4400	    model: Country
4401	});
4402	var CountryView = Backbone.View.extend({
4403	    tagName: "option",
4404	    initialize: function(){
4405	        _.bindAll(this, 'render');
4406	    },
4407	    render: function(){
4408	        $(this.el).attr('value', this.model.value).html(this.model.name);
4409	        return this;
4410	    }
4411	});
4412	var CountriesView = Backbone.View.extend({
4413	    initialize: function(){
4414 			var counter = this.collection.model.length;
4415 			for(i=0; i<counter; i++)
4416 				this.addOne(this.collection.model[i]);
4417		
4418			//this.collection.each(this.addOne, this);
4419	        _.bindAll(this, 'addOne', 'addAll');
4420	       // this.collection.bind('reset', this.addAll);
4421	    },
4422	    addOne: function(city){
4423	        $(this.el).append(new CountryView({ model: city }).render().el);
4424	    },
4425	    addAll: function(){
4426	        this.collection.each(this.addOne);
4427	    }
4428	});
4429	
4430 	var FPModel = RestModel.extend({
4431 		defaults: {},
4432 		url: htz.config.rootContext+"/member/reset/authentication"
4433 	}); 
4434
4435 	var forgotPasswordView = Backbone.View.extend({
4436 		defaults: {
4437			isRes: false,
4438			isOCI: false,
4439			isResReview: false,
4440			isInLightBox: false,
4441			clearError: false
4442		},
4443 		events: {
4444 			"click #fpSubmit": "fpSubmit",
4445 			"click #forgotPasswordSection input": "memberAuthentication",
4446 			"change #forgotPasswordSection select": "memberAuthentication",
4447 			"click .captchaRefresh": "getImage",
4448 			"click .learnMoreLink": "learnMoreoverlay",
4449 			"click .bookAsGuest,#bookAsGuest": "bookAsGuestFromFp",
4450 			'focusout #cardNumber':'maskCC',									//dtc4102//IRAC-4499//Credit Card masking
4451 			"focusin #cardNumber":"unMaskCC"					//dtc4102//IRAC-4499//Credit Card masking
4452 		}, 
4453 		initialize: function(){
4454			_.bindAll(this, 'renderFP', 'fpSubmit');
4455			this.options.attempts = 0;
4456			this.options.limit = 10;
4457            this.forgotPasswordTooltip = new LightBox();
4458			this.renderFP();
4459 			this.model.on('fieldError', this.highlight, this);
4460 			
4461 		},
4462 		//dtc4102
4463 		//IRAC-4499//Credit Card masking
4464 		unMaskCC:function(e){
4465			var self=this;	
4466			
4467			require(['utils/cc-tools'], function(cctools){
4468				cctools.unMaskCC(e,null,self.finalCC);
4469			});
4470		},
4471		maskCC:function(e){
4472			e.stopImmediatePropagation();
4473			var self=this;
4474			
4475			require(['utils/cc-tools'], function(cctools){
4476				self.finalCC=cctools.maskCC(e,self.finalCC);
4477				cctools.displayLastFourDigits(e,self.finalCC);
4478			});
4479		},
4480 		renderFP: function(){
4481 			 var template = _.template( $("#forgotPasswordTemplate").html(), {} );
4482             $(this.el).html( template ); 
4483
4484             if(isRes || isOCI || isResReview || isInLightBox) {             	
4485                 $("#forgotPasswordContainer .sectionWidthSmall").css('width', 'auto');
4486                 $(".containerTableThickBorder, .containerTableBorder").css('border', 'none');
4487                 if(isOCI || isResReview ){
4488 		        	$(".bookAsGuest").hide(); 
4489                 	$("#bookAsGuest").hide();
4490                 }
4491             }             	
4492            
4493             var countries = new Countries();
4494             countries.fetch({
4495            	success: function(collection, response){
4496            		new CountriesView({el: $("#driversLicenseCountryState"), collection: response.data});
4497            	}
4498             });
4499             
4500             var cardTypes = new CardTypes();
4501             cardTypes.fetch({
4502            	 success: function(collection, response){
4503            		new CardTypesView({el: $("#cardType"), collection: response.data});
4504            	}
4505             });
4506             
4507             
4508             
4509 		}, 
4510 		fpSubmit: function(){
4511 			
4512 			var captchaDisplayed;
4513 			var captchaString = null;
4514 			if (($("#captchaDiv").length >0) && $("#captchaDiv").css('display').toLowerCase()=='block') {
4515 				captchaDisplayed = "true";
4516 				captchaString = grecaptcha.enterprise.getResponse();
4517			}
4518			else {
4519				captchaDisplayed = "false";
4520			}
4521 			
4522			var self = this;
4523 			Loader.showLoader();
4524 			if (clearError)
4525 				this.model.clear(); 	
4526 			this.model.set({
4527 				resetMemberNumber: $("#resetMemberNumber").val(),
4528 				authenticationType: $('input:radio[name=authenticationType]:checked').val(),
4529 				driversLicense: $("#driversLicense").val(),
4530 				driversLicenseCountryState: $("#driversLicenseCountryState").val(),
4531 				cardNumber: this.finalCC,
4532 				cardType: $("#cardType").val(),
4533 				captchaCode: $("#captchaCode").val(),
4534 				isCaptchaDisplayed: captchaDisplayed,
4535 				captchaString: captchaString
4536 			});
4537 			this.model.save(this.model.attributes, {
4538 				success: function(collection, response){
4539 					clearError = false;
4540 					var resultStatus = response.resultInfo.result;
4541 					if(resultStatus == "success") {
4542 						var urlOverlay = htz.config.rootContext+response.resultInfo.url+"/overlay";
4543 						$.ajax({
4544 							url: urlOverlay,
4545 							cache: false,
4546 							beforeSend: function(){},
4547 							success: function(data, status, req){
4548 								if (isRes || isOCI || isResReview){
4549 									$(".lb-content-box-no-padding").html("").html(data);
4550 								}
4551 									
4552 								else {
4553 									$(".sectionWidthSmall").html("").html(data);
4554 								}
4555 									
4556 									
4557 								var rpm = new resetPwdModel();
4558 								var rpv = new resetPwdView({el: "#pinResetSection", model: rpm, passwordLevel : ''});
4559 							},
4560 							error: function(){}
4561 						});
4562 					} else if (resultStatus == 'locked') {
4563 						self.getLockedPage();
4564 					} else if (resultStatus == 'login' || resultStatus == 'login_platinum') {
4565 							window.location.href = htz.config.rootContext+response.resultInfo.url;
4566 					} 
4567 					Loader.hideLoader();
4568 					$("#captchaCode").val("");
4569 				},
4570 				error: function(model, response){
4571 					//bug fix WEBCELLTHREENEW-1364, mask fields, start
4572 					if(response && response.responseText) {
4573 						var responseJson = JSON.parse(response.responseText);
4574 						if(responseJson && responseJson.data) {
4575 							if(responseJson.data.resetMemberNumber)
4576 								$("#resetMemberNumber").val(responseJson.data.resetMemberNumber)
4577 							if(responseJson.data.driversLicense)
4578 	 	                		$("#driversLicense").val(responseJson.data.driversLicense)
4579 	 	                	if(responseJson.data.cardNumber)
4580 	 	                		$("#cardNumber").val(responseJson.data.cardNumber);	
4581 						}
4582 					}
4583 					//bug fix WEBCELLTHREENEW-1364, mask fields, end
4584 					
4585 					// Code Added By Bob Weld (dtc4324) for ReCaptcha Project PR013988 IRAC-4433
4586					if(($("#captchaDiv").length >0) &&($("#captchaDiv").css('display').toLowerCase()=='block')){
4587						grecaptcha.enterprise.reset();
4588					}else{
4589						grecaptcha.enterprise.render('captchaDiv', {
4590					          'sitekey' : '6LdjI9YrAAAAAJQ8n-D109MM5ppx1Z5ZOBdHbFcH'
4591						 });
4592						 $('#captchaDiv').css("display","block");
4593					}
4594					// End of Code Added By Bob Weld (dtc4324) for ReCaptcha Project PR013988 IRAC-4433
4595 					
4596 					clearError = true;
4597 					if (clearError)
4598 						self.model.clear();
4599 					model.set({errorLocation: '#forgotPasswordContainer .error-list'},{silent:true});
4600 					self.model.trigger('error', model, response);
4601 					// $(".captchaRefresh").eq(0).trigger('click');
4602 					// $("#captchaCode").val("");
4603 					Loader.hideLoader();
4604				}
4605 			});
4606
4607 		},
4608 		getLockedPage: function(){
4609 			$.ajax({
4610				url: htz.config.rootContext+"/member/locked/overlay",
4611				cache: false,
4612				beforeSend: function(){},
4613				success: function(data, status, req){
4614					if (isRes || isOCI || isResReview)
4615						$(".lb-content-box-no-padding").html("").html(data);
4616					else 
4617						$(".sectionWidthSmall").html("").html(data);
4618						
4619					new lockedView({el: "#lockedSection"});
4620				},
4621				error: function(){}
4622			});
4623 		},
4624 		memberAuthentication: function(e){
4625 			var target = $(e.target);
4626 			$(target)
4627 			.closest(".memberAuthenticationRadioRow")
4628 			.find(".memberAuthenticationRadioInput:eq(0)")
4629 			.prop("checked", true);
4630 		},
4631 		getImage: function(){
4632 			attempts = this.options.attempts++;
4633 			limit = this.options.limit;
4634			if(attempts < limit)
4635				$('#memberAuthenticationCaptchaImage').attr("src", $('#memberAuthenticationWebContextRoot').html() + "/emember/displayCaptcha.do?img=" + new Date().getTime() + ".jpg");
4636			else 
4637				this.getLockedPage();
4638			
4639 		},
4640 		learnMoreoverlay: function(e){
4641            if(!this.forgotPasswordTooltip.isInUse()){
4642                this.forgotPasswordTooltip.overlay({title : this.$('#captcha-tooltip-title').html()}, this.$('#imagedec-content').html());
4643            }
4644        },
4645 		bookAsGuestFromFp: function(e){
4646 			 var target = $(e.target);
4647 			 target.closest(".lb-close").triggerHandler('click');
4648 			 HomePage.bookAsGuestSubmitRes();
4649		},
4650 		highlight : function(model, errors){
4651			ErrorHelper.reset();
4652			var mappings = [
4653				{"fields":"resetMemberNumber", "target":"errorresetMemberNumber"},
4654				{"fields":"driversLicense", "target":"errorDriversLicense"},
4655				{"fields":"driversLicenseCountryState", "target":"errorDriversLicenseCountryState"},
4656				{"fields":"cardNumber", "target":"errorCardNumber"},
4657				{"fields":"cardType", "target":"errorCardType"},
4658				{"fields":"captchaCode", "target":"errorCaptchaCode"},
4659				{"fields":"personalAddress1", "target":"errorPersonalAddress1"},
4660				{"fields":"personalZipCode", "target":"errorPersonalZipCode"}
4661			];
4662			ErrorHelper.displayErrors(errors, {'mappings': mappings, 'allErrTarget': '#forgotPasswordContainer .error-list'});
4663		}
4664 	});
4665
4666 	/* Forgot password view */
4667 	
4668 	//dtc4102//for PR13988 (Secure Link Password Reset Process Phase 1)
4669 	//password reset request/password reset confirmation view
4670 	var confMsgView = Backbone.View.extend({
4671 		events: {
4672 			"click #close>img":"closeMsg"
4673		},
4674		initialize: function(data){
4675			this.model=data;
4676			this.render();
4677		},
4678		render: function(){		
4679					
4680			var msgTemplate=_.template($("#confirmation-msg-div").html());
4681					
4682			$(".loginSectionInnner").before(msgTemplate(this.model.attributes));
4683					
4684			if(this.model.get('confirmationMsgCode')=='resetError'){
4685				$("#loginSection").find("#reset-error-list").css("display","block");
4686			}
4687		},
4688		
4689		closeMsg:function(e){
4690			e.stopPropagation();
4691			e.target.closest("#confirmationDiv").remove();
4692		}
4693 	});
4694 	
4695 	/*Start - Login view*/
4696 	var loginModel = RestModel.extend({
4697 		defaults: {
4698			"loggedIn" : false,		
4699			"firstName" : "",
4700			"lastName" : "",
4701			"prefix" : "",
4702			"suffix" : "",
4703			"cookieLaw" : htz.config.isCountryinEuropeUnion,
4704			"memberNumberDisplay" : ""
4705		},
4706		url: htz.config.rootContext+"/member/authentication"
4707	});
4708 	loginView = Backbone.View.extend({
4709 		defaults: {
4710 			isRes: false,
4711 			isOCI: false,
4712 			isResReview: false,
4713			isInLightBox: false, 
4714 			clearError: false
4715 			
4716 			
4717 		},
4718		events: { 
4719 			"click #loginBtn": "loginSubmit",
4720			"click #forgotPasswordLink": "forgotPassword", 
4721			"click #forgotMemberNumberLink": "forgotMembernumber",
4722			"click #bookAsGuest": "bookAsGuest",
4723			"click #inPageUserIDTooltipLink": "infoOverlay",
4724		    "mouseover #loginBtn" : "lockBlack", /*  P U - This works on iOS, Android and Desktop */
4725			"mouseout #loginBtn" : "lockWhite",
4726			"touchstart #loginBtn" : "lockWhite",
4727			"touchend #loginBtn" : "lockWhite",
4728			"mouseup #loginBtn" : "lockWhite",
4729			"mousedown #loginBtn" : "lockBlack",
4730			"click #loginCreate": "loginCreate",
4731			"keydown #loginBox ": "onEnterLogin",
4732			//Added for Brute Force
4733			"click .captchaLearnMoreLink": "learnMoreoverlay",
4734			"click .captchaRefresh": "getImage"
4735		},
4736		initialize: function(data){
4737			_.bindAll(this, 'render', 'loginSubmit', 'createBlocker', 'href', 'forgotPassword', 
4738				'forgotMembernumber', 'bookAsGuest', 'isCookied', 'infoOverlay', 'loginCreate', 'onEnterLogin','learnMoreoverlay','getImage');
4739			isRes = this.options.isRes;
4740			isOCI = this.options.isOCI;
4741			isInLightBox = this.options.isInLightBox;
4742			isResReview = this.options.isResReview;
4743			var isUserCookied = false;
4744			var isCaptchaOn = false;//Added for Brute Force 0n 25 may
4745            this.loginTooltip = new LightBox();
4746			clearError = false;
4747			this.options.attempts = 0;
4748			this.options.limit = 7;
4749			this.memberLoginTooltip = new LightBox();
4750			handleMemberRes = this.handleMemberRes = data.handleMemberRes;
4751			//this.render();
4752			this.isCookied();
4753			if(htz.config.deviceGroup === 'phone') {
4754				$(".lb-foreground-cont, .lb-content-box").css('background', 'none');
4755				$("header.lb-header").hide();
4756			}
4757			this.model.on('fieldError', this.highlight, this);			
4758			
4759			var loc = window.location.toString();
4760			var curTemplate = loc.split("=")[1];
4761			
4762			if(curTemplate == "reset_locked" || curTemplate == "reset_platinum_clublink_locked")
4763				new lockedView({el: "#lockedSection"});
4764			else if(curTemplate == "reset_question" || curTemplate == "reset_platinum_clublink_question")
4765				new forgotPasswordView({el: "#forgotPasswordContainer", model: new FPModel(), limit: 10, attempts: 0});
4766			else {
4767				if(curTemplate === "input" || curTemplate === "login") {
4768					if(Utils.isUseStoragePolyfill())
4769						this.showErrorsFromSession(false, false, true);
4770					else 
4771						if( htz.helpers.SessionHelper.getItem("errorData") )
4772							this.showErrorsFromSession(false, false, true);
4773				}
4774			}
4775			
4776			const params = new Proxy(new URLSearchParams(window.location.search), {
4777				get: (searchParams, prop) => searchParams.get(prop),
4778			});
4779			if (params.auth0 !== null) {
4780				this.loginSubmit();
4781			}
4782		},
4783		onEnterLogin: function(e){
4784			target = e.keyCode;
4785		    if(target == 13){
4786		    	e.preventDefault();
4787		        $("#loginBtn").trigger('click');
4788		    }
4789		},
4790		lockWhite: function(){
4791			$("#loginBtn span").addClass("icons-white_lock").removeClass("icons-lock");
4792		},
4793		lockBlack: function(){
4794			$("#loginBtn span").removeClass("icons-white_lock").addClass("icons-lock");
4795		},
4796		isCookied: function(){
4797			var self = this;
4798			const urlParams = new URLSearchParams(window.location.search);
4799			const memberIdParam = urlParams.get('memberId');
4800			$.ajax({
4801				url: htz.config.rootContext+"/member/top/navigation" + (memberIdParam !== null && memberIdParam !== "" ? ("?memberId=" + memberIdParam) : ""),
4802				dataType: "json",
4803				cache: false, 
4804				contentType: "application/json",  
4805				beforeSend: function(req){},
4806				success: function(data, req, status){  
4807					self.model.set({
4808						'prefix': data.data.prefix,
4809						'firstName': data.data.firstName,
4810						'lastName': data.data.lastName,
4811						'suffix' : data.data.suffix,
4812						'loggedIn': data.data.loggedIn,
4813						'memberNumberDisplay': data.data.memberNumberDisplay,
4814						'displayConfirmationMsg':data.data.displayConfirmationMsg,
4815						'confirmationMsgCode':data.data.confirmationMsgCode,
4816						'email':data.data.email,
4817						'errorMessage':data.data.errMsg
4818					});
4819					if(data.data.lastName != "" && typeof data.data.lastName != "undefined")
4820						isUserCookied = true;
4821					else
4822						isUserCookied = false;
4823					
4824					self.render();
4825				},
4826				error: function(req, status){}
4827			});
4828			
4829		},
4830		render: function(){
4831			if($("#homePageloginTemplate").length){									
4832				this.template = _.template($("#homePageloginTemplate").html());	
4833				$(this.el).html(this.template(this.model.attributes));
4834				
4835				//dtc4102//PR13988 
4836				if(this.model.get('displayConfirmationMsg')==true){
4837					var confMessage=new confMsgView(this.model);
4838					
4839					$("#close>img").on("click", function(e){ 
4840				    	e.stopPropagation();
4841						e.target.closest("#confirmationDiv").remove();
4842					});
4843				}
4844			}
4845			if(isUserCookied && ( htz.config.deviceGroup == 'tablet' || htz.config.deviceGroup == 'desktop' || htz.config.deviceGroup == 'all')){
4846				$('.loginBoxColumn1').css("float", "none");
4847			}
4848			if($.trim(this.model.get('memberNumberDisplay')).length > 0) {
4849				$('#loginId').val(this.model.get('memberNumberDisplay'));
4850			}
4851            if(isRes){        	
4852            	$("#bookAsGuest").show();
4853            } else 
4854            	$("#bookAsGuest").hide();
4855            if(document.cookie){
4856            	$('.rememberMe').removeClass('mobileHide');
4857            }
4858            
4859            const params = new Proxy(new URLSearchParams(window.location.search), {
4860				get: (searchParams, prop) => searchParams.get(prop),
4861			});
4862			
4863			if (params.logout !== null) {
4864				$('#pwChange').css("display", "block");
4865			}
4866			else {
4867				$('#pwChange').css("display", "none");
4868			}
4869		},
4870		
4871		//Added for Brute Force
4872		
4873		getImage: function(){
4874 			attempts = this.options.attempts++;
4875 			limit = this.options.limit;
4876			if(attempts < limit)
4877				$('#memberAuthenticationCaptchaImage').attr("src", htz.config.protocol+"://"+htz.config.startURL+htz.config.rootContext + "/emember/displayCaptcha.do?img=" + new Date().getTime() + ".jpg");
4878			else 
4879				this.getLockedPage();
4880			
4881 		},
4882 		learnMoreoverlay: function(e){
4883            if(!this.memberLoginTooltip.isInUse()){
4884                this.memberLoginTooltip.overlay({title : this.$('#captcha-tooltip-title').html()}, this.$('#imagedec-content').html());
4885            }
4886        },
4887        
4888        //dtc4102
4889        //PRO13515 CLEAR
4890        //this function will check if the URL contains "/rentacar/link/clear" and return true or false 
4891        //which will then be passed to login web service so that the user can come back to "/clear" once logged in
4892        isLINK:function(){
4893        	return (window.location.href.indexOf("/rentacar/link/clear/about")>-1)        	
4894        },
4895
4896		loginSubmit: function(){
4897			var captchaString = null;
4898			var captchaDisplayed;
4899			if(($("#showCaptcha").length >0) && ($("#showCaptcha").css('display').toLowerCase()=='block')){
4900				captchaDisplayed = "true";
4901				captchaString = grecaptcha.enterprise.getResponse();
4902			}
4903			else {
4904				captchaDisplayed = "false";
4905			}
4906			
4907			var self = this;
4908			Utils.clearReservationSession();
4909			Loader.showLoader();
4910			if (clearError)
4911				this.model.clear();
4912			
4913			if(this.model.attributes.lastName){
4914				this.model.clear();
4915				this.model.set({cookieMemberOnLogin: true, loginId: 'cookie', password: $('#password').val(), loginForgotPassword: $("#loginForgotPassword").val(), isCaptchaDisplayed: captchaDisplayed});
4916			}
4917			else {
4918				this.model.clear();
4919				if($('#cookieMemberOnLoginInPage').is(':hidden')){
4920					this.model.set({loginCreateUserID: $("#loginCreateUserID").val(), enteredcaptcha: captchaString, loginId: $("#loginId").val(), password: $("#password").val(), cookieMemberOnLogin: false, loginForgotPassword: $("#loginForgotPassword").val(),isLINK:this.isLINK(), isCaptchaDisplayed: captchaDisplayed});
4921				}else{
4922					this.model.set({loginCreateUserID: $("#loginCreateUserID").val(), enteredcaptcha: captchaString, loginId: $("#loginId").val(), password: $("#password").val(), cookieMemberOnLogin: $('#cookieMemberOnLoginInPage').is(':checked'), loginForgotPassword: $("#loginForgotPassword").val(),isLINK:this.isLINK(), isCaptchaDisplayed: captchaDisplayed});
4923				}
4924			}
4925				
4926			
4927 			this.model.save(this.model.attributes, {
4928				success: function(collection, response){
4929					var resultStatus = response.resultInfo.result;
4930					clearError = false;		
4931					
4932					//dtc4102//PRC91530//Google Data Layer
4933					//Account Login
4934					window.dataLayer = window.dataLayer || [];
4935					window.dataLayer.push({
4936						'event':'login'
4937					});
4938
4939					
4940					//handle password reset because it is a single page app
4941					if (resultStatus == "reset_locked" || resultStatus == "reset_platinum_clublink_question" || resultStatus == "reset_platinum_clublink_locked" || resultStatus =="session_locked") {
4942							var urlOverlay = htz.config.rootContext+response.resultInfo.url+"/overlay";
4943						$.ajax({
4944							url: urlOverlay,
4945							cache: false,
4946							beforeSend: function(){},
4947							success: function(data, status, req){
4948								if (isRes || isOCI || isResReview || isInLightBox)
4949									$(".lb-content-box-no-padding").html("").html(data);
4950								else 
4951									$("#loginSection").html("").html(data);
4952								if(resultStatus == "reset_question" || resultStatus == "reset_platinum_clublink_question") {
4953									FPm = new FPModel();
4954									new forgotPasswordView({el: "#forgotPasswordContainer", model: FPm, limit: 10, attempts: 0});
4955									Loader.hideLoader();
4956								}
4957								if(resultStatus == "reset_locked" || resultStatus == "reset_platinum_clublink_locked" || resultStatus =="session_locked") {
4958									new lockedView({el: "#lockedSection"});
4959									Loader.hideLoader();
4960								}
4961							},
4962							error: function(){}
4963						});
4964						Loader.hideLoader();
4965					} else if(resultStatus == "reset_question"){																						//dtc4102//for PR13988 (Secure Link Password Reset Process Phase 1)
4966						window.location.href = htz.config.protocol+"://"+htz.config.startURL+htz.config.rootContext+response.resultInfo.url;	//redirect to password-reset-request-form or to login page with confirmation message
4967					} else if (resultStatus == "request_success"){
4968						window.location.href = htz.config.protocol+"://"+htz.config.startURL+htz.config.rootContext+"/member/reset-confirmation";
4969					} else if ("phone"== htz.config.deviceGroup) {
4970					
4971						
4972						//handle phone redirects
4973						if (resultStatus == "success_econsent_required" || resultStatus == "success_to_profile" || resultStatus == "success_to_erenewal" 
4974							|| resultStatus == "login_sms_failed" || resultStatus == "success" || resultStatus == "success_to_upgrade") {
4975							if (isRes) {
4976								HomePage.bookAsMemberSubmitRes(response.data.firstName);
4977							} else if(isOCI) {
4978								window.location.reload();
4979							} else if(isResReview) {
4980								var callback = (self.handleMemberRes || handleMemberRes);
4981								if(callback && typeof callback === 'function'){
4982									callback();
4983								} else {
4984									
4985                                    window.location.href = htz.config.rootContext+response.resultInfo.url;
4986
4987								}
4988							} else { 
4989								if(response.resultInfo.url.indexOf("/rentacar/")>-1){
4990									window.location.href = response.resultInfo.url;
4991								}
4992								else{
4993									window.location.href = htz.config.rootContext+response.resultInfo.url;
4994								}
4995							}
4996						}  else {
4997							window.location.href = htz.config.rootContext+response.resultInfo.url;
4998						}
4999					} else if (resultStatus == "success" && (isRes || isOCI || isResReview)) {
5000						
5001						//dtc4102//USAA
5002						memNavloginModel = new sdlLoginModel();
5003						memNavloginView = new sdlLoginView({ el: "header", model: memNavloginModel });
5004						
5005						if (isRes) {
5006							// handle success for res 
5007							HomePage.bookAsMemberSubmitRes(response.data.firstName);	//dtc4102//AAA verification //passing in logged in member firstname to show in bookAsMember popup
5008						} else if(isResReview) { 
5009							var callback = (self.handleMemberRes || handleMemberRes);
5010							if(callback && typeof callback === 'function'){
5011								callback();
5012							} 
5013							else {
5014								window.location.href = htz.config.rootContext+"/reservation/";
5015							}
5016						}else {
5017							window.location.reload();
5018						} 
5019					}else {
5020						// direct to the page
5021						if (response.resultInfo.url.indexOf(htz.config.rootContext)!= -1) {
5022							window.location.href = response.resultInfo.url;
5023						} else {
5024							window.location.href = htz.config.rootContext+response.resultInfo.url;
5025						}
5026					}
5027				}, 
5028 				error: function(model, response){ 
5029					
5030					var responseJson = JSON.parse(response.responseText);
5031					
5032					
5033					clearError = true;
5034					if (clearError)
5035					self.model.clear();
5036				      
5037					if(isUserCookied)
5038						self.showErrorsFromSession(model, response, false); 
5039					else {
5040						var sessionValue1= $("#ca").val();
5041						sessionStorage.setItem("captchaOn", true);
5042						model.set({errorLocation: '#homePageloginBox .error-list'},{silent:true});
5043					    self.model.trigger('error', model, response);
5044					    
5045					    if(sessionValue1){
5046					    	$(".captchaRefresh").eq(0).trigger('click');//Added on 25 may and is working fine.
5047					    }
5048					}
5049					
5050					// Code Added By Bob Weld (dtc4324) for ReCaptcha Project PR013988 IRAC-4433
5051					if(($("#showCaptcha").length >0) &&($("#showCaptcha").css('display').toLowerCase()=='block')){
5052						grecaptcha.enterprise.reset();
5053					}else{
5054						grecaptcha.enterprise.render('showCaptcha', {
5055					          'sitekey' : '6LdjI9YrAAAAAJQ8n-D109MM5ppx1Z5ZOBdHbFcH'
5056						 });
5057						 $('#showCaptcha').css("display","block");
5058					}
5059					// End of Code Added By Bob Weld (dtc4324) for ReCaptcha Project PR013988 IRAC-4433
5060					
5061					$("#loginId").val("");
5062					$("#password").val("");
5063					$("#captchaSwitchOn").val(true);
5064					Loader.hideLoader();
5065				}
5066 			});
5067 			
5068		},
5069		showErrorsFromSession: function(model, response, isErrorsPersisted){
5070			var self = this;
5071			var showErrors = "";
5072			var errorData = "";
5073			if(!isErrorsPersisted){
5074			    var errors = $.parseJSON(response.responseText).message;
5075			    
5076			    if(Utils.isUseStoragePolyfill()){
5077					Utils.storeItemIE('ieLoginError', errors);
5078				}else {
5079					var strErrors = JSON.stringify(errors);
5080                    htz.helpers.SessionHelper.setItem("errorData", strErrors);
5081				}
5082			    self.initialize(model);
5083			}
5084			
5085			loadLogin = function(){
5086			    if($("#loginId").length > 0){
5087			    	if(Utils.isUseStoragePolyfill()){
5088						 var url = htz.config.rootContext+"/rest/home/retrieve-ie/ieLoginError";
5089						 $.ajax({
5090							url: url,
5091							cache: false,
5092							type: 'POST',
5093							beforeSend: function(req){},
5094							success: function(data, status, req){
5095								errorData = $.parseJSON(req.responseText);
5096								if(errorData != null && errorData != "") {
5097									if(errorData.fieldErrors && typeof errorData.fieldErrors !== "undefined")
5098										 for(i=0; i<errorData.fieldErrors.length; i++)
5099											 showErrors += "<li>"+errorData.fieldErrors[i][1]+"</li>";
5100									 if(errorData.systemErrors && typeof errorData.systemErrors !== "undefined" && errorData != "")
5101										 for(j=0; j<errorData.systemErrors.length; j++) 
5102											 showErrors += "<li>"+errorData.systemErrors[j]+"</li>";
5103									  
5104									 $("<ul></ul>").append(showErrors).appendTo(".error-list");
5105									 $("#homePageloginBox .error-list").show();
5106								}
5107							},
5108							error: function(req, status){}
5109						});
5110						 Utils.removeItemIE('ieLoginError');
5111					 }else {
5112						 var getErrorData = htz.helpers.SessionHelper.getItem("errorData");
5113						 errorData = JSON.parse(getErrorData);
5114						 if(errorData != null && errorData != "") {
5115							 if(errorData.fieldErrors && typeof errorData.fieldErrors !== "undefined")
5116								 for(i=0; i<errorData.fieldErrors.length; i++)
5117									 showErrors += "<li>"+errorData.fieldErrors[i][1]+"</li>";
5118							 
5119							 if(errorData.systemErrors && typeof errorData.systemErrors !== "undefined" && errorData != "")
5120								 for(j=0; j<errorData.systemErrors.length; j++) 
5121									 showErrors += "<li>"+errorData.systemErrors[j]+"</li>";
5122							  
5123							 $("<ul></ul>").append(showErrors).appendTo(".error-list");
5124							 $("#homePageloginBox .error-list").show();
5125                             htz.helpers.SessionHelper.removeItem('errorData');
5126						 }
5127					 }
5128			    	clearInterval(timer);
5129			    } 
5130			}
5131			var timer = setInterval(loadLogin, 100);
5132		},
5133		bookAsGuest: function(e){
5134			var target = $(e.target);
5135			target.closest(".lb-close").triggerHandler('click');
5136			
5137			$('#redeem').prop('checked', false);
5138			
5139			this.options.metaModel.set({isRedeemPoints : false});
5140			HomePage.bookAsGuestSubmitRes();
5141		},
5142		createBlocker: function(link){
5143			link = $(link).trigger("blur");
5144			$('<div></div>')
5145			.addClass("formSubmitterOverlay")
5146			.css({
5147				width: link.outerWidth() + 25,
5148				height: link.outerHeight() + 10,
5149				top: link.offset().top - 5,
5150				left: link.offset().left - 10
5151			})
5152			.appendTo("body");
5153		},
5154		href: function(link, url){
5155			this.createBlocker(link);
5156			location.href = url;
5157		},
5158		loginCreate: function(){
5159			$("#loginCreateUserID").val('true');
5160			this.loginSubmit();
5161		},
5162		forgotPassword: function(e){
5163			Loader.showLoader();
5164			if (clearError) {
5165				clearError = false;
5166				this.model.clear();
5167			}
5168			$("#loginForgotPassword").val("forgotPassword");
5169			this.loginSubmit();
5170		},
5171		forgotMembernumber: function(e){
5172			this.createBlocker($( e.target ));
5173			this.href($( e.target ), htz.config.rootContext + '/emember/reset/memberNumberRetrieval.do');
5174		},
5175		infoOverlay: function(e){
5176            if(!this.loginTooltip.isInUse()){
5177                this.loginTooltip.overlay({ title : this.$('#userIdTitleContent').html() }, this.$('#inPage-useridInfo').html());
5178            }
5179        },
5180		highlight : function(model, errors){
5181			ErrorHelper.reset();
5182			var mappings = [
5183				{"fields":"loginId", "target":"errorLoginId"},
5184				{"fields":"password", "target":"errorPassword"},
5185				{"fields":"captchaCode", "target":"errorCaptchaCode"}
5186			];
5187			ErrorHelper.displayErrors(errors, {'mappings': mappings, 'allErrTarget': '#homePageloginBox .error-list'});
5188		} 
5189	});
5190
5191/* Upgrade Dialogue Box */
5192	var warningView = Backbone.View.extend({
5193		// where code needs to be appended
5194		el: "#loginSection",
5195		events: {
5196			"click button#warningButton" : "hideMe"
5197		},
5198		initialize: function(){
5199			//lazyLoadMemberNav.url = htz.config.rootContext + '/templates/emember/login/memberLoginView.jsp';
5200			//LazyLoad.queueJS(lazyLoadMemberNav, 'high');
5201			
5202			_.bindAll(this, 'render', 'hideMe');
5203			this.render();
5204		},
5205		render: function(){
5206
5207			// Refreshing the Suffix and last name
5208			memNavloginModel = new sdlLoginModel();
5209			memNavloginView = new sdlLoginView({el: "header", model: memNavloginModel});
5210			
5211			// changin Login to Logout in navigation
5212			$("#navLogin").hide();
5213			$("#navLogout").css('display','block');
5214
5215			// the template is in memberLoginView.jsp
5216			var template= _.template($("#warningMessageTemplate").html(), {});
5217			
5218			Loader.hideLoader();
5219			$(this.el).html(template);
5220			
5221		},
5222		hideMe:function() {
5223			Loader.showLoader();
5224			window.location.href = htz.config.rootContext+"/reservation/";
5225		}
5226	});
5227
5228/* Locked View */
5229	var lockedView = Backbone.View.extend({
5230		events: {
5231			"click #forgotPassword": "gotoForgotPassword",
5232			"click .bookAsGuest, #bookAsGuest": "bookAsGuestFromlockPage"
5233				
5234		},
5235		initialize: function(){
5236			
5237			_.bindAll(this, 'render', 'gotoForgotPassword');
5238			this.render();
5239		},
5240		render: function(){
5241			var template = _.template( $("#lockedSectionTemplate").html(), {} );
5242	        $(this.el).html( template );	        
5243	        if(isRes || isOCI || isResReview) {
5244	        	$("#lockedSection").css('width', 'auto');
5245	            $(".containerTableThickBorder, .containerTableBorder").css('border', 'none');
5246	            $("#bookAsGuest").show();	
5247	            if(isOCI || isResReview){
5248		        	$(".bookAsGuest").hide();
5249	            	$("#bookAsGuest").hide();	
5250	            }
5251	        }	
5252	        else
5253	        	$("#bookAsGuest").hide();
5254	              
5255		},
5256		bookAsGuestFromlockPage: function(e){
5257			 var target = $(e.target);
5258			 target.closest(".lb-close").triggerHandler('click');
5259			 HomePage.bookAsGuestSubmitRes();
5260		},
5261		gotoForgotPassword: function(){
5262		
5263			Loader.hideLoader();	
5264			
5265			window.location.href = htz.config.protocol+"://"+htz.config.startURL+htz.config.rootContext+"/member/password-reset-request";
5266					
5267		}
5268	});
5269	
5270/* Locked View */
5271	
5272        
5273
5274
5275window.checkHertzNameSpace("htz.integrated.footer.model");
5276htz.integrated.footer.model.FooterModel=RestModel.extend({initialize:function(){this.constructor.__super__.initialize.apply(this,arguments)},defaults:{taLoggedIn:!1,isDisplayExternalFooter:!1,isIncludeExternalFooter:!1,isIncludeHertzLinkFooter:!1,externalFooterHeight:0,footerContentHTML:"",twitterUserInfo:{followersCount:""},footerContent:{"footer.footerHide":"","footer.copyRightLine":"","footer.mobFooter.footerHide":"","footer.mobFooter.head":[{sublinks:[{footerLinks:"",footerUrl:""}],footerHeader:""}],
5277"footer.mobFooter.footerMore":"","footer.column":[{link:[{link:[{url:"",label:""}],header:""}]}],"footer.footerMore":"","footer.mobSite":""},seoPageFooter:"",seoPageTitle:""},url:htz.config.partnerId?htz.config.rootContext+"/rest/footer/pos/"+htz.config.pos+"/dialect/"+htz.config.dialect+"/id/"+htz.config.partnerId+"?systemId="+htz.config.systemId+"&subSystemId="+htz.config.subSystemId:htz.config.rootContext+"/rest/footer/pos/"+htz.config.pos+"/dialect/"+htz.config.dialect+"?systemId="+htz.config.systemId+
5278"&subSystemId="+htz.config.subSystemId});    
5279//irac 732 dynamic copyright year update hertz web
5280
5281window.checkHertzNameSpace("htz.integrated.footer.views");
5282htz.integrated.footer.views.FooterView=Backbone.View.extend({el:"#footer-container",events:{"click #bttnClick":"clickRevokeBttn","click #title-links .tab":"tabToggleLinks","click #mob-links .tab":"mobToggleLinks","click #social-bar button":"emailSignUpButton","focus #social-email":"emailSignUpFocus","blur #social-email":"emailSignUpBlur","keydown #social-email":"emailSignUpKeyPress","click #social-bar>ul>li":"trackSocial"},filteriFrames:function(){var a=this;0<$("iframe").length&&$("iframe").each(function(){a.updateCopyrightYr($(this))})},
5283updateCopyrightYr:function(){var a=(new Date).getFullYear(),b=/^\u00a9 \d{4}/,c={},c=$("*").filter(function(){return b.test($(this).text())});c.each(function(){var b=$(this).html().replace(/\u00a9 \d{4}/,"\u00a9 "+a);$(this).html(b)})},tabToggleLinks:function(a){if($(a.target)!==$(".tab")){$(a.target).closest(".tab").toggleClass("highlight");$(a.target).closest(".tab").siblings("dl").slideToggle("1000");var b=$(a.currentTarget).hasClass("highlight");992>$(window).width()&&($(a.target).hasClass("icons-ft_arrow_down")||
5284b)&&$(a.target).parent().closest("div").siblings("ul").css({display:"contents"});($(a.target).hasClass("icons-ft_arrow_up")||!b)&&$(a.target).parent().closest("div").siblings("ul").css({display:"none"})}else $(a.target).toggleClass("highlight"),$(a.target).siblings("dl").slideToggle("1000");return!1},mobToggleLinks:function(a){$(a.target)!=$(".tab")?($(a.target).closest(".tab").toggleClass("highlight"),$(a.target).closest(".tab").siblings("dl").slideToggle("1000")):($(a.target).toggleClass("highlight"),
5285$(a.target).siblings("dl").slideToggle("1000"));return!1},trackSocial:function(a){a=$(a.currentTarget).find("img").attr("alt");window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:"select_social",social_network:a})},emailSignUpButton:function(){var a,b;a=htz.config.dialect;b=$.trim($("#social-email").val());b==HStorage.getItem("signUpVal","s")&&(b="");a="//email.hertz.com/apps/JoinMarketing?lang="+a.substring(0,2)+"&pos="+htz.config.pos+(""!==b?"&email="+b:b);$("#social-bar form").attr("target",
5286"_blank");$("#social-bar form").attr("method","POST");$("#social-bar form").attr("action",a);$("#social-bar form").trigger("submit");window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:"email_signup",notification_signup_location:"footer"});return!1},clickRevokeBttn:function(){$("#bttn-revoke").trigger("click")},emailSignUpFocus:function(){$("#social-email").addClass("highlight");$("#social-email").val("")},emailSignUpBlur:function(){""==$("#social-email").val()&&($("#social-email").removeClass("highlight"),
5287$("#social-email").val(HStorage.getItem("signUpVal","s")))}
5287,emailSignUpKeyPress:function(a){if(13===a.keyCode){var b,a=htz.config.dialect;b=$.trim($("#social-email").val());b==HStorage.getItem("signUpVal","s")&&(b="");a="//email.hertz.com/apps/JoinMarketing?lang="+a.substring(0,2)+"&pos="+htz.config.pos+(""!==b?"&email="+b:b);$("#social-bar form").attr("target","_blank");$("#social-bar form").attr("method","POST");$("#social-bar form").attr("action",a);$("#social-bar form").submit();return!1}},resizeDocument:function(){$(window).on("resize",
5288function(){var a=$("#container").width();992<=a&&($("#title-links dl").show(),$("#title-links .tab").addClass("highlight"),$("#title-links").find("ul").find("ul").css({display:"contents"}));600<=a&&992>a&&($("#title-links dl").hide(),$("#title-links .tab").removeClass("highlight"),$("#title-links").find("ul").find("ul").css({display:"none"}));600>a&&($("#title-links").find("ul").find("ul").css({display:"none"}),$("#title-links .tab").removeClass("highlight"))})},initialize:function(){this.template=
5289this.options.template;this.data=this.options.model;this.render();this.updateCopyrightYr(this)},render:function(){var a=this;"IRAC"===htz.config.subSystemId&&(a.footerContentView=new htz.integrated.footer.views.FooterContentView({el:"#footer-container",template:"#footer-tpl",data:a.data.get("footerContentHTML")}),HStorage.setItem("signUpVal",$("#social-email").val(),"","s"),$("#bottom-links li:last-child").addClass("no-pipe"),$("#title-links span.coln:last-child").append($('<div id="feedback-footer-container" class="parsys"><ul></ul></div>')),
5290a.intervalId=setInterval(function(){var b=$("#feedback-tab");0<b.length&&(clearInterval(a.intervalId),$("#feedback-footer-container ul").append(b.html()))},1E3),a.resizeDocument());if("RYANAIR"===htz.config.subSystemId){var b=this.data.get("footerContent");a.footerDesktopView=new htz.integrated.footer.views.FooterDesktopView({el:"#title-links",template:"#desk-tpl",data:b["footer.column"],more:b["footer.footerMore"],hide:b["footer.footerHide"]});a.footerMobileView=new htz.integrated.footer.views.FooterMobileView({el:"#mob-links",
5291template:"#mob-tpl",data:b["footer.mobFooter.head"],more:b["footer.mobFooter.footerMore"],hide:b["footer.mobFooter.footerHide"]});a.footerCopyrightView=new htz.integrated.footer.views.FooterCopyrightView({el:"#copyright-content",template:"#copyright-tpl",copyright:b["footer.copyRightLine"]});a.footerSeoView=new htz.integrated.footer.views.FooterSeoView({el:"#mixed-content",template:"#mixed-tpl",data:a.data.attributes.data})}return this}});
5292htz.integrated.footer.views.FooterContentView=Backbone.View.extend({initialize:function(){this.render()},iconMouseEnter:function(){this.src=this.src.replace("origin","hover")},iconMouseLeave:function(){this.src=this.src.replace("hover","origin")},render:function(){try{this.$el.append(_.template($(this.options.template).html(),{footerContent:this.options.data}))}catch(a){}var b=$("#social-bar li img");"reservationOnHomepage.jsp"!==htz.config.legacyPage&&$("#footer-container #seo-content").empty().hide();
5293b.length&&(b.on("mouseenter",this.iconMouseEnter),b.on("mouseleave",this.iconMouseLeave));if(""!=htz.config.securitiId&&("IRAC"==htz.config.systemId&&!htz.config.isApp&&null!=htz.config.securitiId&&"null"!=htz.config.securitiId)&&0<$("#copyright-content").length){var b=$("#copyright-content").find(".address span:first").find("> a:last").attr("data-dcs-inspected"),c=$("#copyright-content").find(".address span:first").find("> a:last").attr("href");"undefined"==b&&-1<c.indexOf("undefined")&&($("#copyright-content").find(".address span:first").find("> a:last").attr("id",
5294"bttnClick"),$("#copyright-content").find(".address span:first").find("> a:last").removeAttr("href data-dcs-inspected"))}return this}});
5295htz.integrated.footer.views.FooterDesktopView=Backbone.View.extend({initialize:function(){this.render()},render:function(){this.$el.append(_.template($(this.options.template).html(),{deskList:this.options.data,more:this.options.more,hide:this.options.hide}));var a=$("#title-links a"),b=this;a.each(function(c){-1!=$(a).eq(c).attr("href").search("lightBox")||-1!=$(a).eq(c).attr("href").search("openPopup")?(b.$el.find(a).eq(c).attr("name",$(a).eq(c).attr("href")),b.$el.find(a).eq(c).attr("href","javascript: void(0);")):
5296(-1!=$(a).eq(c).attr("href").search("legalView.jsp")||-1!=$(a).eq(c).attr("href").search("privacyPolicyView.jsp"))&&b.$el.find(a).eq(c).attr("target","_blank")});return this}});htz.integrated.footer.views.FooterMobileView=Backbone.View.extend({initialize:function(){this.render()},render:function(){this.$el.append(_.template($(this.options.template).html(),{mobList:this.options.data,more:this.options.more,hide:this.options.hide}));return this}});
5297htz.integrated.footer.views.FooterCopyrightView=Backbone.View.extend({initialize:function(){this.render()},render:function(){this.$el.append(_.template($(this.options.template).html(),{copyright:this.options.copyright}));return this}});htz.integrated.footer.views.FooterSeoView=Backbone.View.extend({initialize:function(){this.render()},render:function(){this.$el.append(_.template($(this.options.template).html(),{data:this.options.data}));return this}});
5298htz.integrated.footer.views.footerUtilityView=Backbone.View.extend({el:"#footer-container",initialize:function(){this.template=this.options.template},openLightBox:function(a,b){lbFooter=new LightBox;lbFooter.overlay({width:600,url:a,title:b,center:!0})},openPopUp:function(a,b){wo=window.open(a,b,"toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=480,height=440,left="+(window.screen.width/2-240));wo.focus()}});Footer=new htz.integrated.footer.views.footerUtilityView;            
5299window.checkHertzNameSpace("htz.integrated.footer.controller");
5300htz.integrated.footer.controller.FooterController=function(){return{showFooterPage:function(){var b=$.Deferred(),c=new htz.integrated.footer.model.FooterModel;c.fetch({cache:!1,dataType:"json",success:function(a){b.resolve(a)},error:function(){new htz.integrated.footer.views.FooterView({model:c})}});$.when(b).done(function(a){new htz.integrated.footer.views.FooterView({model:a});!1==htz.config.digitalWalletFooter.displayMasterpassLogo&&$('img[title="masterpass"]').css({display:"none"})})}}}(); 
5301
5302
5303var Slider=function(){function h(){if($(window).width()>k){l.find(".pagination-prev, .pagination-next").hide();for(var a=0;a<b.length;a++)b[a].pageCont.show()}else if(!(0>g||g>b.length-1))for(a=0;a<b.length;a++)a==g?(b[a].pageCont.show(),b[a].pageCont.find(".pagination-prev, .pagination-next").show(),window.scrollTo(0,0)):b[a].pageCont.hide()}function e(a){if(!b||1>=b.length||0>a||a>b.length-1)return!1;g=a;return!0}var g=0,b=null,k=480,l=null,n=k;return{goTo:function(a){e(a)&&h()},previous:function(){var a=
5304b[g],c=a.handler;c&&"function"==typeof c?c(a.pageCont,"P")&&e(g-1)&&h():e(g-1)&&h()},next:function(){var a=b[g],c=a.handler;c&&"function"==typeof c?c(a.pageCont,"N")&&e(g+1)&&h():e(g+1)&&h()},first:function(){e(0)&&h()},last:function(){e(b.length-1)&&h()},currentSlide:function(){return b&&0<b.length&&$(window).width()<=k?b[g]:null},checkWidth:function(){var a=$(window).width();if(n>=k&&a<=k||n<=k&&a>=k)n=a,h()},startWithConfig:function(a,c){if(a&&!(1>=a.length||Modernizr&&!Modernizr.mq("only screen and (min-width: 0px)"))){c&&
5305(c.context&&(l="string"==typeof c.context?$(c.context).eq(0):c.context),c.maxWidth&&(n=k=c.maxWidth));l||(l=$("body").eq(0));for(var i=[],e=0;e<a.length;e++){var f=a[e],d=l.find("#"+f.id);0<d.length&&(f.cont=d.eq(0),i.push(f))}if(i&&!(1>=i.length)){g=0;b=[];for(var e=i.length,j,m,f=0;f<e;f++){j=i[f];0==f?(d=null,m=i[f+1]):f==e-1?(d=i[f-1],m=null):(d=i[f-1],m=i[f+1]);d&&(j.prevLabel=d.title?d.title:htz.content.previous);m&&(j.nextLabel=m.title?m.title:htz.content.next);if(d=j)d.prevLabel&&$("<div />").addClass("pagination-prev").html("<div><div class='icons-ft_arrow_left'></div></div><div>"+
5306d.prevLabel+"</div>").prependTo(d.cont).hide(),d.nextLabel&&$("<div />").addClass("pagination-next").html("<div>"+d.nextLabel+"</div><div><div class='icons-ft_arrow_right'></div></div>").appendTo(d.cont).hide();b[b.length]=j.handler?{pageCont:j.cont,handler:j.handler}:{pageCont:j.cont};j.isActive&&(g=f)}0<b.length&&($(window).on("resize.slider",Slider.checkWidth),l.find(".pagination-prev").on("click",function(){Slider.previous()}),l.find(".pagination-next").on("click",function(){Slider.next()}),h())}}}}}(); 
5307window.checkHertzNameSpace("htz.utils.helpers");htz.utils.helpers.NetworkHelper=function(){return{isOnline:function(){return!0}}}();   
5308window.checkHertzNameSpace("htz.utils.web.helpers");htz.utils.web.helpers.Navigator=function(b){var a;return{navigate:function(c){var d=b(c);0<d.length&&(a&&b(a).hide(),d.show(),a=c)},getCurrentPage:function(){return a}}}($);     
5309window.checkHertzNameSpace("htz.utils.web.helpers");htz.utils.web.helpers.Rotar=function(b){return{rotateTo:function(a){a&&(b.href=a)}}}(window.location);  
5310window.checkHertzNameSpace("htz.utils.web");htz.utils.web.DOMHelper=function(a){return{createPageElm:function(b,c,d){return a.createElm(c+"-"+b+"-page-container","div",!0,d)}}}(htz.utils.Utils);
5311(function(a){a.configure({spinner:htz.utils.Spinner,lightBox:htz.utils.LightBox,networkHelper:htz.utils.helpers.NetworkHelper,navigator:htz.utils.web.helpers.Navigator,rotar:htz.utils.web.helpers.Rotar,domHelper:htz.utils.web.DOMHelper,notifier:window,slider:Slider})})(htz.utils.config.UtilConfig); 
5312window.checkHertzNameSpace('htz.helpers');
5313
5314htz.helpers.SiftIracLogin = (function() {
5315	var memIdResp = "";
5316	
5317	return {
5318		hideLoader : function () {
5319	        $('#loading_bg').length ? $('#loading_bg').hide() : null;
5320	        $('#loading_fg').length ? $('#loading_fg').hide() : null;
5321	        $('#loading-fg').length ? $('#loading-fg').hide() : null;
5322	    },
5323	    showLoader : function () {
5324	        $('#loading_bg').length ? $('#loading_bg').show() : null;
5325	        $('#loading_fg').length ? $('#loading_fg').show() : null;
5326	        $('#loading-fg').length ? $('#loading-fg').show() : null;
5327	    },
5328	    verifyOtp : async function(code){
5329	        var verifyType = "resend";
5330	        var params = {
5331	            "type": "verification",
5332				"mem_id": memIdResp,
5333	            "data": {
5334	                "event": "$login"
5335	            }
5336	        };
5337	
5338	        if(code){
5339	            params.data.code = code;
5340	            verifyType = "check";
5341	        }
5342	        else {
5343				params.data.code = 'resend'
5344			}
5345	
5346	        var verify;
5347	        try {
5348	            verify = await fetch('/rentacar/rest/auth0/2fa', {
5349	                "body": JSON.stringify(params),
5350	                "method": "POST"
5351	            });
5352	            verify = await verify.json();
5353	            console.log("Sift verify response: ", verify);
5354	
5355	            if(verify){
5356	                this.otpForm(false,verify,verifyType);
5357	            }
5358	        } catch (error) {
5359	            console.log("Sift verify error: ", error);
5360	        }
5361	    },
5362	    otpForm : function(init,resp,type){
5363	        //init OTP form
5364	        var self = this;
5365	        
5366	        if(init && !$('#memValModal').length){
5367	            window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- shown","login_message": memIdResp}) : null;
5368	
5369	            this.hideLoader();
5370	            $('body').prepend('<style>#memValModal{display: -webkit-flex; display: flex;
5370 -webkit-justify-content: center; justify-content: center; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,.7); z-index: 1000; overflow-y: auto; -webkit-overflow-scrolling: touch; -webkit-align-items: center; align-items: center;}.memModalPresent{overflow: hidden;}#val-mem-input-container{display: flex; flex-direction: column; margin-bottom: 45px;}/* Spinner */ #val-mem-spinner{display: block; justify-content: center; align-items: center; background: #fff; margin-bottom: 45px;}.val-mem-loading-cont{width: 100%; display: flex; flex-direction: column; align-items: center}.val-mem-loader{border: 3px solid #E8E8E8; border-top: 3px solid #FFCC00; border-right: 3px solid #FFCC00; border-left: 3px solid #FFCC00; border-radius: 50%; width: 89px; height: 89px; animation: loadingScreenSpin 2s linear infinite}@keyframes loadingScreenSpin{0%{transform: rotate(0deg)}100%{transform: rotate(360deg)}}</style>');
5371	            $('body').prepend(_.template($('#sift-2fa-tpl').html()));
5372	            $('body').addClass('memModalPresent');
5373	
5374	            //setup listeners
5375	            if (document.querySelector('#val-mem-button a:not(.listening)')) {
5376	                document.querySelector('#val-mem-button a:not(.listening)').classList.add('listening');
5377	
5378	                document.querySelector('#val-mem-close').addEventListener('click', function () {
5379	                    window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- member closed modal","login_message": memIdResp}) : null;
5380	                    $('#memValModal').remove();
5381	                    $('body').removeClass('memModalPresent');
5382	                });
5383	
5384	                document.querySelector('#val-mem-button a').addEventListener('click', function () {
5385	                    var inputVal = document.getElementById('val-mem-input').value;
5386	                    if (inputVal.match(/^[0-9]{6}$/g)) {
5387	                        //console.log('matched 6 digits');
5388	                        $('div.val-mem-error').hide();
5389	                        $('#val-mem-input-container').hide();
5390	                        $('#val-mem-spinner').show();
5391	                        self.verifyOtp(inputVal);
5392	                    }
5393	                    else {
5394	                        $('div.val-mem-error').show();
5395	                        document.getElementById('val-mem-input').value = "";
5396	                    }
5397	                });
5398	
5399	                document.querySelector('#val-mem-resend a').addEventListener('click', function () {
5400	                    //resend otp
5401	                    $('div.val-mem-error').hide();
5402	                    $('#val-mem-input-container').hide();
5403	                    $('#val-mem-spinner').show();
5404	                    self.verifyOtp();
5405	                });
5406	            }
5407	        }else{
5408	            //handles callbacks from verifyOtp()
5409	            $('#val-mem-spinner').hide();
5410	            $('#val-mem-input-container').show();
5411	
5412	            if(type && resp && typeof resp.status !== 'undefined'){
5413	
5414	                if(type == "check"){
5415	
5416	                    if(resp.status == 0){
5417	                        //Code is valid
5418	                        window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- valid code","login_message": memIdResp}) : null;
5419	                        $('#memValModal').remove();
5420	                        $('body').removeClass('memModalPresent');
5421							if (resp.domainRedirect !== undefined && resp.domainRedirect !== null && resp.domainRedirect !== "") {
5422								location.href = resp.domainRedirect;
5423							}
5424							else {
5425								location.reload();
5426								
5427								if(window.authSend && window.authSend.this && window.authSend.args){
5428									this.showLoader();
5429									origSend.apply(window.authSend.this, window.authSend.args);
5430								}
5431							}
5432	                    }else if(resp.status == 50 && resp.error_message){
5433	                        //Invalid Code
5434	                        window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- invalid code","login_message": memIdResp}) : null;
5435	                        $('div.val-mem-error p').text("Your code was mis-typed, expired, or already used. Click resend to receive a new code.");
5436	                        $('div.val-mem-error').show();
5437	                    }else if(resp.status == 60 && resp.error_message){
5438	                        //Rate limited; too many events have been received in a short period of time. Contact us if you have questions.
5439	                        window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- rate limited on check code","login_message": memIdResp}) : null;
5440	                        $('div.val-mem-error p').text(resp.error_message);
5441	                        $('div.val-mem-error').show();
5442	                    }else{
5443	                        var msg = resp.status && resp.error_message ? "Member: " +memIdResp+ " Status: " +resp.status+ "    Message: "+ resp.error_message : "";
5444	                        window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- unmapped status on check code","login_message": msg}) : null;
5445	
5446	                        //Allow the member to proceed
5447	                        $('#memValModal').remove();
5448	                        $('body').removeClass('memModalPresent');
5449	
5450	                        if(window.authSend && window.authSend.this && window.authSend.args){
5451	                            this.showLoader();
5452	                            origSend.apply(window.authSend.this, window.authSend.args);
5453	                        }
5454	                    }
5455	                }else{
5456	                    //resend code resp
5457	
5458	                    if(resp.status == 0){
5459	                        //successful resend
5460	                        window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- successful resend code","login_message": memIdResp}) : null;
5461	                    }else if(resp.status == 60 && resp.error_message){
5462	                        //Too many requests made for sending the code
5463	                        window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- rate limited on resend code","login_message": memIdResp}) : null;
5464	                        $('div.val-mem-error p').text(resp.error_message);
5465	                        $('div.val-mem-error').show();
5466	                    }else{
5467	                        var msg = resp.status && resp.error_message ? "Member: " +memIdResp+ " Status: " +resp.status+ "    Message: "+ resp.error_message : "";
5468	                        window.dataLayer ? window.dataLayer.push({"event": "mem_login","login_status": "2fa -- unmapped status on resend code","login_message": msg}) : null;
5469	                    }
5470	                }
5471	            }
5472	        }
5473	    }
5474	};
5475})();
5476(typeof define=='function' && define.amd && define('utils/SiftIracLogin',[],function(){return htz.helpers.SiftIracLogin;}));
5477          
5478	
5479	
5480	  
5481   
5482	  
5483	  
5484	                
5485		
5486	 
5487	
5488	                                                  
5489	                          
5490	           
5491	     
5492	      
5493	
5494	
5495	
5496	 
5497	 
5498	
5499	 
5500	
5501	
5502	
5503	
5504	
5505	
5506	
5507	
5508	
5509     
5510
5511       
5512
5513	
5514	
5515
5516	  
5517	
5518	           
5519	      
5520	  
5521	
5522	 
5523	
5524	
5525	
5526	
5527	
5528	
5529	
5530	     
5531	
5532	
5533
5534	
5535
5536	
5537	
5538	                                                                
5539	                                                        
5540	                                                        
5541	                 
5542	  
5543	
5544	
5545	                  
5546	
5547	      
5548	     
5549	
5550	
5551	
5552    
5553	
5554	
5555	
5556    
5557	
5558
5559	
5560	
5561	   
5562
5563
5564/* EOF */

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.