File: /var/www/zaklada/html/lib/js/core/donate-form.js
(function ($) {
$(document).ready(function () {
const debounce = (func, wait) => {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
};
if($("#uploadFile").length > 0) {
var myDropzone = new Dropzone("div#uploadFile", {
url: ajaxurl,
params: {
order_id: $("#uploadFile").attr('data-order-id'),
action: "upload_pdf_file",
hash: $("#uploadFile").attr('data-hash'),
},
acceptedFiles: "image/*,application/pdf",
dictFileTooBig: "Datoteka je prevelika ({{filesize}}). Max veličina: {{maxFilesize}}.",
dictInvalidFileType: "Nije dozvoljen upload datoteke ovog tipa.",
autoProcessQueue: false,
maxFilesize: 10,
success: function (e, e2) {
if (e2.success) {
$("#application-form").fadeOut();
$("#application-thank-you").fadeIn();
}
},
});
}
function findOutDonationType(){
// ova helper funkcija pomaže kod shvaćanja što je trenutno odabrano
if( $("#donationType").val() == "0"){ // JEDNOKRATNA DONACIJA
return 0;
}else if($("#donationType").val() == "1" && $("#supporterType").val() == "0"){ // PODUPIRATELJ FIZIČKA OSOBA
return 1;
}else if($("#donationType").val() == "1" && $("#supporterType").val() == "1") { // PODUPIRATELJ KLUB, DRUŠTVO UDRUGA
return 2;
}else if($("#donationType").val() == "1" && $("#supporterType").val() == "2") { // PODUPIRATELJ PRAVNA OSOBA
return 3
}
}
function getMinimumPayment(){
var donationType = findOutDonationType();
if(donationType == 0){ // JEDNOKRATNA DONACIJA
return 25;
}else if(donationType == 1){ // PODUPIRATELJ FIZIČKA OSOBA
return 500;
}else if(donationType == 2) { // PODUPIRATELJ KLUB, DRUŠTVO UDRUGA
return 1000;
}else if(donationType == 3) { // PODUPIRATELJ PRAVNA OSOBA
return 5000;
}
}
function getRequiredFields() {
var donationType = findOutDonationType();
var fields = ["firstName", "lastName", "email", "privacyConfirm"];
if(donationType == 0){ // JEDNOKRATNA DONACIJA
}else if(donationType == 1){ // PODUPIRATELJ FIZIČKA OSOBA
fields.push("publicData", "oib", "address", "addressNumber", "city");
}else if(donationType == 2) { // PODUPIRATELJ KLUB, DRUŠTVO UDRUGA
fields.push("publicData", "oib", "address", "addressNumber", "city", "businessName", "supporterSubType");
}else if(donationType == 3) { // PODUPIRATELJ PRAVNA OSOBA
fields.push("publicData", "oib", "address", "addressNumber", "city", "businessName");
}
return fields;
}
function setPreviewFields(){
var donationType = findOutDonationType();
$(".form-summary").hide();
var firstName = getField('firstName').val();
var lastName = getField('lastName').val();
var businessName = getField('businessName').val();
var address = getField('address').val();
var addressNumber = getField('addressNumber').val();
var city = getField('city').val();
var oib = getField('oib').val();
var email = getField('email').val();
var message = getField('message').val();
$("[data-summary='message']").html(message);
$("[data-summary='email']").html(email);
$("[data-summary='fullAddress']").html(address + " " + addressNumber);
$("[data-summary='fullName']").html(firstName + " " + lastName);
$("[data-summary='businessName']").html(businessName);
$("[data-summary='oib']").html(oib);
$("[data-summary='city']").html(city);
if(donationType == 0){ // JEDNOKRATNA DONACIJA
}else if(donationType == 1){ // PODUPIRATELJ FIZIČKA OSOBA
$("[data-summary='fullAddress']").closest(".form-summary").show();
$("[data-summary='oib']").closest(".form-summary").show();
$("[data-summary='city']").closest(".form-summary").show();
}else if(donationType == 2) { // PODUPIRATELJ KLUB, DRUŠTVO UDRUGA
$("[data-summary='fullAddress']").closest(".form-summary").show();
$("[data-summary='businessName']").closest(".form-summary").show();
$("[data-summary='city']").closest(".form-summary").show();
$("[data-summary='oib']").closest(".form-summary").show();
}else if(donationType == 3) { // PODUPIRATELJ PRAVNA OSOBA
$("[data-summary='fullAddress']").closest(".form-summary").show();
$("[data-summary='businessName']").closest(".form-summary").show();
$("[data-summary='city']").closest(".form-summary").show();
$("[data-summary='oib']").closest(".form-summary").show();
}
}
function getAllHideableFields(){
return ["publicData", "oib", "address", "addressNumber", "city", "businessName", "supporterSubType"];
}
function getFieldGroup(fieldName){
return $("[data-input-name='" + fieldName + "']");
}
function getField(fieldName){
return $(donateForm.find('[name="' + fieldName + '"]'));
}
function clearFields(){
var fields = getAllHideableFields();
$(fields).each(function(index, value){
var field = getField(value);
if((field).attr('type') == "text") {
field.val('');
}else if((field).attr('type') == "radio"){
$(donateForm.find('[name="' + value + '"]:checked')).each(function(){
$(this).attr('checked', false);
});
}
});
}
$("#uploadFileButton").click(function(e){
myDropzone.processQueue();
});
const donateForm = $("#donate-form");
const stepOne = $("#donation-intro");
const stepTwo = $("#choose-options");
const stepChooseSupporterType = $("#supporter-type");
const stepThree = $("#donation-form-container");
const stepFour = $("#preview-donation");
const extraFields = $(".form-extra-fields");
const extraFieldLabels = $(".extra-field-label");
const backBtn = $(".step-back");
let currentStep = 1;
let donationType = "";
let donationTypeText = "";
var firstNameElem = $(donateForm.find('[name="firstName"]'));
var lastNameElem = $(donateForm.find('[name="lastName"]'));
var emailElem = $(donateForm.find('[name="email"]'));
var oibElem = $(donateForm.find('[name="oib"]'));
var businessNameElem = $(donateForm.find('[name="businessName"]'));
var addressElem = $(donateForm.find('[name="address"]'));
var addressNumberElem = $(donateForm.find('[name="addressNumber"]'));
var cityElem = $(donateForm.find('[name="city"]'));
var selectedPaymentTypeLabel = null;
var selectedPaymentTypeInput = null;
const amountTextInput = document.querySelector("#amount-input");
// const
$(backBtn).click(function (e) {
if (currentStep === 1.5) {
stepChooseSupporterType.hide();
stepTwo.hide();
stepOne.show();
currentStep = 1;
backBtn.css("visibility", "hidden");
$(".step-2").removeClass("active");
return;
} else if (currentStep === 2) {
stepTwo.hide();
stepOne.show();
$(".step-2").removeClass("active");
backBtn.css("visibility", "hidden");
currentStep = 1;
return;
} else if (currentStep === 3) {
stepThree.hide();
stepTwo.show();
$(".step-3").removeClass("active");
currentStep = 2;
return;
} else if (currentStep === 4) {
stepFour.hide();
stepThree.show();
$(".step-4").removeClass("active");
currentStep = 3;
return;
}
});
// step navigation
function goToStep(step) {
if (step === 1) {
backBtn.css("visibility", "hidden");
$(".step-2").removeClass("active");
$(".step-3").removeClass("active");
$(".step-4").removeClass("active");
stepFour.hide();
stepThree.hide();
stepTwo.hide();
stepOne.show();
currentStep = 1;
} else if (step === 2) {
$(".step-3").removeClass("active");
$(".step-4").removeClass("active");
stepFour.hide();
stepThree.hide();
stepTwo.show();
currentStep = 2;
} else if (step === 3) {
$(".step-4").removeClass("active");
stepFour.hide();
stepThree.show();
currentStep = 3;
}
}
$(".step-1-summary").click(function (e) {
goToStep(1);
});
$(".step-2-summary").click(function (e) {
goToStep(2);
});
$(".step-3-summary").click(function (e) {
goToStep(3);
});
$(".step-1").click(function (e) {
if ($(this).hasClass("active")) {
goToStep(1);
}
});
$(".step-2").click(function (e) {
if ($(this).hasClass("active")) {
goToStep(2);
}
});
$(".step-3").click(function (e) {
if ($(this).hasClass("active")) {
goToStep(3);
}
});
function setupFields(){
var donationType = findOutDonationType();
var requiredFields = getRequiredFields();
var hideableFields = getAllHideableFields();
clearFields();
$(hideableFields).each(function(index, value){
getFieldGroup(value).hide();
});
$(requiredFields).each(function(index, value){
getFieldGroup(value).show();
});
if(donationType == 0){ // JEDNOKRATNA DONACIJA
extraFields.hide();
}else if(donationType == 1){ // PODUPIRATELJ FIZIČKA OSOBA
extraFields.hide();
}else if(donationType == 2) { // PODUPIRATELJ KLUB, DRUŠTVO UDRUGA
extraFields.show();
}else if(donationType == 3) { // PODUPIRATELJ PRAVNA OSOBA
extraFields.show();
}
}
$("#one-time-donation").click(function (e) {
e.preventDefault();
donationType = "one-time";
donationTypeText = "Jednokratna donacija";
stepOne.hide();
stepTwo.show();
extraFieldLabels.hide();
currentStep = 2;
$("#donationType").val("0");
$("#supporterType").val("");
setupFields();
$(".step-2").addClass("active");
backBtn.css("visibility", "visible");
});
$("#supporter-donation").click(function (e) {
e.preventDefault();
$("#donationType").val("1");
$("#supporterType").val("");
$(".extra-fields-type-2").show();
currentStep = 1.5;
stepOne.hide();
stepChooseSupporterType.show();
backBtn.css("visibility", "visible");
setupFields();
});
$(".supporter-btn").click(function (e) {
if (e.target.id === "support-as-person") {
$(".extra-fields-type-2").hide();
extraFieldLabels.hide();
donationType = "person";
donationTypeText = "Fizička osoba";
amountTextInput.value = 500;
$("#supporterType").val("0");
setupFields();
} else if (e.target.id === "support-as-company") {
extraFields.show();
extraFieldLabels.show();
donationType = "company";
donationTypeText = "Klub, društvo, udruga";
amountTextInput.value = 1000;
$("#supporterType").val("1");
setupFields();
} else {
extraFieldLabels.show();
donationType = "legal-entity";
donationTypeText = "Pravna Osoba";
$(".extra-fields-type-2").hide();
amountTextInput.value = 5000;
$("#supporterType").val("2");
setupFields();
}
currentStep = 2;
$(".step-2").addClass("active");
stepChooseSupporterType.hide();
stepTwo.show();
});
$("#move-to-step-3").click(function (e) {
e.preventDefault();
$(".payment-transfer").hide();
$(".payment-card").hide();
selectedPaymentTypeLabel = $(donateForm.find(".payment-type__label"));
selectedPaymentTypeInput = $(donateForm.find('[name="paymentType"]:checked'));
if (!selectedPaymentTypeInput.length) {
$(selectedPaymentTypeLabel).addClass("form-error");
} else {
$(selectedPaymentTypeLabel).removeClass("form-error");
}
if (!selectedPaymentTypeInput.length) {
return;
}
var currentAmount = parseFloat(amountTextInput.value);
var minPay = getMinimumPayment();
if(currentAmount < getMinimumPayment()){
alert("Iznos ne smije biti manji od " + minPay + " kn");
return;
}
if (selectedPaymentTypeInput[0].id === "PaymentTypeOnline") {
$(".payment-transfer").show();
} else {
$(".payment-card").show();
}
stepTwo.hide();
stepThree.show();
currentStep = 3;
$(".step-3").addClass("active");
});
function validateFields(){
var requiredFields = getRequiredFields();
var errors = [];
$(requiredFields).each(function(index, reqField){
var fieldGroup = getFieldGroup(reqField);
var field = getField(reqField);
var inputType = fieldGroup.attr('data-input-type');
var validators = JSON.parse(fieldGroup.attr('data-validation'));
var anyValidatorFailed = false;
$(validators).each(function(index, validator){
if(anyValidatorFailed){
return false;
}
if(inputType == "text") {
if (validator == "required") {
success = false;
if(field.val() != ''){
success = true;
}
if(success){
fieldGroup.removeClass("form-error");
fieldGroup.find('[data-error-type="' + validator + '"]').hide();
}else {
fieldGroup.addClass("form-error");
fieldGroup.find('[data-error-type="' + validator + '"]').show();
errors.push(reqField);
anyValidatorFailed = true;
return;
}
} else if(validator == "eleven-characters"){
success = false;
if(field.val().length == 11){
success = true;
}
if(success){
fieldGroup.removeClass("form-error");
fieldGroup.find('[data-error-type="' + validator + '"]').hide();
}else {
fieldGroup.addClass("form-error");
fieldGroup.find('[data-error-type="' + validator + '"]').show();
errors.push(reqField);
anyValidatorFailed = true;
return;
}
} else if(validator == "numeric-only"){
success = false;
if($.isNumeric(field.val())){
success = true;
}
if(success){
fieldGroup.removeClass("form-error");
fieldGroup.find('[data-error-type="' + validator + '"]').hide();
}else {
fieldGroup.addClass("form-error");
fieldGroup.find('[data-error-type="' + validator + '"]').show();
errors.push(reqField);
anyValidatorFailed = true;
return;
}
}
}else if(inputType == "radio"){
if (validator == "required") {
var success = true;
if($("[name='" + reqField + "']:checked").length == 0){
success = false;
}
if(success){
fieldGroup.removeClass("form-error");
}else {
fieldGroup.addClass("form-error");
errors.push(reqField);
return;
}
}
}else if(inputType == "checkbox"){
if (validator == "required") {
var success = false;
if($("[name='" + reqField + "']:checked").length > 0){
success = true;
}
if(success){
fieldGroup.removeClass("form-error");
}else {
fieldGroup.addClass("form-error");
errors.push(reqField);
return;
}
}
}
});
});
if(errors.length){
return false;
}else{
return true;
}
}
$('[name="msg"]').keydown ( function (e) {
//list of functional/control keys that you want to allow always
var keys = [8, 9, 16, 17, 18, 19, 20, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 144, 145];
if( $.inArray(e.keyCode, keys) == -1) {
if (checkMaxLength ($(this).val(), 320)) {
e.preventDefault();
e.stopPropagation();
}
}
});
function checkMaxLength (text, max) {
return (text.length >= max);
}
$("#move-to-step-4").click(function (e) {
e.preventDefault();
var firstNameValue = getField("firstName").val();
var lastNameValue = getField("lastName").val();
var emailValue = getField("email").val();
var oibValue = getField("oib").val();
var message = getField("msg").val();
var businessNameValue = getField("businessName").val();
var addressValue = getField("address").val();
var addressNumberValue = getField("addressNumber").val();
var cityValue = getField("city").val();
var supporterType = null;
if($("#supporterType").val() == "1") {
supporterType = $('[name="supporterSubType"]').val();
}else{
supporterType = $("#supporterType").val() ;
}
var privacyConfirm = false;
if ($("#privacy_confirm:checked").length > 0) {
privacyConfirm = true;
}
$(".form-donation-amount").html(amountTextInput.value);
$(".form-donation-type").html(donationTypeText);
$(".form-full-name").html(firstNameValue + " " + lastNameValue);
$(".form-email").html(emailValue);
$(".form-msg").html(message);
if(!validateFields()){
$(".donation-main__right").animate({ scrollTop: $(".form-error").height() }, 1000);
return;
}
stepThree.hide();
stepFour.show();
setPreviewFields();
currentStep = 4;
$(".step-4").addClass("active");
});
function handleAmountChange() {
$(this).val(
$(this)
.val()
.replace(/[^0-9]/g, "")
);
}
function numbersOnly() {
$(this).val(
$(this)
.val()
.replace(/[^0-9]/g, "")
);
}
if(amountTextInput) {
amountTextInput.addEventListener("input", handleAmountChange);
}
if(document.querySelector("#oib-input")) {
document.querySelector("#oib-input").addEventListener("input", numbersOnly);
}
$("#privacy_confirm").click(function (e) {
if ($("#privacy_confirm:checked").length > 0) {
$("#privacy_confirm").closest(".form-group").removeClass("form-error");
}
});
var formSending = false;
var sendDonation = function (e) {
e.preventDefault();
if(formSending) {
return;
}
var customLoader = $(".custom-loader");
$(customLoader).css("display", "flex");
var publicData = null;
if($("[name='publicData']:checked").length > 0){
publicData = $("[name='publicData']:checked").val();
}
formSending = true;
var firstNameValue = getField("firstName").val();
var lastNameValue = getField("lastName").val();
var emailValue = getField("email").val();
var oibValue = getField("oib").val();
var message = getField("msg").val();
var businessNameValue = getField("businessName").val();
var addressValue = getField("address").val();
var addressNumberValue = getField("addressNumber").val();
var cityValue = getField("city").val();
var supporterType = null;
if($("#supporterType").val() == "1") {
supporterType = $('[name="supporterSubType"]').val();
}else{
supporterType = $("#supporterType").val() ;
}
var privacyConfirm = false;
if ($("#privacy_confirm:checked").length > 0) {
privacyConfirm = true;
}
$.ajax({
type: "POST",
dataType: "json",
url: ajaxurl,
data: {
action: "make_order",
businessName: businessNameValue,
address: addressValue,
city: cityValue,
addressNumber: addressNumberValue,
firstName: firstNameValue,
lastName: lastNameValue,
oib: oibValue,
selectedAmount: amountTextInput.value,
selectedDonationType: $("#donationType").val(),
email: emailValue,
publicData: publicData,
message: message,
supporterType: supporterType,
selectedPaymentType: selectedPaymentTypeInput.val(),
},
success: function (data) {
if (data.success) {
$("#form-error-box").html("");
$("#form-error-box").hide();
if(selectedPaymentTypeInput.val() == "1") {
window.location.replace(data.thank_you_url);
}else{
window.location.replace(data.payway_url);
}
}else{
var resp = "Slanje nije bilo uspješno došlo je do slijedećih grešaka: <br />";
$(data.errors).each(function(index, value){
resp += "- " + value + " <br />";
});
resp += "Molimo vas vratite se korak nazad i ispravite navedene greške u unosu."
$("#form-error-box").html(resp);
$("#form-error-box").fadeIn();
}
formSending = false;
$(customLoader).hide();
},
});
};
donateForm.submit(sendDonation);
$("[name='paymentType']").click(function (e) {
if ($(".payment-type__content.show").length) {
$(".payment-type__content.show").hide();
$(".payment-type__content.show").removeClass("show");
var elementId = $(e.currentTarget).attr("id");
$("#" + elementId + "Details").show();
$("#" + elementId + "Details").addClass("show");
} else {
var elementId = $(e.currentTarget).attr("id");
$("#" + elementId + "Details").show();
$("#" + elementId + "Details").addClass("show");
}
});
});
})(jQuery);