//Appends an element to the document
var appendHtml = function (element, html) {
var div = document.createElement('div');
div.innerHTML = html;
while (div.children.length > 0) {
element.appendChild(div.children[0]);
}
}
async function AddHeaderScripts() {
Log("Jquery Check");
if ('undefined' == typeof window.jQuery) {
var jQueryScript = document.createElement('script');
jQueryScript.setAttribute('src','https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js');
document.head.appendChild(jQueryScript);
var count = 0;
//Check if Jquery is running yet?
while (!window.hasOwnProperty("jQuery")) {
Log("waiting for jQuery");
await new Promise(r => setTimeout(r, 250));
count++;
//Stop infinateloop maxtime 5s
if (count > 20) {
break;
}
}
}
AddScripts()
}
function AddScripts() {
if ('undefined' != typeof window.jQuery) {
Log("jQuery Installed");
$("head").append($("").attr("src","https://www.c-level.earth//scripts/autocomplete/autocomplete-combined.js"));
$("head").append($(""));
Log("All header scripts loaded");
} else {
Log("jQuery NOT Installed");
//Jquery didnt insert properly calculator wont run.
alert("Jquery could not be installed, please refresh and try again.");
}
}
//Global pramas
var quoteParmId = getParameterByName("oid");
var cancelParm = getParameterByName("c");
/* START Global Functions */
//Gets a query string parameter by name
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
//Hide all the steps in the calculator
function HideStep() {
$('.clevel-step').hide();
}
//Reloads the page
function ReloadPage() {
Log("Page reload");
window.location.reload();
}
//logging
function Log(message) {
if (balanceAPI.DeveloperMode) {
console.log(message)
}
}
//Get a property from an object by name
function GetProperty(item, name) {
if (item[name]) {
return item[name];
}
return "Key not found";
};
/* END Global Functions */
/* START API Functions */
async function FetchHtml(url){
var fetchedData = await fetch(url, {headers: {'apikey': balanceAPI.ApiKey},})
.then(response => response.text())
.then(responseBody => {
Log("FetchHtml:Complete " +url)
Log("FetchHtml:Text " +responseBody.toString())
return responseBody.toString();
})
.catch(error => {
console.error(error);
});
return fetchedData;
}
async function GetJSONFromAPI(url, result) {
var fetchedData = await fetch(url, {headers: {'apikey': balanceAPI.ApiKey, 'Content-Type': 'application/json'},})
.then(response => response.json())
.then(responseBody => {
Log("Fetch:Complete " +url)
Log("Fetch:JSON " +JSON.stringify(responseBody))
result = responseBody;
})
.catch(error => {
Log(error);
return null;
});
return result;
}
function GetJQueryAPICall(url){
var result = null;
$.ajax({
method: "GET",
url: url,
headers: {
'apikey': balanceAPI.ApiKey,
'Content-Type': 'application/json'
},
contentType: "application/json",
async: false,
error: function () {
alert("An error has occured please check entered data and try again!");
}
}).done(function (data) {
Log("GetJQueryAPICall" +data);
result = data;
});
return result;
}
function PostUpdate(url, postData) {
var _data = JSON.stringify(postData);
Log("PostUpdate" +_data);
$.ajax({
method: "POST",
url: balanceAPI.ApiUrl + url,
headers: {
'apikey': balanceAPI.ApiKey,
'Content-Type': 'application/json'
},
contentType: "application/json",
async: false,
data: _data,
error: function () {
alert("An error has occured please check entered data and try again!");
}
}).done(function (data) {
balanceAPI.UpdateResponse = data;
Log(data)
});
}
function PostCombine(postData) {
var _data = JSON.stringify(postData);
$.ajax({
method: "POST",
url: balanceAPI.ApiUrl + "/v1/quote/combine",
headers: {
'apikey': balanceAPI.ApiKey,
'Content-Type': 'application/json'
},
contentType: "application/json",
async: false,
data: _data,
error: function () {
alert("An error has occured please check entered data and try again!");
balanceAPI.QuoteDetails = null;
}
}).done(function (data) {
Log("PostCombine" +data)
balanceAPI.QuoteDetails = data;
});
}
function PostCalculation(url, postData) {
if(balanceAPI.Error) {
return;
}
var _data = JSON.stringify(postData);
$.ajax({
method: "POST",
url: balanceAPI.ApiUrl + url,
headers: {
'apikey': balanceAPI.ApiKey,
'Content-Type': 'application/json'
},
contentType: "application/json",
async: false,
data: _data,
error: function () {
alert("An error has occured please check entered data and try again!");
//balanceAPI.QuoteDetails = null; try not resetting just not updating.
return false;
}
}).done(function (data) {
Log("PostCalculation" +data)
//Do we already have a quote?
if(balanceAPI.QuoteDetails == null) {
balanceAPI.QuoteDetails = data;
return true;
}
Log("Combine needed");
currentQuoets = GetCombinedQuote(data.QuoteId);
Log("Quote Combine" +JSON.stringify(currentQuoets));
PostCombine(currentQuoets);
});
}
/* END API Functions */
/* START Object Functions */
function GetCombinedQuote(quoteId) {
var Quote = {QuoteIds:[]};
if(quoteId != null) {
Quote.QuoteIds.push(quoteId);
}
var push = true;
if(typeof balanceAPI.QuoteDetails !== undefined) {
balanceAPI.QuoteDetails?.Quotes?.forEach(function(item) {
Quote.QuoteIds.push(item.QuoteId);
push = false;
});
if(push) {
//We only have one quote, push
Quote.QuoteIds.push(balanceAPI.QuoteDetails.QuoteId);
}
}
return Quote;
}
function GetUpdateObject() {
var QuoteId = balanceAPI.QuoteDetails.QuoteId;
var Personalisation = "";
var CertificateSendEmail = "";
var perObj = $("input[name='clevel-cert-name']");
if (typeof perObj != 'undefined') {
Personalisation = $(perObj).val();
}
var emailObject = $("input[name='clevel-cert-email']");
if (typeof emailObject != 'undefined') {
CertificateSendEmail = $(emailObject).val();
}
var SendCertificate = balanceAPI.SendCertificate;
var Reference = balanceAPI.Referance;
var UrlReferer = window.location.href;
UrlReferer = UrlReferer.replace(/\#.*/, '');
UrlReferer = UrlReferer.replace(/\?.+/g, "$'");
return {
QuoteId,
CertificateSendEmail,
Personalisation,
SendCertificate,
Reference,
UrlReferer,
};
}
//Checks is the broswer is mobile width
function MobileCheck() {
var isMobile = window.matchMedia("only screen and (max-width: 559px)").matches;
if(isMobile) {
return true;
}
}
function ScrollToResolver(elem) {
// Check if elem is not null and is a DOM element
if (!elem || !(elem instanceof Element)) {
return;
}
var jump = parseInt(elem.getBoundingClientRect().top * .2);
document.body.scrollTop += jump;
document.documentElement.scrollTop += jump;
//lastjump detects anchor unreachable, also manual scrolling to cancel animation if scroll > jump
if (!elem.lastjump || elem.lastjump > Math.abs(jump)) {
elem.lastjump = Math.abs(jump);
setTimeout(function() {
ScrollToResolver(elem);
}, "100");
} else {
elem.lastjump = null;
}
}
function formatZeroPadding(dateString) {
return dateString < 10 ? '0' + dateString : dateString.toString();
}
function ClearFormForNextCalculation()
{
// Check if the elements exist and then set their values to an empty string
if ($("#clevel-from").length) {
$("#clevel-from").val("");
}
if ($("#clevel-to").length) {
$("#clevel-to").val("");
}
}
/* END Object Functions */
//Flight prams in queryString
var clevelFlightFrom = getParameterByName("clevelfrom");
var clevelFlightTo = getParameterByName("clevelto");
var clevelFlightClass = getParameterByName("clevelclass");
var clevelFlightPassangers = getParameterByName("clevelpass");
var flightHtmlDashSteps = "
";
//Set and changes the dashset settings
function DashStepSettings() {
}
//Sets and shows the correct step
function ShowStep() {
HideStep();
DashStepSettings();
$(balanceAPI.Step).show();
$(".clevel-step-dash>div").removeClass("select");
DashStepSettings();
//dash step name
var dashStep = balanceAPI.Step +"-dash";
$(dashStep).addClass("select");
//Show the correct buttons
$(".clevel-add-another").hide();
$(".clevel-offset").hide();
$(".clevel-calculate").show();
Log("ShowStep()");
Log("Show Step" +dashStep);
//Scroll to new step top.
var srcollElementId = balanceAPI.Step.replace('.', '');
Log("Call scroll with element " +srcollElementId);
var element = document.getElementById(srcollElementId);
ScrollToResolver(element);
}
var balanceAPI = {
ApiKey: "724c96d3-b874-495f-9a40-f4996328c575",
ApiUrl: "https://api.c-level.earth",
Calculator:"Flight",
CalculatorHtmlUrl: "",
CalculationHtml: "",
CalculatorElement: "clevel-calculator",
CartHtml: "",
DeveloperMode: false,
Equivalence:null,
HtmlRoot: "https://www.c-level.earth",
Referance:"",
Error:false,
SandboxMode: false,
SendCertificate:true,
Step:".clevel-step-one",
NavigationHtml: "",
QuoteDetails:null,
Initialize: function () {
Initialize();
}
};
async function SetEquivilance(calHtml) {
var CO2Kg = parseInt(balanceAPI.QuoteDetails.Co2Total_Kg);
Log("CO2kg:" +CO2Kg);
var url = balanceAPI.ApiUrl +"/v1/equivalence/co2/" +CO2Kg
var _data = await GetJSONFromAPI(url, balanceAPI.Equivalence);
Log("EQUDATA" +_data);
balanceAPI.Equivalence = _data
Log("balanceAPI.Equivalence" +JSON.stringify(balanceAPI.Equivalence));
var cal = document.getElementById(balanceAPI.CalculatorElement);
if (cal) {
balanceAPI.Equivalence.forEach(item => {
var name = GetProperty(item, "Name")
if(name == "Black Coffee") {
calHtml = EquivilanceShow(calHtml, item, "ONE")
}
if(name == "Mobile") {
calHtml = EquivilanceShow(calHtml, item, "TWO")
}
if(name == "Allowance") {
calHtml = EquivilanceShow(calHtml, item, "THREE")
}
});
Log("Calculator Replaced HTML:" +calHtml)
}
return calHtml;
}
function EquivilanceShow(calHtml, item, EQUTEXT){
var iconName = "==EQU" +EQUTEXT +"ICON=="
var icon = GetProperty(item, "FontAwesomeIconCss")
var textName = "==EQU" +EQUTEXT +"TEXT=="
var textDescription = GetProperty(item, "Description")
var totalName = "==EQU" +EQUTEXT +"NUMBER=="
var total = GetProperty(item, "Total")
var unitName = "==EQU" +EQUTEXT +"UNIT=="
var unit = GetProperty(item, "Unit")
var totalFixed = 0;
if(total > 0)
{
totalFixed = total.toFixed(0)
}
calHtml = calHtml.toString().replaceAll(iconName,icon);
calHtml = calHtml.toString().replaceAll(textName, textDescription);
calHtml = calHtml.toString().replaceAll(totalName, totalFixed);
calHtml = calHtml.toString().replaceAll(unitName, unit);
Log("Calhtml equivilance replaced");
return calHtml;
}
function SetBloodHound() {
autocomplete = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 20,
sufficient: 20,
remote: {
url: balanceAPI.ApiUrl + '/v1/airport/autocomplete/',
prepare: function (query, settings) {
settings.url = settings.url + query,
settings.headers = {
'apikey': balanceAPI.ApiKey,
};
return settings;
},
filter: function (autocomplete) {
// Map the remote source JSON array to a JavaScript object array
return autocomplete.map(function (item) {
if (item) { // Check if the item is not null
return {
value: item.IataCode + '-' + item.AirportName,
text: item.AirportName
};
}
return null;
}).filter(function (item) { return item !== null; }); // This will remove any null values from the mapped array
}
}
});
autocomplete.initialize();
Log("SetBloodhound - complete")
}
function SetAutoComplete(htmlObject) {
Log("SetAutoComplete on:" +htmlObject.attr("id"))
// Instantiate the Typeahead UI
htmlObject.typeahead(null, {
displayKey: 'value',
limit: 19, // This controls the number of suggestions displayed
source: autocomplete.ttAdapter(),
templates: {
suggestion: Handlebars.compile("{{value}}
"),
footer: Handlebars.compile("Searched for '{{query}}'")
}
});
}
/* START CART FUNCTIONS */
async function BuildCart(){
var cartHtml = "";
var cartTemplateUrl = balanceAPI.HtmlRoot + "/Html/Cart";
var cartSingleLineHtml = await FetchHtml(cartTemplateUrl);
//No quote is Set
if (balanceAPI.QuoteDetails === undefined || balanceAPI.QuoteDetails === null) {
Log("No quotes")
balanceAPI.CartHtml = cartHtml;
} else {
cartHtml = "";
//Add heading to the cart.
cartHtml = 'Items Added:
'
//We have single quote
if(balanceAPI.QuoteDetails.Quotes === undefined || balanceAPI.QuoteDetails.Quotes === null){
cartHtml = cartHtml +CartOrderlineHtml(balanceAPI.QuoteDetails, cartSingleLineHtml);
} else {
//We have mulitple quotes
balanceAPI.QuoteDetails?.Quotes?.forEach(item => {
var result = CartOrderlineHtml(item, cartSingleLineHtml);
cartHtml = cartHtml +result;
});
}
}
balanceAPI.CartHtml = "" + cartHtml +"
";
//Are we replacing the current cart?
var cartElement = document.getElementsByName("clevel-cart-continer");
Log("Element found:" +cartElement)
if(cartElement) {
Log("CartHtml: replaced")
$(".clevel-cart-continer").replaceWith(balanceAPI.CartHtml);
}
//Set the cart functions
CartFunctions();
}
function CartOrderlineHtml(quoteDetails, cartSingleLineHtml) {
var newCartLine = cartSingleLineHtml;
var tonnesCO2 = GetProperty(quoteDetails, "Co2Total_Tonne");
var shortDescription = GetProperty(quoteDetails, "ShortDescription");
var metaDataHtml = CartMetaData(quoteDetails.MetaData);
var quoteId = GetProperty(quoteDetails, "QuoteId");
newCartLine = newCartLine.replaceAll("==QUOTEID==", quoteId);
newCartLine = newCartLine.replaceAll("==CO2TONNES==", tonnesCO2);
newCartLine = newCartLine.replaceAll("==SHORTDISCRIPTION==", shortDescription);
newCartLine = newCartLine.replaceAll("==METADATA==", metaDataHtml);
return newCartLine;
}
function CartMetaData(metaData) {
var str = "";
if (typeof metaData != 'undefined') {
metaData.forEach(item => {
var metaDataString = "==NAME==:==VALUE==";
var metaName = GetProperty(item, "Name");
var metaValue = GetProperty(item, "Value");
metaDataString = metaDataString.replace("==NAME==", metaName);
metaDataString = metaDataString.replace("==VALUE==", metaValue);
str = str + metaDataString;
});
}
return str;
}
function CartFunctions() {
$(".cart-view").click(function() {
Log("cart view toggle");
var showElement = $(this).nextAll(".cart-item");
Log("Element to toggle:" +showElement)
showElement.toggle();
});
$(".cart-delete").click(function() {
var quoteId = $(this).data("quoteid")
Log("Cart-Delete-Click: " +quoteId)
CartDelete(quoteId);
BuildCart();
});
}
function CartDelete(quoteId) {
var mainQuoteId = GetProperty(balanceAPI.QuoteDetails, "QuoteId");
if(mainQuoteId == quoteId) {
balanceAPI.QuoteDetails = null;//There was only one quote just blank it.
Log("Cart-item-cleared-removed:" +quoteId);
ReloadPage();
return;
}
//Do we have lots of quotes find index in array and remove.
balanceAPI.QuoteDetails?.Quotes?.forEach(function(item, index, object) {
var itemQuoyeId = GetProperty(item,"QuoteId")
if (itemQuoyeId === quoteId) {
object.splice(index, 1);
Log("Cart-item-removed:" +quoteId);
}
});
Log("Cart-item-count:" +balanceAPI.QuoteDetails?.Quotes?.length);
//Have we removed all the quotes?
if(balanceAPI.QuoteDetails?.Quotes?.length == 0) {
ReloadPage();
return;
}
//Replace the current calulation back to the replacment text
if(balanceAPI.Step == ".clevel-step-calculation") {
$(".clevel-step-calculation").replaceWith(balanceAPI.CalculationHtml);
currentQuoets = GetCombinedQuote();
Log("Quote Combine" +JSON.stringify(currentQuoets));
PostCombine(currentQuoets);
Calculate();
ShowCalculation();
}
}
async function Initialize() {
//First make sure all scripts are on the page
await AddHeaderScripts();
Log("balanceAPI.SandboxMode" +balanceAPI.SandboxMode);
if(balanceAPI.SandboxMode) {
Log("Model.ApiSandboxRootUrl:https://sandbox-api.c-level.earth");
balanceAPI.ApiUrl = "https://sandbox-api.c-level.earth";
balanceAPI.HtmlRoot = "https://sandbox.c-level.earth";
}
Log("balanceAPI.ApiUrl" +balanceAPI.ApiUrl);
Log("balanceAPI.HtmlRoot" +balanceAPI.HtmlRoot);
var bootstrapCss = ''
appendHtml(document.head, bootstrapCss);
var customCssUrl = ''
appendHtml(document.head, customCssUrl);
if (balanceAPI.Calculator == "Flight") {
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/flightcalculator"
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/flightcalculator"
}
if (balanceAPI.Calculator == "Accommodation") {
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/accommodationcalculator"
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/accommodationcalculator"
}
if (balanceAPI.Calculator == "Business") {
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/businesscalculator"
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/businesscalculator"
}
if (balanceAPI.Calculator == "Carbon") {
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/carboncalculator"
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/carboncalculator"
}
if (balanceAPI.Calculator == "Car") {
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/carcalculator"
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/carcalculator"
}
if(balanceAPI.Calculator == "Tree") {
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/treecalculator"
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/treecalculator"
}
if(balanceAPI.Calculator == "Gas") {
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/gascalculator"
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/gascalculator"
}
if(balanceAPI.Calculator == "Electric") {
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/electriccalculator"
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/electriccalculator"
}
if(balanceAPI.Calculator == "Percapita") {
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/percapitacalculator"
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/percapitacalculator"
}
if(balanceAPI.Calculator == "FilmProduction") {
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/filmproductioncalculator"
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/filmproductioncalculator"
}
if(balanceAPI.Calculator == "FilmLights") {
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/filmlightscalculator"
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/filmlightscalculator"
}
if(balanceAPI.Calculator == "FilmLocation") {
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/filmlocationcalculator"
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/filmlocationcalculator"
}
//Multistep cals
if(balanceAPI.Calculator == "Energy") {
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/energycalculator"
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/energycalculator"
}
if(balanceAPI.Calculator == "Film") {
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/filmcalculator";
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/filmcalculator";
}
if(balanceAPI.Calculator == "Travel") {
balanceAPI.NavigationHtml = balanceAPI.HtmlRoot + "/htmlnavigation/travelcalculator"
balanceAPI.CalculatorHtmlUrl = balanceAPI.HtmlRoot + "/html/travelcalculator"
}
BuildCart();
BuildHtml();
CartFunctions();
};
function Calculate() {
Log("Calculate() called");
balanceAPI.Error = false;
//Set the client referance if there is one for the quote
if($('#clevel-clientref').length) {
var _ref = $("#clevel-clientref").val();
if(_ref) {
balanceAPI.Referance = _ref;
Log("Referance set:" +balanceAPI.Referance);
}
}
//Call the correct Calculate function
if(balanceAPI.Calculator == "Flight" || balanceAPI.Step == ".clevel-step-flight") {
FlightCalculate();
}
if(balanceAPI.Calculator == "Accommodation" || balanceAPI.Step == ".clevel-step-accommodation") {
AccommodationCalculate();
}
if(balanceAPI.Calculator == "Business") {
BusinessCalculate();
}
if(balanceAPI.Calculator == "Carbon") {
CarbonCalculate();
}
if(balanceAPI.Calculator == "Car" || balanceAPI.Step == ".clevel-step-car") {
CarCalculate();
}
if(balanceAPI.Calculator == "Gas" || balanceAPI.Step == ".clevel-step-gas") {
GasCalculate();
}
if(balanceAPI.Calculator == "Electric" || balanceAPI.Step == ".clevel-step-electric") {
ElectricCalculate();
}
if(balanceAPI.Calculator == "FilmProduction" || balanceAPI.Step == ".clevel-step-filmproduction") {
FilmProductionCalculate();
}
if(balanceAPI.Calculator == "FilmLights" || balanceAPI.Step == ".clevel-step-filmlights") {
FilmLightsCalculate();
}
if(balanceAPI.Calculator == "FilmLocation" || balanceAPI.Step == ".clevel-step-filmlocation") {
FilmLocationCalculate();
}
if(balanceAPI.Calculator == "Tree") {
TreeCalculate();
}
if(balanceAPI.Calculator == "Percapita") {
PerCapitaCalculate();
}
//MultiStep start points
if(balanceAPI.Calculator == "Energy") {
if(balanceAPI.Step == ".clevel-step-one") {
GasCalculate();
}
}
if(balanceAPI.Calculator == "Business") {
if(balanceAPI.Step == ".clevel-step-one") {
BusinessCalculate();
}
}
if(balanceAPI.Calculator == "Film") {
if(balanceAPI.Step == ".clevel-step-one") {
FilmLocationCalculate();
}
}
if(balanceAPI.Calculator == "Travel") {
if(balanceAPI.Step == ".clevel-step-one") {
FlightCalculate();
}
}
};
async function SetNavigation() {
//Remove the selected tag from nav
$("a").removeClass("clevel-nav-selected");
Log("SetNavigation()");
var navSelector = balanceAPI.Step.replace('-dash','');
navSelector = navSelector.replace('step','next');
Log("Nav selector:" +navSelector);
if($(navSelector)) {
$(navSelector).addClass("clevel-nav-selected");
}
//Next Steps
$(".clevel-next-calculation").click(function() {
Log("clevel-net-calculation click()")
//Only show cal if there is a QuoteDetails
if(balanceAPI.QuoteDetails) {
ShowCalculation();
} else {
if(!balanceAPI.Error) {
alert("You cant see the results until you have made an offset");
}
balanceAPI.Error = true;
}
})
$(".clevel-next-flight").click(function() {
balanceAPI.Step = ".clevel-step-flight"
ShowStep();
SetNavigation();
Settings();
})
$(".clevel-next-filmlights").click(function() {
balanceAPI.Step = ".clevel-step-filmlights"
ShowStep();
SetNavigation();
Settings();
})
$(".clevel-next-filmlocation").click(function() {
balanceAPI.Step = ".clevel-step-filmlocation"
ShowStep();
SetNavigation();
Settings();
})
$(".clevel-next-filmproduction").click(function() {
balanceAPI.Step = ".clevel-step-filmproduction"
ShowStep();
SetNavigation();
Settings();
})
$(".clevel-next-car").click(function() {
balanceAPI.Step = ".clevel-step-car"
ShowStep();
SetNavigation();
Settings();
})
$(".clevel-next-accommodation").click(function() {
balanceAPI.Step = ".clevel-step-accommodation"
ShowStep();
SetNavigation();
Settings();
})
$(".clevel-next-gas").click(function() {
balanceAPI.Step = ".clevel-step-gas"
ShowStep();
SetNavigation();
Settings();
})
$(".clevel-next-electric").click(function() {
balanceAPI.Step = ".clevel-step-electric"
ShowStep();
SetNavigation();
Settings();
})
}
async function ButtonEvents() {
Log("ButtonEvents() called")
//Add item without moving.
$(".clevel-add").click(function() {
Log("clevel-add click()")
Calculate();
if(!balanceAPI.Error) {
BuildCart();
ShowAddAnother()
}
var srcollElementId = balanceAPI.Step.replace('.', '');
if(element == null || element.length === 0) {
//Cant find the correct element scroll to the top
srcollElementId = "clevel-calculator";
}
var element = document.getElementById(srcollElementId);
Log("Call scroll with element " +srcollElementId);
ScrollToResolver(element);
})
$('.clevel-add-another-button').click(function() {
$(".clevel-calculate").show();
$(".clevel-add-another").hide();
var srcollElementId = balanceAPI.Step.replace('.', '');
Log("Call scroll with element " +srcollElementId);
ScrollToResolver(document.getElementById(srcollElementId));
// Check if the elements exist and then set their values to an empty string
ClearFormForNextCalculation();
})
$("#clevel-show-price").click(function() {
Log("clevel-show-price click()")
ShowCalculation();
})
$("#clevel-calculate-price").click(function() {
Log("clevel-calculate-price click()")
Calculate();
ShowCalculation();
//Wait
setTimeout(function (){}, 500);
//Scroll to element
ScrollToResolver(document.getElementById("clevel-step-calculation"));
})
}
async function BuildProjectHtml(calHtml) {
var projectsHtml = await FetchHtml(balanceAPI.HtmlRoot + "/html/projects/" +balanceAPI.ApiKey);
calHtml = calHtml.toString().replaceAll("==PROJECTS==", projectsHtml);
return calHtml
}
async function BuildNavigationHtml(calculatorHtml) {
//Add the navigation
var navigationResultsHtml = "";
if(balanceAPI.NavigationHtml.length) {
var navigationResultsHtml = await FetchHtml(balanceAPI.NavigationHtml);
}
calculatorHtml = calculatorHtml.toString().replaceAll("==NAVIGATION==", navigationResultsHtml);
return calculatorHtml;
}
async function Settings() {
//Set the settings
if(balanceAPI.Calculator == "Flight") {
await FlightSettings()
}
//Apply settings
if(balanceAPI.Calculator == "Business") {
await BusinessSettings();
}
//Apply settings
if(balanceAPI.Calculator == "Carbon") {
await CarbonSettings();
}
if(balanceAPI.Calculator == "Car") {
await CarSettings();
}
if(balanceAPI.Calculator == "Gas") {
await GasSettings();
}
if(balanceAPI.Calculator == "Energy") {
await GasSettings();
}
if(balanceAPI.Calculator == "Film") {
await CarSettings();
await FlightSettings()
}
if(balanceAPI.Calculator == "Travel") {
await FlightSettings();
await CarSettings();
}
}
async function BuildHtml() {
var cal = document.getElementById(balanceAPI.CalculatorElement);
if (cal) {
//Build Caclulation results HTML template
var calulatorResultsHtml = await FetchHtml(balanceAPI.HtmlRoot + "/html/calculation");
calulatorResultsHtml = calulatorResultsHtml.toString().replaceAll('==CART==', balanceAPI.CartHtml);
balanceAPI.CalculationHtml = calulatorResultsHtml;
//Build full calculator HTML
var calculatorHtml = await FetchHtml(balanceAPI.CalculatorHtmlUrl);
calculatorHtml = calculatorHtml.toString().replaceAll("==CALCULATION==", calulatorResultsHtml);
calculatorHtml = calculatorHtml.toString().replaceAll('==CART==', balanceAPI.CartHtml);
calculatorHtml = await BuildProjectHtml(calculatorHtml);
calculatorHtml = await BuildNavigationHtml(calculatorHtml);
//Set the Calculator inner HTML
cal.innerHTML = calculatorHtml;
if (typeof c !== "undefined" && c != null) {
alert("Your transaction has been canceled")
window.location.replace(location.pathname);
}
if (typeof quoteParmId !== "undefined" && quoteParmId != null) {
Log("Quote id found");
OrderCompleted();
} else {
Settings();
//Set the default dsah steps
DashStepSettings();
SetNavigation();
ButtonEvents();
}
} else {
Log("element is missing from the page");
}
}
function InitFunctions() {
Log("InitFunctions");
$("#clevel-purchase").click(function() {
Log("Purchase click")
Purchase();
});
$("#clevel-balance-now").click(function() {
var element = document.getElementById("clevel-purchase");
Log("Scoll to clevel-purchase")
ScrollToResolver(element);
});
$('#clevel-balance-more').click(function() {
Log("Reload Page")
window.location.replace(location.pathname);
})
}
function Purchase() {
Log("Complete click");
var updateOffset = GetUpdateObject();
var url = "/v1/quote/update";
PostUpdate(url, updateOffset);
var url = balanceAPI.UpdateResponse.CheckOutUrl;
Log("CheckOutUrl" +url)
if (url == "invoice") {
var url = window.location.href.split(/[?#]/)[0];
url = url + "?oid=" + balanceAPI.QuoteDetails.QuoteId;
Log("redirect url:" + url);
window.location.replace(url);
}
Log("redirect url:" + url);
window.location.replace(url);
}
async function OrderCompleted() {
Log("Order complete");
var url = balanceAPI.ApiUrl + "/v1/quote/purchase/" +quoteParmId
var result = "";
result = await GetJSONFromAPI(url, result);
balanceAPI.QuoteDetails = result;
ShowComplete();
}
function ShowAddAnother() {
//Dont hid the calculator if we have an error.
if(balanceAPI.Error) {
balanceAPI.Error = false;//Reset error as it has been shown.
return;
}
$(".clevel-calculate").hide();
$(".clevel-offset").show();
$(".clevel-add-another").show();
if(balanceAPI.Step == ".clevel-step-calculation") {
return;
}
}
async function ShowCalculation() {
Log("ShowCalculation()");
balanceAPI.Error = false;
//Check we have item in
if(balanceAPI?.QuoteDetails == null) {
return;
}
balanceAPI.Step = ".clevel-step-calculation"
HideStep();
Log("BuildCart()");
await BuildCart();
await BuildCompleteCalculationHtml();
ShowStep();
ButtonEvents();
CartFunctions();
SetNavigation();
Settings();
//If we have a referance add it to the certificate name field
var referance = balanceAPI.Referance;
if(referance.length) {
document.getElementById('clevel-cert-name').value = referance;
}
}
async function ShowComplete() {
Log("ShowComplete()");
balanceAPI.Step = ".clevel-step-complete";
HideStep();
Log("BuildCart()");
await BuildCart();
await BuildCompleteCalculationHtml();
CartFunctions();
ShowStep();
$('.clevel-cart').hide();
$('.clevel-cart-complete').show();
}
async function BuildCompleteCalculationHtml() {
//Replace the calculation with a new blank one!
var calulatorResultsHtml = await FetchHtml(balanceAPI.HtmlRoot + "/html/calculation");
var newBlankCalculation = calulatorResultsHtml;
//Are we replacing the current cart?
var cartElement = document.getElementById("clevel-calculation-container");
Log("Calculator Element found:" +cartElement)
if(cartElement) {
$("#clevel-calculation-container").replaceWith(calulatorResultsHtml);
Log("Calculator Html: replaced")
}
//Replace all content
var cal = document.getElementById(balanceAPI.CalculatorElement);
var calHtml = "";
if (cal) {
var totalPrice = balanceAPI?.QuoteDetails?.TotalPrice;
if(balanceAPI?.QuoteDetails?.TotalPrice > 1)
{
totalPrice = totalPrice.toFixed(2)
}
calHtml = cal.innerHTML;
if(typeof balanceAPI.QuoteDetails.TotalTrees != "undefined" && balanceAPI.QuoteDetails.TotalTrees != 0) {
calHtml = calHtml.toString().replaceAll("==OFFSETH1==", "YOUR IMPACT");
calHtml = calHtml.toString().replaceAll("==OFFSETCTA==", "PLANT TREES");
calHtml = calHtml.toString().replaceAll("==OFFSETFINALCATH2==", "BALANCE MY IMPACT");
calHtml = calHtml.toString().replaceAll("==OFFSETTOTAL==", balanceAPI.QuoteDetails.TotalTrees);
calHtml = calHtml.toString().replaceAll("==OFFSETTOTALTEXT==", "TREE(S) PLANTED");
} else {
calHtml = calHtml.toString().replaceAll("==OFFSETH1==", "YOUR CARBON FOOTPRINT")
calHtml = calHtml.toString().replaceAll("==OFFSETCTA==", "BALANCE MY CARBON");
calHtml = calHtml.toString().replaceAll("==OFFSETFINALCATH2==", "BALANCE MY CARBON");
calHtml = calHtml.toString().replaceAll("==OFFSETTOTAL==", balanceAPI.QuoteDetails.Co2Total_Tonne);
calHtml = calHtml.toString().replaceAll("==OFFSETTOTALTEXT==", "TONNES CO2");
}
calHtml = calHtml.toString().replaceAll("==OFFSETTOTALCOST==", totalPrice);
var calHtmlWithEq = await SetEquivilance(calHtml);
Log("Calculator Replaced HTML");
var calWithProjects = await BuildProjectHtml(calHtmlWithEq);
var calWithNav = await BuildNavigationHtml(calWithProjects);
calWithNav = calWithNav.toString().replaceAll('==CART==', balanceAPI.CartHtml);
cal.innerHTML = calWithNav;
InitFunctions();
}
}
function CheckQuotePart(quoteType) {
if(balanceAPI?.QuoteDetails?.Quotes?.includes(quoteType)) {
return true;
}
return false;
}
function RequiredText(htmlElement) {
if(!balanceAPI.Error) {
htmlElement.removeClass("error");
}
var result = htmlElement.val();
if(result == null) {
balanceAPI.Error = true;
}
if (result.length === 0) {
balanceAPI.Error = true;
}
if(balanceAPI.Error) {
htmlElement.addClass("error");
htmlElement.focus();
return true;
}
return false;
}
function RequiredNumber(htmlElement) {
Log("RequiredNumber" +JSON.stringify(htmlElement));
if(!balanceAPI.Error) {
htmlElement.removeClass("error");
}
if(!RequiredText(htmlElement)) {
var result = htmlElement.val();
if ($.isNumeric(result)) {
return false;
}
balanceAPI.Error = true;
htmlElement.focus();
htmlElement.addClass("error");
return true;
}
return false;
}
/* START FilmLocations Cal */
function FilmLocationCalculate() {
var cal = {
Description: "Film Location Offset",
CountryCode: "GB",
CurrencyCode: "GBP",
Reference: balanceAPI.Referance
}
Log("Cal Referance Set:" +cal.Reference);
var _countryCode = $("#clevel-filmlocation-countrycode").val();
var _externalCrew = $("#clevel-filmlocation-externalcrew").val();
var _shootlocation = $("#clevel-filmlocation-location").val();
var _shootDuration = $("#clevel-filmlocation-duration").val();
var _localCrew = $("#clevel-filmlocation-localcrew").val();
cal.LocalCrew = Number(_localCrew);
cal.ExternalCrew = Number(_externalCrew);
cal.DurationDays = Number(_shootDuration);
cal.CountryCode = _countryCode;
cal.ShootCityLocation = _shootlocation;
//Validation
RequiredNumber($("#clevel-filmlocation-externalcrew"));
RequiredNumber($("#clevel-filmlocation-localcrew"));
RequiredNumber($("#clevel-filmlocation-duration"));
Log("filmlocation calculate complete");
PostCalculation("/v1/calculate/filmlocation", cal);
}
/* END FilmLocations Cal */
/* START FilmLights Cal */
function FilmLightsCalculate() {
var cal = {
CountryCode: "GB",
CurrencyCode: "GBP",
LightNumber: 1,
Reference: balanceAPI.Reference,
LightType: "Key",
DurationDays: 2
}
var _countryCode = $("#clevel-filmlights-countrycode").val();
var _lightingType = $("#clevel-filmlights-type").val();
var _shootlocation = $("#clevel-filmlights-shootlocation").val();
var _shootDuration = $("#clevel-filmlights-shootDuration").val();
var _totalLights = $("#clevel-filmlights-lights").val();
cal.LightNumber = Number(_totalLights);
cal.DurationDays = Number(_shootDuration);
Log("filmlights duration:" +cal.DurationDays);
cal.LightType = _lightingType;
Log("filmlights duration:" +cal.DurationDays);
cal.CountryCode = _countryCode;
cal.ShootLocation = _shootlocation;
//Validation
RequiredNumber($("#clevel-filmlights-shootDuration"));
RequiredNumber($("#clevel-filmlights-lights"));
Log("filmlights Calculate: complete");
PostCalculation("/v1/calculate/filmlights", cal);
}
/* END FilmLights Cal */
/* START FilmProduction Cal */
function FilmProductionCalculate() {
var cal = {
Description: "Film Production Offset",
CountryCode: "GB",
CurrencyCode: "GBP",
Reference: balanceAPI.Reference,
ProductionType: "Edit"
}
var _countryCode = $("#clevel-filmproduction-countrycode").val();
var _productionType = $("#clevel-accommodation-type").val();
var _officeLocation = $("#clevel-filmproduction-officelocation").val();
var _durationDays = $("#clevel-filmproduction-duration").val();
var _totalPeople = $("#clevel-filmproduction-staff").val();
cal.TotalPeople = Number(_totalPeople);
cal.DurationDays = Number(_durationDays);
cal.ProductionType = _productionType;
cal.CountryCode = _countryCode;
cal.OfficeLocation = _officeLocation;
//Validation
RequiredNumber($("#clevel-filmproduction-duration"));
RequiredNumber($("#clevel-filmproduction-staff"));
Log("filmproduction Calculate: complete");
PostCalculation("/v1/calculate/filmproduction", cal);
}
/* END FilmProduction */
/* START Electricity Cal */
function ElectricCalculate() {
var cal = {
Description: "Electricity Offset",
CountryCode: "GB",
Amount: 1000,
Reference: balanceAPI.Reference,
CurrencyCode: "GBP"
}
var _ammount = $("#clevel-electric-amount").val();
var _countryCode = $("#clevel-electric-countrycode").val();
cal.CountryCode = _countryCode;
cal.Amount = Number(_ammount);
//Check validation
RequiredNumber($("#clevel-electric-amount"));
Log("Electricity Calculate: complete");
PostCalculation("/v1/calculate/electricity", cal);
}
/* END Electric */
/* START Gas Cal */
function GasCalculate() {
var cal = {
Description: "Gas Offset",
CountryCode: "UK",
Unit: "kwh",
Amount: 1000,
Reference: balanceAPI.Reference,
CurrencyCode: "GBP"
}
var _amount = $("#clevel-gas-amount").val();
var _unitChecked = $("#btn-gas-m3").attr("checked");
if (_unitChecked === "checked") {
cal.Unit = "m3";
}
cal.Amount = Number(_amount);
Log("Gas Calculate: complete");
//Check validation
RequiredNumber($("#clevel-gas-amount"));
PostCalculation("/v1/calculate/gas", cal);
}
function GasSettings() {
$(".clevel-gas-unit").click(function () {
$(".clevel-gas-unit").removeClass('bg-colour-one');
$(".clevel-gas-unit").removeAttr("checked");
$(this).addClass('bg-colour-one');
$(this).attr('checked', 'checked');
})
}
/* END Gas */
/* START PerCapita Cal */
function PerCapitaCalculate() {
var cal ={
CountryCode: "GB",
TotalPeople: 1,
Reference: balanceAPI.Reference,
CurrencyCode: "GBP"
}
var _people = $("#clevel-percapita-people").val();
cal.TotalPeople = Number(_people);
var _countryCode = $("#clevel-percapita-country").val();
cal.CountryCode = _countryCode;
Log("PerCapita Calculate: complete");
//Check validation
RequiredNumber($("#clevel-percapita-people"));
PostCalculation("/v1/calculate/percapita", cal);
}
/* END PerCapita Cal */
/* START Tree Cal */
function TreeCalculate() {
var cal = {
Trees: 1,
Reference: "",
CurrencyCode: "GBP",
Reference: balanceAPI.Reference
}
var _treesToPlant = $("#clevel-tree-amount").val();
cal.Trees = Number(_treesToPlant);
//Check validation
RequiredNumber($("#clevel-tree-amount"));
//only post if no error
Log("Tree Calculate: complete");
PostCalculation("/v1/calculate/planttrees", cal);
}
/* END Tree Cal */
/* START Business Cal */
function BusinessCalculate() {
Log("Business Calculate: start");
var cal = {
FromDate:"2023/01/01",
ToDate:"2023/01/01",
CountryCode:"UK",
OrganisationSize:"",
HomeEmployee:1,
OfficeEmployee:1,
OfficeSizem2:200,
HomeWorkPercentage:50,
Reference:""
}
//Populate
var _fromMonth = $("#clevel-business-frommonth").val();
var _fromYear = $("#clevel-business-fromyear").val();
cal.ToDate = _fromYear + '-' + formatZeroPadding(_fromMonth) + '-01';
var _toMonth = $("#clevel-business-tomonth").val();
var _toYear = $("#clevel-business-toyear").val();
cal.ToDate = _toYear + '-' + formatZeroPadding(_toMonth) + '-01';
var _organisation = $("#clevel-business-org").val();
cal.OrganisationSize = _organisation;
//Check validation
Log("#clevel-clientref");
RequiredText($("#clevel-clientref"));
Log("#clevel-business-peoplehome");
RequiredNumber($("#clevel-business-peoplehome"));
Log("#clevel-business-homepercent");
RequiredNumber($("#clevel-business-homepercent"));
Log("#clevel-business-peopleoffice");
RequiredNumber($("#clevel-business-peopleoffice"));
Log("#clevel-business-officesizem2");
RequiredNumber($("#clevel-business-officesizem2"));
var _clientRef = $("#clevel-clientref").val();
cal.Reference = _clientRef;
var _peopleHome = $("#clevel-business-peoplehome").val();
cal.HomeEmployee = Number(_peopleHome);
var _peopleOffice = $("#clevel-business-peopleoffice").val();
cal.OfficeEmployee = Number(_peopleOffice);
var _officeSize_m2 = $("#clevel-business-officesizem2").val();
cal.OfficeSizem2 = Number(_officeSize_m2);
var _homePercent = $("#clevel-business-homepercent").val();
cal.HomeWorkPercentage = Number(_homePercent);
Log("Business Calculate: complete");
PostCalculation("/v1/calculate/business", cal);
}
function BusinessSettings() {
}
/* END Carbon */
/* START Car Cal */
function CarCalculate() {
var cal = {
Size: "Small",
Type: "Petrol",
Distance: 1,
Reference: balanceAPI.Reference,
DistanceMeasurement: "Km"
}
//Populate
var _carSize = $("#clevel-car-size").val();
var _carType = $("#clevel-car-type").val();
cal.Size = _carSize;
cal.Type = _carType;
var _unitChecked = $("#btn-miles").attr("checked");
if (_unitChecked === "checked") {
cal.DistanceMeasurement = "Miles";
}
var _Distance = $("#clevel-car-distance").val();
cal.Distance = Number(_Distance);
//Check validation
RequiredNumber($("#clevel-car-distance"));
Log("Car Calculate: complete");
PostCalculation("/v1/calculate/car", cal);
}
function CarSettings() {
$(".clevel-car-unit").click(function () {
$(".clevel-car-unit").removeClass('bg-colour-one');
$(".clevel-car-unit").removeAttr("checked");
$(this).addClass('bg-colour-one');
$(this).attr('checked', 'checked');
})
}
/* END Carbon */
/* START Carbon Cal */
function CarbonCalculate() {
var cal = {
Description: "Carbon offset",
Unit: "Kg",
Co2Amount: 1,
Reference: balanceAPI.Reference,
CurrencyCode: "GBP"
}
var _co2Ammount = $("#clevel-carbon-amount").val();
var _unitChecked = $("#btn-tonne").attr("checked");
if (_unitChecked === "checked") {
cal.Unit = "Tonne";
}
cal.Co2Amount = Number(_co2Ammount);
//Check validation
RequiredNumber($("#clevel-carbon-amount"));
Log("Carbon Calculate: complete");
PostCalculation("/v1/calculate/carbon", cal);
}
function CarbonSettings() {
$(".clevel-carbon-unit").click(function () {
$(".clevel-carbon-unit").removeClass('bg-colour-one');
$(".clevel-carbon-unit").removeAttr("checked");
$(this).addClass('bg-colour-one');
$(this).attr('checked', 'checked');
})
}
/* END Carbon */
//API Calls
/* START Accommodation */
function AccommodationCalculate() {
var cal = {
Guests: 1,
Nights: 1,
AccomodationType: "Hotel",
CountryCode:"UK",
Reference: balanceAPI.Reference,
CurrencyCode: "GBP"
}
//Populate
var _guests = $("#clevel-accommodation-guests").val();
var _countryCode = $("#clevel-accommodation-countrycode").val();
var _nights = $("#clevel-accommodation-nights").val();
var _accomodationType = $("#clevel-accommodation-type").val();
cal.Guests = Number(_guests)
cal.Nights = Number(_nights)
cal.CountryCode = _countryCode
cal.AccomodationType = _accomodationType
Log("AccommodationCalculate: complete");
//Check validation
RequiredNumber($("#clevel-accommodation-nights"));
RequiredNumber($("#clevel-accommodation-guests"));
PostCalculation("/v1/calculate/accommodation", cal);
}
/* END Accommodation */
/* START Flight Functions */
async function FlightSettings() {
if (balanceAPI.Calculator == "Flight" || balanceAPI.Calculator == "Travel" || balanceAPI.Calculator == "Film") {
SetBloodHound();
SetAutoComplete($('#clevel-from'));
SetAutoComplete($('#clevel-to'));
$(".clevel-flight-trip").click(function () {
$(".clevel-flight-trip").removeClass('bg-colour-two');
$(".clevel-flight-trip").removeAttr("checked");
$(this).addClass('bg-colour-two');
$(this).attr('checked', 'checked');
})
}
$("#clevel-from").focusout(function () {
var result = CheckIataCode($("#clevel-from"));
Log("clevel-to check:" +result);
});
$("#clevel-to").focusout(function () {
var result = CheckIataCode($("#clevel-to"));
Log("clevel-to check:" +result);
});
}
function FlightCalculate() {
var cal = {
IataCodes: [],
IsReturn: false,
Passengers: 1,
Class: "Economy",
Reference: balanceAPI.Reference,
CurrencyCode: "GBP"
}
//Populate
var _fromAirport = $("#clevel-from").val();
var _passangerNumber = $("#clevel-passengers").val();
var _toAirport = $("#clevel-to").val();
var _roundTrip = $("#btn-return").attr("checked");
var _flightClass = $("#clevel-flightclass").val();
var _fromIataCode = _fromAirport.substring(0, 3);
var _toIataCode = _toAirport.substring(0, 3);
if (!CheckIataCode($("#clevel-from"))) {
if(balanceAPI.QuoteDetails == null) {
alert("Error on FROM airport, Please use three letter airport code or autocomplete.");
$("#clevel-from").focus();
balanceAPI.Error = true;
return;
}
}
if (!CheckIataCode($("#clevel-to"))) {
if(balanceAPI.QuoteDetails == null) {
alert("Error on TO airport, Please use three letter airport code or autocomplete.");
$("#clevel-to").focus()
balanceAPI.Error = true;
return;
}
}
if (isNaN(_passangerNumber)) {
alert("Passanger number is not a number");
return;
}
if (_roundTrip === "checked") {
cal.IsReturn = true;
}
cal.IataCodes = [_fromIataCode, _toIataCode]
cal.Passengers = _passangerNumber;
cal.Class = _flightClass;
Log("FlightCalculate: complete");
Log("From IATSA Code:" +_fromIataCode)
PostCalculation("/v1/calculate/flight", cal);
//Clear the form
$("#clevel-from").val(null);
$("#clevel-passengers").val(1);
$("#clevel-to").val(null);
}
function CheckIataCode(htmlElement) {
htmlElement.removeClass("error");
var airport = htmlElement.val();
if ((airport.indexOf("-") === -1 && airport.indexOf("-") !== 4) && (airport.length !== 3)) {
var check = true;
//Check if IATA codes passed in query string.
if (typeof clevelFlightFrom !== "undefined" && clevelFlightFrom !== null) {
check = false;
}
if (typeof clevelFlightTo !== "undefined" && clevelFlightTo !== null) {
check = false;
}
if (check) {
htmlElement.addClass("error");
return false;
}
}
var iataCode = airport.substring(0, 3);
if (typeof (iataCode) !== 'undefined' || iataCode !== null || iataCode !== "") {
var url = balanceAPI.ApiUrl + "/v1/airport/details/" + iataCode
var result = GetJQueryAPICall(url);
Log("IATACode:" +JSON.stringify(result));
if(result == null) {
airportData = null;
htmlElement.addClass("error");
} else {
airportData = result;
htmlElement.addClass("success");
}
}
return true;
}
/* END Flight Functions */