(function (container) { var _w = { /** * Internal Constants */ version: "1.21.0", TPA_INTENT:"TPA", /** * SDK message types */ MessageTypes:{ REFRESH_APP : "refreshApp", APP_IS_ALIVE : "appIsAlive", APP_STATE_CHANGED : "appStateChanged", CLOSE_WINDOW : "closeWindow", RESIZE_WINDOW : "resizeWindow", SET_WINDOW_PLACEMENT : "setWindowPlacement", GET_WINDOW_PLACEMENT : "getWindowPlacement", OPEN_POPUP : "openPopup", OPEN_MODAL : "openModal", OPEN_MEDIA_DIALOG : "openMediaDialog", OPEN_BILLING_PAGE : "openBillingPage", GET_SITE_PAGES : 'getSitePages', GET_SITE_COLORS : 'getSiteColors', NAVIGATE_TO_PAGE : 'navigateToPage', POST_MESSAGE : 'postMessage', HEIGHT_CHANGED :"heightChanged", NAVIGATE_TO_STATE : "navigateToState", SM_REQUEST_LOGIN : "smRequestLogin", SM_CURRENT_MEMBER : "smCurrentMember", SITE_INFO : "siteInfo", SCROLL_TO : "scrollTo", SCROLL_BY : "scrollBy" }, /** * Registered events callbacks */ EventsCallbacks:{}, /** * Resident component id */ compId: null, /** * Messages response callback map */ callbacks: {}, /** * callback id */ callId: 1, /** * Current edit mode state */ currentEditMode: 'site', /** * SDK initialization function */ init:function () { // deploy compatibility script to support modern JS on iOS5,IE8/9 _w.deployPolyFills(); // initialize google analytics _w.gaInit(); // initialize the event callbacks mechanism _w.initEventsCallbacks(Wix.Events); // initialize error tracking logic _w.errorTrackingInit(); // get our comp id _w.compId = _w.getQueryParameter("compId") || "[UNKNOWN]"; // register post message hub function _w.addPostMessageCallback(_w.receiver.bind(_w)); // initialize edit mode state tracking this.currentEditMode = _w.getQueryParameter("viewMode") || this.currentEditMode; Wix.addEventListener('EDIT_MODE_CHANGE', function(params) { this.currentEditMode = params.editMode; }.bind(this)); // report ready to Wix _w.sendMessageInternal(_w.MessageTypes.APP_IS_ALIVE, {version: _w.getVersion()}); }, reportSdkError: function(errorMessage) { var error = new Error('Wix SDK: ' + errorMessage); throw error.stack; }, /** * Internal Functions */ sendMessageInternal:function (type, data) { var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined); if (target && typeof target != "undefined") { target.postMessage(JSON.stringify({ intent:_w.TPA_INTENT, compId:_w.compId, type:type, data:data }), "*"); var dataStr = ""; try { dataStr = JSON.stringify(data); } catch(err) {} _w.trackSDKCall(type, dataStr); } }, sendMessageInternal2:function (msgType, params, callback) { if (!msgType) { return; } /* prepare call parameters */ var blob = _w.getBlob(msgType, params, callback); var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined); if (target && typeof target != "undefined") { var dataStr = ""; try { dataStr = JSON.stringify(params); } catch(err) { // ... } target.postMessage(JSON.stringify(blob),"*"); _w.trackSDKCall(msgType, dataStr); } }, getBlob: function(msgType, params, onResponseCallback) { var blob = { intent: "TPA2", callId: this.getCallId(), type: msgType, compId: _w.compId, data: params }; if (onResponseCallback) { this.callbacks[blob.callId] = onResponseCallback; }; return blob; }, getCallId: function() { return _w.callId++; }, /** Function sendPingPongMessage * sends a post message to TPAManager (viewer) with message type and invokes the callback * @param type - a property of MessageTypes * @param callback * @param runMultipleTimes - optional, if set to true the post message callback isn't removed */ sendPingPongMessage:function (type, callback, runMultipleTimes) { this.sendMessageInternal(type); var onMessageCallback = function (evt) { var postMessageData = JSON.parse(evt.data); if (postMessageData.intent == _w.TPA_INTENT) { if (postMessageData.type == type && callback) { callback(postMessageData.data); if (!runMultipleTimes) { this._removePostMessageCallback(onMessageCallback); } } } }.bind(this); this.addPostMessageCallback(onMessageCallback); }, addPostMessageCallback:function (callback) { if (window.addEventListener) { window.addEventListener('message', callback, false); } else if (window.attachEvent) { window.attachEvent('onmessage', callback); } }, _removePostMessageCallback:function (callback) { if (window.removeEventListener) { window.removeEventListener('message', callback); } else if (window.detachEvent) { window.detachEvent('onmessage', callback); } }, getQueryParameter:function (parameterName) { if (!_w.queryMap) { _w.queryMap = {}; var queryString = location.search.substring(1) || ''; var queryArray = queryString.split('&'); queryArray.forEach(function(element) { var parts = element.split('='); _w.queryMap[parts[0]] = decodeURIComponent(parts[1]); }); } return _w.queryMap[parameterName] || null; }, decodeBase64: function(str) { return atob(str); }, getVersion: function() { var version = !!_w.version ? _w.version : (window.location.pathname.split('/')[3] || "unknown"); return version; }, gaInit: function() { var _gaq = window._gaq || ( window._gaq = []); _gaq.push(['wix._setAccount', 'UA-2117194-51']); _gaq.push(['wix._trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); }, errorTrackingInit: function() { var event = 'onerror'; var listener = _w.errorHandler; if (window.addEventListener) { window.addEventListener(event.replace(/^on/, ''), listener, false); } else { if (window[event]) { var origListener = window[event]; window[event] = function(event) { origListener(event); listener(event); } } else { window[event] = function(event) { listener(event); } } } }, errorHandler: function(errorMsg, url, lineNumber) { _w.trackError(errorMsg, lineNumber); return false; }, /** Function trackEvent * * Add an event tracking * * @param category (String) name for the group of objects you want to track. * @param action (String) action name, unique in the category scope used to define the type of user interaction. * @param label (String) Optional, provides additional dimensions to the event data * @param value (Number) Optional, provides numerical data about the user event */ gaTrackEvent: function(category, action, label, value) { _gaq.push(['wix._trackEvent', category || "default", action || "default", label || "", value]); }, trackSDKCall: function(callName, label) { _w.gaTrackEvent("SDK", callName, label); }, trackEventCall: function(eventName) { _w.gaTrackEvent("Event", eventName); }, trackError: function(errorMessage) { _w.gaTrackEvent("Error", errorMessage); }, initEventsCallbacks: function(events) { for (var propertyName in events) { if (events.hasOwnProperty(propertyName)) { _w.EventsCallbacks[propertyName] = []; } } }, getDecodedInstance: function() { var instanceStr = _w.getQueryParameter("instance"); var encodedInstance = instanceStr.substring(instanceStr.indexOf(".")+1); return JSON.parse(this.decodeBase64(encodedInstance)); }, getInstanceValue: function(key) { var decodedInstance = _w.getDecodedInstance(); if (decodedInstance) { return decodedInstance[key] || null; } return null; }, receiver:function (event) { if (!event || !event.data) { return; } var data = {}; try { data = JSON.parse(event.data); } catch(e) { return; } switch(data.intent) { case "TPA_RESPONSE": if (data.callId && this.callbacks[data.callId]) { this.callbacks[data.callId](data.res); delete this.callbacks[data.callId]; } break; case "addEventListener": _w.trackEventCall(data.eventType); if (this.EventsCallbacks[data.eventType]) { this.EventsCallbacks[data.eventType].forEach( function (callback) { callback.apply(this, [data.params]); }); } break; } }, deployPolyFills: function() { this.deployES5Shim(); this.deployBase64PolyFill(); }, deployBase64PolyFill: function() { // minified source at https://github.com/davidchambers/Base64.js var t="undefined"!=typeof window?window:exports,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n=function(){try{document.createElement("$")}catch(t){return t}}();t.btoa||(t.btoa=function(t){for(var o,e,a=0,c=r,f="";t.charAt(0|a)||(c="=",a%1);f+=c.charAt(63&o>>8-8*(a%1))){if(e=t.charCodeAt(a+=.75),e>255)throw n;o=o<<8|e}return f}),t.atob||(t.atob=function(t){if(t=t.replace(/=+$/,""),1==t.length%4)throw n;for(var o,e,a=0,c=0,f="";e=t.charAt(c++);~e&&(o=a%4?64*o+e:e,a++%4)?f+=String.fromCharCode(255&o>>(6&-2*a)):0)e=r.indexOf(e);return f;}); }, deployES5Shim: function() { (function(f){"function"==typeof define?define(f):"function"==typeof YUI?YUI.add("es5-sham",f):f()})(function(){function f(a){try{return Object.defineProperty(a,"sentinel",{}),"sentinel"in a}catch(b){}}Object.getPrototypeOf||(Object.getPrototypeOf=function(a){return a.__proto__||(a.constructor?a.constructor.prototype:prototypeOfObject)});Object.getOwnPropertyDescriptor||(Object.getOwnPropertyDescriptor=function(a,b){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+ a);if(owns(a,b)){var d={enumerable:true,configurable:true};if(supportsAccessors){var l=a.__proto__;a.__proto__=prototypeOfObject;var c=lookupGetter(a,b),e=lookupSetter(a,b);a.__proto__=l;if(c||e){if(c)d.get=c;if(e)d.set=e;return d}}d.value=a[b];return d}});Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)});if(!Object.create){var h;if(null===Object.prototype.__proto__||"undefined"==typeof document)h=function(){return{__proto__:null}};else{var k=function(){}, e=document.createElement("iframe"),g=document.body||document.documentElement;e.style.display="none";g.appendChild(e);e.src="javascript:";var c=e.contentWindow.Object.prototype;g.removeChild(e);e=null;delete c.constructor;delete c.hasOwnProperty;delete c.propertyIsEnumerable;delete c.isPrototypeOf;delete c.toLocaleString;delete c.toString;delete c.valueOf;c.__proto__=null;k.prototype=c;h=function(){return new k}}Object.create=function(a,b){function d(){}var c;if(a===null)c=h();else{if(typeof a!=="object"&& typeof a!=="function")throw new TypeError("Object prototype may only be an Object or null");d.prototype=a;c=new d;c.__proto__=a}b!==void 0&&Object.defineProperties(c,b);return c}}if(Object.defineProperty&&(e=f({}),g="undefined"==typeof document||f(document.createElement("div")),!e||!g))var i=Object.defineProperty,j=Object.defineProperties;if(!Object.defineProperty||i)Object.defineProperty=function(a,b,d){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.defineProperty called on non-object: "+ a);if(typeof d!="object"&&typeof d!="function"||d===null)throw new TypeError("Property description must be an object: "+d);if(i)try{return i.call(Object,a,b,d)}catch(c){}if(owns(d,"value"))if(supportsAccessors&&(lookupGetter(a,b)||lookupSetter(a,b))){var e=a.__proto__;a.__proto__=prototypeOfObject;delete a[b];a[b]=d.value;a.__proto__=e}else a[b]=d.value;else{if(!supportsAccessors)throw new TypeError("getters & setters can not be defined on this javascript engine");owns(d,"get")&&defineGetter(a,b, d.get);owns(d,"set")&&defineSetter(a,b,d.set)}return a};if(!Object.defineProperties||j)Object.defineProperties=function(a,b){if(j)try{return j.call(Object,a,b)}catch(d){}for(var c in b)owns(b,c)&&c!="__proto__"&&Object.defineProperty(a,c,b[c]);return a};Object.seal||(Object.seal=function(a){return a});Object.freeze||(Object.freeze=function(a){return a});try{Object.freeze(function(){})}catch(n){var m=Object.freeze;Object.freeze=function(a){return typeof a=="function"?a:m(a)}}Object.preventExtensions|| (Object.preventExtensions=function(a){return a});Object.isSealed||(Object.isSealed=function(){return false});Object.isFrozen||(Object.isFrozen=function(){return false});Object.isExtensible||(Object.isExtensible=function(a){if(Object(a)!==a)throw new TypeError;for(var b="";owns(a,b);)b=b+"?";a[b]=true;var c=owns(a,b);delete a[b];return c})}); // minified source at https://github.com/kriskowal/es5-shim (function(p){"function"==typeof define?define(p):"function"==typeof YUI?YUI.add("es5",p):p()})(function(){function p(a){a=+a;a!==a?a=0:0!==a&&(a!==1/0&&a!==-(1/0))&&(a=(0>>0;if(h(a)!="[object Function]")throw new TypeError;for(;++e>>0,f=Array(e);if(h(a)!="[object Function]")throw new TypeError(a+" is not a function");for(var g=0;g>>0,f=[],g;if(h(a)!="[object Function]")throw new TypeError(a+" is not a function");for(var i=0;i>>0;if(h(a)!="[object Function]")throw new TypeError(a+" is not a function");for(var f=0;f>>0;if(h(a)!="[object Function]")throw new TypeError(a+" is not a function");for(var f=0;f>>0;if(h(a)!="[object Function]")throw new TypeError(a+" is not a function"); if(!c&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var e=0,f;if(arguments.length>=2)f=arguments[1];else{do{if(e in d){f=d[e++];break}if(++e>=c)throw new TypeError("reduce of empty array with no initial value");}while(1)}for(;e>>0;if(h(a)!="[object Function]")throw new TypeError(a+ " is not a function");if(!c&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var e,c=c-1;if(arguments.length>=2)e=arguments[1];else{do{if(c in d){e=d[c--];break}if(--c<0)throw new TypeError("reduceRight of empty array with no initial value");}while(1)}do c in this&&(e=a.call(void 0,e,d[c],c,b));while(c--);return e});if(!Array.prototype.indexOf||-1!=[0,1].indexOf(1,2))Array.prototype.indexOf=function(a){var b=l&&h(this)=="[object String]"?this.split(""): n(this),d=b.length>>>0;if(!d)return-1;var c=0;arguments.length>1&&(c=p(arguments[1]));for(c=c>=0?c:Math.max(0,d+c);c>>0;if(!d)return-1;var c=d-1;arguments.length>1&&(c=Math.min(c,p(arguments[1])));for(c=c>=0?c:d-Math.abs(c);c>=0;c--)if(c in b&&a===b[c])return c;return-1};if(!Object.keys){var v= !0,w="toString toLocaleString valueOf hasOwnProperty isPrototypeOf propertyIsEnumerable constructor".split(" "),z=w.length,r;for(r in{toString:null})v=!1;Object.keys=function(a){if(typeof a!="object"&&typeof a!="function"||a===null)throw new TypeError("Object.keys called on a non-object");var b=[],d;for(d in a)t(a,d)&&b.push(d);if(v)for(d=0;d9999?"+":"")+("00000"+Math.abs(c)).slice(0<=c&&c<=9999?-4:-6);for(b=a.length;b--;){d=a[b];d<10&&(a[b]="0"+d)}return c+"-"+a.slice(0,2).join("-")+"T"+a.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+ "Z"};r=!1;try{r=Date.prototype.toJSON&&null===(new Date(NaN)).toJSON()&&-1!==(new Date(-621987552E5)).toJSON().indexOf("-000001")&&Date.prototype.toJSON.call({toISOString:function(){return true}})}catch(G){}r||(Date.prototype.toJSON=function(){var a=Object(this),b;a:if(s(a))b=a;else{b=a.valueOf;if(typeof b==="function"){b=b.call(a);if(s(b))break a}b=a.toString;if(typeof b==="function"){b=b.call(a);if(s(b))break a}throw new TypeError;}if(typeof b==="number"&&!isFinite(b))return null;b=a.toISOString; if(typeof b!="function")throw new TypeError("toISOString property is not callable");return b.call(a)});var g=Date,m=function(a,b,d,c,e,f,h){var i=arguments.length;if(this instanceof g){i=i==1&&String(a)===a?new g(m.parse(a)):i>=7?new g(a,b,d,c,e,f,h):i>=6?new g(a,b,d,c,e,f):i>=5?new g(a,b,d,c,e):i>=4?new g(a,b,d,c):i>=3?new g(a,b,d):i>=2?new g(a,b):i>=1?new g(a):new g;i.constructor=m;return i}return g.apply(this,arguments)},u=function(a,b){var d=b>1?1:0;return A[b]+Math.floor((a-1969+d)/4)-Math.floor((a- 1901+d)/100)+Math.floor((a-1601+d)/400)+365*(a-1970)},B=RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),A=[0,31,59,90,120,151,181,212,243,273,304,334,365],j;for(j in g)m[j]=g[j];m.now=g.now;m.UTC=g.UTC;m.prototype=g.prototype;m.prototype.constructor=m;m.parse=function(a){var b=B.exec(a);if(b){var d=Number(b[1]),c=Number(b[2]||1)-1,e=Number(b[3]||1)-1,f=Number(b[4]||0),h=Number(b[5]||0),i=Number(b[6]|| 0),j=Number(b[7]||0),m=!b[4]||b[8]?0:Number(new g(1970,0)),k=b[9]==="-"?1:-1,l=Number(b[10]||0),b=Number(b[11]||0);if(f<(h>0||i>0||j>0?24:25)&&h<60&&i<60&&j<1E3&&c>-1&&c<12&&l<24&&b<60&&e>-1&&e