{"id":26,"date":"2025-04-14T17:51:12","date_gmt":"2025-04-14T17:51:12","guid":{"rendered":"https:\/\/www.jam.adidasoriginals.rs\/?page_id=26"},"modified":"2026-04-30T11:31:59","modified_gmt":"2026-04-30T11:31:59","slug":"26-2","status":"publish","type":"page","link":"https:\/\/www.theoriginaljam.rs\/","title":{"rendered":"Home"},"content":{"rendered":"<div class=\"lazyblock-hero-Z1HGHhe white-bg wp-block-lazyblock-hero\"><div class=\"hero\">\r\n  <div class=\"container\">\r\n\r\n    \r\n    <div class=\"hero-layout\">\r\n      <!--<img decoding=\"async\" class=\"main-logo\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2025\/04\/the-originals-jam.png\" alt=\"THE ORIGINALS JAM\">-->\r\n      <!--<img decoding=\"async\" class=\"adidas-logo\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2025\/04\/logo.svg\" alt=\"adidas Performance\">-->\r\n      \r\n      \r\n      <video autoplay=\"\" muted=\"\" loop=\"\" playsinline=\"\" preload=\"none\" playing=\"\">\r\n          <source src=\"https:\/\/embed-ssl.wistia.com\/deliveries\/c0726c3c07e7076488ab6a1a6fbe61d690f808f1.mp4\" type=\"video\/mp4\">\r\n          Your browser does not support the video tag.\r\n        <\/video>\r\n    <\/div>\r\n    \r\n  <\/div>\r\n<\/div>\r\n\r\n\r\n<style>\r\n  .hero {\r\n    padding-bottom: 60px;\r\n  }\r\n  \r\n    @media all and (max-width:768px) {\r\n    .hero {\r\n      margin-left: -30px;\r\n      margin-right: -30px;\r\n      padding-bottom: 30px;\r\n    }\r\n    }\r\n  <\/style>\r\n\r\n<style>\r\n  video {\r\n    max-width: 100%;\r\n  }\r\n\r\n  .hero-layout {\r\n    aspect-ratio: 16 \/ 9;\r\n    background-size: cover;\r\n    background-position: bottom center;\r\n    position: relative;\r\n  }\r\n\r\n  .main-logo {\r\n    max-width: 95%;\r\n    margin: 2.5%;\r\n  }\r\n\r\n  .adidas-logo {\r\n    width: 160px;\r\n    max-width: 14%;\r\n    right: 20px;\r\n    position: absolute;\r\n    top: 0;\r\n    bottom: 0;\r\n    margin: auto;\r\n    transition: all 0.3s ease;\r\n  }\r\n\r\n  .player-container {\r\n    padding: 3%;\r\n    position: absolute;\r\n    width: 100%;\r\n    bottom: 0;\r\n    box-sizing: border-box;\r\n    z-index: 20;\r\n  }\r\n  \r\n  .ispis {\r\n    position: absolute;\r\n    bottom: 180px;\r\n    left: 0;\r\n    right: 0;\r\n    margin: auto;\r\n    width: 100%;\r\n    text-align: center;\r\n  }\r\n\r\n  #player {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 60px;\r\n    background: rgb(0 0 0 \/ 70%);\r\n    border-radius: 16px;\r\n    padding: 1% 6%;\r\n  }\r\n\r\n  #waveform {\r\n    width: 800px;\r\n    height: 100px;\r\n    display: flex;\r\n    align-items: center;\r\n    width: 100%;\r\n  }\r\n\r\n  #waveform>div {\r\n    width: 100%;\r\n  }\r\n\r\n  .btn {\r\n    width: 70px;\r\n    height: 70px;\r\n    min-width: 70px;\r\n    border-radius: 50%;\r\n    border: none;\r\n    background: #ccc;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    cursor: pointer;\r\n  }\r\n\r\n  .btn::before {\r\n    content: '\u25b6';\r\n    font-size: 30px;\r\n    color: black;\r\n    position: absolute;\r\n    margin: auto;\r\n    display: flex;\r\n    line-height: 80%;\r\n    height: 32px;\r\n    text-align: center;\r\n  }\r\n\r\n  .btn:not(.paused)::before {\r\n    margin-left: 6px;\r\n    height: 30px;\r\n  }\r\n\r\n  .btn.paused::before {\r\n    content: '';\r\n    width: 42px;\r\n    height: 42px;\r\n    background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 32 32'%3E%3Crect x='10' y='10' width='4' height='12' rx='1' fill='%23000000' \/%3E%3Crect x='18' y='10' width='4' height='12' rx='1' fill='%23000000' \/%3E%3C\/svg%3E\");\r\n    background-size: 42px 42px;\r\n    background-repeat: no-repeat;\r\n    background-position: center;\r\n    margin-top: -2px;\r\n  }\r\n  \r\n  @media all and (min-width:768px) and (max-width:1024px) {\r\n  .ispis {\r\n    bottom: 34%;\r\n  }\r\n  }\r\n\r\n  @media all and (max-width:768px) {\r\n    .hero-layout {\r\n      aspect-ratio: 16 \/ 11;\r\n    }\r\n\r\n    #player {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 20px;\r\n      border-radius: 0px;\r\n    }\r\n    \r\n    .ispis {\r\n      bottom: 120px;\r\n      font-size: 14px;\r\n    }\r\n\r\n    img.adidas-logo {\r\n      bottom: auto;\r\n      top: 29%;\r\n    }\r\n    \r\n    #playPause {\r\n      width: 50px;\r\n      height: 50px;\r\n      min-width: 50px;\r\n    }\r\n    \r\n    .player-container {\r\n      padding: 0 0 3% 0;\r\n    }\r\n    \r\n    #waveform {\r\n      height: 70px;\r\n    }\r\n  }\r\n  \r\n  @media all and (max-width:480px) {\r\n        video {\r\n        margin-top: -30px;\r\n    }\r\n      .ispis {\r\n      bottom: 95px;\r\n      }\r\n  }\r\n<\/style>\r\n\r\n<script src=\"https:\/\/unpkg.com\/wavesurfer.js\"><\/script>\r\n<script>\r\n  \/\/ Function to get appropriate height based on screen width\r\n  function getWaveformHeight() {\r\n    return window.innerWidth > 768 ? 100 : 60;\r\n  }\r\n\r\n  const wavesurfer = WaveSurfer.create({\r\n    container: '#waveform',\r\n    waveColor: '#aaa',\r\n    progressColor: '#fff',\r\n    height: getWaveformHeight(),\r\n    responsive: true,\r\n    barWidth: 2,\r\n    barGap: 3,\r\n    barRadius: 1,\r\n    cursorColor: 'transparent',\r\n  });\r\n\r\n  \/\/ Load your audio file\r\n  wavesurfer.load('');\r\n\r\n  \/\/ Handle play\/pause button\r\n  const playPauseBtn = document.getElementById('playPause');\r\n  playPauseBtn.addEventListener('click', () => {\r\n    wavesurfer.playPause();\r\n  });\r\n\r\n  wavesurfer.on('play', () => {\r\n    playPauseBtn.classList.add('paused');\r\n  });\r\n\r\n  wavesurfer.on('pause', () => {\r\n    playPauseBtn.classList.remove('paused');\r\n  });\r\n\r\n  \/\/ Update height when window is resized\r\n  window.addEventListener('resize', () => {\r\n    wavesurfer.setHeight(getWaveformHeight());\r\n  });\r\n<\/script><\/div>\n\n\n<div class=\"wp-block-group step1\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<h1 class=\"wp-block-heading has-text-align-center\">THE ORIGINAL JAM VOL.3<\/h1>\n\n\n<div class=\"wp-block-image adistar-edition-tt\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"388\" height=\"77\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/sticker-adistar-edition.png\" alt=\"\" class=\"wp-image-969\" srcset=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/sticker-adistar-edition.png 388w, https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/sticker-adistar-edition-300x60.png 300w\" sizes=\"(max-width: 388px) 100vw, 388px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">VOLUME JE NA MAX. ZVUK JE POJA\u010dAN.<\/h2>\n\n\n\n<p class=\"has-text-align-center\"><br>The Original Jam se vra\u0107a u <strong>adidas Originals Store<\/strong> u Beogradu.<br><br>Nakon <strong>dva uspe\u0161na doga\u0111aja<\/strong> <br>koja su okupila autenti\u010dne izvo\u0111a\u010de <br>i publiku \u017eeljnu novih zvukova, <br><br><strong>The Original Jam Vol.3<\/strong> donosi <br>novo poglavlje &#8211; sa ja\u010dom energijom,<br>live nastupima i novim lineupom izvo\u0111a\u010da.<\/p>\n\n\n\n<div class=\"wp-block-group lineup-wrap\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"collage\">\n      <img decoding=\"async\" class=\"tr\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/tr.png\">\n            <img decoding=\"async\" class=\"tm\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/tm.png\">\n            <img decoding=\"async\" class=\"bl\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/bl.png\">\n            <img decoding=\"async\" class=\"br\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/br.png\">\n            <img decoding=\"async\" class=\"tl\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/tl.png\">\n      <img decoding=\"async\" class=\"mid\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/m-2.png\">\n    <\/div>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-center\"><br>Ovog puta, doga\u0111aj ulazi u ADISTAR svet, gde se zvuk, pokret i stil spajaju u jedno.<br>Adistar model je nastao iz tr\u010danja, ali on danas \u017eivi kroz grad i kulturu.<br>Za one koji ne stoje u mestu &#8211; ni u muzici, ni u \u017eivotu.<br><br>RED JE NA TEBE.<\/h3>\n<\/div><\/div>\n\n\n<div role=\"form\" class=\"wpcf7\" id=\"wpcf7-f926-o1\" lang=\"en\" dir=\"ltr\">\n<div class=\"screen-reader-response\"><\/div>\n<form action=\"\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F26#wpcf7-f926-o1\" method=\"post\" class=\"wpcf7-form\" novalidate=\"novalidate\">\n<div style=\"display: none;\">\n<input type=\"hidden\" name=\"_wpcf7\" value=\"926\" \/>\n<input type=\"hidden\" name=\"_wpcf7_version\" value=\"5.0\" \/>\n<input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en\" \/>\n<input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f926-o1\" \/>\n<input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/>\n<\/div>\n<div class=\"black-box txt-bg\" style=\"margin-bottom:50px;\">\n<img decoding=\"async\" class=\"prijavi-se-tt\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/prijavi-se.png\"><\/p>\n<h3 class=\"prijavi-se-h3\">\nUlaz je besplatan, ali je broj mesta ograni\u010den.<br><br \/>\nUlaznica va\u017ei za dve osobe. PRIJAVE SU OTVORENE DO 06.05.2026<br \/>\n<\/h3>\n<div class=\"adi-layout\">\n<div class=\"adi-col\">\n<div class=\"adi-field\">\n  <label>Ime & prezime:<\/label>\n<div><span class=\"wpcf7-form-control-wrap your-name\"><input type=\"text\" name=\"your-name\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" \/><\/span><\/div>\n<\/div>\n<div class=\"adi-field\">\n  <label>Koliko ima\u0161 godina?<\/label>\n<div><span class=\"wpcf7-form-control-wrap your-subject\"><input type=\"text\" name=\"your-subject\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" \/><\/span><\/div>\n<\/div>\n<div class=\"adi-field\">\n  <label>Email adresa:<\/label>\n<div><span class=\"wpcf7-form-control-wrap your-email\"><input type=\"email\" name=\"your-email\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" \/><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"adi-col\">\n<div class=\"adi-field\">\n  <label>Tvoj Instagram:<\/label>\n<div><span class=\"wpcf7-form-control-wrap instagram\"><input type=\"text\" name=\"instagram\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" \/><\/span><\/div>\n<\/div>\n<div class=\"adi-field\">\n  <label>Za\u0161to \u017eeli\u0161 da do\u0111es na svirku?<\/label>\n<div><span class=\"wpcf7-form-control-wrap zasto\"><input type=\"text\" name=\"zasto\" value=\"\" size=\"40\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" \/><\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div style=\"text-align:center; margin-top: 10px;\"><input type=\"submit\" value=\"PO\u0160ALJI\" class=\"wpcf7-form-control wpcf7-submit wp-element-button\" \/><\/div>\n<\/div>\n<div class=\"wpcf7-response-output wpcf7-display-none\"><\/div><\/form><\/div>\n\n\n<div class=\"lazyblock-footer-Z1EkRRG wp-block-lazyblock-footer\"><div class=\"footer\">\r\n  <div class=\"container\">\r\n    <div class=\"footer-layout\" style=\"background-image:url();\">\r\n      <h3 style=\"text-align: center;padding: 20px;\"><a href=\"https:\/\/maps.app.goo.gl\/sneWVwKfndJbkECt5\" target=\"_blank\" style=\"color:#fff;text-decoration: none;\">Powered by adidas Originals store Belgrade<\/a><\/h3>\r\n      <img decoding=\"async\" class=\"footer-logo\" src=\"https:\/\/www.theoriginaljam.rs\/wp-content\/uploads\/2026\/04\/footer-logo.png\" alt=\"adidas Performance\">\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .footer-layout {\r\n    aspect-ratio: 16 \/ 9;\r\n    background-size: cover;\r\n    background-position: top center;\r\n    position: relative;\r\n}\r\n\r\n.footer-logo {\r\n    width: 160px;\r\n    max-width: 14%;\r\n    left: 0;\r\n    right: 0;\r\n    position: absolute;\r\n    bottom: 5%;\r\n    margin: auto;\r\n}\r\n\r\n@media all and (max-width:768px) {\r\n  .footer {\r\n      margin-left: -30px;\r\n      margin-right: -30px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n  \/\/ Only run on the frontend, not in the editor\r\n  if (document.body.classList.contains('wp-admin') || \r\n      window.location.href.indexOf('post.php') !== -1 || \r\n      window.location.href.indexOf('post-new.php') !== -1 ||\r\n      typeof wp !== 'undefined' && wp.hasOwnProperty('blocks')) {\r\n    \/\/ We're in the admin\/editor, don't run the interactive code\r\n    return;\r\n  }\r\n  \r\n  \/\/ Step 1 to Step 2 transition setup\r\n  const startButton = document.querySelector('.start-btn a');\r\n  const backButton = document.querySelector('.back-btn');\r\n  const step1 = document.querySelector('.step1');\r\n  const formContainer = document.querySelector('#wpcf7-f69-p26-o1');\r\n  const form = document.querySelector('.wpcf7-form');\r\n  \r\n  \/\/ Make sure elements exist before proceeding\r\n  if (!startButton || !step1 || !formContainer || !form) {\r\n    return;\r\n  }\r\n  \r\n  \/\/ Initially hide the form\r\n  formContainer.style.opacity = '0';\r\n  formContainer.style.display = 'none';\r\n  \r\n  \/\/ Check if form was already submitted\r\n  if (sessionStorage.getItem('formSubmitted') === 'true') {\r\n    \/\/ Hide step1\r\n    step1.style.display = 'none';\r\n    \r\n    \/\/ Show just the thank you message without the form\r\n    formContainer.style.display = 'block';\r\n    formContainer.style.opacity = '1';\r\n    \r\n    \/\/ Hide the form fields but keep the message\r\n    if (form) {\r\n      const formFields = form.querySelector('.adi-layout');\r\n      const submitButton = form.querySelector('input[type=\"submit\"]');\r\n      \r\n      if (formFields) formFields.style.display = 'none';\r\n      if (submitButton) submitButton.style.display = 'none';\r\n      \r\n      \/\/ Hide back button if it exists\r\n      if (backButton) backButton.style.display = 'none';\r\n      \r\n      \/\/ Make sure the success message is visible\r\n      const responseOutput = form.querySelector('.wpcf7-response-output');\r\n      if (responseOutput) {\r\n        responseOutput.textContent = 'Hvala na prijavi!';\r\n        responseOutput.classList.add('wpcf7-mail-sent-ok');\r\n        responseOutput.style.display = 'block';\r\n        \r\n        \/\/ Center the message for better visibility\r\n        responseOutput.style.textAlign = 'center';\r\n        \r\n        \/\/ Scroll to the message\r\n        responseOutput.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      }\r\n      \r\n      form.classList.add('sent');\r\n    }\r\n  }\r\n  \r\n  \/\/ Add click event for forward transition (to form)\r\n  startButton.addEventListener('click', function(e) {\r\n    e.preventDefault();\r\n    \r\n    step1.style.transition = 'opacity 0.5s ease';\r\n    step1.style.opacity = '0';\r\n    \r\n    setTimeout(function() {\r\n      step1.style.display = 'none';\r\n      \r\n      formContainer.style.display = 'block';\r\n      void formContainer.offsetWidth;\r\n      \r\n      formContainer.style.transition = 'opacity 0.5s ease';\r\n      formContainer.style.opacity = '1';\r\n      \r\n      \/\/ Show back button if it exists\r\n      if (backButton) {\r\n        backButton.style.display = 'inline-block';\r\n        backButton.style.opacity = '1';\r\n      }\r\n      \r\n      \/\/ Scroll to the form\r\n      formContainer.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n    }, 500);\r\n  });\r\n  \r\n  \/\/ Add click event for back transition (to step1)\r\n  if (backButton) {\r\n    backButton.addEventListener('click', function(e) {\r\n      e.preventDefault();\r\n      \r\n      formContainer.style.transition = 'opacity 0.5s ease';\r\n      formContainer.style.opacity = '0';\r\n      \r\n      \/\/ Hide back button\r\n      backButton.style.transition = 'opacity 0.3s ease';\r\n      backButton.style.opacity = '0';\r\n      \r\n      setTimeout(function() {\r\n        formContainer.style.display = 'none';\r\n        backButton.style.display = 'none';\r\n        \r\n        step1.style.display = 'block';\r\n        void step1.offsetWidth;\r\n        \r\n        step1.style.transition = 'opacity 0.5s ease';\r\n        step1.style.opacity = '1';\r\n        \r\n        \/\/ Scroll to step1\r\n        step1.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n      }, 500);\r\n    });\r\n  }\r\n  \r\n  \/\/ Form validation and submission handling\r\n  if (form) {\r\n    form.addEventListener('submit', function(e) {\r\n      e.preventDefault();\r\n      \r\n      \/\/ Get all required fields\r\n      const requiredFields = form.querySelectorAll('[aria-required=\"true\"]');\r\n      let isValid = true;\r\n      \r\n      \/\/ Check each required field\r\n      requiredFields.forEach(field => {\r\n        if (!field.value.trim()) {\r\n          isValid = false;\r\n          field.classList.add('wpcf7-not-valid');\r\n          \r\n          \/\/ Create error message if not exists\r\n          let errorMsg = field.parentNode.querySelector('.wpcf7-not-valid-tip');\r\n          if (!errorMsg) {\r\n            errorMsg = document.createElement('span');\r\n            errorMsg.className = 'wpcf7-not-valid-tip';\r\n            errorMsg.textContent = 'Ovo polje je obavezno.';\r\n            field.parentNode.appendChild(errorMsg);\r\n          }\r\n        } else {\r\n          field.classList.remove('wpcf7-not-valid');\r\n          const errorMsg = field.parentNode.querySelector('.wpcf7-not-valid-tip');\r\n          if (errorMsg) errorMsg.remove();\r\n        }\r\n      });\r\n      \r\n      \/\/ Validate email field specifically\r\n      const emailField = form.querySelector('input[type=\"email\"]');\r\n      if (emailField && emailField.value.trim() && !isValidEmail(emailField.value)) {\r\n        isValid = false;\r\n        emailField.classList.add('wpcf7-not-valid');\r\n        \r\n        let errorMsg = emailField.parentNode.querySelector('.wpcf7-not-valid-tip');\r\n        if (!errorMsg) {\r\n          errorMsg = document.createElement('span');\r\n          errorMsg.className = 'wpcf7-not-valid-tip';\r\n          errorMsg.textContent = 'Email adresa nije validna.';\r\n          emailField.parentNode.appendChild(errorMsg);\r\n        }\r\n      }\r\n      \r\n      \/\/ If valid, submit the form via AJAX\r\n      if (isValid) {\r\n        const formData = new FormData(form);\r\n        \r\n        fetch(form.getAttribute('action'), {\r\n          method: 'POST',\r\n          body: formData\r\n        })\r\n        .then(response => response.text())\r\n        .then(data => {\r\n          \/\/ Show success message\r\n          form.classList.add('sent');\r\n          const responseOutput = form.querySelector('.wpcf7-response-output');\r\n          if (responseOutput) {\r\n            responseOutput.textContent = 'Hvala na prijavi!';\r\n            responseOutput.classList.add('wpcf7-mail-sent-ok');\r\n            responseOutput.style.display = 'block';\r\n          }\r\n          \r\n          \/\/ Store submission status\r\n          sessionStorage.setItem('formSubmitted', 'true');\r\n          \r\n          \/\/ Fade out the form fields but keep the message\r\n          setTimeout(function() {\r\n            const formFields = form.querySelector('.adi-layout');\r\n            const submitButton = form.querySelector('input[type=\"submit\"]');\r\n            \r\n            \/\/ Hide back button if it exists\r\n            if (backButton) {\r\n              backButton.style.transition = 'opacity 0.3s ease';\r\n              backButton.style.opacity = '0';\r\n              setTimeout(() => {\r\n                backButton.style.display = 'none';\r\n              }, 300);\r\n            }\r\n            \r\n            \/\/ Improved smooth animation for form fields\r\n            if (formFields) {\r\n              \/\/ First get the height before any changes\r\n              const fieldHeight = formFields.offsetHeight;\r\n              \r\n              \/\/ Add a wrapper to allow smooth height animation\r\n              const wrapper = document.createElement('div');\r\n              wrapper.style.overflow = 'hidden';\r\n              wrapper.style.transition = 'height 0.4s ease-out';\r\n              wrapper.style.height = fieldHeight + 'px';\r\n              \r\n              \/\/ Move the form fields into the wrapper\r\n              formFields.parentNode.insertBefore(wrapper, formFields);\r\n              wrapper.appendChild(formFields);\r\n              \r\n              \/\/ Start the animations\r\n              formFields.style.transition = 'opacity 0.3s ease';\r\n              formFields.style.opacity = '0';\r\n              \r\n              \/\/ After opacity fade, collapse the height\r\n              setTimeout(() => {\r\n                wrapper.style.height = '0px';\r\n                \r\n                \/\/ After height animation completes, remove from DOM\r\n                setTimeout(() => {\r\n                  wrapper.parentNode.removeChild(wrapper);\r\n                }, 400);\r\n              }, 300);\r\n            }\r\n            \r\n            \/\/ Fade out submit button with a similar technique\r\n            if (submitButton) {\r\n              submitButton.style.transition = 'opacity 0.3s ease';\r\n              submitButton.style.opacity = '0';\r\n              \r\n              setTimeout(() => {\r\n                \/\/ Create a wrapper for the button\r\n                const buttonWrapper = document.createElement('div');\r\n                buttonWrapper.style.overflow = 'hidden';\r\n                buttonWrapper.style.transition = 'height 0.4s ease-out';\r\n                buttonWrapper.style.height = submitButton.offsetHeight + 'px';\r\n                \r\n                \/\/ Move the button into the wrapper\r\n                submitButton.parentNode.insertBefore(buttonWrapper, submitButton);\r\n                buttonWrapper.appendChild(submitButton);\r\n                \r\n                \/\/ Collapse the height\r\n                buttonWrapper.style.height = '0px';\r\n                \r\n                \/\/ Remove after animation completes\r\n                setTimeout(() => {\r\n                  buttonWrapper.parentNode.removeChild(buttonWrapper);\r\n                }, 400);\r\n              }, 300);\r\n            }\r\n            \r\n            \/\/ Center and enhance the message\r\n            if (responseOutput) {\r\n              responseOutput.style.textAlign = 'center';\r\n              \r\n              \/\/ Scroll to the message\r\n              responseOutput.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n            }\r\n          }, 500); \/\/ Wait for .5 seconds to let user see the full form with success message\r\n        })\r\n        .catch(error => {\r\n          console.error('Error:', error);\r\n        });\r\n      } else {\r\n        \/\/ Show general error message\r\n        const responseOutput = form.querySelector('.wpcf7-response-output');\r\n        if (responseOutput) {\r\n          responseOutput.textContent = 'Molimo popunite sva obavezna polja.';\r\n          responseOutput.classList.add('wpcf7-validation-errors');\r\n          responseOutput.style.display = 'block';\r\n        }\r\n        \r\n        \/\/ Scroll to the first invalid field\r\n        const firstInvalid = form.querySelector('.wpcf7-not-valid');\r\n        if (firstInvalid) {\r\n          firstInvalid.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n        }\r\n      }\r\n    });\r\n  }\r\n});\r\n\r\n\/\/ Listen for successful form submission from CF7\r\ndocument.addEventListener('wpcf7mailsent', function(event) {\r\n  sessionStorage.getItem('formSubmitted') !== 'true' && sessionStorage.setItem('formSubmitted', 'true');\r\n}, false);\r\n\r\n\/\/ Email validation function\r\nfunction isValidEmail(email) {\r\n  const regex = \/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\/;\r\n  return regex.test(email);\r\n}\r\n<\/script>\r\n\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n  const collage = document.querySelector('.collage');\r\n  if (!collage) return;\r\n\r\n  \/\/ Hide pieces immediately so there's no flash before the observer fires\r\n  const initial = [\r\n    ['.tl', 'translate(-120%, -120%) rotate(-25deg)'],\r\n    ['.tr', 'translate(120%, -120%) rotate(25deg)'],\r\n    ['.tm', 'translate(0, -150%) rotate(-8deg)'],\r\n    ['.bl', 'translate(-120%, 120%) rotate(20deg)'],\r\n    ['.br', 'translate(120%, 120%) rotate(-20deg)'],\r\n    ['.mid','scale(0) rotate(-180deg)'],\r\n  ];\r\n\r\n  initial.forEach(([sel, from]) => {\r\n    const el = collage.querySelector(sel);\r\n    if (!el) return;\r\n    el.style.transform = from;\r\n    el.style.opacity = '0';\r\n    el.style.filter = 'blur(6px)';\r\n  });\r\n\r\n  const pieces = [\r\n    ['.tl', 'translate(-120%, -120%) rotate(-25deg)', 100],\r\n    ['.tr', 'translate(120%, -120%) rotate(25deg)',   200],\r\n    ['.tm', 'translate(0, -150%) rotate(-8deg)',       300],\r\n    ['.bl', 'translate(-120%, 120%) rotate(20deg)',   400],\r\n    ['.br', 'translate(120%, 120%) rotate(-20deg)',   500],\r\n    ['.mid','scale(0) rotate(-180deg)',                700],\r\n  ];\r\n\r\n  const playIntro = () => {\r\n    pieces.forEach(([sel, from, delay]) => {\r\n      const el = collage.querySelector(sel);\r\n      if (!el) return;\r\n\r\n      const anim = el.animate(\r\n        [\r\n          { transform: from, opacity: 0, filter: 'blur(6px)' },\r\n          { transform: 'translate(0, 0) rotate(0) scale(1)', opacity: 1, filter: 'blur(0)' }\r\n        ],\r\n        {\r\n          duration: sel === '.mid' ? 900 : 1100,\r\n          delay,\r\n          easing: sel === '.mid'\r\n            ? 'cubic-bezier(.34, 1.56, .64, 1)'\r\n            : 'cubic-bezier(.22, 1, .36, 1)',\r\n          fill: 'both'\r\n        }\r\n      );\r\n\r\n      \/\/ Clean up inline styles once the animation settles, so the idle float takes over cleanly\r\n      anim.addEventListener('finish', () => {\r\n        el.style.transform = '';\r\n        el.style.opacity = '';\r\n        el.style.filter = '';\r\n      });\r\n    });\r\n\r\n    setTimeout(() => {\r\n      collage.querySelectorAll('img').forEach((img, i) => {\r\n        img.animate(\r\n          [\r\n            { transform: 'translateY(0) rotate(0deg)' },\r\n            { transform: `translateY(${i % 2 ? -6 : 6}px) rotate(${i % 2 ? 0.6 : -0.6}deg)` },\r\n            { transform: 'translateY(0) rotate(0deg)' }\r\n          ],\r\n          {\r\n            duration: 4000 + i * 300,\r\n            iterations: Infinity,\r\n            easing: 'ease-in-out'\r\n          }\r\n        );\r\n      });\r\n    }, 2000);\r\n  };\r\n\r\n  const observer = new IntersectionObserver((entries, obs) => {\r\n    entries.forEach(entry => {\r\n      if (entry.isIntersecting) {\r\n        playIntro();\r\n        obs.unobserve(entry.target);\r\n      }\r\n    });\r\n  }, {\r\n    threshold: 0.25,        \/\/ fires when ~25% of the collage is visible\r\n    rootMargin: '0px 0px -10% 0px' \/\/ nudge the trigger slightly before full view\r\n  });\r\n\r\n  observer.observe(collage);\r\n});\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n\r\n  const addCloseButton = (modal) => {\r\n    \/\/ Avoid duplicate buttons if this runs twice on the same node\r\n    if (modal.querySelector('.jam-modal-close')) return;\r\n\r\n    const btn = document.createElement('button');\r\n    btn.type = 'button';\r\n    btn.className = 'jam-modal-close';\r\n    btn.setAttribute('aria-label', 'Close');\r\n    btn.innerHTML = '&times;';\r\n\r\n    Object.assign(btn.style, {\r\n      position: 'absolute',\r\n      top: '20px',\r\n      right: '25px',\r\n      background: 'transparent',\r\n      border: 'none',\r\n      color: '#fff',\r\n      fontSize: '48px',\r\n      lineHeight: '1',\r\n      cursor: 'pointer',\r\n      padding: '0',\r\n      fontFamily: 'inherit',\r\n      transition: 'transform 0.2s ease, opacity 0.2s ease',\r\n      opacity: '0.8',\r\n      zIndex: '21'\r\n    });\r\n\r\n    btn.addEventListener('mouseenter', () => {\r\n      btn.style.transform = 'scale(1.15)';\r\n      btn.style.opacity = '1';\r\n    });\r\n    btn.addEventListener('mouseleave', () => {\r\n      btn.style.transform = 'scale(1)';\r\n      btn.style.opacity = '0.8';\r\n    });\r\n\r\n    btn.addEventListener('click', (e) => {\r\n      e.stopPropagation();\r\n      modal.style.display = 'none';\r\n    });\r\n\r\n    modal.appendChild(btn);\r\n  };\r\n\r\n  \/\/ Also close when clicking outside the text (on the dark backdrop itself)\r\n  const wireBackdropClose = (modal) => {\r\n    modal.addEventListener('click', (e) => {\r\n      if (e.target === modal) modal.style.display = 'none';\r\n    });\r\n  };\r\n\r\n  \/\/ Close on Escape key\r\n  document.addEventListener('keydown', (e) => {\r\n    if (e.key === 'Escape') {\r\n      document.querySelectorAll('.wpcf7-response-output.wpcf7-mail-sent-ok')\r\n        .forEach(m => { m.style.display = 'none'; });\r\n    }\r\n  });\r\n\r\n  \/\/ Handle any modals already in the DOM on load\r\n  document.querySelectorAll('.wpcf7-response-output.wpcf7-mail-sent-ok')\r\n    .forEach(m => { addCloseButton(m); wireBackdropClose(m); });\r\n\r\n  \/\/ Watch for CF7 inserting the success message after a form submission\r\n  const observer = new MutationObserver((mutations) => {\r\n    mutations.forEach(mutation => {\r\n      mutation.addedNodes.forEach(node => {\r\n        if (node.nodeType !== 1) return; \/\/ elements only\r\n\r\n        if (node.matches?.('.wpcf7-response-output.wpcf7-mail-sent-ok')) {\r\n          addCloseButton(node);\r\n          wireBackdropClose(node);\r\n        }\r\n\r\n        \/\/ In case the modal is nested inside an added wrapper\r\n        node.querySelectorAll?.('.wpcf7-response-output.wpcf7-mail-sent-ok')\r\n          .forEach(m => { addCloseButton(m); wireBackdropClose(m); });\r\n      });\r\n\r\n      \/\/ Some CF7 versions toggle the class on an existing node rather than inserting a new one\r\n      if (mutation.type === 'attributes' && mutation.target.matches?.('.wpcf7-response-output.wpcf7-mail-sent-ok')) {\r\n        addCloseButton(mutation.target);\r\n        wireBackdropClose(mutation.target);\r\n      }\r\n    });\r\n  });\r\n\r\n  observer.observe(document.body, {\r\n    childList: true,\r\n    subtree: true,\r\n    attributes: true,\r\n    attributeFilter: ['class']\r\n  });\r\n});\r\n  \r\n<\/script><\/div>","protected":false},"excerpt":{"rendered":"<p>THE ORIGINAL JAM VOL.3 VOLUME JE NA MAX. ZVUK JE POJA\u010dAN. The Original Jam se vra\u0107a u adidas Originals Store u Beogradu. Nakon dva uspe\u0161na doga\u0111aja koja su okupila autenti\u010dne izvo\u0111a\u010de i publiku \u017eeljnu novih zvukova, The Original Jam Vol.3 donosi novo poglavlje &#8211; sa ja\u010dom energijom,live nastupima i novim lineupom izvo\u0111a\u010da. Ovog puta, doga\u0111aj [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":119,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=\/wp\/v2\/pages\/26"}],"collection":[{"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=26"}],"version-history":[{"count":38,"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=\/wp\/v2\/pages\/26\/revisions"}],"predecessor-version":[{"id":978,"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=\/wp\/v2\/pages\/26\/revisions\/978"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=\/wp\/v2\/media\/119"}],"wp:attachment":[{"href":"https:\/\/www.theoriginaljam.rs\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}