").appendTo("body"); scrollbarWidth=scrollbarParent.children().innerWidth()-scrollbarParent.children().height(99).innerWidth(); if (userAgent.match(/(edge\/\d+|Edge\/\d+)/)) {scrollbarWidth=scrollbarWidth+4;} scrollbarParent.remove();} $("a[data-linkinject]").each(function() {$(this).attr("href",$(this).data("linkinject"));}); $("#interfacemenu").on("show.bs.collapse hide.bs.collapse", function(e) {e.preventDefault(); $(this).toggleClass("in");}); $("#interfacemenu .dropdown-menu").on("click", function(e) {if ($(e.target).closest("a, button, input").length===0) {e.stopPropagation();}}); $(".servicesselect>a").on("click", function(e) {e.preventDefault(); e.stopPropagation(); $(this).blur(); const $selected=$(this).parent(); $("#serviceslist>li.servicesselect").not($selected).removeClass("selected selectedsmall"); $selected.addClass("selected"); if ($(this).find(".fa-caret-right").first().css("display")==="none") {$selected.toggleClass("selectedsmall");} else {$selected.addClass("selectedsmall");} if ($selected.offset().top<$(window).scrollTop() || $selected.offset().top+$selected.outerHeight()>$(window).scrollTop()+$(window).height()) {$selected[0].scrollIntoView({behavior: "auto", block: "start"});}}); $(document).on("show.bs.modal", function() {$("#interfacemenu .dropdown.open").each(function() {$(this).find(".dropdown-toggle").dropdown("toggle");}); if ($("#interfacemenu").hasClass("in")) {$("#interfaceheader .navbar-toggle").click();}}); $(document).on("shown.bs.modal",function(){if (!isMobile) {$("body, #interfaceheader, .modal").css("margin-right",scrollbarWidth+"px"); if (!$("#proxyscroll").length) {$("
").appendTo("body");}} $("body").css({"overflow-x":"hidden","overflow-y":"hidden"});}); $(document).on("hidden.bs.modal",function(){if (!$(".modal").is(":visible")) {if (!isMobile) {$("body, #interfaceheader, .modal").css("margin-right","0"); $("#proxyscroll").remove();} $("body").css({"overflow-x":"visible","overflow-y":"scroll"});}}); if (isFF) {$("#interfaceheader .badge").css("padding-bottom","4px");} if (isMobile) {$("head").append("");} if (userAgent.match(/(iphone|ipad|ipod)/)) {$("head").append("");} $(".interfacematcheditor, .interfacematchtranslator, .interfacematchdesigner, .interfacematchwriter").click(function(e) {e.preventDefault(); const role=((e.currentTarget.className || "").match(/interfacematch(editor|translator|designer|writer)/) || [, "editor"] )[1], saved=(() => {try {return (localStorage.getItem("match"+role) || "").trim();} catch (err) {return "";}})(), $modal=$("#matchmodal"), $body=$modal.find(".modal-body").first(), $intro=$body.children("div:first-of-type"), $dialog=$body.children("div:last-of-type"); if (saved) {$intro.hide(); $dialog.html(saved).show();} else {$intro.show(); $dialog.hide().empty();} $modal.find("textarea").val(""); $modal.find(".matcheditor, .matchtranslator, .matchdesigner, .matchwriter").hide(); $modal.find(".match"+role).show(); $modal.modal({backdrop: "static", keyboard: false, show: true});}); $("#matchconfirmclear").click(function() {$("#matchconfirmmodal").modal({backdrop: "static", keyboard: false, show: true});}); $("#matchclear").click(function() {const $modal=$("#matchmodal"), $textarea=$modal.find("textarea:visible").first(), role=(($textarea.attr("class") || "").match(/match(editor|translator|designer|writer)/) || [, "editor"])[1], $body=$modal.find(".modal-body").first(), $intro=$body.children("div:first-of-type"), $dialog=$body.children("div:last-of-type"); try {localStorage.removeItem("match"+role);} catch (err) {} $dialog.empty(); $textarea.val("").focus(); if (!$intro.is(":visible")) {$intro.stop(true, true).fadeIn(200); $dialog.hide();} $("#matchconfirmmodal").modal("hide");}); $("#matchsubmit").click(function() {if ($("#matchhoneypot").val()==="") {const $modal=$("#matchmodal"), $textarea=$modal.find("textarea:visible").first(); if ($textarea.length) {const paragraphs=$textarea.val().replace(/&/g, "&").replace(//g, ">").replace(/\r\n?/g, "\n").replace(/[\x00-\x1F\x7F]/g, "").replace(/[\u200B-\u200D\uFEFF]/g, "").replace(/\n{2,}/g, "\n").trim().split(/\n+/).map(s => s.trim()).filter(Boolean), newDialog=paragraphs.length ? "" + paragraphs.join("
") + "
" : ""; if (newDialog!=="") {const $submit=$(this), $buttons=$modal.find("button"), $body=$modal.find(".modal-body").first(), $intro=$body.children("div:first-of-type"), introFade=$intro.is(":visible") ? $intro.stop(true, true).fadeOut(200).promise() : $.Deferred().resolve().promise(), $dialog=$body.children("div:last-of-type"), role=(($textarea.attr("class") || "").match(/match(editor|translator|designer|writer)/) || [, "editor"])[1]; $buttons.prop("disabled", true); $submit.addClass("matchloading").attr("aria-busy", "true"); introFade.done(function() {$textarea.val(""); $dialog.show().append(""); $body.scrollTop($body[0].scrollHeight); const shortDialog=truncateMatch($dialog), $ai=$(""); $.when($.ajax({url: "/processmatch", method: "POST", dataType: "text", timeout: 30000, data: {dialog: shortDialog, role: role, isvalidate: "true"}}), $.Deferred(function(d) {setTimeout(function() {d.resolve();}, 1000);}).promise()).then(function(ajaxTuple) {if (String(ajaxTuple[0] || "").trim()==="true") {return $.ajax({url: "/processmatch", method: "POST", dataType: "text", timeout: 30000, data: {dialog: shortDialog, role: role, isvalidate: "false"}});} else {return $.Deferred().resolve(ajaxTuple[0]).promise();}}).then(function(aiMessage) {aiMessage=String(aiMessage || "").trim(); if (!aiMessage) {return $.Deferred().reject().promise();} else {const $caret=$("█"), aiMessageArray=aiMessage.replace(//gi, "").replace(/<\/p>/gi, "\n\n").replace(/\r\n?/g, "\n").trim().split(/\n{2,}/).map(p => p.trim()).filter(Boolean); let t=0, lastDelay=0; $dialog.append($ai.append($caret)); $ai[0].scrollIntoView({block: "nearest"}); for (let pi=0; pi0) {t+=250;} const parts=aiMessageArray[pi].match(/[^.!?]+[.!?]*\s*/g) || [aiMessageArray[pi]]; for (let si=0; si {$ai.append($("").text(content).css("animation-delay", delay+"ms"));}, delay); lastDelay=delay; t+=90;} if (pi {$ai.append($("").css("animation-delay", delay+"ms"));}, delay); lastDelay=delay;}} setTimeout(() => {$ai.find(".matchchunk, .matchbr").each(function() {$(this).replaceWith($(this).text());}); $caret.remove(); try {localStorage.setItem("match"+role, truncateMatch($dialog));} catch (err) {} $buttons.prop("disabled", false); $submit.removeClass("matchloading").attr("aria-busy", "false");}, lastDelay+220);}}).fail(function() {const $error=$("Sorry—something went wrong. Please try again.
"); $dialog.append($ai.append($error)); $ai[0].scrollIntoView({block: "nearest"}); try {localStorage.setItem("match"+role, truncateMatch($dialog));} catch (err) {} $buttons.prop("disabled", false); $submit.removeClass("matchloading").attr("aria-busy", "false");});});} else {$textarea.focus();}}}}); $("#interfaceediting").click(function(e) {e.preventDefault(); $("#editingmodal").modal({backdrop:"static", keyboard:false, show:true});}); $(".interfacecontact").click(function(e) {e.preventDefault(); $("#contactmodal").modal({backdrop:"static", keyboard:false, show:true});}); $("#contactsubmit").click(function(){$("#contactform").submit();}); $(".results, .modalresults").each(function(){$(this).attr("src","about:blank");}); $(".modalresults").parents(".modal").on("hidden.bs.modal",function(){$(".modalresults",this).css({"height":"0","margin-bottom":"0"}).attr("src","about:blank");}); $(".modal").on("hidden.bs.modal",function(){$(".modal-footer",this).addClass("modalbtnhide");}); $(window).on("shown.bs.modal",function(){$(".modal:visible").each(function(){var shownModal=$(this), checkFooter=setInterval(function(){var shownFooter=shownModal.find(".modal-footer").first(); if (shownFooter.length) {clearInterval(checkFooter); modalButtons(shownFooter);}},0);});}); $("#browsemodal, #setupprojectmodal, #paymentmodal").on("hidden.bs.modal",function(){$(this).find(".modal-content").empty(); $(this).removeData();}); targetForm(""); modalScroll(""); modalPopover($("body")); $("a[data-toggle='popover']").on("shown.bs.popover",function(){modalPopover($(this).next());}); if (isMobile) {$(".modal-content").css("margin-bottom","30px"); $("#matchmodal textarea").css("font-size", "16px");} else {$(".modal-scroll").scroll(function(){$("[data-toggle=popover]").popover("hide");});} localDate(); $("#interfacesignin").click(function(e) {e.preventDefault(); signinModal("");}); $(".interfacejoin").click(function(e) {e.preventDefault(); $("#joinmodal").modal({backdrop:"static", keyboard:false, show:true});}); $(".signinretrieve").click(function(e) {e.preventDefault(); $(this).blur().toggleClass("signinretrieveactive");}); $("#signinsubmit").click(function(){$("#signinform").submit();}); $("#managersubmit").click(function(){$("#managertarget").val($("#signintarget").val()); $("#managerusername").val($("#signinusername").val()); $("#managerpassword1").val($("#signinpassword1").val()); $("#managerisremember").val($("#signinisremember").val()); $("#managerform").submit();}); setTimeout(loopWords, 2000); Chart.defaults.global.scaleLabel=function(yaxis) {return yaxis.value.toString().replace(".",".");}; Chart.defaults.global.scaleFontFamily="'Open Sans', 'Arial Unicode MS', 'Lucida Grande', 'Lucida Sans Unicode', sans-serif"; Chart.defaults.global.tooltipTemplate=function(tooltip) {return (tooltip.datasetLabel.toString()+" "+tooltip.label.toString()+" - "+tooltip.value.toString().replace(".",".")).trim();}; Chart.defaults.global.multiTooltipTemplate=function(tooltip) {var label=""; if (tooltip.datasetLabel) {label=tooltip.datasetLabel.toString()+" - "+label;} return label+tooltip.value.toString().replace(".",".");}; Chart.defaults.global.tooltipFontFamily="'Open Sans', 'Arial Unicode MS', 'Lucida Grande', 'Lucida Sans Unicode', sans-serif"; layoutCharts(); Chart.defaults.global.animation=false; setTimeout(function(){$(document).trigger("afterready");},1);}); $(document).bind("afterready",function(){$("html").css("opacity","1"); if ($("#bodyheader").length) {$("#bodyheader").css("opacity","1");}}); $(function(){$("[data-toggle=popover]").popover();}); $("body").on("click",function(e){$("[data-toggle=popover]").each(function(){if (!$(this).is(e.target) && $(this).has(e.target).length===0 && $(".popover").has(e.target).length===0) {$(this).popover("hide");}});}); $(window).resize(function(){$("[data-toggle=popover]").popover("hide");}); $(window).resize(function(){modalScroll(""); modalButtons($(".modal-footer:visible")); if ($.isFunction(window.froalaHeight)) {froalaHeight();} $(".results, .modalresults, .message").each(function(){if ($(this).contents().has("title").length && !($(this).hasClass("message") && $(this).prev().hasClass("msginitial"))) {iframeSize($(this));}}); chartObjects[1].destroy(); chartObjects[0].destroy(); layoutCharts();}); $(function(){$("[href^='#']").not("[href~='#']").click(function(e){e.preventDefault(); $(window).scrollTop($("[id*='"+$(this).attr("href").split("#")[1]+"']").offset().top-68);});}); google.charts.load("current", {packages: ["geochart"], language: "en"}); let data, options, geoChart; google.charts.setOnLoadCallback(function() {data=google.visualization.arrayToDataTable([["Country", "Projects", {role: "tooltip"}],[{v: 'AL', f: 'Projects:'}, 4, '4'],[{v: 'BB', f: 'Projects:'}, 4, '4'],[{v: 'BO', f: 'Projects:'}, 2, '2'],[{v: 'BS', f: 'Projects:'}, 5, '5'],[{v: 'DO', f: 'Projects:'}, 12, '12'],[{v: 'EG', f: 'Projects:'}, 377, '377'],[{v: 'FI', f: 'Projects:'}, 983, '983'],[{v: 'GR', f: 'Projects:'}, 488, '488'],[{v: 'ID', f: 'Projects:'}, 1345, '1,345'],[{v: 'IN', f: 'Projects:'}, 1600, '1,600'],[{v: 'IS', f: 'Projects:'}, 60, '60'],[{v: 'JO', f: 'Projects:'}, 98, '98'],[{v: 'LA', f: 'Projects:'}, 2, '2'],[{v: 'MK', f: 'Projects:'}, 4, '4'],[{v: 'MZ', f: 'Projects:'}, 2, '2'],[{v: 'QA', f: 'Projects:'}, 592, '592'],[{v: 'SG', f: 'Projects:'}, 1224, '1,224'],[{v: 'SV', f: 'Projects:'}, 1, '1'],[{v: 'TZ', f: 'Projects:'}, 37, '37'],[{v: 'UG', f: 'Projects:'}, 1, '1'],[{v: 'VE', f: 'Projects:'}, 1, '1'],[{v: 'ZA', f: 'Projects:'}, 233, '233'],[{v: 'BN', f: 'Projects:'}, 120, '120'],[{v: 'CA', f: 'Projects:'}, 13518, '13,518'],[{v: 'EE', f: 'Projects:'}, 164, '164'],[{v: 'ES', f: 'Projects:'}, 606, '606'],[{v: 'GH', f: 'Projects:'}, 7, '7'],[{v: 'HR', f: 'Projects:'}, 35, '35'],[{v: 'MG', f: 'Projects:'}, 14, '14'],[{v: 'MN', f: 'Projects:'}, 155, '155'],[{v: 'MY', f: 'Projects:'}, 2648, '2,648'],[{v: 'NE', f: 'Projects:'}, 28, '28'],[{v: 'OM', f: 'Projects:'}, 218, '218'],[{v: 'PR', f: 'Projects:'}, 96, '96'],[{v: 'PS', f: 'Projects:'}, 30, '30'],[{v: 'UA', f: 'Projects:'}, 106, '106'],[{v: 'US', f: 'Projects:'}, 202598, '202,598'],[{v: 'AE', f: 'Projects:'}, 489, '489'],[{v: 'CR', f: 'Projects:'}, 5, '5'],[{v: 'CY', f: 'Projects:'}, 120, '120'],[{v: 'GE', f: 'Projects:'}, 55, '55'],[{v: 'KW', f: 'Projects:'}, 1730, '1,730'],[{v: 'PK', f: 'Projects:'}, 53, '53'],[{v: 'PT', f: 'Projects:'}, 486, '486'],[{v: 'TW', f: 'Projects:'}, 10938, '10,938'],[{v: 'ZM', f: 'Projects:'}, 4, '4'],[{v: 'AU', f: 'Projects:'}, 3612, '3,612'],[{v: 'BY', f: 'Projects:'}, 17, '17'],[{v: 'CO', f: 'Projects:'}, 90, '90'],[{v: 'DK', f: 'Projects:'}, 525, '525'],[{v: 'DM', f: 'Projects:'}, 2, '2'],[{v: 'IQ', f: 'Projects:'}, 151, '151'],[{v: 'JM', f: 'Projects:'}, 16, '16'],[{v: 'KG', f: 'Projects:'}, 19, '19'],[{v: 'LT', f: 'Projects:'}, 31, '31'],[{v: 'LV', f: 'Projects:'}, 40, '40'],[{v: 'MO', f: 'Projects:'}, 8, '8'],[{v: 'MV', f: 'Projects:'}, 2, '2'],[{v: 'MX', f: 'Projects:'}, 909, '909'],[{v: 'NO', f: 'Projects:'}, 1362, '1,362'],[{v: 'NZ', f: 'Projects:'}, 249, '249'],[{v: 'PA', f: 'Projects:'}, 2, '2'],[{v: 'RU', f: 'Projects:'}, 329, '329'],[{v: 'SE', f: 'Projects:'}, 1686, '1,686'],[{v: 'SK', f: 'Projects:'}, 137, '137'],[{v: 'TN', f: 'Projects:'}, 12, '12'],[{v: 'UY', f: 'Projects:'}, 7, '7'],[{v: 'AR', f: 'Projects:'}, 239, '239'],[{v: 'BM', f: 'Projects:'}, 37, '37'],[{v: 'BR', f: 'Projects:'}, 820, '820'],[{v: 'GB', f: 'Projects:'}, 9182, '9,182'],[{v: 'GT', f: 'Projects:'}, 47, '47'],[{v: 'HK', f: 'Projects:'}, 5785, '5,785'],[{v: 'HU', f: 'Projects:'}, 36, '36'],[{v: 'IT', f: 'Projects:'}, 1938, '1,938'],[{v: 'KH', f: 'Projects:'}, 12, '12'],[{v: 'KR', f: 'Projects:'}, 32728, '32,728'],[{v: 'KY', f: 'Projects:'}, 2, '2'],[{v: 'LB', f: 'Projects:'}, 2186, '2,186'],[{v: 'MM', f: 'Projects:'}, 29, '29'],[{v: 'PE', f: 'Projects:'}, 100, '100'],[{v: 'SA', f: 'Projects:'}, 4472, '4,472'],[{v: 'TJ', f: 'Projects:'}, 1, '1'],[{v: 'VG', f: 'Projects:'}, 4, '4'],[{v: 'AG', f: 'Projects:'}, 10, '10'],[{v: 'AI', f: 'Projects:'}, 1, '1'],[{v: 'AT', f: 'Projects:'}, 339, '339'],[{v: 'AZ', f: 'Projects:'}, 23, '23'],[{v: 'BE', f: 'Projects:'}, 482, '482'],[{v: 'BG', f: 'Projects:'}, 26, '26'],[{v: 'CL', f: 'Projects:'}, 28, '28'],[{v: 'CN', f: 'Projects:'}, 7401, '7,401'],[{v: 'GI', f: 'Projects:'}, 43, '43'],[{v: 'HN', f: 'Projects:'}, 2, '2'],[{v: 'HT', f: 'Projects:'}, 2, '2'],[{v: 'IL', f: 'Projects:'}, 1253, '1,253'],[{v: 'KZ', f: 'Projects:'}, 54, '54'],[{v: 'LK', f: 'Projects:'}, 19, '19'],[{v: 'MA', f: 'Projects:'}, 11, '11'],[{v: 'MD', f: 'Projects:'}, 4, '4'],[{v: 'MU', f: 'Projects:'}, 1, '1'],[{v: 'NL', f: 'Projects:'}, 505, '505'],[{v: 'UZ', f: 'Projects:'}, 6, '6'],[{v: 'AF', f: 'Projects:'}, 1, '1'],[{v: 'AM', f: 'Projects:'}, 2, '2'],[{v: 'AW', f: 'Projects:'}, 54, '54'],[{v: 'BA', f: 'Projects:'}, 108, '108'],[{v: 'BH', f: 'Projects:'}, 213, '213'],[{v: 'BW', f: 'Projects:'}, 2, '2'],[{v: 'CH', f: 'Projects:'}, 2787, '2,787'],[{v: 'CZ', f: 'Projects:'}, 261, '261'],[{v: 'DE', f: 'Projects:'}, 2807, '2,807'],[{v: 'EC', f: 'Projects:'}, 13, '13'],[{v: 'IR', f: 'Projects:'}, 38, '38'],[{v: 'JP', f: 'Projects:'}, 13238, '13,238'],[{v: 'KE', f: 'Projects:'}, 84, '84'],[{v: 'LU', f: 'Projects:'}, 88, '88'],[{v: 'MW', f: 'Projects:'}, 1, '1'],[{v: 'NG', f: 'Projects:'}, 31, '31'],[{v: 'NP', f: 'Projects:'}, 1, '1'],[{v: 'PL', f: 'Projects:'}, 803, '803'],[{v: 'PY', f: 'Projects:'}, 7, '7'],[{v: 'RO', f: 'Projects:'}, 26, '26'],[{v: 'SC', f: 'Projects:'}, 2, '2'],[{v: 'TH', f: 'Projects:'}, 2019, '2,019'],[{v: 'YE', f: 'Projects:'}, 1, '1'],[{v: 'BD', f: 'Projects:'}, 73, '73'],[{v: 'FR', f: 'Projects:'}, 1915, '1,915'],[{v: 'IE', f: 'Projects:'}, 179, '179'],[{v: 'MT', f: 'Projects:'}, 20, '20'],[{v: 'PH', f: 'Projects:'}, 71, '71'],[{v: 'RS', f: 'Projects:'}, 73, '73'],[{v: 'SI', f: 'Projects:'}, 897, '897'],[{v: 'SO', f: 'Projects:'}, 1, '1'],[{v: 'TR', f: 'Projects:'}, 2270, '2,270'],[{v: 'TT', f: 'Projects:'}, 40, '40'],[{v: 'VN', f: 'Projects:'}, 264, '264']]); options={colorAxis: {colors: ["#cce5ff", "#003366"] }, backgroundColor: "#ffffff", datalessRegionColor: "#f5f5f5", defaultColor: "#d3d3d3", legend: "none", resolution: "countries", displayMode: "regions"}; geoChart=new google.visualization.GeoChart(document.getElementById("aboutmap")); geoChart.draw(data, options);}); $(window).resize(function() {if (geoChart && data && options) {geoChart.draw(data, options);}});