function LibraryBox(e){this.id=e,this.init(),this.initEvents()}function WorkspaceBox(e,t,n){"string"==typeof e||"number"==typeof e?(this.id=parseInt(e,10),this.$el=$(workspace.el.appendChild(this.createElement(t))),this.init(n)):(this.id=e.getAttribute("data-elementid"),this.$el=$(e),this.changeType(),this.init()),this.initEvents()}var game={platform:"web",prime:[],maxProgress:0,finalElements:[],player:{},isOnline:!1,init:function(){game.checkStructure(),game.initProgress(),$(document).trigger("progressInitiated"),game.getFinalElements(),game.checkMaxConnections(),game.onChildCreated(),game.initEvents()},initProgress:function(){var e,t,n,o;for(game.history=JSON.parse(storage.getHistory()),game.progress=[],game.hiddenElements=[],game.progressWithoutFinal=[],e=0,t=game.history.parents.length;eo&&(n.parents.splice(0,n.parents.length-o),n.date.splice(0,n.date.length-o)),window.storage.setOldHistory(n)},checkHistoryIntegrity:function(e){var t,n,o,a,i=[],r=function(e){return!(!bases.base.hasOwnProperty(e)||!bases.base[e].hasOwnProperty("prime")&&-1===i.indexOf(e))};for(t=0,n=e.parents.length;t=0;t--)if(!r(e.parents[t][0])||!r(e.parents[t][1])){for(console.log(e.parents[t]),o=workspace.sex(e.parents[t]),a=0;a-1&&navigator.oscpu.toLowerCase().indexOf("windows nt 6.1")>-1&&(loadingScreen.path.style.strokeDashoffset=Math.round(e/12)+"px"),loadingScreen.path.style.display="block",loadingScreen.path.getBoundingClientRect()}},completedAnimation:function(){$(".playButtonContainer").one("click",loadingScreen.hide),document.querySelector(".loadingScreen svg rect").style.opacity=1,loadingScreen.path.style.opacity=0},completedLoading:function(){window.setTimeout(loadingScreen.completedAnimation,1e3*(loadingScreen.transition.PATH_TIME+loadingScreen.transition.OPACITY_DELAY)),window.setTimeout((function(){loadingScreen.progressBar.style.opacity=0,window.setTimeout((function(){loadingScreen.progressBar.innerHTML='PLAY',loadingScreen.progressBar.style.opacity=1}),1e3*loadingScreen.transition.PROGRESS_TIME)}),320)},changeProgress:function(){if(loadingScreen.shownProgress>=100)loadingScreen.completedLoading();else{if(loadingScreen.progress>loadingScreen.shownProgress){var e=2;loadingScreen.progress-loadingScreen.shownProgress>20&&loadingScreen.progress<90&&(e=2*Math.floor((loadingScreen.progress-loadingScreen.shownProgress)/4)),loadingScreen.shownProgress+=e,loadingScreen.animateProgress()}requestAnimationFrame((function(){loadingScreen.changeProgress()}))}},animateProgress:function(){if(loadingScreen.progressBar.innerHTML=loadingScreen.shownProgress+"%",loadingScreen.path.getTotalLength){var e=loadingScreen.path.getTotalLength();navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&navigator.oscpu.toLowerCase().indexOf("windows nt 6.1")>-1?loadingScreen.path.style.strokeDashoffset=Math.round((e-loadingScreen.progress/100*e)/12)+"px":loadingScreen.path.style.strokeDashoffset=e-loadingScreen.progress/100*e}},incrementProgress:function(e){var t=loadingScreen.progress+loadingScreen.progressList[e].value;loadingScreen.progress=t>=100?100:t},initEvents:function(){for(var e in loadingScreen.progressList)$(document).on(e,(function(e,t){loadingScreen.progressList[e.type].hasOwnProperty("incremental")?loadingScreen.progressList[e.type].current<100&&(loadingScreen.progress-=Math.round(loadingScreen.progressList[e.type].current/100*loadingScreen.progressList[e.type].value),loadingScreen.progress+=Math.round(t/100*loadingScreen.progressList[e.type].value),loadingScreen.progressList[e.type].current=t):("basesLoaded"===e.type?(loadingScreen.progress+=loadingScreen.progressList[e.type].value*(200-loadingScreen.progressList.namesLoadingProgress.current-loadingScreen.progressList.baseLoadingProgress.current)/100,loadingScreen.progressList.namesLoadingProgress.current=100,loadingScreen.progressList.baseLoadingProgress.current=100):loadingScreen.incrementProgress(e.type),$(document).off(e.type),loadingScreen.list.push(e.type))}))},hide:function(){var e=window.getStyleProperty("transform"),t=!!window.getStyleProperty("perspective")?function(e){return"translate3d(0, "+e+"px, 0)"}:function(e,t){return"translate(0, "+t+"px)"},n=loadingScreen.el.getElementsByTagName("div")[0];n.style[window.getStyleProperty("transition")]="margin-top 0.75s ease-in",loadingScreen.el.style[window.getStyleProperty("transitionProperty")]="top, -webkit-transform, -ms-transform, -o-transform, -moz-transform",loadingScreen.el.style[window.getStyleProperty("transitionDuration")]="0.5s",loadingScreen.el.style[window.getStyleProperty("transitionTimingFunction")]="ease-in",n.style["margin-top"]=window.innerHeight+"px",window.setTimeout((function(){n.style["margin-top"]=$(n).css("margin-top")+"px",void 0!==e?loadingScreen.el.style[e]=t(window.innerHeight):loadingScreen.el.style.top=window.innerHeight+"px",window.setTimeout((function(){loadingScreen.$el.off().remove(),loadingScreen.el=null,loadingScreen.$el=null,loadingScreen.playButton=null,loadingScreen.progressBar=null}),1e3)}),200)},messages:{shown:[],list:[[{id:"combine"}],[{id:"longpress"},{id:"signin"}],[{id:"longpress",P:3},{id:"signin",P:3},{id:"newsletter",P:3},{id:"shareProgress",P:3},{id:"achievements",P:3},{id:"leaderboards",P:3},{id:"finalClear",P:3},{id:"clone",P:3},{id:"mixItself",P:3},{id:"hideFinal",P:3},{id:"hydrated",P:1},{id:"salad",P:1},{id:"cookies",P:1},{id:"randomMessage",P:1},{id:"smile",P:1},{id:"breaks",P:1},{id:"overcomplicating",P:1},{id:"science",P:1}]],init:function(){loadingScreen.messages.el=document.getElementById("loadingScreenMessage"),loadingScreen.messages.shown=storage.getLoadingMessages(),loadingScreen.messages.showing=loadingScreen.messages.choose(),$(document).one("languagePackLoaded",(function(){null!==loadingScreen.messages.el&&(loadingScreen.messages.el.innerHTML=localization.get("loadingMessage-"+loadingScreen.messages.showing))}))},choose:function(){var e,t=loadingScreen.messages.getLevel(),n=[];for(i=0;it.length?1:0}},loading={modificationDates:{},init:function(){window.setTimeout(loading.checkIfModified,15e3)},checkIfModified:function(){for(var e in loading.modificationDates)loading.getModificationDate(e)},getModificationDate:function(e){var t=new XMLHttpRequest;t.open("HEAD",e,!0),t.onreadystatechange=function(n){this.readyState===this.DONE&&(200===this.status?loading.analyzeModificationDate(e,t.getResponseHeader("Last-Modified")):(delete loading.modificationDates[e],storage.updateModificationDates()))},t.send()},getURL:function(e){return game.isOnline&&loading.modificationDates.hasOwnProperty(e)?e+"?t="+loading.modificationDates[e]:e},analyzeModificationDate:function(e,t){if(null!==t){var n=loading.convertToMilisecondsDate(t);(!loading.modificationDates.hasOwnProperty(e)||loading.modificationDates[e]gestures.longPress.WIGGLE_THRESHOLD||e.target!==gestures.longPress.target)&&(clearTimeout(gestures.longPress.timer),gestures.longPress.initPosition={x:-1,y:-1},document.removeEventListener(t,gestures.longPress.move))}},up:function(e){clearTimeout(gestures.longPress.timer),document.removeEventListener(gestures.events[gestures.endEvents[e.type]][0],gestures.longPress.move)}}};window.storage={init:function(){window.storage.checkOldVersionHistory(),window.storage.checkHistory(),window.storage.checkSettings(),window.storage.checkAchievements(),window.storage.checkReset(),window.storage.checkOldHistory(),window.loading.modificationDates=window.storage.getModificationDates(),$(document).on("updateHistory",window.storage.updateHistory),$(document).on("updateSettings",window.storage.updateSettings),$(document).on("updateAchievements",window.storage.updateAchievements),$(document).on("updateReset",window.storage.updateReset),$(document).on("progressInitiated",window.storage.checkImportedHistory),$(document).on("notLoggedIn loggedOut",(function(){window.storage.setReset(-1)}))},getHistory:function(){return null!==window.localStorage.getItem("progress")?window.localStorage.getItem("progress"):null},checkOldVersionHistory:function(){if(null!==window.localStorage.getItem("history")&&0!=window.localStorage.getItem("history").length&&null===window.localStorage.getItem("progress")){for(var e=JSON.parse(window.localStorage.getItem("history")),t={parents:[],date:[]},n=0,o=e.parents.length;n0?JSON.parse(window.localStorage.getItem("elementPositions")):[]},setElementPositions:function(e){window.localStorage.setItem("elementPositions",JSON.stringify(e))},getNotifications:function(){return null!==window.localStorage.getItem("notifications")?JSON.parse(window.localStorage.getItem("notifications")):[]},updateNotifications:function(){window.localStorage.setItem("notifications",JSON.stringify(window.notifications.shown))},getLoadingMessages:function(){return null!==window.localStorage.getItem("loadingMessages")?JSON.parse(window.localStorage.getItem("loadingMessages")):[]},updateLoadingMessages:function(e){window.localStorage.setItem("loadingMessages",JSON.stringify(e))},getAuthUser:function(){return null!==window.localStorage.getItem("authuser")?window.localStorage.getItem("authuser"):-1},setAuthUser:function(e){window.localStorage.setItem("authuser",e)}};var search={init:function(){search.activeLetter=null,search.activeCategory=null,search.$alphabet=$("#alphabet"),search.initAlphabet(),search.initSearchBar(),search.initEvents()},initAlphabet:function(){search.$alphabet.on("click","li",(function(){var e=$(this);if(search.activeLetter=e.text().toLowerCase(),null===search.activeCategory)search.scrollToLetter(search.activeLetter);else{var t=library.showCategory(search.activeCategory);library.show(t),search.scrollToLetter(search.activeLetter,t)}$(document).trigger("alphabetSearchOccured",[search.activeLetter])}))},initEvents:function(){$(document).on("searchAlphabethClick",(function(e){search.$alphabet.is(":visible")?(search.$alphabet.hide(),search.activeLetter=null,null===search.activeCategory?(library.refresh(),iscrollLibrary.scrollTo(0,0,500)):library.show(library.showCategory(search.activeCategory))):(el.show(),iscrollAlphabeth.refresh()),iscrollAlphabeth.refresh()}))},initSearchBar:function(){var e=document.getElementById("searchBar"),t=function(){$(document).trigger("searchOccured"),"text"===e.type&&(e.value="",e.type="hidden",library.refresh())};$(document).keydown((function(t){if(menu.$el.is(":visible")||0!=$(":focus").length&&$(":focus")[0]!==e&&"INPUT"===$(":focus")[0].tagName||(t.keyCode>=65&&t.keyCode<=90||32==t.keyCode)&&(!t.ctrlKey||t.ctrlKey&&t.altKey)&&(e.type="text",e.focus(),void 0!==iscrollLibrary?iscrollLibrary.scrollTo(0,0,300):initIScroll()),8===t.keyCode){var n=t.srcElement||t.target;(("INPUT"!==n.tagName.toUpperCase()||"TEXT"!==n.type.toUpperCase()&&"PASSWORD"!==n.type.toUpperCase()&&"FILE"!==n.type.toUpperCase())&&"TEXTAREA"!==n.tagName.toUpperCase()||n.readonly||n.disabled)&&t.preventDefault()}})),e.onkeyup=function(n){"text"!==e.type||0!==e.value.length&&27!==n.keyCode?library.show(library.showPhrase(e.value.toLowerCase())):(n.preventDefault(),t())},e.onfocus=function(){library.show(library.showPhrase(e.value.toLowerCase()))},e.onblur=t,$(document).on("libraryBoxDraggingStart workspaceBoxDraggingStart",t)},scrollToLetter:function(e,t){if(void 0===iscrollLibrary&&initIScroll(),void 0!==iscrollLibrary&&iscrollLibrary.maxScrollY<0){var n=Math.max(-library.elementOuterHeight*search.getNoElementsBefore(e,t),iscrollLibrary.maxScrollY);iscrollLibrary.scrollTo(0,n,500)}},getNoElementsBefore:function(e,t){for(var n=library.sortedProgress,o=0,a=n.length;o=0;a--)parseInt(game.history.date[a],10)storage.getReset()&&storage.setReset(e.reset)}},n=!1;if(e.parents.length>0)if(game.history&&0===game.history.parents.length)storage.setReset(e.reset),delete e.reset,game.history=e,n=!0;else{for(var o=0,a=e.parents.length;o .element[data-elementId="'+a+'"]').after(library.elContainter)}var i=settings.data.hideFinalElements?game.progressWithoutFinal.length+game.prime.length:game.progress.length+game.prime.length;library.refreshIscroll(i)},addAll:function(){var e,t;library.clear();var n=settings.data.hideFinalElements?game.progressWithoutFinal:game.progress,o=library.sort(game.prime.concat(n),!0);for(library.sortedProgress=o,e=0,t=o.length;e-1?(r[t].style.display="block",s.splice(a,1),void 0===e&&library.sortedProgress.push(o),i++):r[t].style.display="none";library.refreshIscroll(i),$(document).trigger("libraryShowed")},reloadImages:function(){var e,t,n,o=library.el.getElementsByClassName("element"),a=function(e){var t=$(this);t.data("ptr").draggable.changeHandles("img"),t.off("dragEnd",a)};for(e=0,t=o.length;e0;)n[0].className=n[0].className.replace(/\bfinalElement\b/,"")},showLetter:function(e){var t,n,o=[],a=game.prime.concat(game.progress);for(t=0,n=a.length;t+.*^$",a=game.prime.concat(game.progress),i=0;i0?elements=workspace.$el.find(".finalElement"):elements=workspace.$el.find(".element"),workspace.clearSpecified(elements),$(document).trigger("workspaceCleared")},clearSpecified:function(e){for(var t,n,o=0,a=e.length;ot?(e[o].style.visibility="hidden",a.data("ptr").droppable.enabled=!1):"hidden"===e[o].style.visibility&&(e[o].style.visibility="visible",a.data("ptr").droppable.enabled=!0)}},recalculateElements:function(){for(var e=workspace.$el.find(".element"),t=workspace.$el.width(),n=$(".element").width(),o=0;ot&&workspace.del(a.data("ptr"))}},save:function(){if(settings.data.saveElementsPositions){var e=stats.getElementsPositions();storage.setElementPositions(e)}},loadFromStorage:function(){if(settings.data.saveElementsPositions){var e=storage.getElementPositions();if(null!==e)for(var t=0,n=e.length;tworkspace.$el.width()+o||n.position.top<-a||n.position.top>workspace.$el.height()-a?void workspace.del(e):(settings.data.hideElementsNames&&(e.hideElementName(),e.$el.find(".elementName")[0].style.opacity=0),void $(document).trigger("elementDropped"))}))},WorkspaceBox.prototype.initDroppable=function(){var e=this;this.droppable=new Droppable(this.$el[0],{acceptOne:!0}),this.$el.on("droppableOver",(function(t,n){e.onOver()})),this.$el.on("droppableOut",(function(t,n){e.onOut()})),this.$el.on("droppableDrop",(function(t,n){e.onOut();var o=n.element.getAttribute("data-elementid"),a=[Math.min(o,e.id),Math.max(o,e.id)],r=workspace.sex(a);if(r.length>0&&!workspace.alreadyCombined(a)){var s=workspace.calculateOffspringPosition([{left:n.position.x,top:n.position.y},e.$el.position()],e.$el.width(),r.length);for(i=0;i .element").outerHeight()}})),window.onerror=game.reportError,GAPILoaded=function(){$(document).trigger("GAPILoaded")},document.addEventListener("touchmove",(function(e){e.preventDefault()}),!1),document.oncontextmenu=function(e){return!1};var initIScroll=function(){(iscrollLibrary=new IScroll("#outerLibrary",{mouseWheel:!0})).refresh(),iscrollLibrary.on("scrollStart",(function(){$(document).trigger("libraryScrollStart")})),iscrollAlphabeth=new IScroll("#alphabet",{mouseWheel:!0,click:!0}),$(document).trigger("iscrollInitiated")};window.addEventListener("orientationchange",(function(){document.body.scrollTop=0}),!1);