{"version":3,"sources":["global.js","forms.js","main.js","data-service.js","enquiry.js","homepage-app.js","mapoverlay.js","mydetails-app.js","myfavourites-app.js","myredemption-app.js","offer-app.js","redemption.js","search-app.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"main.js","sourcesContent":["// Generic Global Vars\r\n'use strict';\r\n\r\nvar windowW = '',\r\n debounce = '',\r\n detectIE = '',\r\n viewport = '',\r\n indexOf = [].indexOf || function (item) {\r\n for (var i = 0, l = this.length; i < l; i++) {\r\n if (i in this && this[i] === item) return i;\r\n }\r\n return -1;\r\n },\r\n createCookie = '',\r\n readCookie = '',\r\n eraseCookie = '',\r\n replaceCookie = '';\r\n\r\n// Window/Browser/Misc\r\n// Viewport function\r\nviewport = function () {\r\n var a, e;\r\n e = window;\r\n a = 'inner';\r\n if (!(indexOf.call(window, 'innerWidth') >= 0)) {\r\n a = 'client';\r\n e = document.documentElement || document.body;\r\n }\r\n return {\r\n width: e[a + 'Width'],\r\n height: e[a + 'Height']\r\n };\r\n};\r\n\r\n// Assign width of window to variable\r\nwindowW = viewport().width;\r\n\r\nfunction GetCurrentUserLocation(callback) {\r\n if (window.current_location != null) {\r\n callback(window.current_location);\r\n }\r\n\r\n if (navigator.geolocation && window.location.protocol === \"https:\") {\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n window.current_location = position.coords.latitude + ',' + position.coords.longitude;\r\n $.ajaxSetup({\r\n headers: { 'current-location': window.current_location }\r\n }); \r\n callback(window.current_location);\r\n }, function (err) { \r\n callback(null);\r\n }, { maximumAge: 60000, timeout: 5000, enableHighAccuracy: true });\r\n } else {\r\n callback(null);\r\n }\r\n}\r\n\r\nfunction logout() {\r\n $.ajax({\r\n url: \"/api/fvmember/logout\",\r\n type: \"GET\", \r\n success: function (data) {\r\n var loginPath = $(\"body\").data(\"login-path\");\r\n window.location = loginPath + '?returnUrl='+window.location.pathname + window.location.search;\r\n } \r\n });\r\n}\r\n\r\n//http://stackoverflow.com/questions/27928/calculate-distance-between-two-latitude-longitude-points-haversine-formula\r\nfunction getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {\r\n var radius = 6371; // Radius of the earth in km\r\n var dLat = deg2rad(lat2 - lat1); // deg2rad below\r\n var dLon = deg2rad(lon2 - lon1);\r\n var a =\r\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n Math.cos(deg2rad(lat1)) *\r\n Math.cos(deg2rad(lat2)) *\r\n Math.sin(dLon / 2) *\r\n Math.sin(dLon / 2);\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n var d = radius * c; // Distance in km\r\n return d;\r\n}\r\n\r\nfunction deg2rad(deg) {\r\n return deg * (Math.PI / 180);\r\n}\r\n\r\nfunction saveUserLocation(bounds) {\r\n if (bounds != null) {\r\n localStorage.NorthEastLat = bounds.getNorthEast().lat();\r\n localStorage.NorthEastLng = bounds.getNorthEast().lng();\r\n localStorage.SouthWestLat = bounds.getSouthWest().lat();\r\n localStorage.SouthWestLng = bounds.getSouthWest().lng();\r\n } \r\n}\r\n\r\nfunction getUserLocation() {\r\n if (localStorage.NorthEastLat != null && localStorage.NorthEastLng != null && localStorage.SouthWestLat != null && localStorage.SouthWestLng != null) {\r\n var bounds = new google.maps.LatLngBounds();\r\n\r\n bounds.extend(new google.maps.LatLng(localStorage.NorthEastLat, localStorage.NorthEastLng));\r\n bounds.extend(new google.maps.LatLng(localStorage.SouthWestLat, localStorage.SouthWestLng));\r\n\r\n return bounds;\r\n }\r\n return null;\r\n}\r\n\r\nfunction resampleImg(canvas, width, height, resize_canvas) {\r\n var width_source = canvas.width;\r\n var height_source = canvas.height;\r\n width = Math.round(width);\r\n height = Math.round(height);\r\n\r\n var ratio_w = width_source / width;\r\n var ratio_h = height_source / height;\r\n var ratio_w_half = Math.ceil(ratio_w / 2);\r\n var ratio_h_half = Math.ceil(ratio_h / 2);\r\n\r\n var ctx = canvas.getContext(\"2d\");\r\n var img = ctx.getImageData(0, 0, width_source, height_source);\r\n var img2 = ctx.createImageData(width, height);\r\n var data = img.data;\r\n var data2 = img2.data;\r\n\r\n for (var j = 0; j < height; j++) {\r\n for (var i = 0; i < width; i++) {\r\n var x2 = (i + j * width) * 4;\r\n var weight = 0;\r\n var weights = 0;\r\n var weights_alpha = 0;\r\n var gx_r = 0;\r\n var gx_g = 0;\r\n var gx_b = 0;\r\n var gx_a = 0;\r\n var center_y = (j + 0.5) * ratio_h;\r\n var yy_start = Math.floor(j * ratio_h);\r\n var yy_stop = Math.ceil((j + 1) * ratio_h);\r\n for (var yy = yy_start; yy < yy_stop; yy++) {\r\n var dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half;\r\n var center_x = (i + 0.5) * ratio_w;\r\n var w0 = dy * dy; //pre-calc part of w\r\n var xx_start = Math.floor(i * ratio_w);\r\n var xx_stop = Math.ceil((i + 1) * ratio_w);\r\n for (var xx = xx_start; xx < xx_stop; xx++) {\r\n var dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half;\r\n var w = Math.sqrt(w0 + dx * dx);\r\n if (w >= 1) {\r\n //pixel too far\r\n continue;\r\n }\r\n //hermite filter\r\n weight = 2 * w * w * w - 3 * w * w + 1;\r\n var pos_x = 4 * (xx + yy * width_source);\r\n //alpha\r\n gx_a += weight * data[pos_x + 3];\r\n weights_alpha += weight;\r\n //colors\r\n if (data[pos_x + 3] < 255)\r\n weight = weight * data[pos_x + 3] / 250;\r\n gx_r += weight * data[pos_x];\r\n gx_g += weight * data[pos_x + 1];\r\n gx_b += weight * data[pos_x + 2];\r\n weights += weight;\r\n }\r\n }\r\n data2[x2] = gx_r / weights;\r\n data2[x2 + 1] = gx_g / weights;\r\n data2[x2 + 2] = gx_b / weights;\r\n data2[x2 + 3] = gx_a / weights_alpha;\r\n }\r\n }\r\n //clear and resize canvas\r\n if (resize_canvas === true) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n } else {\r\n ctx.clearRect(0, 0, width_source, height_source);\r\n }\r\n\r\n //draw \r\n ctx.putImageData(img2, 0, 0); \r\n}\r\n\r\nfunction loadExternalSvg(placeholderID, url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open(\"GET\", url); \r\n xhr.overrideMimeType(\"image/svg+xml\");\r\n xhr.addEventListener('load', function(e) {\r\n document.getElementById(placeholderID)\r\n .appendChild(xhr.responseXML.documentElement); \r\n });\r\n xhr.send(\"\");\r\n}\r\nif (window.svgToReplace != null) {\r\n window.svgToReplace.forEach(function(r) {\r\n loadExternalSvg(r.containerID, r.url);\r\n });\r\n}","$(document).ready(function () {\r\n // Add class exclude to make sure, that only the current form will be validated\r\n $(\".form-control\").addClass(\"excluded\");\r\n $(\"[type=checkbox]\").addClass(\"excluded\");\r\n\r\n $(\"form\")\r\n .formValidation({\r\n framework: \"bootstrap\",\r\n excluded: [\":disabled\", \".excluded\", \":hidden\", \":not(:visible)\"],\r\n live: \"submitted\",\r\n autoFocus: false\r\n })\r\n .on(\"err.field.fv\", function (e, data) {\r\n data.fv.disableSubmitButtons(false);\r\n })\r\n .on(\"success.field.fv\", function (e, data) {\r\n data.fv.disableSubmitButtons(false);\r\n })\r\n .on(\"status.field.fv\", function (e, data) {\r\n data.fv.disableSubmitButtons(false);\r\n })\r\n .on(\"success.form.fv\", function (e) {\r\n e.preventDefault();\r\n var $form = $(e.target);\r\n // Make sure that select control will be validated properly\r\n $(\"select.form-control:not(.excluded)\").each(function (index) {\r\n var value = $(this).val();\r\n if (value.length > 0) {\r\n $(this).find(\"option\").removeAttr(\"selected\");\r\n $(this).find(\"option[value='\" + value + \"']\").attr(\"selected\", \"selected\");\r\n $(this).val(value);\r\n }\r\n });\r\n var $button = $form.data(\"formValidation\").getSubmitButton();\r\n // Disable button and show loading animation after submit\r\n $button.prop(\"disabled\", true);\r\n $button.find(\".btn-load.fa-spin\").css(\"visibility\", \"visible\");\r\n var $formContainer = $button.closest(\".form-container\");\r\n var action = $button.attr(\"data-action\");\r\n\r\n // Add form tags arrounf current form container to only serialize data within container\r\n var clone = $formContainer.clone().wrap(\"
\").parent();\r\n var formData = clone.serializeObject();\r\n FormSubmit(JSON.stringify(formData), action, $button);\r\n });\r\n\r\n //bindSelect();\r\n\r\n //$(\"[data-date-picker]\").datetimepicker({\r\n // format: \"DD/MM/YYYY\"\r\n //});\r\n\r\n $(\"#AcceptedTermsCheck\").on(\"click\",\r\n function () { \r\n $(\"#AcceptedTerms\").val($(this).is(\":checked\"));\r\n var group = $(this).closest(\".form-group\");\r\n var err = group.find(\".help-block\");\r\n if (!$(this).is(\":checked\")) {\r\n err.show();\r\n group.addClass(\"has-error\");\r\n } else {\r\n err.hide();\r\n group.removeClass(\"has-error\");\r\n }\r\n });\r\n $(\"#ContactByEntGroupCheck\").on(\"click\",\r\n function () {\r\n $(\"#ContactByEntGroup\").val($(this).is(\":checked\"));\r\n });\r\n});\r\n\r\n$(window).load(function () {\r\n if ($(\".form-control.phone\").length > 0) {\r\n $(\".form-control.phone\")\r\n .intlTelInput({\r\n utilsScript:\r\n \"/WWW_Shared/Assets/js/libphonenumber.js\",\r\n autoPlaceholder: false,\r\n defaultCountry: \"au\"\r\n });\r\n }\r\n});\r\n\r\nfunction validateContainer(id) {\r\n var $container = $(id);\r\n $(\".form-control\").addClass(\"excluded\");\r\n $(\"[type=checkbox]\").addClass(\"excluded\");\r\n $container.find(\".excluded\").removeClass(\"excluded\");\r\n\r\n var fv = $(\"form\").data(\"formValidation\");\r\n var isValidStep = false;\r\n if (typeof fv !== \"undefined\" && fv !== null) {\r\n fv.validateContainer($container);\r\n isValidStep = fv.isValidContainer($container);\r\n }\r\n var selectsValid = selectValidation();\r\n if (isValidStep) {\r\n isValidStep = selectsValid;\r\n }\r\n if (isValidStep === false || isValidStep === null) {\r\n $(\".has-error\").find(\".form-control:not(.excluded), .has-error [type=checkbox]:not(.excluded)\")[0].focus();\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction selectValidation() {\r\n var valid = true;\r\n $(\"select[required]\").each(\r\n function () {\r\n var parent = $(this).closest(\".form-group\");\r\n\r\n $(this).on(\"change\",\r\n function() {\r\n if ($(this).val() !== \"\") {\r\n parent.removeClass(\"has-error\");\r\n parent.find(\".help-block\").remove();\r\n }\r\n });\r\n\r\n if ($(this).val() === \"\") {\r\n var err = $(this).data(\"fv-notempty-message\");\r\n parent.addClass(\"has-error\"); \r\n if (parent.has(\".help-block\").size() === 0) {\r\n parent.append(\"\" + err + \"\");\r\n } else {\r\n parent.find(\".help-block\").show();\r\n }\r\n valid = false;\r\n }\r\n });\r\n return valid;\r\n}\r\n\r\nfunction FormSubmit(formData, action, btn) {\r\n console.log(formData);\r\n $.ajax({\r\n url: action,\r\n type: \"POST\",\r\n data: formData,\r\n contentType: \"application/json\",\r\n success: function (data) { OnFormSubmitSuccess(data, btn); },\r\n error: function (xhr, status) { OnFormSubmitError(xhr.responseText, btn); }\r\n });\r\n return false;\r\n}\r\n\r\nfunction OnFormSubmitSuccess(result, btn) {\r\n console.log(\"success\");\r\n console.log(result);\r\n var $button = btn;\r\n var $form = $button.closest(\".form-container\");\r\n var $danger = $form.find(\".alert-danger\");\r\n var $success = $form.find(\".alert-success\");\r\n\r\n $(\".has-error\").removeClass(\"has-error\");\r\n $(\".help-block\").hide();\r\n\r\n if (result.Info != null && result.Info.Errors.length > 0) {\r\n $button.prop(\"disabled\", false);\r\n $button.removeClass(\"disabled\");\r\n $button.find(\".btn-load.fa-spin\").css(\"visibility\", \"hidden\");\r\n\r\n for (var i = 0, len = result.Info.Errors.length; i < len; i++) {\r\n var inp = $(\"[name=\" + result.Info.Errors[i].ItemRef + \"]\");\r\n if (inp != null) {\r\n var parent = inp.closest(\".form-group\");\r\n parent.addClass(\"has-error\");\r\n if (parent.has(\".help-block\").size() === 0) {\r\n parent.append(\"\" + result.Info.Errors[i].Message + \"\");\r\n } else {\r\n parent.find(\".help-block\").show();\r\n }\r\n }\r\n\r\n $(\"[data-message]\", $danger).hide();\r\n var err = $danger.find(\"[data-message='\" + result.Info.Errors[i].ErrorCode + \"']\");\r\n if (err !== null && err !== undefined) {\r\n err.show();\r\n\r\n if (err.is(\"[data-popup]\")) {\r\n \r\n $(\".info-modal .modal-body\").html(err.parent().clone().show());\r\n \r\n $(\".info-modal\").modal();\r\n }\r\n\r\n } else {\r\n $danger.append(\"\" + result.Info.Errors[i].Message + \"
\");\r\n }\r\n $form.find(\".alert-danger\").show();\r\n if ($form.find(\".alert-danger\").children(':visible').length <= 0) {\r\n $form.find(\".alert-danger\").hide();\r\n }\r\n }\r\n $form.find(\".alert-success\").hide();\r\n var onError = $button.data(\"on-error\");\r\n if (onError != null && onError !== \"\") {\r\n Function(\"result\", onError)(result);\r\n }\r\n\r\n } else {\r\n if (result.Info != null && result.Info.Infos.length > 0) {\r\n for (var j = 0, len2 = result.Info.Infos.length; j < len2; j++) {\r\n var inf = $success.find(\"[data-message='\" + result.Info.Infos[j].InfoCode + \"']\");\r\n if (inf !== null && inf !== undefined && inf.length > 0) {\r\n inf.show();\r\n } else {\r\n $success.append(\"\" + result.Info.Infos[j].Message + \"
\");\r\n }\r\n } \r\n }\r\n var onSuccess = $button.data(\"on-success\");\r\n if (onSuccess != null && onSuccess !== \"\") {\r\n Function(onSuccess)();\r\n }\r\n $success.show();\r\n $form.find(\".alert-danger\").hide();\r\n\r\n var ret = $button.attr(\"data-return\");\r\n if (ret === \"collectdetails\") {\r\n if (result.Data.ContactDetailsUpdatedDate === null || (!result.Data.AcceptedTerms && result.Data.AcceptTermsRequired)) {\r\n window.location.href = \"/login/my-details\";\r\n return;\r\n } else {\r\n ret = \"referrer\";\r\n }\r\n }\r\n\r\n if (ret === \"referrer\") {\r\n var returnUrl = $.url().param(\"returnUrl\");\r\n var loginPath = $(\"body\").data(\"login-path\");\r\n if (returnUrl !== null && returnUrl !== undefined && returnUrl !== \"\" && returnUrl !== loginPath) {\r\n window.location.href = returnUrl;\r\n } else {\r\n window.location.href = \"/\";\r\n }\r\n }\r\n else if (ret !== null && ret !== undefined && ret !== \"\") {\r\n window.location.href = ret;\r\n } else {\r\n $button.prop(\"disabled\", false);\r\n $button.find(\".btn-load.fa-spin\").css(\"visibility\", \"hidden\");\r\n $button.removeClass(\"disabled\");\r\n }\r\n }\r\n}\r\n\r\nfunction OnFormSubmitError(result, btn) {\r\n console.log(\"error\");\r\n console.log(result);\r\n var $button = btn;\r\n var $form = $button.closest(\".form-container\");\r\n $button.prop(\"disabled\", false);\r\n $button.find(\".btn-load.fa-spin\").css(\"visibility\", \"hidden\");\r\n if (result && result.length > 0) {\r\n $(id).find(\"[data-error]\").show().text(result);\r\n }\r\n $form.find(\".alert-success\").hide();\r\n $form.find(\".alert-danger\").show();\r\n $form.find([\"data-error\"]).hide();\r\n}\r\n\r\nfunction bindSelect() {\r\n $(\"select[data-default]\").each(function (index) {\r\n var value = $(this).attr(\"data-default\");\r\n if (value && value.length > 0) {\r\n $(this).find(\"option\").removeAttr(\"selected\");\r\n $(this).find(\"option[value='\" + value + \"']\").attr(\"selected\", \"selected\");\r\n $(this).val(value);\r\n }\r\n });\r\n}\r\n\r\n$.fn.serializeObject = function () {\r\n var o = {};\r\n var a = this.serializeArray();\r\n $.each(a, function () {\r\n if (o[this.name] !== undefined) {\r\n if (!o[this.name].push) {\r\n o[this.name] = [o[this.name]];\r\n }\r\n o[this.name].push(this.value || \"\");\r\n } else {\r\n o[this.name] = this.value || \"\";\r\n }\r\n });\r\n return o;\r\n};\r\n\r\n// Submit form on clicking enter in text control\r\n$(\".form-container input[type=text], .form-container input[type=email], .form-container input[type=password], .form-container input[type=number], .form-container textarea\").keypress(function (a) {\r\n if (a.keyCode === 13 || (a.keyCode === 10 && a.ctrlKey)) {\r\n if (!$(this).hasClass(\"no-enter-submit\") || a.ctrlKey) {\r\n (a.preventDefault(), $(this).parents(\".form-container\").find(\"[type=submit]:visible\").click());\r\n }\r\n }\r\n});\r\n\r\nfunction hideFieldsOnSubmitted() {\r\n $(\".form-group\").hide();\r\n}\r\n\r\nfunction singleLoginSuccess(result) {\r\n if (result.Info !== null && result.Info.Errors.length > 0) {\r\n if (result.Info.Errors[0].ErrorCode === \"USERHASPASSWORD\") {\r\n $(\".pnl_password\").show();\r\n $(\".form-group-submit button\").attr(\"data-action\", \"/api/fvmember/login\");\r\n $(\".form-group-submit button\")\r\n .attr(\"data-return\", $(\".form-group-submit button\").attr(\"data-return-login\"));\r\n }\r\n }\r\n}\r\n\r\n$(document).on(\"change\", \"select\", function () {\r\n $('option[value=\"' + this.value + '\"]', this)\r\n .prop(\"selected\", true).siblings() \r\n .removeAttr(\"selected\");\r\n});","$(document).ready(function(){\r\n \r\n $('.backtop').on('click', function () {\r\n $(\"html, body\").animate({\r\n scrollTop: 0\r\n }, 1000);\r\n return false;\r\n });\r\n\r\n $('.mob-panel .btn').click(function(){\r\n $('.collapse.in').collapse('hide');\r\n });\r\n\r\n switchPos();\r\n \r\n $(\".template-homepage-mobile .tiles li\").matchHeight({\r\n byRow: true\r\n });\r\n \r\n $('.popup-gallery').magnificPopup({\r\n delegate: 'a',\r\n type: 'image',\r\n tLoading: 'Loading image #%curr%...',\r\n mainClass: 'mfp-img-mobile',\r\n gallery: {\r\n enabled: true,\r\n navigateByImgClick: true,\r\n preload: [0,1] // Will preload 0 - before current, and 1 after the current image\r\n },\r\n image: {\r\n tError: 'The image #%curr% could not be loaded.',\r\n }\r\n });\r\n $('.alert-danger').each(function(){\r\n var f = $(this);\r\n $(this).find(\".btn-default\").click(function(e){\r\n f.fadeOut();\r\n e.preventDefault();\r\n })\r\n });\r\n\r\n $('.alert-success').each(function () {\r\n var f = $(this);\r\n $(this).find(\".btn-default\").click(function(e) {\r\n f.fadeOut();\r\n e.preventDefault();\r\n });\r\n });\r\n\r\n\r\n $('.modal').on('show.bs.modal', function() {\r\n $(this).show();\r\n setModalMaxHeight(this);\r\n }); \r\n\r\n if ($('.quick-search-slider').length != 0) {\r\n \r\n $('.quick-search-slider').slick({\r\n dots: false,\r\n arrows: true,\r\n infinite: false,\r\n speed: 300,\r\n slidesToShow: 11,\r\n slidesToScroll: 11,\r\n responsive: [\r\n {\r\n breakpoint: 1200,\r\n settings: {\r\n slidesToShow: 9,\r\n slidesToScroll: 9,\r\n infinite: true,\r\n dots: true\r\n }\r\n },\r\n {\r\n breakpoint: 992,\r\n settings: {\r\n slidesToShow: 6,\r\n slidesToScroll: 6\r\n }\r\n },\r\n {\r\n breakpoint: 768,\r\n settings: {\r\n slidesToShow: 5,\r\n slidesToScroll: 5\r\n }\r\n },\r\n {\r\n breakpoint: 480,\r\n settings: {\r\n slidesToShow: 3,\r\n slidesToScroll: 3\r\n }\r\n } \r\n ]\r\n });\r\n\r\n if (windowW > 1199) {\r\n if ($('.quick-search-slider .tiles__item').length <= 10) {\r\n $('.quick-search-slider').slick('unslick');\r\n }\r\n } \r\n\r\n }\r\n \r\n\r\n});\r\n\r\n$(window).resize(function(){\r\n switchPos();\r\n if ($('.modal.in').length != 0) {\r\n setModalMaxHeight($('.modal.in'));\r\n }\r\n});\r\n\r\nfunction setModalMaxHeight(element) {\r\n var $element = $(element); \r\n var $content = $element.find('.modal-content');\r\n var borderWidth = $content.outerHeight() - $content.innerHeight();\r\n var dialogMargin = $(window).width() < 768 ? 20 : 60;\r\n var contentHeight = $(window).height() - (dialogMargin + borderWidth);\r\n var headerHeight = $element.find('.modal-header').outerHeight() || 0;\r\n var footerHeight = $element.find('.modal-footer').outerHeight() || 0;\r\n var maxHeight = contentHeight - (headerHeight + footerHeight);\r\n\r\n $content.css({\r\n 'overflow': 'hidden'\r\n });\r\n \r\n $element\r\n .find('.modal-body').css({\r\n 'max-height': maxHeight,\r\n 'overflow-y': 'auto'\r\n });\r\n}\r\n\r\nfunction switchPos(){\r\n var currWidth = $(window).width();\r\n if(currWidth <= 767){\r\n $('.location--lead').insertAfter('.details');\r\n }\r\n if(currWidth >= 768){\r\n $('.details').insertAfter('.location--lead');\r\n } \r\n}","'use strict';\r\nfunction dataService($http, $q) {\r\n\r\n var searchBaseUrl = \"/api/search\";\r\n\r\n this.searchQueue = [];\r\n this.searchOffers = function (filter) {\r\n var canceller = $q.defer();\r\n\r\n var cancel = function (reason) {\r\n canceller.resolve(reason);\r\n };\r\n\r\n var http = {\r\n method: 'POST',\r\n timeout: canceller.promise,\r\n url: searchBaseUrl,\r\n data: filter\r\n }\r\n\r\n if (window.current_location != null) {\r\n http.headers = {\r\n 'current-location': window.current_location\r\n };\r\n }\r\n var promise = $http(http);\r\n\r\n return {\r\n promise: promise,\r\n cancel: cancel\r\n };\r\n };\r\n this.loadFilters = function (country) {\r\n return $http.get(searchBaseUrl + \"/loadFilters/\" + (country || \"\"));\r\n }\r\n\r\n this.getAreas = function (country) {\r\n return $http.get(searchBaseUrl + \"/loadAreas/\" + country);\r\n }\r\n\r\n this.getGoogleCoordination = function (term) {\r\n return $http.get(\"//maps.google.com/maps/api/geocode/json?components=country:au&address=\" + term);\r\n };\r\n\r\n this.suggest = function (term, categories) {\r\n var canceller = $q.defer();\r\n\r\n var cancel = function (reason) {\r\n canceller.resolve(reason);\r\n };\r\n\r\n var promise = $http({\r\n method: 'GET',\r\n timeout: canceller.promise,\r\n url: searchBaseUrl + \"/suggestion?term=\" + encodeURIComponent(term) + \"&categories=\" + categories\r\n });\r\n\r\n return {\r\n promise: promise,\r\n cancel: cancel\r\n };\r\n };\r\n\r\n this.addToFavourites = function (merchantID) {\r\n return $http.get(\"/api/favourites/\" + merchantID + \"/add\");\r\n };\r\n\r\n this.removeFromFavourites = function (merchantID) {\r\n return $http.get(\"/api/favourites/\" + merchantID + \"/remove\");\r\n };\r\n\r\n this.myFavourites = function () {\r\n var canceller = $q.defer();\r\n\r\n var cancel = function (reason) {\r\n canceller.resolve(reason);\r\n };\r\n\r\n var promise = $http({\r\n method: 'GET',\r\n timeout: canceller.promise,\r\n url: \"/api/favourites/myfavourites\"\r\n });\r\n\r\n return {\r\n promise: promise,\r\n cancel: cancel\r\n };\r\n }\r\n\r\n this.getOffer = function (id, locationID) {\r\n var canceller = $q.defer();\r\n\r\n var cancel = function (reason) {\r\n canceller.resolve(reason);\r\n };\r\n\r\n var promise = $http({\r\n method: 'GET',\r\n timeout: canceller.promise,\r\n url: \"/api/offers/\" + id + \"?locationId=\" + locationID\r\n });\r\n\r\n return {\r\n promise: promise,\r\n cancel: cancel\r\n };\r\n }\r\n\r\n this.getOfferReviews = function(id) {\r\n return $http.get(\"/api/offers/\" + id + \"/reviews?orderDesc=true\");\r\n }\r\n\r\n this.getOfferRedemptionHistory = function (id) {\r\n return $http.get(\"/api/fvmember/redemptions/\" + id);\r\n }\r\n\r\n this.listRedemptions = function (page) {\r\n return $http.get(\"/api/redemption/list?page=\" + page);\r\n };\r\n}\r\n\r\nfunction handlePendingRequests(vm, callStore, req) {\r\n vm[callStore] = vm[callStore] || [];\r\n vm[callStore].forEach(function (r) {\r\n r.cancel(\"new request\");\r\n vm[callStore].splice(vm[callStore].indexOf(r), 1);\r\n });\r\n vm[callStore].push(req);\r\n}","$(function() {\r\n var ddlCountry = $(\"#form-enquiry #Country\");\r\n setRegionList(ddlCountry);\r\n\r\n $(\"#form-enquiry select\").on(\"change\",\r\n function() {\r\n if ($(this).val() === \"\") {\r\n var err = $(this).data(\"fv-notempty-message\");\r\n \r\n var parent = $(this).closest(\".form-group\");\r\n parent.addClass(\"has-error\");\r\n if (parent.has(\".help-block\").size() === 0) {\r\n parent.append(\"\" + err + \"\");\r\n } else {\r\n parent.find(\".help-block\").show();\r\n }\r\n }\r\n });\r\n});\r\n\r\nfunction enquirySuccesfullSubmitted() {\r\n $(\".form-group\").hide();\r\n}\r\n\r\nfunction setRegionList(country) {\r\n\r\n $(\"#form-enquiry #City\").hide();\r\n $(\"#form-enquiry #CityNZ\").hide();\r\n $(\"#form-enquiry #State\").hide();\r\n $(\"#form-enquiry #City\").removeAttr(\"required\");\r\n $(\"#form-enquiry #CityNZ\").removeAttr(\"required\");\r\n $(\"#form-enquiry #State\").removeAttr(\"required\");\r\n $(\".city-based-address\").hide();\r\n $(\".state-based-address\").hide();\r\n \r\n if (country.val() === \"Australia\") {\r\n $(\".state-based-address\").show();\r\n $(\"#form-enquiry #State\").show();\r\n $(\"#form-enquiry #State\").attr(\"required\", \"required\");\r\n\r\n } else if (country.val() === \"New Zealand\") {\r\n $(\".city-based-address\").show();\r\n $(\"#form-enquiry #CityNZ\").show();\r\n $(\"#form-enquiry #CityNZ\").attr(\"required\", \"required\");\r\n } else {\r\n $(\".city-based-address\").show();\r\n $(\"#form-enquiry #City\").show();\r\n $(\"#form-enquiry #City\").attr(\"required\", \"required\");\r\n }\t\t\r\n}","'use strict';\r\n\r\nvar homeapp = angular.module(\"homeapp\", []);\r\n\r\n(function () {\r\n 'use strict'; \r\n\r\n homeapp.service(\"dataService\", dataService);\r\n dataService.$inject = ['$http', '$q'];\r\n\r\n homeapp.directive(\"typeaheadhome\", typeaheadhome);\r\n typeaheadhome.$inject = ['dataService', '$location', '$timeout'];\r\n\r\n function typeaheadhome(dataService, $location, $timeout) {\r\n return {\r\n restrict: 'A',\r\n link: link\r\n };\r\n\r\n function link($scope, elm, attrs) {\r\n\r\n $(elm).typeahead({\r\n minLength: 3,\r\n highlight: true\r\n },\r\n {\r\n displayKey: 'Name',\r\n limit: 50,\r\n source: function (query, syncResults, asyncResults) {\r\n var req = dataService.suggest(query);\r\n $scope.vm.handlePendingRequests(\"suggest\", req);\r\n\r\n req.promise.then(function (res) {\r\n asyncResults(res.data.Data);\r\n });\r\n },\r\n templates: {\r\n suggestion: function (data) {\r\n return '' + data.Name + '
';\r\n }\r\n }\r\n });\r\n $(elm).bind('typeahead:select', function (ev, item) {\r\n $scope.vm.searchSelectedItem = item;\r\n $scope.vm.filter.suburb = null;\r\n $scope.vm.filter.categories = null;\r\n $scope.vm.filter.cuisineID = null;\r\n $scope.vm.filter.merchantID = null;\r\n\r\n if (item.Type === \"Merchant\") {\r\n $scope.vm.filter.merchantID = item.ID; \r\n }\r\n if (item.Type === \"Suburb\") {\r\n $scope.vm.filter.suburb = item.ID; \r\n }\r\n if (item.Type === \"Category\") {\r\n $scope.vm.filter.categories = item.ID; \r\n }\r\n if (item.Type === \"Cuisine\") { \r\n $scope.vm.filter.cuisineID = item.ID; \r\n }\r\n $scope.vm.search();\r\n });\r\n $(elm).bind('typeahead:change', function (ev, item) {\r\n if ($scope.vm.searchSelectedItem == null || $scope.vm.searchSelectedItem.Name !== item) {\r\n $scope.vm.filter.merchantID = null;\r\n $scope.vm.filter.suburb = null;\r\n $scope.vm.filter.categories = null;\r\n $scope.vm.filter.cuisineID = null;\r\n $(elm).typeahead('val', \"\");\r\n $scope.vm.filter.searchTerm = \"\";\r\n $scope.vm.searchSelectedItem = null; \r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n homeapp.controller(\"homeCtrl\", homeCtrl);\r\n homeCtrl.$inject = ['dataService', '$httpParamSerializer'];\r\n\r\n function homeCtrl(dataService, $httpParamSerializer) {\r\n var vm = this;\r\n vm.handlePendingRequests = handlePendingRequests;\r\n vm.search = search;\r\n vm.filterBySuggestion = filterBySuggestion;\r\n \r\n init();\r\n\r\n function filterBySuggestion(e) {\r\n if (e.keyCode === 13) {\r\n search();\r\n }\r\n }\r\n\r\n function search() {\r\n var url = \"/search?\" + $httpParamSerializer(vm.filter);\r\n window.location = url;\r\n }\r\n\r\n function handlePendingRequests(callStore, req) {\r\n vm[callStore] = vm[callStore] || [];\r\n vm[callStore].forEach(function (r) {\r\n r.cancel(\"new request\");\r\n vm[callStore].splice(vm[callStore].indexOf(r), 1);\r\n });\r\n vm[callStore].push(req);\r\n }\r\n\r\n function init() {\r\n if (navigator.geolocation && window.location.protocol === \"https:\") {\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n\r\n var links = $(\"a[href^='/Search']\");\r\n links.each(function () {\r\n var href = $(this).attr(\"href\");\r\n href += href.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\r\n href += \"centerLat=\" + position.coords.latitude + \"¢erLng=\" + position.coords.longitude + \"&zoom=12\";\r\n $(this).attr(\"href\", href);\r\n });\r\n\r\n },\r\n function (err) { },\r\n { maximumAge: 60000, timeout: 5000, enableHighAccuracy: true });\r\n }\r\n }\r\n };\r\n})();\r\n\r\n$(window).load(function() {\r\n $('.royalSlider').each(function(){ \r\n if ($(this).find('.item').length){\r\n $(\".slider-loading\").fadeOut(\"slow\");\r\n $(\".template-homepage .royalSlider\").css('display', 'block').royalSlider({\r\n // options go here\r\n // as an example, enable keyboard arrows nav\r\n \r\n transitionType: 'fade',\r\n keyboardNavEnabled: true,\r\n controlNavigation: \"none\",\r\n autoHeight: true,\r\n loop: true,\r\n loopRewind: true,\r\n navigateByClick: false,\r\n autoPlay: {\r\n enabled: true,\r\n pauseOnHover: true,\r\n delay: 5000\r\n }\r\n });\r\n }else{\r\n $('.slider-section').hide();\r\n }\r\n })\r\n});","CustomMapPin.prototype = new google.maps.OverlayView();\r\n\r\n\r\n/** @constructor */\r\nfunction CustomMapPin(bounds, baseImg, item, map) {\r\n\r\n this.item = item;\r\n \r\n // Now initialize all properties.\r\n this.bounds_ = bounds;\r\n this.image_ = item.iconUrl;\r\n this.baseImage_ = baseImg;\r\n this.map_ = map;\r\n this.id_ = item.ID;\r\n this.clickEvent = null;\r\n\r\n // Define a property to hold the image's div. We'll\r\n // actually create this div upon receipt of the onAdd()\r\n // method so we'll leave it null for now.\r\n this.div_ = null;\r\n\r\n // Explicitly call setMap on this overlay\r\n this.setMap(map);\r\n}\r\n\r\nCustomMapPin.prototype.onAdd = function () {\r\n\r\n var div = document.createElement('div');\r\n div.id = this.id_ + '__icon__svg';\r\n div.style.border = 'none';\r\n div.style.borderWidth = '0px';\r\n div.style.position = 'absolute';\r\n\r\n // Create the img element and attach it to the div.\r\n var img = document.createElement('img');\r\n img.src = this.baseImage_;\r\n //img.style.width = '60px';\r\n //img.style.height = '99px';\r\n img.style.position = 'absolute';\r\n img.style.top = '-80px';\r\n img.style.left = '-24px';\r\n\r\n div.appendChild(img);\r\n\r\n if (this.image_.endsWith('svg')) {\r\n loadExternalSvg(div.id, this.image_);\r\n } else {\r\n var icon = document.createElement('img');\r\n icon.src = this.image_;\r\n icon.style.width = '39px';\r\n icon.style.height = '39px';\r\n icon.style.position = 'absolute';\r\n icon.style.top = '-63px';\r\n icon.style.left = '-19px';\r\n\r\n div.appendChild(icon);\r\n }\r\n\r\n this.div_ = div;\r\n\r\n // Add the element to the \"overlayImage\" pane.\r\n var panes = this.getPanes();\r\n panes.overlayImage.appendChild(this.div_);\r\n};\r\n\r\nCustomMapPin.prototype.draw = function () {\r\n\r\n // We use the south-west and north-east\r\n // coordinates of the overlay to peg it to the correct position and size.\r\n // To do this, we need to retrieve the projection from the overlay.\r\n var overlayProjection = this.getProjection();\r\n\r\n // Retrieve the south-west and north-east coordinates of this overlay\r\n // in LatLngs and convert them to pixel coordinates.\r\n // We'll use these coordinates to resize the div.\r\n var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());\r\n var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());\r\n\r\n // Resize the image's div to fit the indicated dimensions.\r\n var div = this.div_;\r\n div.style.left = sw.x + 'px';\r\n div.style.top = ne.y + 'px';\r\n div.style.width = (ne.x - sw.x) + 'px';\r\n div.style.height = (sw.y - ne.y) + 'px';\r\n\r\n var marker = this.marker;\r\n google.maps.event.addDomListener(div, \"click\", function (event) {\r\n \r\n google.maps.event.trigger(marker, \"click\");\r\n });\r\n};\r\n\r\nCustomMapPin.prototype.onRemove = function () {\r\n this.div_.parentNode.removeChild(this.div_);\r\n};\r\n\r\n// Set the visibility to 'hidden' or 'visible'.\r\nCustomMapPin.prototype.hide = function () {\r\n if (this.div_) {\r\n // The visibility property must be a string enclosed in quotes.\r\n this.div_.style.visibility = 'hidden';\r\n }\r\n};\r\n\r\nCustomMapPin.prototype.show = function () {\r\n if (this.div_) {\r\n this.div_.style.visibility = 'visible';\r\n }\r\n};\r\n\r\nCustomMapPin.prototype.toggle = function () {\r\n if (this.div_) {\r\n if (this.div_.style.visibility === 'hidden') {\r\n this.show();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n};\r\n\r\nCustomMapPin.prototype.getPosition = function() {\r\n return this.bounds_.getSouthWest();\r\n}\r\n\r\n// Detach the map from the DOM via toggleDOM().\r\n// Note that if we later reattach the map, it will be visible again,\r\n// because the containing' + data.Name + '
';\r\n }\r\n }\r\n });\r\n $(elm).bind('typeahead:select', function (ev, item) {\r\n $scope.vm.searchSelectedItem = item;\r\n if (item.Type === \"Merchant\") {\r\n $scope.vm.filter.categories = \"\";\r\n $scope.vm.filter.merchantID = item.ID;\r\n $scope.vm.filter.suburb = null; \r\n $scope.vm.filter.cuisineID = null;\r\n } \r\n if (item.Type === \"Suburb\") {\r\n $scope.vm.filter.suburb = item.ID;\r\n $scope.vm.filter.merchantID = null; \r\n $scope.vm.filter.cuisineID = null;\r\n }\r\n if (item.Type === \"Category\") {\r\n $scope.vm.filter.categories = \"\" + item.ID;\r\n $scope.vm.filter.suburb = null;\r\n $scope.vm.filter.merchantID = null;\r\n $scope.vm.filter.cuisineID = null;\r\n $scope.vm.filter.searchTerm = null;\r\n }\r\n if (item.Type === \"Cuisine\") {\r\n $scope.vm.filter.categories = \"\";\r\n $scope.vm.filter.cuisineID = item.ID;\r\n $scope.vm.filter.suburb = null;\r\n $scope.vm.filter.merchantID = null;\r\n }\r\n $location.search($scope.vm.filter);\r\n $scope.vm.setCategoriesFromUrl();\r\n $scope.vm.search(false);\r\n });\r\n $(elm).bind('typeahead:change', function (ev, item) {\r\n if ($scope.vm.searchSelectedItem == null || $scope.vm.searchSelectedItem.Name !== item) {\r\n $scope.vm.filter.merchantID = null; \r\n $scope.vm.filter.suburb = null;\r\n $scope.vm.filter.cuisineID = null;\r\n $(elm).typeahead('val', \"\");\r\n $scope.vm.filter.searchTerm = \"\";\r\n $scope.vm.searchSelectedItem = null;\r\n $timeout(function () {\r\n $scope.vm.setBounds();\r\n $location.search($scope.vm.filter);\r\n });\r\n }\r\n });\r\n }\r\n } \r\n\r\n})();\r\n\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n app.controller(\"searchCtrl\", searchCtrl);\r\n\r\n searchCtrl.$inject = ['dataService', 'NgMap', '$location', '$timeout', '$sce', '$compile', '$scope', '$filter', 'mapService'];\r\n function searchCtrl(dataService, NgMap, $location, $timeout, $sce, $compile, $scope, $filter, mapService) {\r\n var vm = this;\r\n vm.showloading = true;\r\n vm.data = [];\r\n vm.map = null;\r\n vm.filter = $location.search();\r\n vm.filterData = {\r\n categories: [],\r\n countries: [],\r\n areas: [],\r\n offerTypeCategory: []\r\n };\r\n vm.search = search;\r\n vm.searchFilter = searchFilter;\r\n vm.markers = []; \r\n vm.markerClusterer = null;\r\n vm.infoWindows = [];\r\n vm.showDetail = showDetail;\r\n vm.selectPin = selectPin; \r\n vm.togglesearch = togglesearch;\r\n vm.togglesort = togglesort;\r\n vm.locationTextChanged = locationTextChanged; \r\n vm.noData = false; \r\n vm.closeInfo = closeInfo;\r\n vm.searchNearMe = searchNearMe;\r\n vm.nearMeLocation = null;\r\n vm.searchRegion = searchRegion;\r\n vm.countryChanged = countryChanged;\r\n vm.handlePendingRequests = handlePendingRequests;\r\n vm.filterBySuggestion = filterBySuggestion;\r\n vm.addToFavourites = addToFavourites;\r\n vm.removeFromFavourites = removeFromFavourites;\r\n vm.showItemOnRight = showItemOnRight;\r\n vm.setBounds = setBounds;\r\n vm.selectallcategory = selectallcategory;\r\n vm.setAllCategory = setAllCategory;\r\n vm.selectalloffers = selectalloffers;\r\n vm.setAllOffers = setAllOffers;\r\n vm.fixPageHeight = fixPageHeight;\r\n vm.isInit = false;\r\n vm.mapVisibleArea = null;\r\n vm.switchView = switchView;\r\n vm.searchOrder = searchOrder;\r\n vm.modalItem = {};\r\n vm.setCategoriesFromUrl = setCategoriesFromUrl;\r\n vm.setOfferTypesFromUrl = setOfferTypesFromUrl;\r\n vm.setDefaultLocation = setDefaultLocation;\r\n vm.toggleOtherLocations = toggleOtherLocations;\r\n vm.displayOtherLocations = displayOtherLocations;\r\n vm.quickSearch = quickSearch;\r\n vm.getOfferLink = getOfferLink;\r\n vm.rememberInfo = rememberInfo;\r\n vm.isFitBouds = false;\r\n vm.zoomchanged = zoomchanged;\r\n vm.goToOffer = goToOffer;\r\n vm.searchThisArea = searchThisArea;\r\n vm.searchOnMapMove = true;\r\n\r\n init();\r\n\r\n navigator.geolocation.getCurrentPosition(function(position) {\r\n vm.GetCurrentUserLocation = position.coords;\r\n window.current_location = position.coords.latitude + ',' + position.coords.longitude;\r\n\r\n setDistances();\r\n if (vm.map != null && $.isEmptyObject(vm.filter)) {\r\n vm.filter.searchTerm = \"\";\r\n setBounds();\r\n vm.map.setZoom(12);\r\n vm.map.panTo(new google.maps.LatLng(vm.GetCurrentUserLocation.latitude, vm.GetCurrentUserLocation.longitude)); \r\n search(false);\r\n } \r\n });\r\n\r\n function setDistances() {\r\n if (vm.data != null) {\r\n vm.data.forEach(function(item) {\r\n setDistance(item.Locations);\r\n });\r\n }\r\n if (vm.listData != null) {\r\n vm.listData.forEach(function(item) {\r\n setDistance(item.Locations);\r\n });\r\n }\r\n if (vm.modalItem != null && vm.modalItem.Location != null) {\r\n setDistance([vm.modalItem.Location]);\r\n }\r\n }\r\n\r\n function setDistance(data) {\r\n if (vm.GetCurrentUserLocation != null) {\r\n $timeout(function() {\r\n\r\n if (data != null) {\r\n data.forEach(function(item) { \r\n if (item.Distance <= 0) {\r\n var d =\r\n getDistanceFromLatLonInKm(vm.GetCurrentUserLocation.latitude,\r\n vm.GetCurrentUserLocation.longitude,\r\n item.Lat,\r\n item.Lng);\r\n item.Distance = d.toFixed(0);\r\n }\r\n vm.markers.forEach(function(m) {\r\n if (m.item.ID === item.ID) {\r\n if (item.Distance != null) {\r\n if ((typeof item\r\n .Distance ===\r\n 'string' ||\r\n item.Distance instanceof String)) {\r\n item.Distance = parseFloat(item.Distance);\r\n }\r\n }\r\n if (m.infowindow != null) {\r\n var info = $(m.infowindow.content_).find(\".map-info-distance\");\r\n info.show();\r\n if (item.Distance != null) {\r\n info.text(item.Distance.toFixed(0).toString() + \"kms away\");\r\n }\r\n }\r\n }\r\n });\r\n }); \r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n function filterBySuggestion(e) { \r\n if (e.keyCode === 13) {\r\n e.preventDefault();\r\n if (vm.filter.searchTerm === \"\") {\r\n vm.filter.suburb = null;\r\n vm.filter.merchantID = null;\r\n vm.filter.cuisineID = null;\r\n $location.search(vm.filter);\r\n }\r\n search(false);\r\n } \r\n }\r\n\r\n function countryChanged() {\r\n var country = vm.filter.country = vm.country;\r\n if (country != null && country !== '') {\r\n dataService.getAreas(country).then(function(res) {\r\n vm.filterData.areas = res.data.Data;\r\n $timeout(function() {\r\n $(\"select\").selectpicker('refresh');\r\n });\r\n });\r\n } else {\r\n vm.filterData.areas = [];\r\n $timeout(function () {\r\n $(\"select\").selectpicker('refresh');\r\n });\r\n }\r\n }\r\n\r\n function searchNearMe() {\r\n vm.filterData.searchRegion = false;\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(function (position) { \r\n vm.nearMeLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);\r\n vm.GetCurrentUserLocation = position.coords;\r\n window.current_location = position.coords.latitude + ',' + position.coords.longitude;\r\n }, function(err) {\r\n alert(\"Location service is disabled.\");\r\n }, { enableHighAccuracy: true, maximumAge: 10000 });\r\n }\r\n }\r\n\r\n function searchRegion() {\r\n vm.filterData.searchRegion = true;\r\n vm.nearMeLocation = null;\r\n }\r\n\r\n \r\n function createCustomMarker(item) {\r\n var latLng = new google.maps.LatLng(item.Lat, item.Lng);\r\n var bounds = new google.maps.LatLngBounds(latLng, latLng);\r\n\r\n var baseImg = '/www_fv/assets/icons/map/map_pin.png';\r\n if (vm.customPin != null && vm.customPin !== \"\") {\r\n baseImg = vm.customPin;\r\n }\r\n\r\n return new CustomMapPin(bounds, baseImg, item, vm.map);\r\n }\r\n\r\n function offsetCenter(latlng, offsety) {\r\n\r\n // latlng is the apparent centre-point\r\n // offsetx is the distance you want that point to move to the right, in pixels\r\n // offsety is the distance you want that point to move upwards, in pixels\r\n // offset can be negative\r\n // offsetx and offsety are both optional\r\n\r\n var scale = Math.pow(2, vm.map.getZoom());\r\n\r\n var worldCoordinateCenter = vm.map.getProjection().fromLatLngToPoint(latlng);\r\n var pixelOffset = new google.maps.Point(0, (offsety / scale) || 0);\r\n\r\n var worldCoordinateNewCenter = new google.maps.Point(\r\n worldCoordinateCenter.x - pixelOffset.x,\r\n worldCoordinateCenter.y + pixelOffset.y\r\n );\r\n\r\n var newCenter = vm.map.getProjection().fromPointToLatLng(worldCoordinateNewCenter);\r\n\r\n vm.map.setCenter(newCenter);\r\n\r\n }\r\n \r\n //function createMarkerWithIcon(marker, categoryIcon) { \r\n\r\n // var canvasMain = document.createElement(\"canvas\");\r\n // canvasMain.width = 50 * 1.2;\r\n // canvasMain.height = 83 * 1.2;\r\n // var context = canvasMain.getContext(\"2d\");\r\n\r\n // var canvasImg = document.createElement(\"canvas\"); \r\n // var contextImg = canvasImg.getContext(\"2d\");\r\n\r\n // var baseImg = new Image(); \r\n // baseImg.onload = function () {\r\n\r\n // var iconImg = new Image(); \r\n // iconImg.onload = function () {\r\n // context.drawImage(baseImg, 0, 0, canvasMain.width, canvasMain.height);\r\n\r\n // canvasImg.width = iconImg.width;\r\n // canvasImg.height = iconImg.height;\r\n // contextImg.drawImage(iconImg, 0, 0); \r\n // //resize\r\n // resampleImg(canvasImg, 40, 40, true);\r\n \r\n // context.drawImage(canvasImg, 10, 25);\r\n // marker.setIcon(canvasMain.toDataURL());\r\n // marker.setVisible(true);\r\n // }\r\n // iconImg.src = categoryIcon;\r\n // }\r\n \r\n // if (vm.customPin != null && vm.customPin !== \"\") {\r\n // baseImg.src = vm.customPin;\r\n // } else {\r\n // baseImg.src = '/www_fv/assets/icons/map/map_pin.png';\r\n // }\r\n //}\r\n\r\n function addPins(data) {\r\n \r\n if (data == null || data.length === 0) {\r\n return;\r\n }\r\n\r\n var hasCoodrinates = false;\r\n var bounds = new google.maps.LatLngBounds();\r\n \r\n data.forEach(function (merchant) {\r\n\r\n var item = merchant.Location;\r\n item.Offers = merchant.Offers;\r\n if (item.Lat != null && item.Lng != null) {\r\n hasCoodrinates = true;\r\n } else {\r\n return;\r\n }\r\n\r\n var latLng = new google.maps.LatLng(item.Lat, item.Lng);\r\n\r\n item.iconUrl = null;\r\n vm.filterData.icons.forEach(function (bc) {\r\n if (bc.ID === merchant.BCID && bc.Icon != null) {\r\n item.iconUrl = bc.Icon;\r\n }\r\n });\r\n \r\n var marker = $.grep(vm.markers, function (m) {\r\n return m.item.ID === item.ID;\r\n })[0];\r\n\r\n if (marker != null) {\r\n marker.item = item;\r\n bounds.extend(marker.getPosition());\r\n } else {\r\n var pin = '/www_fv/assets/icons/map/map_pin.png'\r\n if (vm.customPin != null && vm.customPin !== \"\") {\r\n pin = vm.customPin;\r\n }\r\n\r\n marker = new google.maps.Marker({\r\n position: latLng,\r\n item: item,\r\n map: vm.map,\r\n icon: {\r\n url: pin,\r\n anchor: new google.maps.Point(25, 80),\r\n },\r\n optimized: false\r\n });\r\n marker.overlay = createCustomMarker(item); \r\n\r\n // marker.setVisible(false);\r\n\r\n //if (item.iconUrl != null) {\r\n // createMarkerWithIcon(marker, item.iconUrl);\r\n // createCustomMarker(item);\r\n // merchant.iconUrl = item.iconUrl;\r\n //} else {\r\n // marker.setVisible(true);\r\n //}\r\n\r\n bounds.extend(marker.getPosition());\r\n\r\n if (item.Offers.length === 1) {\r\n\r\n var infoOptions = {\r\n pixelOffset: new google.maps.Size(-140, -170),\r\n infoBoxClearance: new google.maps.Size(1, 1),\r\n pane: \"floatPane\",\r\n closeBoxURL: \"\"\r\n };\r\n\r\n var template = $(\".map-info-bubble\").clone();\r\n template.find(\".close\").attr(\"ng-click\", \"vm.closeInfo(\" + item.ID + \")\");\r\n template.find(\".map-info-title\").text(merchant.MN);\r\n template.find(\".map-info-address\").text(item.Address);\r\n if (item.Distance > 0) {\r\n template.find(\".map-info-distance\").text(item.Distance + \"kms away\");\r\n } else {\r\n template.find(\".map-info-distance\").hide();\r\n }\r\n\r\n item.Offers.forEach(function(o) {\r\n var offerDiv = $(\"