Team:Cadets2Vets/js/spimeengine

/******************************************************************************************************

*                                             SPIME ENGINE 
******************************************************************************************************/

var SpimeEngine = {};

/******************************************************************************************************

*                                               GLOBALS 
******************************************************************************************************/

SpimeEngine.debugMode = false; //When set to true console logs will be shown SpimeEngine.arrangers = {}; // An array of all the arrangers in the page SpimeEngine.layouts = {}; //An array of all the layouts in the page SpimeEngine.itemType = ""; //The current item type SpimeEngine.resourceRoot = (document.location.hostname == "localhost")? "http://localhost:7000" : ""; //Represents the resource root for local development and production SpimeEngine.captchaKey = (document.location.hostname == "127.0.0.1" || document.location.hostname == "localhost") ? "6LdmEiUUAAAAAJBHO4Pb7MdtE5Et1jN1Wk4wjOBr" : "6Lc2KCUUAAAAAGP2G2L0bhHTq_hcnbo_we19MIXA"; SpimeEngine.YTPlayers = {}; SpimeEngine.Geocoder = {}; SpimeEngine.GoogleMaps = {}; SpimeEngine.MapStyles = {}; SpimeEngine.stripePaymentHandler = {}; SpimeEngine.stripePaymentParams = {}; SpimeEngine.scrollEnabled = true;

/******************************************************************************************************

*                                               MAIN
*                                  called from body onLoad func    
******************************************************************************************************/

SpimeEngine.start = function(){ $(document).ready(function() { SpimeEngine.updateParent({"deliver_to":"parent","action":"finished-loading"}); var shopId = $("#sr-companyid").val(); if (shopId){

} }); try{ SpimeEngine.BeforeInit(); SpimeEngine.InitMaster(); var c = 0 SpimeEngine.getAllHolders().each(function(){ var currentHolder = $(this); setTimeout(function(){ SpimeEngine.InitHolder(currentHolder); },10 *c ) c++; }); SpimeEngine.initForms(); LightBox.initLinks(); SpimeEngine.initVideos(); SpimeEngine.initMaps(); SpimeEngine.initDynamicStripes(); SpimeEngine.AttachHelperIfNeeded(); SpimeEngine.AfterInit(); SpimeEngine.initAnchors(); setTimeout(function(){ SpimeEngine.loadHighResImages(); },1500); SpimeEngine.initRawHTMLs(); var hasScrollEffects = $(".master.container").hasClass("scroll-effects"); var hasItemEnterEffects = $(".master.item-box.items-enter-effects").length > 0; //first init of sections visibility if (hasScrollEffects || hasItemEnterEffects){ SpimeEngine.handleScrollEffects(); } if (getParameterByName("show_site")){ $('body,html').animate({ scrollTop: $(document).height() }, 4000); setTimeout(function(){ $('body,html').animate({ scrollTop: 0 }, 2000); },4500) } }catch(err){ console.log(err); console.trace(); //XPRSHelper.xprsAlert("something went wrong... (Engine)\n" + err,{title:"ERROR","report_error":true}); console.error("something went wrong... (Engine) " + err) var errorMessage = $("#error").html(); $("#content").html(errorMessage); } };

/******************************************************************************************************

*                                               INIT
*                                 The following methods are only called once
******************************************************************************************************/

SpimeEngine.BeforeInit = function(){ SpimeEngine.UpdateDeviceClass(); SpimeEngine.itemType = $(".master.container").data("itemtype"); var scrollingContainer = $(document); //scrollingContainer = scrollingContainer.add($(".main-page")); var hasScrollEffects = $(".master.container").hasClass("scroll-effects"); var hasItemEnterEffects = $(".master.item-box.items-enter-effects").length > 0;

SpimeEngine.handleParallax();

scrollingContainer.unbind("scroll").bind("scroll",function(event){ if (SpimeEngine.scrollEnabled){ if(typeof window["EditorHelper"] != "undefined"){

EditorHelper.handleScroll(event); //$(".left-menu-placeholder .header-box").css("top",$(this).scrollTop()); //if ($(".light-box-wrapper").length > 0){ // $(".light-box-wrapper").css("top",$(this).scrollTop()); //} } if ("menu" in SpimeEngine.layouts){ if (typeof SpimeEngine.layouts["menu"].handleScroll != "undefined"){ SpimeEngine.layouts["menu"].handleScroll($("[data-preset-type-id='MENUS']"),$(this).scrollTop()); } }

SpimeEngine.handleParallax();

if (hasScrollEffects || hasItemEnterEffects){ SpimeEngine.handleScrollEffects(); } } if (typeof popupStripeAppOnScroll == 'function') { setTimeout(function(){ popupStripeAppOnScroll(); },300); }

});

if(typeof window["EditorHelper"] != "undefined"){ var currentBrowser = XPRSHelper.getBrowser(); if (currentBrowser.toLowerCase().indexOf("chrome") != -1){ scrollingContainer.bind('mousewheel', function(e){ if (SpimeEngine.scrollEnabled){ if ($(e.target).closest(".new-page-blocker").length == 0 && $(e.target).closest("#quick-style-menu").length == 0 && $(e.target).closest("#xprs-class-selector-holder").length == 0 ){ e.preventDefault(); scrollingContainer.scrollTop(scrollingContainer.scrollTop() - (e.originalEvent.wheelDelta / 2)); } } }); } }

};


SpimeEngine.disableScroll= function(){ SpimeEngine.scrollEnabled = false; $("body").addClass("no-scroll"); };


SpimeEngine.enableScroll= function(){ SpimeEngine.scrollEnabled = true; $("body").removeClass("no-scroll"); };


SpimeEngine.handleParallax = function(){ if ($("#xprs").is(".tablet-mode")){ return; } $(".parallax50-bg").each(function( index ) { var relevant_bg_img = $(this) var relevant_bg = relevant_bg_img.closest(".master.item-box"); relevant_bg_top = relevant_bg.offset().top; relevant_bg_bottom = relevant_bg_top + relevant_bg.height(); if ( (window.scrollY + $(window).height()) > relevant_bg_top ) { if ( window.scrollY < relevant_bg_bottom ) { var pospos = (relevant_bg_top + relevant_bg.height()/2) - (window.scrollY + $(window).height()/1.2); pospos = pospos/3; relevant_bg_img.css("background-position-y", pospos+"px"); } } }); }

SpimeEngine.handleScrollEffects = function(){ SpimeEngine.getAllHolders().not(".header-box").each(function(){ var currentStripe = $(this); var bufferChecker = Math.min(0.3 * $(this).outerHeight(), 150)

       var top_of_object = currentStripe.offset().top + bufferChecker;
       var bottom_of_window = $(window).scrollTop() + $(window).height();
       /* If the object is completely visible in the window, fade it it */
       if( bottom_of_window > top_of_object ){
       	currentStripe.addClass("visible-section");
       	currentStripe.removeClass("hidden-section");
       } else {
       	currentStripe.removeClass("visible-section");
       	currentStripe.addClass("hidden-section");
       }

}); };



SpimeEngine.AfterInit = function(){ $("#loading").remove(); $(".master.container").css("visibility","visible");

var resizeFlag = "off";

window.onresize = function(event) { if(typeof event != "undefined" && event.target === window) { if (resizeFlag == "off"){ resizeFlag = "waiting"; setTimeout(function(){ SpimeEngine.ArrangeAll(); resizeFlag = "off" }, 1500); } //SpimeEngine.ArrangeAll(); SpimeEngine.UpdateDeviceClass(); if(typeof window["EditorHelper"] != "undefined"){ EditorHelper.adjustUI(); }

$(".master.item-box").each(function(index) { var win = $(window); var viewport = { top : win.scrollTop(), left : win.scrollLeft() }; viewport.bottom = viewport.top + win.height(); viewport.right = viewport.left + win.width();

if ( ($(this).position().top > (viewport.bottom)) || ($(this).position().bottom < (viewport.top)) ){ } else { SpimeEngine.ArrangeHolder($(this)) }


});


} };


window.addEventListener("orientationchange", function() { SpimeEngine.UpdateDeviceClass(); $(".master.item-box").each(function(index) { var win = $(window); var viewport = { top : win.scrollTop(), left : win.scrollLeft() }; viewport.bottom = viewport.top + win.height(); viewport.right = viewport.left + win.width(); if ( ($(this).position().top > (viewport.bottom)) || ($(this).position().bottom < (viewport.top)) ){ } else { SpimeEngine.ArrangeHolder($(this)) } }); }, false);

SpimeEngine.handleUnarranged();

// var resizeTimeout; // $(window).resize(function(){ // clearTimeout(resizeTimeout); // resizeTimeout = setTimeout(function(){ // SpimeEngine.ArrangeAll(); // }, 100); // });


// function debounce(func, wait, immediate) { // var timeout; // return function() { // var context = this, args = arguments; // var later = function() { // timeout = null; // if (!immediate) func.apply(context, args); // }; // if (immediate && !timeout) func.apply(context, args); // clearTimeout(timeout); // timeout = setTimeout(later, wait); // }; // } // window.onresize = debounce(function() { // // Your code here // }, 500);


};


SpimeEngine.UpdateDeviceClass = function(){ var currentWinWidth = $(window).width(); var deviceClass = "desktop-mode"; var disableScrollEffects = false;

if(currentWinWidth < 800){ deviceClass = "tablet-mode desktop-mode"; disableScrollEffects = true; }

if (currentWinWidth < 500){ deviceClass = "phone-mode tablet-mode desktop-mode"; }


var xprsHolder = $("#xprs"); xprsHolder.removeClass("desktop-mode tablet-mode phone-mode"); xprsHolder.addClass(deviceClass); var mainPage = xprsHolder.find(".main-page"); var forceDisable = mainPage.attr("data-force-disable"); if (mainPage.hasClass("disable_effects") && !disableScrollEffects && !forceDisable){ mainPage.removeClass("disable_effects"); } if (!mainPage.hasClass("disable_effects") && disableScrollEffects){ mainPage.addClass("disable_effects"); } };

SpimeEngine.handleUnarranged = function(){ if ($(".rearrange").length > 0){ setTimeout(function(){ $(".rearrange").each(function(){ $(this).removeClass("rearrange"); SpimeEngine.ArrangeHolder($(this)); }); SpimeEngine.handleUnarranged(); },200); } };

SpimeEngine.loadHighResImages = function(){ SpimeEngine.loadHighResImage($(".stripe_popup_app_hide .load-high-res").not("#no-image"),1600); var c = 0; $(".load-high-res").not(".from-feed").not("#no-image").each(function(){ var currentImg = $(this); setTimeout(function(){ SpimeEngine.loadHighResImage(currentImg); },10 *c ) c++; });


};


SpimeEngine.loadHighResImage = function(imgDiv,forceNewRes){ if (imgDiv.length == 0){ return; } imgDiv.removeClass("load-high-res") var currentSrc = imgDiv.css("background-image"); var currentWidth = imgDiv.width(); var currentHeight = imgDiv.height(); var newRes = Math.max(currentWidth,currentHeight); newRes = Math.min(newRes,1600); if(typeof window["EditorHelper"] != "undefined"){ newRes = 1600; } if (isNaN(newRes)){ newRes = 1200; }

if (forceNewRes){ newRes = forceNewRes; }

var backgroundZoom = imgDiv.css("background-size"); if (typeof backgroundZoom != "undefined"){ if (backgroundZoom.indexOf("%") != -1){ if (parseInt(backgroundZoom) > 100){ newRes = 1600; } }else if(backgroundZoom == "cover"){ var tempRes = Math.max(currentWidth,currentHeight); if (forceNewRes){ tempRes = forceNewRes; } tempRes*=2; tempRes = Math.min(tempRes,1600); newRes = tempRes; } }

var newSrc = currentSrc.replace("=s300","=s"+newRes); var finalSrc = newSrc + "," +currentSrc imgDiv.css("background-image",finalSrc); setTimeout(function() { SpimeEngine.removeLowResimg(imgDiv); }, 1000); };

SpimeEngine.removeLowResimg = function(imgDiv) { var oldBg = imgDiv.css("background-image"); var bgArray = oldBg.split(','); if (bgArray.length>1) { imgDiv.css("background-image", bgArray[0]); } }


SpimeEngine.initRawHTMLs = function(){ $(".main-page:not(.disable-raw-html) .raw-container, .main-page:not(.disable-raw-html) .preview-raw-container").not(".disable-raw-html").each(function() { SpimeEngine.initRawHTML($(this)); }); };

SpimeEngine.initRawHTML = function(htmlContainer,forceLoad, callback){ if(typeof window["EditorHelper"] != "undefined"){ if(htmlContainer.closest(".raw-wrapper").find(".page-app").length > 0) { htmlContainer.closest(".raw-wrapper").css({"min-height":"0px"}); } } if (htmlContainer.attr("data-static") == "false" || forceLoad){ var url = htmlContainer.attr("data-raw-content-url"); $.get(XPRSHelper.getServerPath() + url,function(html){ if($("[data-block-script]").length > 0){ htmlContainer.html(SpimeEngine.unescapeHtml(html)) }else{ htmlContainer.html(html) } if(callback)callback(); }); } };

SpimeEngine.unescapeHtml = function(safe) {

   var temp = document.createElement("div");
   temp.innerHTML = safe;
   var result = temp.childNodes[0].nodeValue;
   temp.removeChild(temp.firstChild);

return result; }


SpimeEngine.getProductUrl = function(pid){ var rootId = $("body").attr("data-root-id"); var pageId = $(".master.container").attr("id"); var isInnerpage = rootId != pageId var pathName = location.pathname; if(pathName.endsWith("/")){ pathName = pathName.substring(0,pathName.length-1); } if (isInnerpage){ if (pathName.indexOf("/free/") != -1 || pathName.indexOf("/viewer/") != -1 || pathName.indexOf("/live/") != -1){ pathName = pathName.substring(0, pathName.lastIndexOf('/')); }else{ pathName = ""; } } return window.location.protocol + "//" + window.location.host + pathName + "/product/" + pid; };

SpimeEngine.parsePrice = function(priceElement){ if (priceElement.find(".real-price").length > 0){ strPrice = priceElement.find(".real-price").text(); }else{ strPrice = priceElement.text(); } var parsedPrice = 0.0; var multiplyBy = 1; strPrice = strPrice.trim().toLowerCase().replace(",",""); strPrice = strPrice.split(" ")[0]; if (strPrice.indexOf("k") == strPrice.length - 1){ multiplyBy = 1000; } //strPrice = strPrice.replace("k","000") return parseFloat(strPrice) * 100 * multiplyBy; };



SpimeEngine.populateProductDetails = function(priceElement){ var productImg = "none"; var productName = ""; var item = priceElement.closest(".item-box"); var previewImage = item.find(".inner-pic.preview-element"); if (previewImage.length ==0){ previewImage = item.find(".image-source.preview-element"); } if (previewImage.length > 0){ var originalSrc = previewImage.css("background-image"); var imageSrc = originalSrc; if (imageSrc.indexOf(",") != -1){ imageSrc = imageSrc.split(",")[0]; imageSrc = imageSrc.replace('"',).replace('"',); } imageSrc = imageSrc.replace("url(","").replace(")",""); var imageSrc = imageSrc.substring(0,imageSrc.indexOf("=s")); //imageSrc += "=s60"; productImg = imageSrc; } SpimeEngine.stripePaymentParams["product_img"] = productImg; SpimeEngine.stripePaymentParams["product_name"] = item.find(".preview-title").text().replace(/ /gi, ' '); }

SpimeEngine.initAnchors = function(){ $("a[data-link-type='ANCHOR']").each(function() { var currentLink = $(this); currentLink.unbind("click").bind("click",function(e){ e.preventDefault(); var target = $(this).attr("href"); var menuOffset = SpimeEngine.calculateScrollOffset(); if ($(this).closest(".preview-item-links.flipped").length > 0 ){ $(".links-menu-btn").click(); } // var targetOffset = $(target).offset().top + $(".main-page").scrollTop() - menuOffset; // $(".main-page").animate({ // scrollTop: targetOffset // }, 2000);

//targetOffset = $(target).offset().top + $("body").scrollTop() - menuOffset; if ($(target).length > 0) {

				targetOffset = $(target).offset().top - menuOffset;
				$('body,html').animate({
				scrollTop: targetOffset
				}, 2000);
			} else {
				var pathName = SpimeEngine.getPathName();
				var newTarget = window.location.protocol + "//" + window.location.host + pathName +target;
				window.location.href = newTarget;
			}

}); }); };

SpimeEngine.getPathName = function() {

	var rootId = $("body").attr("data-root-id");
	var pageId = $(".master.container").attr("id");
	var isInnerpage = rootId != pageId
	var pathName = location.pathname;
	if(pathName.endsWith("/")){
		pathName = pathName.substring(0,pathName.length-1);
	}
	if (isInnerpage){
		if (pathName.indexOf("/edit_site/") != -1 || pathName.indexOf("/edit/") != -1 || pathName.indexOf("/free/") != -1 || pathName.indexOf("/viewer/") != -1 || pathName.indexOf("/live/") != -1){
			pathName = pathName.substring(0, pathName.lastIndexOf('/'));
		}else{
			pathName = "";
		}
	}
	return pathName;
}


SpimeEngine.calculateScrollOffset = function(){ var scrollOffset = 0; var menuStripe = $(".menus-wrapper").closest(".master.item-box");

//if the menu exists if (menuStripe.length > 0){ var menuStripeSettings = menuStripe.find(".layout-settings"); var isFloatingMenu = menuStripeSettings.attr("data-menu_scroll") == "true"; var isLeftSideMenu = $(".left-menu-placeholder").length != 0; if (isFloatingMenu && !isLeftSideMenu){ var originalMenuHeight = menuStripe.outerHeight(true); var floatingMenuHeight = Math.max(50 + menuStripe.find(".preview-content-holder").outerHeight(true) - menuStripe.find(".preview-content-holder").height(),menuStripe.find(".preview-title-holder").height() + parseInt(menuStripe.find(".preview-content-holder").css("padding-top"))+ parseInt(menuStripe.find(".preview-content-holder").css("margin-top"))); if (menuStripe.is(".being-scrolled") || menuStripe.is(".force-transparency") || $(".left-menu-placeholder").length > 0){ originalMenuHeight = 0; } scrollOffset = originalMenuHeight + floatingMenuHeight; } } return scrollOffset; };


SpimeEngine.InitContainer = function(container,itemsClass, whatsNext){ SpimeEngine.DebugPrint("Init Container Start"); var containerArranger = SpimeEngine.getArranger(container); var items = container.children("#children").find(".item-box"); SpimeEngine.arrangers[containerArranger] = window[containerArranger + "_arranger"]; if (typeof SpimeEngine.arrangers[containerArranger] != "undefined"){ SpimeEngine.arrangers[containerArranger].init(container,items ,whatsNext); } };

SpimeEngine.initLayout = function(container, itemsClass){ var layoutSettings = container.find(".layout-settings"); var itemsLayout = layoutSettings.attr("data-type"); if (typeof itemsLayout == "undefined"){ itemsLayout = "bottom"; } if (typeof window[itemsLayout + "_layout"]== "undefined"){ console.error("layout " + itemsLayout + " needs to be loaded, thank you"); } SpimeEngine.layouts[itemsLayout] = window[itemsLayout + "_layout"]; SpimeEngine.layouts[itemsLayout].init(container,container.find(itemsClass)); SpimeEngine.setInitialShrinkerData(container.find(itemsClass),""); SpimeEngine.setInitialShrinkerData(container.find(itemsClass),"blocks-"); };

SpimeEngine.AttachHelperIfNeeded = function(){ if(typeof window["EditorHelper"] != "undefined"){ window.addEventListener("message", EditorHelper.receiveMessage, false); EditorHelper.bindHelperActions(); } if(typeof window["PreviewHelper"] != "undefined" && window.self != XPRSHelper.getParentWindow()){ window.addEventListener("message", PreviewHelper.receiveMessage, false); PreviewHelper.bindHelperActions(); } //window.addEventListener("message", SpimeEngine.receiveMessage, false); };

/******************************************************************************************************

*                                               ON RESIZE
*                      The following methods are called every time the window is resized
******************************************************************************************************/

SpimeEngine.ArrangeAll = function(includeMaster){ if ($(".master.container").hasClass("left-menu-layout")){ $(".master.container").find("#children").first().css("width",$(window).innerWidth() - menu_layout.SCROLLBAR_WIDTH - $(".left-menu-placeholder").width()); $(".left-menu-placeholder").height($(window).height()); }else{ $(".master.container").find("#children").first().css("width",""); } SpimeEngine.ArrangeMaster(); SpimeEngine.getAllHolders().each(function(){ var currentHolder = $(this); SpimeEngine.ArrangeHolder(currentHolder,{"force_redraw":true}); }); LightBox.arrange();

};

SpimeEngine.InitHolder = function(holder){ var holderType = SpimeEngine.getHolderType(holder); switch(holderType){ case "gallery": var currentContainer = holder.find(".sub.container"); SpimeEngine.InitContainer(currentContainer,".item-box"); SpimeEngine.ArrangeContainer(currentContainer); SpimeEngine.initLayout(currentContainer,".item-box"); SpimeEngine.applyLayout(currentContainer,".item-box",{"force_redraw":true}); setTimeout(function(){ if (currentContainer.is(".matrix")){ SpimeEngine.evenItemsHeights(currentContainer); } },500) break; case "item": var currentItem = holder.find(".item-wrapper"); SpimeEngine.initLayout(currentItem,".item-content"); SpimeEngine.applyLayout(currentItem,".item-content",{"force_redraw":true}); break; case "element": SpimeEngine.AlignElement(holder); break; } };

SpimeEngine.InitMaster = function(){ var masterContainer = $(".master.container"); SpimeEngine.InitContainer(masterContainer,".master.item-box"); SpimeEngine.ArrangeContainer(masterContainer); };

SpimeEngine.ArrangeMaster = function(){ var masterContainer = $(".master.container"); SpimeEngine.ArrangeContainer(masterContainer); SpimeEngine.fitVideos(); SpimeEngine.centerMaps(); SpimeEngine.fixZoomedImages(); };

SpimeEngine.HideHolder = function(holder){ var stripesCemetery = $("#stripes-cemetery"); if (stripesCemetery.length == 0){ stripesCemetery = $("<div id='stripes-cemetery' />"); stripesCemetery.css({"display":"none"}); $("body").append(stripesCemetery); } stripesCemetery.append(holder); };


SpimeEngine.ArrangeHolder = function(holder,paramsFromRealtime,whatsNext){ if (holder.hasClass("master container")){ SpimeEngine.ArrangeMaster(); return; } var holderType = SpimeEngine.getHolderType(holder); switch(holderType){ case "gallery": var currentContainer = holder.find(".sub.container"); SpimeEngine.ArrangeContainer(currentContainer,whatsNext); SpimeEngine.applyLayout(currentContainer,".item-box",paramsFromRealtime); if (currentContainer.is(".matrix")){ setTimeout(function(){ SpimeEngine.evenItemsHeights(currentContainer); },10);

} break; case "item": var currentItem = holder.find(".item-wrapper"); SpimeEngine.applyLayout(currentItem,".item-content",paramsFromRealtime); break; case "element": SpimeEngine.AlignElement(holder); break; } };

SpimeEngine.showMoreInHolder = function(holder){ var holderType = SpimeEngine.getHolderType(holder); if (holderType == "gallery"){ var currentContainer = holder.find(".sub.container"); var containerArranger = SpimeEngine.getArranger(currentContainer); if (typeof SpimeEngine.arrangers[containerArranger] != "undefined"){ if (typeof SpimeEngine.arrangers[containerArranger].showMore != "undefined"){ SpimeEngine.arrangers[containerArranger].showMore(holder); } }else{ console.error("bad arranger for show more " + containerArranger); } } };

SpimeEngine.showLessInHolder = function(holder){ var holderType = SpimeEngine.getHolderType(holder); if (holderType == "gallery"){ var currentContainer = holder.find(".sub.container"); var containerArranger = SpimeEngine.getArranger(currentContainer); if (typeof SpimeEngine.arrangers[containerArranger] != "undefined"){ if (typeof SpimeEngine.arrangers[containerArranger].showLess != "undefined"){ SpimeEngine.arrangers[containerArranger].showLess(holder); } }else{ console.error("bad arranger for show more " + containerArranger); } } };

SpimeEngine.getAllHolders = function(){ return $(".master.item-box").not(".hidden-from-view").not(".error-stripe"); };

SpimeEngine.getHiddenHolders= function(){ return $(".master.item-box.hidden-from-view"); };

SpimeEngine.getHolderType = function(holder){ var holderRole = holder.attr("data-holder-type"); if (typeof holderRole == "undefined"){ return "element"; } switch(holderRole){ case "header": case "footer": case "page": return "item"; case "gallery": return "gallery"; case "element": return "element"; } };

SpimeEngine.applyLayout = function(container,itemsClass,paramsFromRealTime){ var layoutSettings = container.find(".layout-settings"); container.find(".circlize").closest(".preview-image-holder").css({"height":"","width":""}); if (layoutSettings.length > 0 && (!(container.hasClass("master")))) { var itemsLayout = layoutSettings.attr("data-type");

if (typeof itemsLayout == "undefined" || itemsLayout==""){ itemsLayout = "bottom"; } if (typeof SpimeEngine.layouts[itemsLayout] != "undefined"){ //if (typeof paramsFromRealTime!= "undefined"){ SpimeEngine.layouts[itemsLayout].applyLayout(container,container.find(itemsClass),paramsFromRealTime); if (itemsLayout != "menu"){ var fromHeightResize = (typeof container.closest(".master.item-box").attr("data-height-resize") != "undefined"); if (!fromHeightResize){ SpimeEngine.shrinkText(container.find(".sub.item-box").not(".stripe-header").not(".stripe-footer"),paramsFromRealTime,""); SpimeEngine.shrinkText(container.find(".blocks_layout"),paramsFromRealTime,"blocks-"); SpimeEngine.shrinkText(container.find(".blocks_layout"),paramsFromRealTime,"blocks-"); } } SpimeEngine.fitVideos(container); SpimeEngine.centerMaps(container); //} }else{ console.error("bad layout " + itemsLayout); } } //SpimeEngine.fitVideos(container); var visibleCircles = container.find(".circlize:visible"); if (visibleCircles.length > 0){ //Getting height from visible items only container.addClass("circlize-holder"); var firstVisibleCircle = visibleCircles.first(); var visibleCircleImageCover = firstVisibleCircle.closest(".image-cover"); var newSquareSize = Math.min(visibleCircleImageCover.height(),visibleCircleImageCover.width()); container.find(".circlize").each(function(){ var imageHolder = $(this);//.closest(".preview-image-holder"); if (imageHolder.hasClass("element")){ //this is an element }else{ if (imageHolder.hasClass("inner-pic")){ //visibleCircleImageCover = firstVisibleCircle.closest(".item-box"); var widthToCheck = firstVisibleCircle.closest(".pic-side").width(); var heightToCheck = firstVisibleCircle.closest(".item-box").height(); if (imageHolder.closest(".bottom-center").length > 0 || imageHolder.closest(".top-center").length > 0){ heightToCheck = firstVisibleCircle.closest(".pic-side").height(); //console.log("heightToCheck " + heightToCheck) } newSquareSize = Math.min(heightToCheck,widthToCheck); //console.log(visibleCircleImageCover.height() + " " + visibleCircleImageCover.width()) imageHolder.css("border-radius",6000); imageHolder.height(newSquareSize); imageHolder.width(newSquareSize); //imageHolder.css("min-height",newSquareSize); imageHolder.closest(".inner-pic-holder").height(newSquareSize).css({"display":"table-cell","vertical-align":"middle"}); //console.log(newSquareSize) }else{ imageHolder.height(newSquareSize); imageHolder.width(newSquareSize); imageHolder.css("border-radius",6000); imageHolder.css("margin-left","auto"); imageHolder.css("margin-right","auto"); $(this).position().left= $(this).parent().width() - $(this).width(); $(this).position().top = $(this).parent().height() - $(this).height(); } } }); } SpimeEngine.shrinkImg(container); SpimeEngine.fixZoomedImages(container); };


SpimeEngine.fixZoomedImages = function(container){ return; var zoomedImages; if (typeof container != "undefined"){ zoomedImages = container.find(".background-div"); }else{ zoomedImages = $(".element-box .background-div"); } zoomedImages = zoomedImages.filter(function() {return ($(this).css('background-size').indexOf("%") != -1);}); zoomedImages.each(function(){ var currentSize = $(this).css("background-size"); if ($(this).width() < $(this).height()){ if(currentSize.indexOf("auto") == -1){ $(this).css("background-size" ,"auto " + currentSize); } }else{ if(currentSize.indexOf("auto") != -1){ $(this).css("background-size" ,currentSize.replace("auto","")); } } }); };


SpimeEngine.sendVideoCommand = function(videoId,commandName){ var vid = $("#" + videoId + "-vidframe"); if (vid.is(".ytplayer")){ if (typeof YT != "undefined"){ if (typeof YT.Player != "undefined"){ if ( !(videoId in SpimeEngine.YTPlayers)) { setTimeout(function(){ SpimeEngine.YTPlayers[videoId] = new YT.Player(videoId + "-vidframe", {}); SpimeEngine.YTPlayers[videoId].addEventListener("onStateChange", "onytplayerStateChange"); },300); } SpimeEngine.sendVideoCommandOnInterval(videoId,commandName); }else{ SpimeEngine.sendVideoCommandOnInterval(videoId,"init-"+commandName); } }else{ SpimeEngine.sendVideoCommandOnInterval(videoId,"init-"+commandName); } }else if (vid.is(".vimplayer")){ setTimeout(function(){ if ($("#" + videoId +".magic-circle-holder").hasClass("vid-mute")){ vid[0].contentWindow.postMessage({"method":"setVolume","value": 0}, '*'); } vid[0].contentWindow.postMessage({"method":commandName}, '*'); },2000);

} };

SpimeEngine.sendVideoCommandOnInterval = function(videoId,commandName,interval){ vidPlayer = SpimeEngine.YTPlayers[videoId]; if (typeof interval == "undefined"){ interval = 200; }

if (typeof vidPlayer == "undefined" || typeof vidPlayer.playVideo == "undefined"){ setTimeout(function(){ if (commandName.indexOf("init-") == -1){ SpimeEngine.sendVideoCommandOnInterval(videoId,commandName,interval*1.3); }else{ SpimeEngine.sendVideoCommand(videoId,commandName.replace("init-","")); }

},interval); }else{ switch (commandName){ case "bind-and-play": //vidPlayer.addEventListener("onStateChange", "SpimeEngine.videoStateChange"); //no break... case "play": if ($("#" + videoId +".magic-circle-holder").hasClass("vid-mute")){ vidPlayer.mute(); }else{ vidPlayer.unMute(); } vidPlayer.playVideo(); break; case "mute": vidPlayer.mute(); break; case "unmute": vidPlayer.unMute(); break; case "pause": vidPlayer.pauseVideo(); break; case "bind-state-change": vidPlayer.addEventListener("onStateChange", "SpimeEngine.videoStateChange"); break; case "init": case "init-play": case "init-mute": case "init-unmute": case "init-pause": SpimeEngine.sendVideoCommand(videoId,commandName.replace("init-","")); break; } } };


function onytplayerStateChange(e) { var newState = e.data; for (videoId in SpimeEngine.YTPlayers){ var currentState = SpimeEngine.YTPlayers[videoId].getPlayerState(); //Playing if (currentState == 1){ if ($("#" +videoId).hasClass("vid-autoplay")){ $("#" +videoId).css("opacity","1"); } } //ended if(typeof window["EditorHelper"] == "undefined"){ if (currentState == 0){ if ($("#" +videoId).hasClass("vid-loop")){ SpimeEngine.YTPlayers[videoId].playVideo(); } } } } }

//function onYouTubeIframeAPIReady(){ // alert("omg") //}


SpimeEngine.initVideos = function(){ //only in site and preview if(typeof window["EditorHelper"] == "undefined"){ //Enable click to play $(".video-blocker").unbind("click").bind("click",function(){ var videoBlocker = $(this); var videoElement = videoBlocker.closest(".magic-circle-holder"); SpimeEngine.sendVideoCommand(videoElement.attr("id"),"play"); videoBlocker.remove(); }); }

//Play all autoplay videos $(".vid-autoplay").each(function(){ SpimeEngine.sendVideoCommand($(this).attr("id"),"play"); if(typeof window["EditorHelper"] == "undefined"){ $(".video-blocker").unbind("click").bind("click",function(){ var videoBlocker = $(this); var videoElement = videoBlocker.closest(".magic-circle-holder"); SpimeEngine.sendVideoCommand(videoElement.attr("id"),"play"); videoBlocker.remove(); }); } });

if (window.addEventListener) {

       window.addEventListener('message', SpimeEngine.vimeoMessage, false);
   }
   else {
       window.attachEvent('onmessage', SpimeEngine.vimeoMessage, false);
   }

SpimeEngine.fitVideos(); };


SpimeEngine.vimeoMessage = function(event){ if (!(/^https?:\/\/player.vimeo.com/).test(event.origin)) { //not from vimeo }else{ var data = JSON.parse(event.data); switch (data.event) {

           case 'ready':

$(".vid-mute .vimplayer").each(function(){ $(this)[0].contentWindow.postMessage({"method":"setVolume","value": 0}, '*'); }); $(".vid-autoplay .vimplayer").each(function(){ $(this).closest(".vid-autoplay").css("opacity",1) }); break; }; } };


SpimeEngine.shrinkImg = function(container){ container.closest(".master.item-box").find(".shrinkable-img").each(function(){ var currentImg = $(this); var imgWidth = currentImg.width() if (currentImg.attr("data-width-before-shrink")){ imgWidth = parseInt(currentImg.attr("data-width-before-shrink")); }else{ currentImg.attr("data-width-before-shrink",imgWidth); } if (container.width() < imgWidth){ currentImg.css("width","100%"); currentImg.addClass("shrinked"); }else{ if (currentImg.is(".shrinked")){ currentImg.removeClass("shrinked"); currentImg.css("width",""); } } }); };

SpimeEngine.getMapStyles = function(){

};

SpimeEngine.initDynamicStripes = function(){ if ($("body").attr("data-caller") == "static"){ $(".showing-feed").each(function(){ var feedHolder = $(this); SpimeEngine.initDynamicStripe(feedHolder); }); } };


SpimeEngine.initDynamicStripe = function(feedHolder){ var resolvedHost = XPRSHelper.getStaticServerPath(); feedHolder.load(window.location.protocol + resolvedHost + "/get_part",{"vbid":feedHolder.attr("id"),"root_id":$(".master.container").attr("id"),"no_blocking_div":true},function(data, status, xhr){ feedHolder.find(".sub.item-box").addClass("animated-opacity"); SpimeEngine.InitHolder(feedHolder); LightBox.initLinks(feedHolder); feedHolder.addClass("loaded"); }); };

SpimeEngine.initMaps = function(){ if (typeof google != "undefined"){ SpimeEngine.Geocoder = new google.maps.Geocoder();

var resolvedHost = XPRSHelper.getStaticServerPath();

mapsURL = window.location.protocol + resolvedHost + "/settings/map_styles.json";

if(window.location.protocol == "file:") { mapsURL = "http:" + resolvedHost + "/settings/map_styles.json"; }


XPRSHelper.GET(mapsURL,{},function(mapStyles){ SpimeEngine.MapStyles = mapStyles; $(".map-frame").each(function(){ var mapFrame = $(this); SpimeEngine.initMap(mapFrame); }); },"json"); } };

SpimeEngine.initMap = function(mapFrame){ var mapHolder = mapFrame.closest(".magic-circle-holder"); mapBlocker = mapHolder.find(".map-blocker"); if(typeof window["EditorHelper"] == "undefined"){ mapBlocker.unbind("click").bind("click",function(){ $(this).remove(); }); } var elementId = mapHolder.attr("id"); var mapLat = parseFloat(mapHolder.attr("data-spimelat")) ; var mapLng = parseFloat(mapHolder.attr("data-spimelng")) ; var myLatlng = new google.maps.LatLng(mapLat,mapLng); var mapStyleId = mapHolder.attr("data-spimemap_style_id"); var mapStyle = []; if (typeof SpimeEngine.MapStyles[mapStyleId] != "undefined"){ mapStyle = SpimeEngine.MapStyles[mapStyleId].style; }

var allowInteraction = true;

if(typeof window["EditorHelper"] != "undefined"){ allowInteraction = false; } var mapOptions = { center: myLatlng, zoom:8, disableDefaultUI:!allowInteraction, draggable:allowInteraction, zoomControl:allowInteraction, scrollwheel:allowInteraction, styles: mapStyle };


var map = new google.maps.Map(mapFrame[0],mapOptions); SpimeEngine.GoogleMaps[elementId]= {}; SpimeEngine.GoogleMaps[elementId]["map"] = map; SpimeEngine.sendMapCommand(mapHolder,"center",{"first_time":true}); };


SpimeEngine.geoCode = function(address,callbackFunc){ SpimeEngine.Geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { var lat = results[0].geometry.location.lat(); var lng = results[0].geometry.location.lng(); var northeastLat = results[0].geometry.viewport.getNorthEast().lat(); var northeastLng = results[0].geometry.viewport.getNorthEast().lng(); var southwestLat = results[0].geometry.viewport.getSouthWest().lat(); var southwestLng = results[0].geometry.viewport.getNorthEast().lng(); callbackFunc(lat,lng,northeastLat,northeastLng,southwestLat,southwestLng); } else { XPRSHelper.xprsAlert('Geocode for ' + address + ' was not successful for the following reason: ' + status,{"report_error":true}); } }); };



SpimeEngine.sendMapCommand = function(mapHolder,commandName,params){

var mapId = mapHolder.attr("id"); if (mapHolder.hasClass("element-box")){ mapHolder = mapHolder.find(".element.map-source"); } if ( mapId in SpimeEngine.GoogleMaps){ var map = SpimeEngine.GoogleMaps[mapId]["map"]; switch (commandName){ case "center": //var myLatlng = map.getCenter(); var mapnortheastLat = 0 ; var mapnortheastLng = 0 ; var mapsouthwestLat = 0 ; var mapsouthwestLng = 0 ; //if (typeof params.first_time != "undefined"){ var mapLat = parseFloat(mapHolder.attr("data-spimelat"))  ; var mapLng = parseFloat(mapHolder.attr("data-spimelng")) ; var myLatlng = new google.maps.LatLng(mapLat,mapLng); //} mapnortheastLat = mapHolder.attr("data-spimenortheast-lat") ? parseFloat(mapHolder.attr("data-spimenortheast-lat")) : 0 ; mapnortheastLng = mapHolder.attr("data-spimenortheast-lng") ? parseFloat(mapHolder.attr("data-spimenortheast-lng")) : 0 ; mapsouthwestLat = mapHolder.attr("data-spimesouthwest-lat") ? parseFloat(mapHolder.attr("data-spimesouthwest-lat")) : 0 ; mapsouthwestLng = mapHolder.attr("data-spimesouthwest-lng") ? parseFloat(mapHolder.attr("data-spimesouthwest-lng")) : 0 ;

google.maps.event.trigger(map, "resize"); var viewport = null;

if (typeof params.first_time != "undefined"){ if (mapnortheastLat != 0){ var ne = new google.maps.LatLng(mapnortheastLat, mapnortheastLng); var sw = new google.maps.LatLng(mapsouthwestLat, mapsouthwestLng); viewport = new google.maps.LatLngBounds(sw,ne); map.fitBounds(viewport); } }else{ map.setCenter(myLatlng); }


google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) { map.setCenter(myLatlng); // if (typeof SpimeEngine.GoogleMaps[mapId]["marker"] == "undefined"){ // var marker = new google.maps.Marker({ // position: myLatlng, // map:SpimeEngine.GoogleMaps[mapId]["map"], // title: mapHolder.attr("data-spimelocation") // }); // SpimeEngine.GoogleMaps[mapId]["marker"] = marker; // }else{ // if (!(SpimeEngine.GoogleMaps[mapId]["marker"].getPosition().equals(myLatlng))){ // SpimeEngine.GoogleMaps[mapId]["marker"].setPosition(myLatlng); // }else{ // } // }

});

google.maps.event.addListenerOnce(map, 'center_changed', function(event) { if (typeof SpimeEngine.GoogleMaps[mapId]["marker"] == "undefined"){ var marker = new google.maps.Marker({ position: myLatlng, map:SpimeEngine.GoogleMaps[mapId]["map"], title: mapHolder.attr("data-spimelocation") }); SpimeEngine.GoogleMaps[mapId]["marker"] = marker; }else{ if (!(SpimeEngine.GoogleMaps[mapId]["marker"].getPosition().equals(myLatlng))){ SpimeEngine.GoogleMaps[mapId]["marker"].setPosition(myLatlng); }else{ } } }); break; case "change_style": map.setOptions({styles: SpimeEngine.MapStyles[params.style_id].style}); break; } } };

SpimeEngine.centerMaps = function(container){ if (typeof container != "undefined"){ var maps = container.find(".preview-map-source"); //console.log("for all preview maps here" + maps.length) maps.each(function(){ var mapHolder = $(this); SpimeEngine.sendMapCommand(mapHolder,"center",{}); }); }else{ var maps = $(".element-box .map-source"); maps.each(function(){ var mapHolder = $(this); SpimeEngine.sendMapCommand(mapHolder,"center",{}); }); } };


SpimeEngine.fitVideos = function(container){ if (typeof container != "undefined"){ var vidList = container.find(".vid-cover"); vidList.each(function(){ var vid = $(this); SpimeEngine.fitVideo(vid); }); }else{ var vidList = $(".element-box .vid-cover"); vidList.each(function(){ var vid = $(this); SpimeEngine.fitVideo(vid); }); } };

SpimeEngine.fitVideo = function(vidElement){ if (vidElement.length > 0){ var outBox,outBoxHeight,outBoxWidth; if (vidElement.hasClass("preview-element")){ vidElement.css({"width":"","height":""}); vidElement.find("iframe").css({"width":"","height":""}); outBox = vidElement.closest(".pic-side"); if (outBox.length == 0){ outBox = vidElement.closest(".preview-video-holder"); } outBoxHeight = outBox.height(); outBoxWidth = outBox.width(); }else{ outBox = vidElement.closest(".master.item-box"); outBoxHeight = parseInt(outBox.css("min-height")); if (outBoxHeight == 0){ outBoxHeight = parseInt(vidElement.closest(".video-wrapper").css("height")); } outBoxWidth = parseInt(vidElement.closest(".video-wrapper").css("max-width")); if (isNaN(outBoxWidth)){ outBoxWidth = vidElement.closest(".video-wrapper").width(); } }

var containerRatio = outBoxWidth / outBoxHeight; var iframeHeight = 0; var iframeWidth = 0; if (containerRatio > 16/9){ iframeWidth = outBoxWidth; iframeHeight = outBoxWidth * 16/9;

}else{ iframeHeight = outBoxHeight;// * 16/9; iframeWidth = iframeHeight * 16/9; } var marginTop = (outBoxHeight - iframeHeight) / 2; var marginLeft = (outBoxWidth - iframeWidth) / 2; vidElement.find("iframe").width(iframeWidth).height(iframeHeight).css({"margin-top": marginTop, "margin-left":marginLeft}); vidElement.width(outBoxWidth).height(outBoxHeight); } };

SpimeEngine.unfitVideo = function(vidElement){ vidElement.find("iframe").css({"margin-top": "", "margin-left":"","width":"100%","height":"100%"}); vidElement.css({"width":"100%","height":"100%"}); };

SpimeEngine.ArrangeContainer = function(container,whatsNext){ if (container.closest(".fill-height").length > 0){ SpimeEngine.fitToPageHeight(container.closest(".fill-height")); } var containerArranger = SpimeEngine.getArranger(container); var items = container.children("#children").find(".item-box"); if (typeof SpimeEngine.arrangers[containerArranger] != "undefined"){ SpimeEngine.arrangers[containerArranger].arrange(items,container,whatsNext); }else{ console.error("bad arranger " + containerArranger); } };


SpimeEngine.fitToPageHeight = function(stripe){ var stripeNewHeight = $(window).height(); if(typeof window["EditorHelper"] != "undefined"){ if ( $(".tablet-preview").length == 0 && $(".cellphone-preview").length == 0){ stripeNewHeight -= 45; //topbar } }

if ((stripe.prevAll(".master.item-box[data-preset-type-id='MENUS']").length > 0 && stripe.prevAll(".master.item-box").not("[data-preset-type-id='MENUS']").length == 0) || stripe.nextAll(".master.item-box[data-preset-type-id='MENUS']").length > 0){ var menuStripe = $(".master.item-box[data-preset-type-id='MENUS']"); if (!menuStripe.is(".force-transparency") && menuStripe.css("display") != "none"){ var menuHeight = menuStripe.height(); stripeNewHeight -= menuHeight; } }

stripeNewHeight -= parseInt(stripe.css("padding-top")) + parseInt(stripe.css("padding-bottom"))

var footerSize = 0;

  	footerSize = stripe.find(".stripe-header-wrapper").height() + stripe.find(".stripe-footer-wrapper").height();

stripe.css("min-height",stripeNewHeight - footerSize); };

SpimeEngine.AlignElement = function(elementHolder){ // var currentElement = elementHolder.find(".element"); // var elementParent = currentElement.parent(); // if (elementParent.is("a")){ // elementParent = elementParent.parent(); // } // var contentheight = elementParent.height(); // //console.debug(contentheight) // var holderHeight = elementHolder.height(); // var marginForCentering = (holderHeight/2) - (contentheight/2); // if (!(currentElement.hasClass("image-source"))){ // currentElement.css("margin-top",marginForCentering); // } };

SpimeEngine.showItem = function(parentHolder,itemToShowId){ var holderType = SpimeEngine.getHolderType(parentHolder); if (holderType == "gallery"){ var currentContainer = parentHolder.find(".sub.container"); var containerArranger = SpimeEngine.getArranger(currentContainer); var items = currentContainer.find(".sub.item-box"); if (typeof SpimeEngine.arrangers[containerArranger] != "undefined"){ if (typeof SpimeEngine.arrangers[containerArranger].showItem != "undefined"){ SpimeEngine.arrangers[containerArranger].showItem(currentContainer,items,itemToShowId); } }else{ console.error("bad arranger for show item " + containerArranger); } } };

SpimeEngine.submitClick = function(currentLink,mailTo){ if ($("#g-recaptcha-response").length > 0){ var recaptchaResponse = $("#g-recaptcha-response").val(); if (recaptchaResponse == ""){ $(".g-recaptcha").css("border","1px solid red"); setTimeout(function(){ $(".g-recaptcha").css("border","") },2000); return; } } var containingItem = currentLink.closest(".item-box"); var formFields = containingItem.find(".Field"); var thankYouText = currentLink.attr("data-text"); var submitParams = {}; var siteName = $("#xprs").attr("data-website-name"); submitParams["xprs_mail_to"] = mailTo; submitParams["xprs_site_name"] = siteName; submitParams["g-recaptcha-response"] = recaptchaResponse; var formIsValid = true; var isRegistrationForm = false; var registrationEmail = ""; var registrationName = ""; formFields.each(function(){ var currentField = $(this); if (!(SpimeEngine.validateField(currentField))){ formIsValid = false; currentField.addClass("erred-user-form-field"); }else{ currentField.removeClass("erred-user-form-field"); } if (currentField.hasClass("field-email")){ isRegistrationForm = true; registrationEmail = currentField.val(); } if (currentField.attr("name").toLowerCase() == "name"){ registrationName = currentField.val(); } submitParams[currentField.attr("name")] = currentField.val(); }); if (formIsValid){ currentLink.find(".item-link").closest(".removable-parent").fadeTo(1000,0, function(){ $(this).unbind("click").css({"visibility":"hidden","cursor":"default"}); }); $(".g-recaptcha").fadeTo(1000,0);

// var resolvedHost = XPRSHelper.getStaticServerPath(); // XPRSHelper.POST(XPRSHelper.getParentWindow().location.protocol + resolvedHost + "/form_submit", submitParams, function(){ var resolvedHost = location.host; //This is a live site if (resolvedHost.indexOf("appspot") == -1 && resolvedHost.indexOf("localhost") == -1 && resolvedHost.indexOf("127.0.0.1") == -1){ resolvedHost = "www.imdomainrouter.com"; } XPRSHelper.POST(XPRSHelper.getParentWindow().location.protocol+'//'+ resolvedHost + "/form_submit", submitParams, function(){ var thankyouDiv = $("<div />").addClass("preview-element preview-subtitle magic-circle-holder text-element").text(thankYouText); var form = currentLink.closest(".preview-item-links").siblings(".preview-form"); var formHeightBeforeEmpty = form.outerHeight(true);// + currentLink.closest(".preview-item-links").outerHeight(true); var formWidthBeforeEmpty = form.find(".Field").width(); form.fadeTo(1000,0, function(){ thankyouDiv.width(formWidthBeforeEmpty); form.height(formHeightBeforeEmpty); var middleTop = formHeightBeforeEmpty /2 - thankyouDiv.height() / 2; form.empty().first().append(thankyouDiv).fadeTo("fast",1); thankyouDiv.css({"top":middleTop,"position":"relative"}); }); if (isRegistrationForm){ try{ if (typeof IMOS != "undefined"){ IMOS.trackGoal("Registration",{"email":registrationEmail,"nickname":registrationName}); if (currentLink.attr("data-mailing-list")){ submitParams["mailing_list_id"] = currentLink.attr("data-mailing-list"); } IMOS.handleNewsLetterIntegration(submitParams); } }catch(err){ } } }); } };


SpimeEngine.initForms = function(){ //Only in viewer mode if(typeof window["EditorHelper"] == "undefined"){ var links = $("a[data-link-type='SUBMIT']"); links.each(function(){ var currentLink = $(this); var mailTo = currentLink.attr("href"); currentLink.removeAttr("href"); currentLink.addClass("clickable"); var recaptcha = $("<i />").addClass("clickable g-recaptcha").attr("data-sitekey", SpimeEngine.captchaKey).css("pointer-events","auto").css({"display":"block","margin":"5px","box-sizing":"border-box"}); currentLink.before(recaptcha); currentLink.unbind("click").bind("click",function(){ SpimeEngine.submitClick(currentLink,mailTo); }); }); } var allFields = $(".Field"); allFields.each(function(){ var currentField = $(this); SpimeEngine.setPlaceholderFunc(currentField); }); };

SpimeEngine.setPlaceholderFunc = function(currentField){ var currentPlaceholder = currentField.attr("placeholder"); currentField.addClass("placeholder-mode"); currentField.val(currentPlaceholder); currentField.attr("data-placeholder", currentPlaceholder); currentField.removeAttr("placeholder"); var currentFieldEl = currentField.get(0); currentFieldEl.addEventListener("focus", SpimeEngine.setCaret, false); currentFieldEl.addEventListener("drop", SpimeEngine.setCaret, false); currentFieldEl.addEventListener("click", SpimeEngine.setCaret, false); currentFieldEl.addEventListener("keydown", SpimeEngine.clearPlaceholder, false); currentFieldEl.addEventListener("keyup", SpimeEngine.restorePlaceHolder, false); currentFieldEl.addEventListener("blur", SpimeEngine.restorePlaceHolder, false); };


// Set caret at the beginning of the input SpimeEngine.setCaret = function (evt) {

   if (this.value === this.getAttribute("data-placeholder")) {
   	if(typeof this.setSelectionRange != "undefined"){
   		this.setSelectionRange(0, 0);
   	}
       evt.preventDefault();
       evt.stopPropagation();
       return false;
   }

};

// Clear placeholder value at user input SpimeEngine.clearPlaceholder = function (evt) { var currentField = this; if (!(evt.shiftKey && evt.keyCode === 16) && evt.keyCode !== 9) { if (this.value === this.getAttribute("data-placeholder")) { setTimeout(function(){ currentField.value = currentField.value.replace(currentField.getAttribute("data-placeholder"),""); },1)


} this.className = this.className.replace("placeholder-mode" ,""); } };

SpimeEngine.restorePlaceHolder = function (evt) { var currentField = this; var args = arguments; setTimeout(function(){ if (currentField.value.length === 0) { currentField.value = currentField.getAttribute("data-placeholder"); SpimeEngine.setCaret.apply(currentField, args); currentField.className = currentField.className + " placeholder-mode"; } },50); };




SpimeEngine.validateField = function(currentField){ if (currentField.hasClass("field-email")){ return SpimeEngine.validateEmail(currentField.val()); } if (currentField.hasClass("field-phone")){ return SpimeEngine.validatePhone(currentField.val()); } if (currentField.hasClass("field-mandatory")){ return (currentField.val() != "" && currentField.val() != currentField.attr("data-placeholder")); } return true;

};

SpimeEngine.validateEmail = function(email) {

   var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
   return re.test(email);

};

SpimeEngine.validatePhone = function(phone) { var strippedPhone = phone.replace("+","").replace("-",""); var phoneAsNumber = parseInt(strippedPhone); if (isNaN(phoneAsNumber)){ return false; }

   return true;

};


SpimeEngine.setInitialShrinkerData = function(items,textPrefix){ var previewTitle = items.find("." + textPrefix + "preview-title"); var previewSubtitle = items.find("." + textPrefix + "preview-subtitle"); var previewTitleFontSize = 0; var previewSubtitleFontSize = 0; if (previewTitle.length > 0){ if (!(previewTitle.attr("data-orig-font-size"))){ previewTitleFontSize = Math.round(parseInt(previewTitle.css("font-size"))); previewTitle.attr("data-orig-font-size",previewTitleFontSize); } } if (previewSubtitle.length > 0){ if (!(previewSubtitle.attr("data-orig-font-size"))){ previewSubtitleFontSize = Math.round(parseInt(previewSubtitle.css("font-size"))); previewSubtitle.attr("data-orig-font-size",previewSubtitleFontSize); } } };

SpimeEngine.shrinkText = function(items,paramsFromRealTime,textPrefix){ items.find(".text-side").css("display","block"); var previewTitle = items.find("." + textPrefix + "preview-title"); var previewSubtitle = items.find("." + textPrefix + "preview-subtitle"); previewTitle.removeClass("disable-max-width"); previewSubtitle.removeClass("disable-max-width");


var shrinkPlease = true; if (typeof paramsFromRealTime != "undefined" ){ if (typeof paramsFromRealTime.value != "undefined"){ // originalFontSize = parseInt(paramsFromRealTime.value); // items.find(".preview-title").attr("data-orig-font-size",originalFontSize); shrinkPlease = false; } } if (shrinkPlease){ //previewTitle.addClass("disable-max-width"); //previewSubtitle.addClass("disable-max-width"); var previewTitleOriginalFontSize = 9999; var previewSubtitleOriginalFontSize = 9999; if (previewTitle.length > 0){ previewTitleOriginalFontSize = Math.round(parseInt(previewTitle.attr("data-orig-font-size"))); previewTitle.css("font-size",previewTitleOriginalFontSize); } if (previewSubtitle.length > 0){ previewSubtitleOriginalFontSize = Math.round(parseInt(previewSubtitle.attr("data-orig-font-size"))); previewSubtitle.css("font-size",previewSubtitleOriginalFontSize); }

var titleMinFontSize = 9999; var subtitleMinFontSize = 9999; items.each(function(){ var currentItem = $(this); var currentTitle = currentItem.find("." + textPrefix + "preview-title"); var currentSubtitle = currentItem.find("." + textPrefix + "preview-subtitle"); var contentHolder = currentItem.find(".shrinker-content"); //contentHolder.removeClass("disable-max-width"); var parent = contentHolder.closest(".shrinker-parent"); var offset = 0; var minimalFontSize = 10; var contentHolderPadding = parseInt(contentHolder.css("padding-left")) + parseInt(contentHolder.css("padding-right")) +parseInt(contentHolder.css("margin-left")) + parseInt(contentHolder.css("margin-right"));

//if subtitle is bigger if (previewSubtitleOriginalFontSize != 9999 && previewSubtitleOriginalFontSize > previewTitleOriginalFontSize){ titleMinFontSize = SpimeEngine.tryToShrink( currentTitle, previewTitleOriginalFontSize, titleMinFontSize, currentItem, contentHolderPadding, offset, minimalFontSize, false); subtitleMinFontSize = SpimeEngine.tryToShrink(currentSubtitle, previewSubtitleOriginalFontSize, subtitleMinFontSize, currentItem, contentHolderPadding, offset, minimalFontSize, false); titleMinFontSize = SpimeEngine.tryToShrink( currentTitle, previewTitleOriginalFontSize, titleMinFontSize, currentItem, contentHolderPadding, offset, minimalFontSize, true); }else{ subtitleMinFontSize = SpimeEngine.tryToShrink(currentSubtitle, previewSubtitleOriginalFontSize, subtitleMinFontSize, currentItem, contentHolderPadding, offset, minimalFontSize, false); titleMinFontSize = SpimeEngine.tryToShrink( currentTitle, previewTitleOriginalFontSize, titleMinFontSize, currentItem, contentHolderPadding, offset, minimalFontSize, false); subtitleMinFontSize = SpimeEngine.tryToShrink(currentSubtitle, previewSubtitleOriginalFontSize, subtitleMinFontSize, currentItem, contentHolderPadding, offset, minimalFontSize, true); }

});

items.each(function(){ $(this).find(".text-side").css("display",""); var currentTitle = $(this).find("." + textPrefix + "preview-title"); if (currentTitle.length > 0){ if (titleMinFontSize != 9999){ currentTitle.css("font-size",titleMinFontSize); } } var currentSubtitle = $(this).find("." + textPrefix + "preview-subtitle"); if (currentSubtitle.length > 0){ if (subtitleMinFontSize != 9999){ currentSubtitle.css("font-size",subtitleMinFontSize); } } }); } };


SpimeEngine.tryToShrink = function(textElementToShrink,textElementOriginalFontSize,textElementMinFontSize, currentItem, contentHolderPadding,offset , minimalFontSize,revertToOriginalSize){ var contentHolder = currentItem.find(".shrinker-content"); var parent = contentHolder.closest(".shrinker-parent"); if(textElementToShrink.length > 0){ if (parent.width() < textElementToShrink.parent().outerWidth(true) + contentHolderPadding){ contentHolder = currentItem.find(".shrinker-content"); parent = contentHolder.closest(".shrinker-parent"); }else{ contentHolder = textElementToShrink; parent = textElementToShrink.parent(); } var delta = Math.abs(contentHolder.outerWidth(true) - parent.width()); if (delta > 1) {

//still no room //revert to original font size if (revertToOriginalSize){ textElementToShrink.css("font-size",textElementOriginalFontSize); } if (contentHolder.outerWidth(true) + offset> parent.width() || contentHolder.outerHeight(true) > parent.outerHeight(true) ){ //try shrinking the subtitle textElementMinFontSize = Math.min(textElementMinFontSize,SpimeEngine.shrinkTextToFit(textElementOriginalFontSize,parent,contentHolder,textElementToShrink,offset,minimalFontSize)); return textElementMinFontSize; } } } return textElementMinFontSize; };


SpimeEngine.evenItemsHeights = function(holder){ if (holder.is(".sub.container.matrix")){ var maxHeightsArray = {"PREVIEW_ICON":{"SELECTOR":".preview-icon-holder, .element-placeholder[data-elementtype='ICON']","MAX_HEIGHT":0,"MAX_HEIGHT_FOR_PLACEHOLDER":0}, "PREVIEW_TITLE":{"SELECTOR":".preview-element[data-menu-name='PREVIEW_TITLE'], .element-placeholder[data-elementtype='TITLE']","MAX_HEIGHT":0,"MAX_HEIGHT_FOR_PLACEHOLDER":0}, "PREVIEW_SUBTITLE":{"SELECTOR":".preview-element[data-menu-name='PREVIEW_SUBTITLE'], .element-placeholder[data-elementtype='SUBTITLE']","MAX_HEIGHT":0,"MAX_HEIGHT_FOR_PLACEHOLDER":0}, "PREVIEW_BODY":{"SELECTOR":".preview-element[data-menu-name='PREVIEW_BODY'], .element-placeholder[data-elementtype='BODY']","MAX_HEIGHT":0,"MAX_HEIGHT_FOR_PLACEHOLDER":0}, "PREVIEW_PRICE":{"SELECTOR":".preview-element[data-menu-name='PREVIEW_PRICE'], .element-placeholder[data-elementtype='PRICE']","MAX_HEIGHT":0,"MAX_HEIGHT_FOR_PLACEHOLDER":0}, //"PREVIEW_FORM":{"SELECTOR":".preview-form","MAX_HEIGHT":0}, "PREVIEW_LINKS":{"SELECTOR":".preview-item-links","MAX_HEIGHT":0}, "PREVIEW_SOCIAL":{"SELECTOR":".preview-element[data-menu-name='PREVIEW_SOCIAL'], .element-placeholder[data-elementtype='SOCIAL']","MAX_HEIGHT":0,"MAX_HEIGHT_FOR_PLACEHOLDER":0}};


var arrangerSettings = holder.find(".arranger-settings"); var isMazonite = arrangerSettings.attr("data-arranger_order_type") == "mazonite"; var relevantItems = holder.find("#items-holder .sub.item-box"); if (isMazonite){ //debugger; relevantItems.find(".item-details").css("height",""); relevantItems.each(function(){ var currentItem = $(this); for(i in maxHeightsArray){ var relevantElement = currentItem.find(maxHeightsArray[i].SELECTOR); relevantElement.css("min-height",""); } }); SpimeEngine.positionMazonite(holder); return; }else{ SpimeEngine.resetMazonite(holder); }

var maxHeight = 0; relevantItems.find(".item-details").css("height",""); //var arrangerSettings = holder.find(".arranger-settings"); if (relevantItems.filter("[data-row='1']").length != 1 ){ relevantItems.each(function(){ var currentItem = $(this); itemDetailsHeight = currentItem.find(".item-details").height(); maxHeight = Math.max(maxHeight,itemDetailsHeight); SpimeEngine.updateMaxHeightMap(maxHeightsArray,currentItem); }); if(relevantItems.find(".helper-div.middle-center").length > 0){ relevantItems.find(".item-details").css("height",maxHeight); } SpimeEngine.evenElementsHeight(maxHeightsArray,holder); }else{ relevantItems.each(function(){ var currentItem = $(this); for(i in maxHeightsArray){ var relevantElement = currentItem.find(maxHeightsArray[i].SELECTOR); relevantElement.css("min-height",""); } }); } } };


SpimeEngine.positionMazonite = function(holder){ if (holder.is(".sub.container.matrix")){ var arrangerSettings = holder.find(".arranger-settings"); var spacing = parseInt(arrangerSettings.attr("data-arranger_item_spacing")); var items = holder.find("#items-holder").find(".sub.item-box"); var itemsWidth = items.width(); var heightsArr = [];//new Array(items.filter("[data-row='1']").length); var cols = items.filter("[data-row='1']").length; var topOffset = 0; var stripeHeader = holder.find(".stripe-header-wrapper"); if (stripeHeader.length > 0){ topOffset = stripeHeader.outerHeight(true); }

for (var i = 0; i < cols ; i++){ heightsArr.push(0) } var minValIndex = 0; var itemIndex = 0; items.each(function(){ var currentItem = $(this); var minVal = heightsArr[0]; for (j in heightsArr){ if (heightsArr[j] == 0){ minVal = heightsArr[j]; minValIndex = j; break; } if (heightsArr[j] <= minVal){ minVal = heightsArr[j]; minValIndex = j; } } var relevantSpacing = (minValIndex % cols == 0) ? 0 : spacing; var relevantTopSpacing = (itemIndex < cols) ? 0 : spacing; currentItem.css({"position":"absolute","left":itemsWidth*minValIndex + minValIndex*relevantSpacing*2,"top":topOffset + heightsArr[minValIndex] + relevantTopSpacing*2,"margin":"0px"}); //currentItem.css({"position":"absolute","left":itemsWidth*minValIndex + minValIndex*relevantSpacing*2,"top":topOffset + heightsArr[minValIndex] + relevantTopSpacing*2}); //console.log(currentItem.css("margin"))

if (cols == 1){ var holderWidth = holder.width(); if ( holderWidth > currentItem.width()){ var centrelizedLeft = (holderWidth / 2) - (currentItem.width() / 2); currentItem.css({"left":centrelizedLeft}); } }

heightsArr[minValIndex] += parseInt(currentItem.height()) + relevantTopSpacing*2; itemIndex++; });

} var maxHeight = 0 for(i in heightsArr){ if (heightsArr[i] > maxHeight){ maxHeight = heightsArr[i]; } } holder.closest(".master.item-box").height(maxHeight + topOffset).addClass("mazonite"); };


SpimeEngine.resetMazonite = function(holder){ if (holder.is(".sub.container.matrix")){ holder.find("#items-holder").find(".sub.item-box").css({"position":"","left":"","top":"","display":""}); holder.closest(".master.item-box").css("height","").removeClass("mazonite"); } };

SpimeEngine.updateMaxHeightMap = function(maxHeightsArray,currentItem){ for(i in maxHeightsArray){ var relevantElement = currentItem.find(maxHeightsArray[i].SELECTOR); relevantElement.css("min-height",""); var currentHeight = relevantElement.height(); var heightForPlaceholder = relevantElement.outerHeight(true); maxHeightsArray[i].MAX_HEIGHT = Math.max(currentHeight,maxHeightsArray[i].MAX_HEIGHT); maxHeightsArray[i].MAX_HEIGHT_FOR_PLACEHOLDER = Math.max(heightForPlaceholder,maxHeightsArray[i].MAX_HEIGHT_FOR_PLACEHOLDER); } };

SpimeEngine.evenElementsHeight = function(maxHeightsArray,holder){ if (holder.find(".helper-div.middle-center").length > 0 && holder.find(".item-details").css("vertical-align") == "middle"){ return; } for(i in maxHeightsArray){ holder.find(".sub.item-box").not(".stripe-header").not(".stripe-footer").find(maxHeightsArray[i].SELECTOR).each(function(){ var currentElement = $(this); currentElement.css("min-height",maxHeightsArray[i].MAX_HEIGHT); if (currentElement.is(".element-placeholder")){ currentElement.css({"display":"block","visibility":"hidden"}) currentElement.css("min-height",maxHeightsArray[i].MAX_HEIGHT_FOR_PLACEHOLDER); } if (currentElement.is(".preview-icon-holder")){ var icon = currentElement.find(".magic-circle-holder"); icon.css("padding-top",(maxHeightsArray[i].MAX_HEIGHT/2) - (icon.height()/2)); } }); } };


SpimeEngine.updateImageRealSize = function(element){ if (!(element.attr("data-orig-width")) && element.attr("id") != "no-image"){

var src = element.css("background-image").substring(4, element.css("background-image").length - 1); if (src.indexOf('"') != -1){ src = src.substring(1,src.length - 1) } $("<img/>") .attr("src",src) .load(function() { pic_real_width = this.width; pic_real_height = this.height; element.attr("data-orig-width",pic_real_width) element.attr("data-orig-height",pic_real_height) }); } }


SpimeEngine.shrinkTextToFit = function(fontSize, parent,contentHolder,textElement,offset,minFontSize,noMoreShrinkCallback){ if (isNaN(fontSize)){ return -1; } if (fontSize == "N/A"){ return -1; } if (contentHolder.outerWidth(true) + offset> parent.width() || contentHolder.outerHeight(true) > parent.outerHeight(true) ){

var shrinkedFontSize = fontSize * 0.9 ;

if (shrinkedFontSize < minFontSize){ if (typeof noMoreShrinkCallback != "undefined"){ noMoreShrinkCallback(); } }else{ textElement.css("font-size",shrinkedFontSize); return SpimeEngine.shrinkTextToFit(shrinkedFontSize,parent,contentHolder,textElement,offset,minFontSize,noMoreShrinkCallback); }

}else{ return parseInt(textElement.css("font-size")); } };

SpimeEngine.updateParent = function(msg){ XPRSHelper.getParentWindow().postMessage(msg, '*'); };

SpimeEngine.receiveMessage = function(event){ console.log(event.data); };


/******************************************************************************************************

*                                               HELPERS
*                                        helper methods and utils
******************************************************************************************************/

SpimeEngine.DebugPrint = function(msg){ if (SpimeEngine.debugMode){ //The only place console write may exist ! console.debug( msg); } };


SpimeEngine.getArranger = function(container){ var arrangerSettings = container.children(".arranger-settings"); return arrangerSettings.attr("data-arranger_type"); };

SpimeEngine.getLayout = function(container){ var layoutSettings = container.children(".layout-settings"); return layoutSettings.attr("data-type"); };


SpimeEngine.splitHostname = function(url) {

   var result = {};
   var regexParse = new RegExp('([a-z\-0-9]{2,63})\.([a-z\.]{2,7})$');
   var urlParts = regexParse.exec(url);
   result.domain = urlParts[1];
   result.type = urlParts[2];
   result.subdomain = url.replace(result.domain + '.' + result.type, ).slice(0, -1);;
   return result;

};


//function onYouTubePlayerAPIReady(playerId) { //var vidList = $(".fitvid iframe"); //}

function inBoundariesOf(w,h, elementType) { var min = elementType.minWidth; var max = elementType.maxWidth; if (max!="none" && min!="none"){ return w >= min && w <= max; } if(max=="none"){ return w >= min; } if(min=="none"){ return w <= max; } }

function hasWideRatio(w,h){ return h/w < 9/16; }

function isSquare(w,h){ return Math.abs(w-h) < 2; }

function isHebrew(str){ return (str.charCodeAt(0) > 0x590) && (str.charCodeAt(0) < 0x5FF); }

function hasMobileRatio(w,h){ return h/w > 1; }

function getUrlLocation(){ var page = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1'); return page; }

function getParameterByName(name) {

   name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
   var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
       results = regex.exec(location.search);
   return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));

}

SpimeEngine.start();