!function(){"use strict";angular.module("air-sales",["air","daterangepicker"]),angular.module("air",["ui.bootstrap","ui.select","ui.router","ngAnimate","ui.bootstrap.datepicker","daterangepicker"]),angular.module("air-sales").run(["$rootScope","$injector","$log",function(a,b,c){var d;try{d=b.get("$analytics")}catch(e){return void c.warn("$analytics not available")}a.$on("airSearchQuery",function(a,b){var e="/flights/search/"+b.segments.map(function(a){return _.str.slugify(a.from.code||a.from)+"/"+_.str.slugify(a.to.code||a.to)}).join("/");e+="/dtd:"+moment(b.segments[0].date).diff(moment(),"days"),c.debug("$analytics.pageTrack",e),d.pageTrack(e)}),a.$on("airOfferDetails",function(a,b){var e=_.str.slugify(b.trip.segments[0].flights[0].marketer.code),f=b.trip.segments.map(function(a){return _.str.slugify(a.departure.location.code)+"/"+_.str.slugify(a.arrival.location.code)}).join("/"),g="/flights/offer/"+e+"/"+f;g+="/dtd:"+moment(b.trip.segments[0].departure.date).diff(moment(),"days"),c.debug("$analytics.pageTrack",g),d.pageTrack(g)}),a.$on("airBookCartSaved",function(a,b){var c="/checkout/",e=b.items[0]["@type"].toLowerCase();switch(e){case"air":c+="air";break;case"stayitem":c+="stay";break;case"omra":c+="omra";break;case"haj":c+="hajj";break;case"vo":c+="voyages-organisés";break;default:c+=e}d.pageTrack(c)})}]),angular.module("air").config(["datepickerConfig","datepickerPopupConfig",function(a,b){a.showWeeks=!1,a.dayFormat="d",a.startingDay=1,a.minDate=new Date,a.maxDate=moment().add(18,"months").toDate(),a.maxMode="month",b.toggleWeeksText=null,b.showButtonBar=!1}]),angular.module("air").config(["$stateProvider","$urlRouterProvider","settings",function(a,b,c){a.state("default",{url:"/?flight&travellers&cabin&flags&airlines&corpid",controller:"air_SearchCtrl",templateUrl:"hermes-air-search",resolve:{query:["airQueryCodec","$stateParams",function(a,b){return a.fromStateParams(b)}]}}).state("quote",{url:"/view/:item?seller",reloadOnSearch:!0,controller:"air_QuoteCtrl",templateUrl:"hermes-air-quote"}),b.otherwise("/")}]),angular.module("air").controller("air_QuoteCtrl",["$scope","$http","$stateParams","HermesResolver","$timeout","settings","$modal","$log","$window","$rootScope",function(a,b,c,d,e,f,g,h,i,j){function k(a){return a.filter(function(a){return t.indexOf(a)>-1}).length>0}function l(b){a.quotes=b,Array.isArray(b)&&(b.length>1&&(x=b,a.multipleFaresdata=!0),b=b[0]);var c=d.extractReferrables(b);d.wireObjects(b,c,w),e(function(){var c={};angular.forEach(b.items,function(b){if("air"===b["@type"])for(var d,e,f,g=0;g<b.product.products.length;g++)f=b.product.products[g],d=f.flight,e=c[d.$$hashKey],void 0===e&&(c[d.$$hashKey]=e=[]),e.push({paxType:a.paxLabels[b.product.paxType],rate:f.code,rateClass:f.class,cabin:u[f.cabin],qty:b.quantity,conditions:b.product.airProductPolicies,baggageCount:f.baggageIncluded.quantity,baggageUnit:"N"===f.baggageIncluded.unit?"baggage/pers.":"Kg/pers."})}),a.productsPerFlight=c,h.debug("productsPerFlight",c);var d={};angular.forEach(b.trip.segments,function(a){d[a.$$hashKey]=[];for(var b,c,e,f,g,h,i=a.flights.length,j=1;j<i;)b=a.flights[j-1].arrival.date,c=a.flights[j].departure.date,e=moment(c).diff(b,"minutes"),f=Math.floor(e/60),g=e%60,h="",f>0&&(h=f+"h "),h+=g+"m",d[a.$$hashKey].push(h),j++}),a.stopovers=d,h.debug("stopovers",d)}),a.quote=b,a.$emit("airOfferDetails",b),j.$on("attFees",function(b,c){console.log("totalFees",c.Fees.item.price.$t);var d=a.quote.items.filter(function(a){return"fee"===a["@type"]});if(d.length>0){var e=a.quote.items.indexOf(d[0]);a.quote.totals.TOTAL=r(a.quote.totals.TOTAL,d[0].totals.TOTAL,c.Fees.item.price.$t),d[0].totals.TOTAL=String(parseInt(c.Fees.item.price.$t).toFixed(2)).concat(" MAD"),a.quote.items[e]=d[0]}});var f=[];b.trip.segments.forEach(function(a,b,c){var d=a.departure.location.code,e=a.arrival.location.code;f.includes(d)||f.push(d),f.includes(e)||f.push(e)}),k(f)||(a.helpers.hasLocalStep=!1),a.status="done"}function m(b,c,d){h.error("Failed to get quote",arguments),a.status="error",a.serverError=b}function n(b){g.open({templateUrl:"conditions-dialog",controller:"air_ConditionsCtrl",size:"lg",resolve:{conditions:function(){return b.airProductPolicies}}}).result.then(function(b){a.helpers.conditionsRead=b})}function o(){g.open({templateUrl:"air-reprice-dialog",controller:"air_RepriceCtrl",resolve:{quote:function(){return a.quote}}})}function p(){var c=angular.copy(a.quote),d=c.totals.TOTAL.split(" ")[0];delete c.totals.total,c.canSave=!0,c.totals.total=a.grandTotal||parseFloat(d),a.status="cartSave",b.post("/carts",c).then(function(b){angular.isArray(b.data)&&(b.data=b.data[0]),a.$emit("airBookCartSaved",b.data),i.location.href="/ngapps/checkout#/"+b.data._id},function(){h.error("cart saving failed",arguments),a.status="error"})}function q(){g.open({templateUrl:"hermes-air-quote-att",controller:"attFeesctrl",resolve:{quote:function(){return a.quote}}})}function r(a,b,c){var d,e=a.split(" ")[0],f=b.split(" ")[0],g=c.split("MAD")[0];return d=parseInt(e)+parseInt(g)-parseInt(f),String(d.toFixed(2)).concat(" MAD")}function s(){console.log("families",x),g.open({templateUrl:"farefamiliestemplate",controller:"farefamiliesctrl",size:"lg",resolve:{families:function(){return x}}})}h.debug("air_QuoteCtrl:");var t=["AGA","AHU","CMN","CAS","ERH","EUN","FEZ","NDR","RAK","OZZ","OUD","RBA","SFI","SII","TTA","TTU","TNG","VIL","ESU"];a.paxLabels={adult:"Adulte",child:"Enfant",infant:"Bébé"};var u={C:"Business",F:"First Class",M:"Eco. Standard",W:"Eco. Premium",Y:"Economique"},v={"Rule Application":"Application du règlement","Min Stay":"Séjour minimum","Max Stay":"séjour amximum","Sales Restrict":"Restrictions des ventes","Advance Res/tkt":"Etat des réservations","Flt Application":"Application des vols","Child Discounts":"Réduction enfants",Stopovers:"Escales","Transfers/rtgs":"Transferts",Surcharges:"surcharges","Tkt Endorsement":"Confirmation des dossiers",Penalties:"Pénailités",Combinability:"Combinaison","Miscellaneous Data":"Données diverses","Voluntary Changes":"Changements volontaires"},w=[{field:"flights",path:".trip.segments[0:]"},{field:"flight",path:".items[0:].product.products"},{field:"travellers",path:".items[0:]"},{field:"travellers",path:".trip"}],x=[];angular.extend(a,{openConditions:n,reprice:o,toCheckout:p,status:"loading",i18n:v,cabins:u,helpers:{hasLocalStep:!0},getFeesbyclient:q,selectQuotefromfamilies:s}),j.$on("choose family",function(a,b){l(b)});var y="/air-quotes/";console.log(" state params item : ",c.item),console.log(" state params seller: ",c.seller),c.seller?b.get(y+c.item+"?seller="+c.seller).success(l).error(m):b.get(y+c.item).success(l).error(m)}]),angular.module("air").controller("air_ConditionsCtrl",["$scope","$modalInstance","conditions","$log",function(a,b,c,d){function e(){b.close(a.read>c.length)}function f(b){a.currentFare=b,a.read++;var c=a.currentPolicy;-1===b.rules.indexOf(c)&&g(b.rules[0])}function g(b){a.currentPolicy=b}var h={"Rule Application":"Application du règlement","Min Stay":"Séjour minimum","Max Stay":"Séjour maximum","Sales Restrict":"Restrictions de vente","Advance Res/tkt":"État des réservations","Flt Application":"Application des vols","Child Discounts":"Réductions enfants",Stopovers:"Escales","Transfers/rtgs":"Transferts","Tkt Endorsement":"Confirmation des dossiers",Penalties:"Pénalités",Combinability:"Combinaison","Miscellaneous Data":"Données diverses","Voluntary Changes":"Changements volontaires"};angular.extend(a,{i18n:h,conditions:c,closeConditions:e,showFare:f,showPolicy:g,read:1}),f(c[0])}]),angular.module("air").controller("air_RepriceCtrl",["$scope","settings","$modalInstance","quote","$http","$location",function(a,b,c,d,e,f){function g(c){return c.length<1?[]:(a.loadingAirlines=!0,e.get(b.air.airlinesSearch.replace(":term",c)).then(function(a){return a.data||[]}).finally(function(){a.loadingAirlines=!1}))}function h(){c.dismiss()}function i(a){a.code?f.search("seller",a.code):2===a.length&&f.search("seller",a),h()}a.quote=d,angular.extend(a,{reprice:i,searchAirlines:g,loadingAirlines:!1,close:h})}]),angular.module("air").controller("attFeesctrl",["$scope","$modalInstance","$log","$http","quote","$rootScope",function(a,b,c,d,e,f){function g(b){a.status="found",a.customers=angular.isArray(b)?b:[b]}function h(b,c){a.status=404===c?"notfound":"error"}function i(a){console.log("ok",a),b.close(a);var c={IdCanal:"40",BackOfficeId:a.code,Currency:"MAD",item:k(e)};console.log("object",c),d({url:"/GetFees",method:"GET",params:{attfees:c}}).then(function(a){console.log("responsefromattfees",a.data),f.$broadcast("attFees",a.data)},function(a){console.log("error")})}function j(){b.dismiss("cancel")}function k(a){var b={},c={};return b.type="air",c["@"]=b,c.codecompagnie=a.trip.segments[0].flights[0].marketer.code,c.profile=l(a),c.itineraire=m(a),c}function l(a){for(var b=[],c=o(a.trip.travellers),d=0;d<c.length;d++){var e=n(c[d].paxtype,c[d].number);b.push(e)}return a.trip.segments[0].flights[0].marketer.code,b}function m(a){for(var b=[],c=0;c<a.trip.segments.length;c++){var d={},e={};d.Libelle=a.trip.segments[c].departure.location.code+" "+a.trip.segments[c].arrival.location.code,e["@"]=d;for(var f=[],g=0;g<a.trip.segments[c].flights.length;g++){var h={};h.AeroportDepart=a.trip.segments[c].flights[g].departure.location.code,h.AeroportArrivee=a.trip.segments[c].flights[g].arrival.location.code,h.ClasseTransport=a.trip.segments[c].seats[g][0].class,f.push(h)}e.coupon=f,b.push(e)}return b}function n(a,b){var c={},d={},e={};return d.class=a,c["@"]=d,e.nbrpax=b,c.nbrpax=b,c}function o(a){for(var b=[],c=["adult","child","infant"],d=0;d<c.length;d++){var e=a.filter(function(a){return a.classification.pax===c[d]});if(e.length>0){var f={};f.paxtype=c[d],f.number=e.length,b.push(f)}}return b}angular.extend(a,{query:{},selectCustomer:i,dismiss:j}),console.log("get att fees"),a.search=function(){console.log("query",a.query);var b=a.query.code;a.status="search",a.customers=null,b?d.get("/hermes-customers/"+b).success(g).error(h):d({url:"/hermes-customers",method:"GET",params:a.query}).success(g).error(h)}}]),angular.module("air").controller("farefamiliesctrl",["$scope","$modalInstance","$log","$http","families","$rootScope",function(a,b,c,d,e,f){function g(a,b){for(var c=[],d=0;d<b.length;d++)for(var e=b[d].Segments,f=0;f<e.length;f++)if(a.number===e[f].number){var g=h(c);if(!1===g.includes(e[f].familyname)){var i={};i.name=e[f].familyname,c.push(i)}}return c}function h(a){var b=[];if(a.length>0)for(var c=0;c<a.length;c++)b.push(a[c].name);return b}function i(a){for(var b=[],c=0;c<a[0].trip.segments.length;c++){var d={};d.number=c+1,d.departure=a[0].trip.segments[c].departure.location.code,d.arrival=a[0].trip.segments[c].arrival.location.code,b.push(d)}return b}function j(a){for(var b=[],c=0;c<a.length;c++){for(var d={},e=[],f=0;f<a[c].trip.segments.length;f++){var g={};g.number=f+1,g.familyname=a[c].familiesfare[f],e.push(g),d.Segments=e}b.push(d)}return b}function k(b){v=[];for(var c=0;c<y.length;c++)if(y[c].Segments[0].familyname===b){var d={};d.name=y[c].Segments[1].familyname,v.push(d)}console.log("PossibleFamilies",v),a.Families=v}function l(a,b){var c=a.filter(function(a){return JSON.stringify(m(a))===JSON.stringify(b)});return console.log("finalFamilies",c[0]),c[0]}function m(a){for(var b=[],c=0;c<a.Segments.length;c++)b.push(a.Segments[c].familyname);return console.log("allfamilies",b),b}function n(c){if(a.currentSegment++,w.push(c.name),a.selectedFamilies=w,console.log("selectedFamilies",w),x.length>1&&k(c.name),x.length===a.currentSegment&&(a.familieswithTotals=p(e,a.selectedFamilies),console.log("familieswithTotals",a.familieswithTotals)),a.selectedFamilies.length===x.length){var d=l(y,a.selectedFamilies),g=y.indexOf(d);console.log("family",e[g]),f.$broadcast("choose family",e[g]),b.close()}}function o(){console.log("removing family"),a.currentSegment--,a.Families=g(x[0],y),w=[],a.selectedFamilies=[]}function p(a,b){var c=[];if(1===x.length)for(var d=0;d<a.length;d++){for(var e={},f=[],g=0;g<a[d].familiesfare.length;g++)f.push(a[d].familiesfare[g]);e.names=f,e.total=a[d].totals.TOTAL,c.push(e)}else for(var d=0;d<a.length;d++)if(a[d].familiesfare[0]===b[0]){for(var e={},f=[],g=0;g<a[d].familiesfare.length;g++)f.push(a[d].familiesfare[g]);e.names=f,e.total=a[d].totals.TOTAL,c.push(e)}return c}function q(b){for(var c=[],d=0;d<a.selectedFamilies.length;d++)c.push(a.selectedFamilies[d]);return c.push(b),familieswithTotals.filter(function(a){return a.names===c})[0].total}function r(){b.close()}var s=[{marketer:"TP",families:[{name:"DISCOUNT",Characteristics:["Baggage à main uniquement","Modifications non autorisées","Non remboursable"]},{name:"BASIC",Characteristics:["1 bagage en soute","Modifications autorisées (service payant)","Non remboursable"]},{name:"CLASSIC",Characteristics:["1 bagage en soute","Modifications autorisées (service payant)","Réservation de sièges standards gratuite","Non remboursable"]},{name:"PLUS",Characteristics:["1 bagage en soute","Modifications gratuite","Remboursable","Réservation de sièges gratuites"]},{name:"EXECUTIVE",Characteristics:["2 bagage en soute","Modifications autorisées (service payant)","Remboursable(service payant)","Réservation de sièges gratuite"]},{name:"TOPEXE",Characteristics:["2 bagage en soute","Modifications gratuites","Remboursable","Réservation de sièges gratuite"]}]},{marketer:"AF",families:[{name:"LIGHTONE",Characteristics:["Baggage à main uniquement","Billet non modifiable","Billet non remboursable"]},{name:"LIGHT",Characteristics:["Baggage à main uniquement","Billet non modifiable","Billet non remboursable"]},{name:"STANDARD",Characteristics:["1 bagage en soute","Billet modifiable avec frais","Billet non remboursable"]},{name:"FLEX",Characteristics:["1 bagage en soute","Billet modifiable sans frais","Billet remboursable","Siège à l'avant de la cabine"]}]},{marketer:"LH",families:[{name:"LIGHT",Characteristics:["Baggage à main uniquement","Billet non modifiable","Billet non remboursable"]},{name:"CLASSIC",Characteristics:["1 bagage en soute","Billet modifiable avec frais","Billet non remboursable"]},{name:"FLEX",Characteristics:["1 bagage en soute","Billet modifiable sans frais","Billet remboursable avec frais"]},{name:"SAVER",Characteristics:["2 bagage en soute","Réservation de sièges"]},{name:"BUSINESS",Characteristics:["2 bagage en soute","Réservation de sièges","Billet modifiable","Billet remboursable"]}]}],t=e[0].trip.segments[0].flights[0].marketer.code,u=s.filter(function(a){return a.marketer===t});a.familiesTexts=u[0],a.currentSegment=1,console.log("texts",a.familiesTexts),console.log("families",e);var v=[],w=[],x=i(e);console.log("mainSegment",x);var y=j(e);console.log("familyObject",y),v=g(x[0],y),console.log("Families",v),a.familieswithTotals=[],1===x.length&&(a.familieswithTotals=p(e,a.selectedFamilies),console.log("familieswithTotals",a.familieswithTotals)),console.log("familiesbysegment",v),angular.extend(a,{families:e,chooseFamily:n,segments:x,Families:v,airline:t,removeFamily:o,getTotal:q,closemodal:r})}]),angular.module("air").controller("air_SearchFormCtrl",["$scope","settings","$window","$http","$log","airQueryCodec","$sce","$document",function(a,b,c,d,e,f,g,h){function i(){a.roomInput="Adultes "+a.query.adults+" ,Enfant "+a.query.children,a.roomDiv=!a.roomDiv}function j(a){var b=a;if(b!==s.tripType){var c,d=s.segments,e=0;for(console.log("---- length setSegmentCount ----",s),0===s.segments.length&&d.push({options:{minDate:r.minDeparture,minMonth:moment(r.minDeparture).startOf("month"),initDate:"query.segments[0].options.minMonth"}}),e=d.length;d.length<b;)c=s.segments[d.length-1],d.push({from:c.to,options:{minDate:c.date?c.date:c.minDate,minMonth:c.date?moment(c.date).startOf("month"):c.minMonth,initDate:"query.segments["+e+"].options.minMonth"}}),e++;2===b&&(d[1].from=d[0].to,d[1].to=d[0].from),s.tripType=b}}function k(){var a=s.segments.length;if(!(a>=6)){var b=s.segments[a-1];s.segments.push({from:b.to,options:{minDate:b.date?b.date:b.minDate,minMonth:b.date?moment(b.date).startOf("month"):b.minMonth,initDate:"query.segments["+a+"].options.minMonth"}})}}function l(a){var b=s.segments.indexOf(a);b>-1&&s.segments.splice(b,1)}function m(c){return a.airports=[],c.length<1?[]:d.get(b.air.airportsSearch.replace(":term",c)).then(function(b){return a.airports=b.data||[],a.airports})}function n(c){return a.airlines=[],c.length<1?[]:d.get(b.air.airlinesSearch.replace(":term",c)).then(function(b){return a.airlines=b.data||[],a.airlines})}function o(a,b){var c="cal"+b,d=t[c];for(var e in t)t[e]=!1;t[c]=!d}function p(){s.tripType===f.ROUND_TRIP&&(s.segments[1].from=s.segments[0].to,s.segments[1].to=s.segments[0].from);var a=f.toStateParams(s);b.air&&b.air.standaloneSearchForm?c.location.href=b.air.salesApp+"?"+a:c.location.href=b.links.search+"?"+a}function q(a){var b,c,d=s.segments,e=s.segments.length;if(d[a])for(c=s.segments[a].date,moment(c).startOf("month").toDate(),a++;a<e;)b=d[a],b.options=d.options||{initDate:"$parent.$parent.options.minMonth"},b.options.minDate=c,b.options.minMonth=moment(c).startOf("month").toDate(),b.date&&moment(b.date).isBefore(c)&&(b.date=c),a++}e.info("air_SearchFormCtrl:airQueryCodec",a.query),a.rangeDatePicker={picker:null,options:{pickerClasses:"custom-display",buttonClasses:"btn",applyButtonClasses:"btn-primary",cancelButtonClasses:"btn-danger",minDate:moment(),locale:{applyLabel:"valider",cancelLabel:"annuler",customRangeLabel:"Custom range",separator:" - ",format:"DD/MM/YYYY",weekLabel:"S",daysOfWeek:["Di","Lu","Ma","Me","Je","Ve","Sa"],monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Decembre"],firstDay:1},eventHandlers:{"apply.daterangepicker":function(b,c){a.query.segments[0].date=a.rangeDatePicker.date.startDate,a.query.segments[1].date=a.rangeDatePicker.date.endDate}}}},void 0!==a.query&&2==a.query.tripType&&a.query.segments[0].date&&a.query.segments[1].date?a.rangeDatePicker.date={startDate:a.query.segments[0].date,endDate:a.query.segments[1].date}:a.rangeDatePicker.date={startDate:moment().subtract(1,"days"),endDate:moment()},a.singleDatePicker={picker:null,options:{singleDatePicker:!0,pickerClasses:"custom-display",buttonClasses:"btn",applyButtonClasses:"btn-primary",cancelButtonClasses:"btn-danger",minDate:moment(),locale:{applyLabel:"valider",cancelLabel:"annuler",customRangeLabel:"Custom range",separator:" - ",format:"DD/MM/YYYY",weekLabel:"S",daysOfWeek:["Di","Lu","Ma","Me","Je","Ve","Sa"],monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Decembre"],firstDay:1},eventHandlers:{"apply.daterangepicker":function(b,c){a.query.segments[0].date=a.singleDatePicker.date}}}},void 0!==a.query&&1==a.query.tripType&&a.query.segments[0].date?a.singleDatePicker.date=a.query.segments[0].date:a.singleDatePicker.date=moment();var r={minDeparture:moment().startOf("day").toDate(),maxDeparture:moment().add(1,"years").toDate(),maxAdults:9,maxChildren:9,maxPax:9,adults:[1,2,3,4,5,6,7,8,9],children:[0,1,2,3,4,5,7,8,9],ages:[0,1,2,3,4,5,6,7,8,9,10,11],tripTypes:[{code:1,label:"Direct flight"},{code:2,label:"Round trip"},{code:3,label:"Multi-segments/open-jaw"}]};a.roomDiv=!1,a.roomInput="Adultes - Enfant ...",h.bind("click",function(b){"inputDivRooms"===b.target.id||"guests__inputs divRooms ng-scope"===b.target.className||!0!==a.roomDiv||b.target.classList.contains("divRoomsInputs")||b.target.nextSibling.classList.contains("divRoomsInputs")||(a.roomDiv=!a.roomDiv,a.$apply())});var s,t={};a.query&&!b.air.standaloneSearchForm?(s=angular.copy(a.query),console.log("------- query if existe with setting air -----",s)):(s=f.newQuery(),s.tripType=0,j(2),console.log("------- query if not  existe -----",s)),a.$watch("query.children",function(a,b){if(a!==b){for(;s.ages.length<a;)s.ages.push({});for(;s.ages.length>a;)s.ages.pop()}}),s.tripType||j(2),angular.extend(a,{airports:[],airlines:[],query:s,calendars:t,setTripType:j,addSegment:k,removeSegment:l,toggleCalendar:o,searchAirports:m,searchAirlines:n,search:p,dateChanged:q,maxSegments:6,options:r,trustAsHtml:g.trustAsHtml,roomChange:i})}]),angular.module("air").controller("air_SearchCtrl",["$scope","$stateParams","airQueryCodec","$http","$log","$timeout","resultsHelper","calendarsearchHelper","query","$state","settings","$anchorScroll","$location",function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(a){j.go("quote",{item:encodeURI(a)})}function o(b,c){var d=a.filterQuery.applied;a.filterQuery[b]!==c?(a.filterQuery[b]=c,a.filterQuery.highlight=b,d.push(b)):delete a.filterQuery[b],c||d.splice(d.indexOf(b),1);var e=A(a.itineraries,a.filterQuery);a.helpers.filtered=e.length}function p(a){for(var b in a)m.search(b,parmams[b])}function q(){console.log("in search function ",i),d.get(J+"?"+I).success(function(b,c){return 202===c&&K<40?(K<40&&K++,void f(q,1e3)):202===c?void(a.viewState.status="timeout"):(K=0,void(200===c?r(b):205===c?a.viewState.status="nocontent":(console.log("error",b),a.viewState.status="error",a.error=b)))}).error(function(b){a.viewState.status="error",a.error=b})}function r(c){var d=b.flight.length;if(a.viewState.status="done",a.allQuotes=JSOG.decode(c),i.flags.flexible&&2===i.segments.length){var e=a.query.segments[0].date,f=a.query.segments[1].date;a.LowFare=h.getlowestfare(a.allQuotes),a.arrdates=h.getCalendardates(a.allQuotes,e,f).arrival.day,a.depdates=h.getCalendardates(a.allQuotes,e,f).departure.day,a.calendardeparturdays=h.getCalendardates(a.allQuotes,e,f).departure.textdate,a.calendararrivaldays=h.getCalendardates(a.allQuotes,e,f).arrival.textdate,a.calendartotals=h.getCalendarFaresandAirlines(a.allQuotes,a.depdates,a.arrdates).calendartotals,a.calendarAirlines=h.getCalendarFaresandAirlines(a.allQuotes,a.depdates,a.arrdates).CalendarAirlines}angular.forEach(a.allQuotes,B),a.segmentCount=d,a.chosenItineraries=[],a.helpers={},2===d&&(a.helpers.segmentNames=["Aller","Retour"],a.helpers.theSegmentNames=["d'aller","du retour"]),w(0),i.segments.length<3&&!i.flags.flexible&&(a.Cheapestitineraries=G(a.itineraries,a.filters.airline).sort(function(a,b){return a.total-b.total}))}function s(b){console.log("cchooseItinerary ",b);var c=a.currentSegment;a.chosenItineraries[c]=b,w(c+1)}function t(a){a.items.forEach(function(a){for(var b=0;b<a.product.components.length;b++)a.product.components[b].flight.baggage=a.product.components[b].baggageIncluded})}function u(a){a.cheapestQuote.items.forEach(function(a){for(var b=0;b<a.product.components.length;b++){var c=[];a.product.components[b].baggageIncluded.unit=a.product.components[b].baggageIncluded.quantity<9?"baggage/pers.":"Kg/pers.",2==a.product.components[b].baggageIncluded.indexbag&&(c.push(a.product.components[b].baggageIncluded),a.product.components[b].flight.baggages=c)}})}function v(){a.filterQuery={applied:[]},a.filteredItineraries=A(a.itineraries,a.filterQuery),a.helpers.filtered=a.filteredItineraries.length}function w(b){e.debug("chosenItineraries ",a.chosenItineraries);for(var c=a.allQuotes,d=a.chosenItineraries;d[b];)b++;if(b>=c[0].trip.segments.length){a.finished=!0,a.currentSegment=-1;var f=g.matchTrip(c,d);if(e.debug("matching quote",f),f.length>1)throw new Error("Expected to be only one quote matching a trip");f[0].uri=f[0].uri||f[0].links.self.replace("/air-quotes/",""),a.selectedQuote=f[0];for(var j=a.selectedQuote.items[0].product.components,k=0;k<j.length;k++)null!=j[k].baggageIncluded&&(j[k].baggageIncluded.unit=j[k].baggageIncluded.quantity<9?"baggage/pers.":"Kg/pers.");i.segments.length<3&&!i.flags.flexible&&t(a.selectedQuote)}else{a.selectedQuote=null,a.currentSegment=b;var l=g.buildResultViewData(c,b,d);if(a.itineraries=l.itineraries,i.flags.flexible&&2===i.segments.length&&(a.itineraries=h.getItinerariesLowestsfare(a.itineraries),a.calendardepartureitineraries=h.sortitineraries(l.itineraries,a.depdates)),a.filteredItineraries=l.itineraries.slice(0),a.filters=l.filters,a.finished=!1,a.helpers.filtered=a.filteredItineraries.length,i.segments.length<3&&!i.flags.flexible)for(var k=0;k<a.itineraries.length;k++)u(a.itineraries[k])}}function x(b){a.chosenItineraries[b]=null,w(b)}function y(b){a.chosenItineraries[b]=null,a.chosenItineraries[b+1]=null,w(b)}function z(b){a.searchBymarketer=!1,a.chosenItineraries[b]=null,a.chosenItineraries[b+1]=null,w(0),v()}function A(a,b){return a.filter(function(a){return b.airline&&!C(a.airlines,b.airline)?(a.hide=!0,!1):b.stops&&b.stops.value!==a.stops.length?(a.hide=!0,!1):b.departure&&!C(b.departure.dates,a.departure.date)?(a.hide=!0,!1):b.arrival&&!C(b.arrival.dates,a.arrival.date)?(a.hide=!0,!1):b.duration&&a._tags.duration!==b.duration.value?(a.hide=!0,!1):(a.hide=!1,!0)})}function B(a){a.available=a.items.reduce(function(a,b){return a+b.product.availability},0),a.available=Math.min(9,a.available)}function C(a,b){return a.indexOf(b)>-1}function D(b,c,d){console.log("itinerary",b);var e=a.query.segments[0].date,f=a.query.segments[1].date;if(null!=b){var g=!1,i=[];Array.isArray(b)?i=b:i.push(b);for(var j=a.allQuotes,k=h.getCalendardates(j,e,f),l=[],m=0;m<j.length;m++)if(0==g&&c==k.departure.day.indexOf(new Date(j[m].trip.segments[0].departure.date).getDate())&&d==k.arrival.day.indexOf(new Date(j[m].trip.segments[1].departure.date).getDate())){var n=E(j[m].trip.segments[0],i);l.push(i[n]),l.push(j[m].trip.segments[1]),g=!0}if(0!=g){var o=h.getAirlines(l[1].flights),p=h.getOneairline(o.Airlines,o.codes);l[1].marketer=p,console.log("selectedquotes",l),F(l)}}}function E(a,b){for(var c,d=0;d<b.length;d++)b[d].departure.date==a.departure.date&&b[d].airlines[0].code==a.airlines[0].code&&(c=d);return c}function F(b){console.log("itineraries",b);var c=a.currentSegment;a.chosenItineraries=b,w(c+2)}function G(a,b){for(var c=[],d=0;d<b.length;d++){var e=a.filter(function(a){return a.marketer.code===b[d].code});0===e.length&&(e=a.filter(function(a){return!0===H(b[d].name,a)}));var f=e.sort(function(a,b){return a.cheapestQuote.totals.total-b.cheapestQuote.totals.total});if(f.length>0){var g={};g.airline=b[d],g.total=f[0].cheapestQuote.totals.total,c.push(g)}}return c}function H(a,b){var c=!1;return"multi"===b.marketer.code&&!0===b.marketer.name.includes(a)&&(c=!0),c}var I,J="/air-quotes";a.queryTemp;var K=0;if(a.paxLabels={adult:"Adulte",child:"Enfant",infant:"Bébé"},b&&!a.query&&"[object Array]"===Object.prototype.toString.apply(b.flight)){a.queryTemp||(a.queryTemp={});var L=b.flight[0].split(",");if(a.queryTemp.depart=L[0],a.queryTemp.retour=L[1],a.queryTemp.datedepart=L[2],b.flight[1]){var M=b.flight[1].split(",");a.queryTemp.dateretour=M[2]}}i?(e.info("air_SearchCtrl:",i),a.$emit("airSearchQuery",i),a.context="search",a.query=i,I=c.toApi(i),a.viewState={name:"hermes-air-search-messages",status:"searching"},q()):a.status="blank";a.filterQuery={},angular.extend(a,{chooseItinerary:s,changeItinerary:x,changeflexibleItinerary:y,changeCheapestitinerary:z,doQuote:n,toggleFilter:o,resetFilters:v,loaditineraries:D,filterQuery:{applied:[]},cabinNames:{C:"Business",F:"First",M:"Eco Std.",W:"Eco Prem.",Y:"Economique"},retryWith:p}),a.isArray=angular.isArray,a.getCheapestQuote=function(b){a.searchBymarketer=!0,o("airline",b);for(var c=[],b=0;b<i.segments.length;)c=a.itineraries.filter(function(a){return!0!==a.hide}),s(c[0]),b++}}]),function(){angular.module("angular-loading-bar",["cfp.loadingBarInterceptor"]),angular.module("chieffancypants.loadingBar",["cfp.loadingBarInterceptor"]),angular.module("cfp.loadingBarInterceptor",["cfp.loadingBar"]).config(["$httpProvider",function(a){var b=["$q","$cacheFactory","$timeout","$rootScope","cfpLoadingBar",function(b,c,d,e,f){function g(){d.cancel(i),f.complete(),k=0,j=0}function h(b){var d,e=c.get("$http"),f=a.defaults;!b.cache&&!f.cache||!1===b.cache||"GET"!==b.method&&"JSONP"!==b.method||(d=angular.isObject(b.cache)?b.cache:angular.isObject(f.cache)?f.cache:e);var g=void 0!==d&&void 0!==d.get(b.url);return void 0!==b.cached&&g!==b.cached?b.cached:(b.cached=g,g)}var i,j=0,k=0,l=f.latencyThreshold;return{request:function(a){return a.ignoreLoadingBar||h(a)||(e.$broadcast("cfpLoadingBar:loading",{url:a.url}),0===j&&(i=d(function(){f.start()},l)),j++,f.set(k/j)),a},response:function(a){return a.config.ignoreLoadingBar||h(a.config)||(k++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),k>=j?g():f.set(k/j)),a},responseError:function(a){return a.config.ignoreLoadingBar||h(a.config)||(k++,e.$broadcast("cfpLoadingBar:loaded",{url:a.config.url,result:a}),k>=j?g():f.set(k/j)),b.reject(a)}}}];a.interceptors.push(b)}]),angular.module("cfp.loadingBar",[]).provider("cfpLoadingBar",function(){this.includeSpinner=!0,this.includeBar=!0,this.latencyThreshold=100,this.startSize=.02,this.parentSelector="body",this.spinnerTemplate='<div id="loading-bar-spinner"><div class="spinner-icon"></div></div>',this.loadingBarTemplate='<div id="loading-bar"><div class="bar"><div class="peg"></div></div></div>',this.$get=["$injector","$document","$timeout","$rootScope",function(a,b,c,d){function e(){k||(k=a.get("$animate"));var e=b.find(n).eq(0);c.cancel(m),r||(d.$broadcast("cfpLoadingBar:started"),r=!0,u&&k.enter(o,e),t&&k.enter(q,e),f(v))}function f(a){if(r){var b=100*a+"%";p.css("width",b),s=a,c.cancel(l),l=c(function(){g()},250)}}function g(){if(!(h()>=1)){var a=0,b=h();a=b>=0&&.25>b?(3*Math.random()+3)/100:b>=.25&&.65>b?3*Math.random()/100:b>=.65&&.9>b?2*Math.random()/100:b>=.9&&.99>b?.005:0;f(h()+a)}}function h(){return s}function i(){s=0,r=!1}function j(){k||(k=a.get("$animate")),d.$broadcast("cfpLoadingBar:completed"),f(1),c.cancel(m),m=c(function(){var a=k.leave(o,i);a&&a.then&&a.then(i),k.leave(q)},500)}var k,l,m,n=this.parentSelector,o=angular.element(this.loadingBarTemplate),p=o.find("div").eq(0),q=angular.element(this.spinnerTemplate),r=!1,s=0,t=this.includeSpinner,u=this.includeBar,v=this.startSize;return{start:e,set:f,status:h,inc:g,complete:j,includeSpinner:this.includeSpinner,latencyThreshold:this.latencyThreshold,parentSelector:this.parentSelector,startSize:this.startSize}}]})}(),angular.module("ui.bootstrap.datepicker").controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$timeout","$log","dateFilter","datepickerConfig",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","minMode","maxMode","showWeeks","startingDay","yearRange"],function(c,e){i[c]=angular.isDefined(b[c])?e<8?d(b[c])(a.$parent):a.$parent.$eval(b[c]):h[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=h[d]?new Date(h[d]):null}),angular.isDefined(b.initDate)&&a.$parent.$watch(c("$parent.$parent."+b.initDate),function(a){j.$modelValue||(i.activeDate=a?new Date(a):new Date,i.refreshView())}),a.datepickerMode=a.datepickerMode||h.datepickerMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),this.activeDate=angular.isDefined(b.initDate)?a.$parent.$eval(b.initDate):new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)&&(a.activeDateId=b.uid,!0)},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$modelValue){var a=new Date(j.$modelValue),b=!isNaN(a);b?this.activeDate=a:f.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.'),j.$setValidity("date",b)}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$modelValue?new Date(j.$modelValue):null;j.$setValidity("date-disabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(c,d){var e=j.$modelValue?new Date(j.$modelValue):null;return{date:c,label:g(c,d),selected:e&&0===this.compare(c,e),disabled:this.isDisabled(c),current:0===this.compare(c,new Date),
classes:b.dateClasses&&a.dateClasses({date:c,mode:a.datepickerMode})||""}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$modelValue?new Date(j.$modelValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){e(function(){i.element[0].focus()},0,!1)};a.$on("datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate),k()}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):(a.toggleMode("up"===c?1:-1),k())}}]),angular.module("air").filter("duration",function(){return function(a,b){if(!a)return"";var c,d=moment.isDuration(a)?a:moment.duration(a),e=Math.floor(d.asHours()),f=d.minutes();return"compact"===b?(c=e+"h ",(c+=f<10?"0"+f:f)+"m"):(c=e,c+=e>1?" heures ":"heure",f>0&&(c+=f+" min."),c)}}),angular.module("air").factory("calendarsearchHelper",function(){function a(a){return a.sort(function(a,b){return a.totals.total-b.totals.total}),a[0].totals.total}function b(a,b,d){var f={},g=[],h=[],i=[],j=[],k={},l={},m=[],n=[];g=c(b).daysarray,h=c(d).daysarray,i=c(b).montharray,j=c(d).montharray,k.day=g,k.month=i,l.day=h,l.month=j;for(var o=0;o<l.day.length;o++)m[o]=k.day[o]+" "+e(k.month[o]),n[o]=l.day[o]+" "+e(l.month[o]);return l.textdate=n,k.textdate=m,f.departure=k,f.arrival=l,f}function c(a){var b=parseInt(a.split("-")[2]),c=parseInt(a.split("-")[1]),e=parseInt(a.split("-")[0]),f=d(c,e),g=d(c-1,e),h=[],i=[];h[3]=b,i[3]=c;for(var j=2;j>=0;j--)b<4?(b-1==0?(h[j]=g,1===c?(i[j]=12,c=12):(i[j]=c-1,c-=1)):(h[j]=b-1,i[j]=c),b=h[j]):(h[j]=b-1,b=h[j],i[j]=c);b=parseInt(a.split("-")[2]),c=parseInt(a.split("-")[1]);for(var k=4;k<7;k++)b==f?(h[k]=1,b=1,12===c?(i[k]=1,c=1):(i[k]=c+1,c+=1)):(h[k]=b+1,b+=1,i[k]=c);return{daysarray:h,montharray:i}}function d(a,b){return new Date(b,a,0).getDate()}function e(a){return["Jan","Fév","Mar","Avr","Mai","Jui","Jul","Aou","Sep","Oct","Nov","Déc"][a-1]}function f(a,b,c){a=g(a);for(var d=[],e=[],f=0;f<c.length;f++){var k=a.filter(function(a){return a.arrivaleday===c[f]});if(0!==k.length){k=h(k,b);for(var l=[],n=[],o=0;o<k.length;o++)if(m(k[o]))l.push(0),n.push(null);else{l.push(k[o].totals.total);var p=i(k[o].trip.segments[0].flights);n.push(j(p.Airlines,p.codes))}d[f]=l,e[f]=n}}return{calendartotals:d,CalendarAirlines:e}}function g(a){for(var b=0;b<a.length;b++)a[b].departureday=new Date(a[b].trip.segments[0].departure.date).getDate(),a[b].arrivaleday=new Date(a[b].trip.segments[1].departure.date).getDate();return a}function h(a,b){for(var c=[],d=0;d<a.length;d++){c[b.indexOf(a[d].departureday)]=a[d]}return c}function i(a){for(var b=l(a),c=[],d=0;d<a.length;d++){var e={};e.code=a[d].marketer.code,e.name=a[d].marketer.name,c.push(e)}return{Airlines:c,codes:b}}function j(a,b){var c={},d=[];if(b.length>1){c.code="multi";for(var e=0;e<a.length;e++)d.push(a[e].name);c.name=k(d)}else c.code=a[0].code,c.name=a[0].name;return c}function k(a){var b;return b=1===a.length?b[0]:a.join(",")}function l(a){for(var b=[],c=0;c<a.length;c++)!1===b.includes(a[c].marketer.code)&&b.push(a[c].marketer.code);return b}function m(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function n(a){var b=[];b.push(a[0]);for(var c=0;c<a.length;c++)if(0==o(b,a[c]).found)b.push(a[c]);else{o(b,a[c]).itinerary}return b.splice(0,1),b}function o(a,b){for(var c,d=!1,e=0;e<a.length;e++)if(new Date(a[e].departure.date).getDate()===new Date(b.departure.date).getDate()&&a[e].arrival.date!==b.arrival.date){d=!0,c=a[e];break}return{found:d,itinerary:c}}function p(a,b){var c=[],d=[];if(a.length>7){for(var e=q(a),f=0;f<e.length;f++){c[f]=new Date(e[f][0].departure.date).getDate();for(var g=0;g<e[f].length;g++)e[f][g].departure.indexday=new Date(e[f][g].departure.date).getDate()}if(c.includes(1))for(var h=0;h<c.length;h++)c[h]>0&&c[h]<7&&(c[h]=c[h]+40);c.sort(function(a,b){return a-b});for(var h=0;h<c.length;h++)for(var h=0;h<c.length;h++)c[h]>40&&(c[h]=c[h]-40);for(var g=0;g<e.length;g++){var i=e[g][0].departure.indexday,j=c.indexOf(i);d[j]=e[g]}if(d.length<7){for(var k=[],l=7-d.length,f=0;f<l.length;f++)k[f]=null;for(var h=0;h<d.length;h++)k[h+l]=d[h];d=k}}else{for(var f=0;f<a.length;f++)a[f].departure.indexday=new Date(a[f].departure.date).getDate(),c[f]=new Date(a[f].departure.date).getDate();if(c.includes(1))for(var h=0;h<c.length;h++)c[h]>0&&c[h]<7&&(c[h]=c[h]+40);c.sort(function(a,b){return a-b});for(var h=0;h<c.length;h++)for(var h=0;h<c.length;h++)c[h]>40&&(c[h]=c[h]-40);for(var g=0;g<a.length;g++){var i=a[g].departure.indexday,j=c.indexOf(i);d[j]=a[g]}for(var f=0;f<d.length;f++)void 0===d[f]&&d.splice(f,1);if(d.length<7){for(var k=[],l=7-d.length,f=0;f<l.length;f++)k[f]=null;for(var h=0;h<d.length;h++)k[h+l]=d[h];d=k}}return d}function q(a){for(var b,c=[];a.length>0;){for(var d=0;d<a.length;d++)null==a[d]&&a.splice(d,1);if(void 0==(b=a[0]))return c;var e=[];e.push(b);for(var d=1;d<a.length;d++)new Date(b.departure.date).getDate()==new Date(a[d].departure.date).getDate()&&(e.push(a[d]),a[d]=null);a[0]=null;for(var d=0;d<a.length;d++)null==a[d]&&a.splice(d,1);c.push(e)}return c}return{getlowestfare:a,getCalendardates:b,getCalendarFaresandAirlines:f,getItinerariesLowestsfare:n,sortitineraries:p,getAirlines:i,getOneairline:j}}),angular.module("air").factory("HermesResolver",[function(){var a={};return a.extractReferrables=function(a){for(var b={},c=JSPath.apply('..*{."@id"}',a),d=0;d<c.length;d++)b[c[d]["@id"]]=c[d];return b},a.wireObjects=function(a,b,c){for(var d=0;d<c.length;d++)for(var e=c[d].field,f=JSPath.apply(c[d].path,a),g=0;g<f.length;g++){var h=f[g];if(angular.isNumber(h[e])){var i=h[e];h[e]=b[i]}else if(angular.isArray(h[e]))for(var j=0;j<h[e].length;j++){var i=h[e][j];angular.isNumber(h[e][j])&&(h[e][j]=b[i])}}},a.unwireObjects=function(a,b){for(var c=0;c<b.length;c++)for(var d=b[c].field,e=JSPath.apply(b[c].path,a),f=0;f<e.length;f++){var g=e[f];if(angular.isArray(g[d]))for(var h=0;h<g[d].length;h++){var i=g[d][h]["@id"];g[d][h]=i}else if(angular.isObject(g[d])){var i=g[d]["@id"];g[d]=i}}return a},a.wireField=function(a,b,c){if(angular.isNumber(a[b])){var d=a[b];a[b]=c[d]}else if(angular.isArray(a[b]))for(var e=a[b],f=0;f<e.length;f++)e[f]=c[e[f]]},a}]),angular.module("air").filter("htmlMoney",["numberFilter","$sce",function(a,b){return function(c){if(!c)return"";var d=c.split(" "),e=d[0].split(".");return b.trustAsHtml(a(e[0])+"<sup>."+e[1]+"</sup> "+d[1])}}]),function(){var a,b;return a={},b=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){var c;if(null==this)throw new TypeError('"this" is null or not defined');var d=Object(this),e=d.length>>>0;if(0===e)return-1;var f=+b||0;if(Math.abs(f)===1/0&&(f=0),f>=e)return-1;for(c=Math.max(f>=0?f:e-Math.abs(f),0);c<e;){if(c in d&&d[c]===a)return c;c++}return-1}),a.ID_KEY="$id",a.REF_KEY="$ref",a.cleanUp=function(b,c){for(var d in b)-1===c.indexOf(d)&&delete b[d][a.ID_KEY]},a.encode=function(c){var d,e,f,g,h=1;f={},g=[],e=function(a){return a.__jsogObjectId||(a.__jsogObjectId=""+h++),a.__jsogObjectId},d=function(c){var h,i;return i=function(b){var c,h,i,j;if(c=e(b),f[c])return-1===g.indexOf(c)&&g.push(c),i={},i[a.REF_KEY]=c,i;i=f[c]={},i[a.ID_KEY]=c;for(h in b)j=b[h],"__jsogObjectId"!==h&&(i[h]=d(j));return i},h=function(a){var b;return function(){var c,e,f;for(f=[],c=0,e=a.length;c<e;c++)b=a[c],f.push(d(b));return f}()},null==c?c:b(c)?h(c):"object"==typeof c?i(c):c};var i=d(c);return a.cleanUp(f,g),i},a.decode=function(a){var c,d;return d={},(c=function(a){var e,f;return f=function(a){var b,e,f,g,h;if(f=a.$ref,null!=f&&(f=f.toString()),f)return d[f];g={},b=a.$id,null!=b&&(b=b.toString()),b&&(d[b]=g);for(e in a)h=a[e],"$id"!==e&&(g[e]=c(h));return g},e=function(a){var b;return function(){var d,e,f;for(f=[],d=0,e=a.length;d<e;d++)b=a[d],f.push(c(b));return f}()},null==a?a:b(a)?e(a):"object"==typeof a?f(a):a})(a)},a.stringify=function(b){return JSON.stringify(a.encode(b))},a.parse=function(b){return a.decode(JSON.parse(b))},"undefined"!=typeof module&&null!==module&&module.exports&&(module.exports=a),"undefined"!=typeof window&&null!==window&&(window.JSOG=a),"function"==typeof define&&define.amd&&define("JSOG",[],function(){return a}),a}.call(this),angular.module("air").factory("airQueryCodec",["$http","settings","$log",function(a,b,c){function d(){return{tripType:f,segments:[],adults:1,children:0,ages:[],cabin:"-",corpid:"",flags:e.reduce(function(a,b){return a[b]=!1,a},{})}}var e=["nonstop","direct","nap","npe","nr","rf","flexible"],f=2,g=1;return{ROUND_TRIP:f,ONE_WAY:g,MULTI_SEGMENTS:3,knownFlags:e,newQuery:d,fromStateParams:function(f){if(!f.flight)return null;var g={},h=d();angular.isArray(f.flight)||(f.flight=[f.flight]),h.segments=f.flight.map(function(a){var b=a.split(",");return g[b[0]]||(g[b[0]]={code:b[0],name:b[0]}),g[b[1]]||(g[b[1]]={code:b[1],name:b[0]}),{from:g[b[0]],to:g[b[1]],date:b[2]}}),h.tripType=Math.min(3,h.segments.length),2===h.tripType&&h.segments[0].from!==h.segments[1].to&&(h.tripType=3),f.travellers=f.travellers||"1";var i=f.travellers.split(",");if(h.adults=parseInt(i.shift(),10)||1,console.log("travellers",i),h.ages=i.map(function(a){return{v:parseInt(a,10)}}).filter(function(a){return a.v>=0}),h.children=h.ages.length,f.flags&&f.flags.split(",").filter(function(a){return e.indexOf(a)>-1}).reduce(function(a,b){return a.flags[b]=!0,a},h),h.cabin=f.cabin||"-",h.corpid=f.corpid,f.airlines){var j=f.airlines.split("_");h.preferredAirline={code:j[0],name:j[1]}}return a.get(b.air.airportsResolve.replace(":codes",Object.keys(g).join(","))).then(function(a){return angular.forEach(a.data,function(a){angular.extend(g[a.code],a)}),c.debug("decoded query",h),h},function(){return h})},toApi:function(a){var b=a.cabin||"-",c="",d=a.preferredAirline?a.preferredAirline.code:"YY";angular.forEach(a.segments,function(a){c+="&itinerary="+d+".."+a.from.code+a.to.code+moment(a.date).format("YYYYMMDD")+b});var f=a.ages.map(function(a){return a.v});f.unshift(a.adults),c+="&travellers="+f.join(",");var g=Object.keys(a.flags).filter(function(b){return a.flags[b]&&e.indexOf(b)>-1}).join(",");return["M","C","F"].indexOf(a.cabin)>-1&&(c+="&cabin="+a.cabin),g&&(c+="&flags="+g),a.corpid&&(c+="&corpid="+a.corpid),c},toStateParams:function(a){var b=[];console.log("aaaa",a),a.tripType===f&&(a.segments[1].from=a.segments[0].to,a.segments[1].to=a.segments[0].from,a.segments.length=2),a.tripType===g&&(a.segments.length=1),angular.forEach(a.segments,function(a){b.push("flight="+a.from.code+","+a.to.code+","+moment(a.date).format("YYYY-MM-DD"))});var d=(a.ages||[]).map(function(a){return a.v});d.unshift(a.adults),b.push("travellers="+d.join(",")),a.cabin&&b.push("&cabin="+a.cabin),a.preferredAirline&&b.push("&airlines="+a.preferredAirline.code+"_"+a.preferredAirline.name),a.corpid&&b.push("&corpid="+a.corpid);var h=e.filter(function(b){return a.flags[b]}).join(",");return h&&b.push("flags="+h),c.debug("toStateParams",a,b),b.join("&")}}}]),angular.module("air").factory("resultsHelper",["$filter",function(a){function b(a,b,d){console.log("quotes count",a.length);var f=c(a,d);if(void 0!==b)return e(f,b);throw new Error("Quote view not implemented")}function c(a,b){return 0===b.length?a.slice(0):a.filter(function(a){for(var c=b.length,d=a.trip.segments;c--;)if(null!==b[c]&&-1===d.indexOf(b[c]))return!1;return!0})}function d(a){null!=a&&a.forEach(function(a){a.unit=a.quantity<9?"baggage/pers.":"Kg/pers."})}function e(a,b){var c=0,e=(a.length,[]),o={},p={airline:[],stops:[],departure:[],arrival:[],duration:[]};for(c=0;c<a.length;c++){o=a[c].trip.segments[b];for(var q=o.flights,r=0;r<q.length;r++){d(q[r].baggages)}if(!h(e,o)&&(e.push(o),i(o,p.airline),j(o,p.stops),k(o,p),!o.marketer)){var s=[];o.flights.forEach(function(a){-1===s.indexOf(a.marketer)&&s.push(a.marketer)}),1===s.length?o.marketer=s[0]:o.marketer={code:"multi",name:s.map(function(a){return a.name}).join(", ")}}o.cheapestQuote=g(o.cheapestQuote,a[c]),o.corponame=f(a[c])}return p.airline.sort(function(a,b){return a.name<b.name}),p.departure=l(p.departure),p.arrival=l(p.arrival),p.duration=n(p.duration),p.stops=m(p.stops),{itineraries:e,filters:p}}function f(a){for(var b=a.items.length-1;b>=0;b--){var c=a.items[b];if(c.product.tags){var d=c.product.tags.filter(function(a){if("corporate"==a.code||null==a.code)return a});if(d.length)return d[0].name}}}function g(a,b){return a?b&&a.totals.total>b.totals.total?b:a:b}function h(a,b){return a.indexOf(b)>-1}function i(a,b){a.flights.length;a.airlines=[],angular.forEach(a.flights,function(c){a.airlines.push(c.marketer),h(b,c.marketer)||b.push(c.marketer)})}function j(b,c){var d,e=b.flights,f=0,g=e.length-1;if(!b.stops)for(b.stops=[];f<g;)d=moment.duration(moment(e[f+1].departure.date).diff(e[f].arrival.date)),b.stops.push(a("duration")(d,"compact")),f++;var i=Math.min(3,b.flights.length-1);h(c,i)||c.push(i)}function k(a,b){var c=a.departure.date,d=a.arrival.date,e=moment.duration({hours:a._formattedDuration.h,minutes:a._formattedDuration.m}).asHours();e=Math.ceil(moment.duration(a.duration).asHours()),h(b.departure,c)||b.departure.push(c),h(b.arrival,d)||b.arrival.push(d),h(b.duration,e)||b.duration.push(e),a._tags={duration:e}}function l(a){var b=[];return angular.forEach(a,function(a){for(var c=moment(a).hours(),d=o.dayPeriods,e=d.length;e--;)d[e].dates=d[e].dates||[],d[e].start<=c&&d[e].value>=c&&(h(b,d[e])||b.push(d[e]),h(d[e].dates,a)||d[e].dates.push(a))}),b.sort(function(a,b){return a-b}),b}function m(a){var b=0,c=(a.length,[]);for(a.sort(function(a,b){return a-b});b<a.length;)0===a[b]?c.push({value:0,label:"Vols directs"}):c.push({value:a[b],label:a[b]>1?a[b]+" escales":"Une escale"}),b++;return c}function n(a){var b,c=[],d=1;for(a.sort(function(a,b){return a-b}),c.push({value:a[0],label:"Les plus rapides"});d<a.length;)b=a[d],c.push({value:b,label:"Entre "+(b-1)+" et "+b+" heures"}),d++;return c}var o={dayPeriods:[{start:0,value:4,label:"Nuit (minuit à 5h)"},{start:5,value:11,label:"Matin (5h à 12h)"},{start:12,value:17,label:"Après-midi (12h à 18h)"},{start:18,value:23,label:"Soir (18h à minuit)"}]};return{buildResultViewData:b,matchTrip:c}}])}();