HEX
Server: Apache
System: Linux webm013.cluster123.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: lesanew (165608)
PHP: 8.3.31
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/lesanew/www/wp-content/plugins/gift-hunt/assets/scripts/frontend/main.js
/**
 * JS Cookie
 */
!function(e){var n;if("function"==typeof define&&define.amd&&(define(e),n=!0),"object"==typeof exports&&(module.exports=e(),n=!0),!n){var t=window.Cookies,o=window.Cookies=e();o.noConflict=function(){return window.Cookies=t,o}}}(function(){function e(){for(var e=0,n={};e<arguments.length;e++){var t=arguments[e];for(var o in t)n[o]=t[o]}return n}function n(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function t(o){function r(){}function i(n,t,i){if("undefined"!=typeof document){"number"==typeof(i=e({path:"/"},r.defaults,i)).expires&&(i.expires=new Date(1*new Date+864e5*i.expires)),i.expires=i.expires?i.expires.toUTCString():"";try{var c=JSON.stringify(t);/^[\{\[]/.test(c)&&(t=c)}catch(e){}t=o.write?o.write(t,n):encodeURIComponent(String(t)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=encodeURIComponent(String(n)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var f="";for(var u in i)i[u]&&(f+="; "+u,!0!==i[u]&&(f+="="+i[u].split(";")[0]));return document.cookie=n+"="+t+f}}function c(e,t){if("undefined"!=typeof document){for(var r={},i=document.cookie?document.cookie.split("; "):[],c=0;c<i.length;c++){var f=i[c].split("="),u=f.slice(1).join("=");t||'"'!==u.charAt(0)||(u=u.slice(1,-1));try{var a=n(f[0]);if(u=(o.read||o)(u,a)||n(u),t)try{u=JSON.parse(u)}catch(e){}if(r[a]=u,e===a)break}catch(e){}}return e?r[e]:r}}return r.set=i,r.get=function(e){return c(e,!1)},r.getJSON=function(e){return c(e,!0)},r.remove=function(n,t){i(n,"",e(t,{expires:-1}))},r.defaults={},r.withConverter=t,r}(function(){})});

/**
 * Variables
 */

const currentLocation = window.location.href.split("#")[0];
const currentTime = Date.now();
let winWidth = window.innerWidth;
let winHeight = window.innerHeight;

const ffDiscounthuntCreateCORSRequest = (method, url) => {
	const xhr = new XMLHttpRequest();
	if ("withCredentials" in xhr) {
		xhr.open(method, url, true);
	} else if (typeof XDomainRequest != "undefined") {
		xhr = new XDomainRequest();
		xhr.open(method, url);
	} else {
		xhr = null;
	}
	return xhr;
}

const ffDiscounthuntCookieFound = (ffDiscounthuntSessionId) => {
  let cookieData = {
    cookieDate: Date.now(),
    sessionHuntId: ffDiscounthuntSessionId,
    codeFound: true,
    codeFoundDate: Date.now(),
    pageviews: 1,
    visitedPages: currentLocation
  }

  Cookies.set(`ffSessionHuntCookie_${ffDiscounthuntSessionId}`, cookieData, { expires: 365 });
  return;
}

/**
 * Handle discount hunt form submit
 */
const ffHandleDiscounthuntFormSubmit = (e) => {
  const ffDiscounthuntSubmitButton = document.querySelector("#ff-discounthunt-session-form__submit");
  const ffDiscounthuntSubmitButtonSpinner = ffDiscounthuntSubmitButton.querySelector("i");

  e.preventDefault();

  if(ffDiscounthuntSessionPreview){
    // preview, instantly display result page
    document.querySelector("#ff-discounthunt-session-modal__form-container").classList.add("ff-discounthunt-session--hidden");
    document.querySelector("#ff-discounthunt-session-modal__description").classList.add("ff-discounthunt-session--hidden");
    document.querySelector("#ff-discounthunt-session-modal__result").classList.remove("ff-discounthunt-session--hidden");
    document.querySelector("#ff-discounthunt-session-modal__result-discountcode").innerHTML = "PREVIEW CODE";
    return;
  }

  /**
   * Check required fields
   */
  const firstNameField = document.querySelector("#ff-discounthunt-session-form__first-name");
  const lastNameField = document.querySelector("#ff-discounthunt-session-form__last-name");
  const emailField = document.querySelector("#ff-discounthunt-session-form__email");
  const additionalInformationField = document.querySelector("#ff-discounthunt-session-form__additional");
  const legalCheckbox = document.querySelector("#ff-discounthunt-session-form__legal");

  const ffDiscounthuntHunterData = {
    huntSession: ffDiscounthuntSessionData.id,
    firstName: firstNameField.value,
    lastName: lastNameField.value,
    email: emailField.value,
    additionalInformation: additionalInformationField.value,
    legalAccepted: legalCheckbox.checked,
    nonce: ffDiscounthuntNonce,
    action: 'gifthuntfree_ajax_frontend_action',
    gifthuntfreeAction: 'collect',
  }

  let ffDiscounthuntErrorCount = 0;

  // first name check
  if(ffDiscounthuntHunterData.firstName.length < 1 && ffDiscounthuntSessionData.form_collect_first_name == 1){
    firstNameField.classList.add("ffDiscounthuntFieldError");
    ffDiscounthuntErrorCount++;
  } else {
    firstNameField.classList.remove("ffDiscounthuntFieldError");
  }

  // last name check
  if(ffDiscounthuntHunterData.lastName.length < 1 && ffDiscounthuntSessionData.form_collect_last_name == 1){
    lastNameField.classList.add("ffDiscounthuntFieldError");
    ffDiscounthuntErrorCount++;
  } else {
    lastNameField.classList.remove("ffDiscounthuntFieldError");
  }

  // email check
  if(ffDiscounthuntHunterData.email.length < 1 || (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(ffDiscounthuntHunterData.email))){
    emailField.classList.add("ffDiscounthuntFieldError");
    ffDiscounthuntErrorCount++;
  } else {
    emailField.classList.remove("ffDiscounthuntFieldError");
  }

  // legal checkbox check
  if(!legalCheckbox.checked){
    document.querySelector("#ff-discounthunt-session-form__group--legal a").classList.add("ffDiscounthuntFieldErrorText");
    ffDiscounthuntErrorCount++;
  } else {
    document.querySelector("#ff-discounthunt-session-form__group--legal a").classList.remove("ffDiscounthuntFieldErrorText");
  }

  if(ffDiscounthuntErrorCount){
    return;
  }

  /**
   * Disable button
   */
  ffDiscounthuntSubmitButton.disabled = true;

  /**
   * Display spinner
   */
  ffDiscounthuntSubmitButtonSpinner.classList.remove('ff-discounthunt-session--hidden');

  /**
   * Send data to backend
   */
  const ffDiscounthuntXHR = ffDiscounthuntCreateCORSRequest("POST", ffDiscounthuntApiEndpoint);
	if (!ffDiscounthuntXHR) {
		ffDiscounthuntSubmitButton.disabled = false;
		ffDiscounthuntSubmitButtonSpinner.classList.add('ff-discounthunt-session--hidden');
		alert("Something went wrong. Please refresh the page and try again.");
		return;
  }
  
  ffDiscounthuntXHR.setRequestHeader("X-Custom-Header", ffDiscounthuntNonce);
	ffDiscounthuntXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	ffDiscounthuntXHR.onload = function() {
    const response = JSON.parse(ffDiscounthuntXHR.responseText);
    ffDiscounthuntSubmitButton.disabled = false;
    ffDiscounthuntSubmitButtonSpinner.classList.add('ff-discounthunt-session--hidden');
    
		if (response.status === "error" || !response) {
      /**
       * Error
       * - alert error
       */
      alert(response.data);
      return;
    } else if(response.status === "closed"){
      /**
       * Hunt session closed or out of dicsount codes
       * - hide modal
       * - delete cookie
       */
      ffToggleDiscountHuntSessionPopup();
      Cookies.remove(`ffSessionHuntCookie_${ffDiscounthuntSessionData.id}`);
		} else {
			/**
       * Success
       * - Display result message
       * - Display discount code
       * - Change cookie params
       */
      document.querySelector("#ff-discounthunt-session-modal__form-container").classList.add("ff-discounthunt-session--hidden");
      document.querySelector("#ff-discounthunt-session-modal__description").classList.add("ff-discounthunt-session--hidden");
      document.querySelector("#ff-discounthunt-session-modal__result").classList.remove("ff-discounthunt-session--hidden");
      document.querySelector("#ff-discounthunt-session-modal__result-discountcode").innerHTML = response.data;

      ffDiscounthuntCookieFound(ffDiscounthuntSessionData.id);

      return;
		}
	};

	ffDiscounthuntXHR.onerror = function() {
		ffDiscounthuntSubmitButton.disabled = false;
    ffDiscounthuntSubmitButtonSpinner.classList.add('ff-discounthunt-session--hidden');
		alert("Something went wrong. Please refresh the page and try again.");
		return;
	};

	ffDiscounthuntXHR.send(
		Object.keys(ffDiscounthuntHunterData)
			.map(function(k) {
				return encodeURIComponent(k) + "=" + encodeURIComponent(ffDiscounthuntHunterData[k]);
			})
			.join("&")
	);

}

/**
 * Toggle discount hunt session popup
 */
const ffToggleDiscountHuntSessionPopup = () => {
  if(!document.body.classList.contains('ffDiscounthuntPopupVisible')){
    /**
     * Show popup
     */
    let ffDiscountHuntSessionPopupContaner;

    /**
     * Add popup window content to modal
     */
    if(ffDiscounthuntSessionData.session_type == "custom_popup"){
      ffDiscountHuntSessionPopupContaner = document.getElementById("ff-discounthunt-popup-root");
      /**
       * Set cookie to found, because the user opened a custom popup window
       */
      ffDiscounthuntCookieFound(ffDiscounthuntSessionData.id);
    } else {
      ffDiscountHuntSessionPopupContaner = document.createElement('div');
      ffDiscountHuntSessionPopupContaner.style.cssText = `position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, .6); z-index: 999999; overflow-y: auto; overflow-x: hidden;`;
      ffDiscountHuntSessionPopupContaner.setAttribute('id', 'ff-discounthunt-popup-root');
      ffDiscountHuntSessionPopupContaner.innerHTML = ffDiscounthuntPopupWindow;
      /**
       * Event listener for form submit
       */
      ffDiscountHuntSessionPopupContaner.querySelector("#ff-discounthunt-session-modal__form").addEventListener("submit", ffHandleDiscounthuntFormSubmit);
    }



    /**
     * Add extra css to the head
     */
    if(!document.body.classList.contains('ffDiscounthuntPopupCSSAdded')){
      const ffDiscounthuntHead = document.head;
      let ffDiscounthuntExtraStyle = document.createElement('style');
      ffDiscounthuntHead.appendChild(ffDiscounthuntExtraStyle);
      ffDiscounthuntExtraStyle.type = 'text/css';
      if(ffDiscounthuntExtraStyle.styleSheet){
        ffDiscounthuntExtraStyle.styleSheet.cssText = ffDiscounthuntCSS;
      } else {
        ffDiscounthuntExtraStyle.appendChild(document.createTextNode(ffDiscounthuntCSS))
      }
      document.body.classList.add('ffDiscounthuntPopupCSSAdded');

      /**
       * Remove icon from site
       */
      let ffDiscounthuntIcon = null;
      const shortcodePlacement = (ffDiscounthuntSessionData.icon_placement && ffDiscounthuntSessionData.icon_placement == "shortcode") ? true : false;

      if( shortcodePlacement ){
        /**
         * Remove icon that was placed with a shortcode
         */
        ffDiscounthuntIcon = document.querySelector("a#ff-discounthunt-icon-container");
      } else {
        /**
         * Remove dinamically placed icon
         */
        ffDiscounthuntIcon = document.querySelector("#ff-discounthunt-present-icon");
      }
      ffDiscounthuntIcon.parentNode.removeChild(ffDiscounthuntIcon);
    }
    
    if(ffDiscounthuntSessionData.session_type == "custom_popup"){
      /**
       * Display custom popup window
       */
      ffDiscountHuntSessionPopupContaner.style.display = "block";
    } else {
      document.body.appendChild(ffDiscountHuntSessionPopupContaner);
    }

    document.body.classList.add('ffDiscounthuntPopupVisible');
  } else {
    /**
     * Hide popup
     */
    const ffDiscounhuntPopupRoot = document.querySelector("#ff-discounthunt-popup-root");
    ffDiscounhuntPopupRoot.parentNode.removeChild(ffDiscounhuntPopupRoot);
    document.body.classList.remove('ffDiscounthuntPopupVisible');
  }
}

/**
 * Check session hunt cookie
 * Create if doesn't exists,
 * Update if exists
 */
let cookieData = {
  cookieDate: currentTime,
  sessionHuntId: ffDiscounthuntSessionData.id,
  codeFound: false,
  pageviews: 1,
  visitedPages: currentLocation
}

/**
 * Add extra css to head
 */
const ffDiscounthuntSessionIconCss = () => {
  if(!document.body.classList.contains('ffDiscounthuntIconCSSAdded')){
    const ffDiscounthuntHead = document.head;
    let ffDiscounthuntExtraStyle = document.createElement('style');
    ffDiscounthuntHead.appendChild(ffDiscounthuntExtraStyle);
    ffDiscounthuntExtraStyle.type = 'text/css';
    if(ffDiscounthuntExtraStyle.styleSheet){
      ffDiscounthuntExtraStyle.styleSheet.cssText = ffDiscounthuntIconCSS;
    } else {
      ffDiscounthuntExtraStyle.appendChild(document.createTextNode(ffDiscounthuntIconCSS))
    }
    document.body.classList.add('ffDiscounthuntIconCSSAdded');
  }
}

const ffDiscounthuntInit = () => {
  const shortcodePlacement = (ffDiscounthuntSessionData.icon_placement && ffDiscounthuntSessionData.icon_placement == "shortcode") ? true : false;
  let shortcodeGifthuntIcon = document.querySelector("a#ff-discounthunt-icon-container");

  if (!Cookies.get(`ffSessionHuntCookie_${ffDiscounthuntSessionData.id}`) && !ffDiscounthuntSessionPreview && !shortcodePlacement) {
    // doesn't exists, create it
    Cookies.set(`ffSessionHuntCookie_${ffDiscounthuntSessionData.id}`, cookieData, { expires: 365 });
  } else {
    // exists or shortcode placement
    let cookieValue;

    // shortcode placement, create cookie
    if(shortcodePlacement && !Cookies.get(`ffSessionHuntCookie_${ffDiscounthuntSessionData.id}`)){
      cookieValue = cookieData;
      Cookies.set(`ffSessionHuntCookie_${ffDiscounthuntSessionData.id}`, cookieData, { expires: 365 });
    } else {
      cookieValue = Cookies.getJSON(`ffSessionHuntCookie_${ffDiscounthuntSessionData.id}`);
    }
  
    if(!ffDiscounthuntSessionPreview){
      if(cookieValue.codeFound == true && ffDiscounthuntSessionData.allow_multiple_collect != 1){
        /**
         * Found a code previously
         * Multiple collect is not allowed
         * =====
         * Hide session icon if it's placed by shortcode
         */
        if( shortcodePlacement ){
          if( shortcodeGifthuntIcon ){
            shortcodeGifthuntIcon.remove();
          }
        }

        return;
      }
    }

    /**
     * Insert icon styling to the header
     */
    ffDiscounthuntSessionIconCss();

    /**
     * Don't display session icon with JS if placement is made by shortcode
     */
    if( shortcodePlacement ){
      if( shortcodeGifthuntIcon ){
        shortcodeGifthuntIcon.addEventListener('click', ffToggleDiscountHuntSessionPopup);
      }

      return;
    }
  
    const ffDiscountHuntPresentIcon = document.createElement('div');
    let iconTopPosition = 0;
    let iconLeftPosition = 0;

    if(ffDiscounthuntSessionData.icon_placement && ffDiscounthuntSessionData.icon_placement == "center"){
      iconTopPosition = Math.floor((winHeight - 80) / 2);
      iconLeftPosition = Math.floor((winWidth - 80) / 2);
    } else if(ffDiscounthuntSessionData.icon_placement && ffDiscounthuntSessionData.icon_placement == "bottom_left"){
      iconTopPosition = winHeight - 100;
      iconLeftPosition = 20;
    } else if(ffDiscounthuntSessionData.icon_placement && ffDiscounthuntSessionData.icon_placement == "bottom_right"){
      iconTopPosition = winHeight - 100;
      iconLeftPosition = winWidth - 100;
    } else {
      iconTopPosition = Math.floor(Math.random() * (winHeight - 120));
      iconLeftPosition = Math.floor(Math.random() * (winWidth - 120));
    }

    ffDiscountHuntPresentIcon.setAttribute('id', 'ff-discounthunt-present-icon');
    ffDiscountHuntPresentIcon.setAttribute('class', ffDiscounthuntSessionData.icon_animation || 'pop');
    ffDiscountHuntPresentIcon.style.cssText = `top: ${iconTopPosition}px; left: ${iconLeftPosition}px;`;
    if(ffDiscounthuntSessionData.icon == 99){
      ffDiscountHuntPresentIcon.innerHTML = `<a class="ff-discounthunt-icon-link"><div id="ff-discounthunt-icon-container"><img src="${decodeURIComponent(ffDiscounthuntSessionData.custom_icon)}" alt="Gift Hunt Icon" /></div></a>`;
    } else {
      ffDiscountHuntPresentIcon.innerHTML = `<a class="ff-discounthunt-icon-link"><div id="ff-discounthunt-icon-container"><img src="${ffDiscounthuntFrontendAssets}images/${ffDiscounthuntSessionData.icon}.svg" alt="Gift Hunt Icon" /></div></a>`;
    }
    ffDiscountHuntPresentIcon.addEventListener('click', ffToggleDiscountHuntSessionPopup);

    if(!ffDiscounthuntSessionPreview){
      // live
      if(ffDiscounthuntSessionData.display_type == "time" && Math.floor((Date.now() - cookieValue.cookieDate) / 1000) >= ffDiscounthuntSessionData.time_to_display){
        // user spent enough time on site to display present
        document.body.appendChild(ffDiscountHuntPresentIcon);
      } else if(ffDiscounthuntSessionData.display_type == "pageview" && cookieValue.pageviews >= ffDiscounthuntSessionData.pageview_to_display){
        // user viewed enough pages to display present
        document.body.appendChild(ffDiscountHuntPresentIcon);
      }

      // store visited pages
      const visitedPages = (!cookieValue.visitedPages.includes(currentLocation)) ? `${cookieValue.visitedPages}|${currentLocation}`: cookieValue.visitedPages;
    
      // count pageviews
      const visitedPagesArray = visitedPages.split("|")
      const pageviews = visitedPagesArray.length;
    
      cookieData = {
        cookieDate: cookieValue.cookieDate,
        sessionHuntId: cookieValue.sessionHuntId,
        codeFound: cookieValue.codeFound,
        pageviews: pageviews,
        visitedPages: visitedPages
      }
    
      Cookies.set(`ffSessionHuntCookie_${ffDiscounthuntSessionData.id}`, cookieData, { expires: 365 });
    } else {
      // preview, display icon
      document.body.appendChild(ffDiscountHuntPresentIcon);
    }
  }
}

window.onresize = () => {
  winWidth = window.innerWidth;
  winHeight = window.innerHeight;
}

document.body.addEventListener("click", (e) => {
  if(e.target.id == "ff-discounthunt-session-modal__close" || e.target.id == "ff-discounthunt-custom-modal__close"){
    ffToggleDiscountHuntSessionPopup();
  }
});

ffDiscounthuntInit();